标签归档:linux

如何判断一个进程是否运行在容器中

1、查看该进程的 PID

以 nginx 为例

# ss -ntpl | grep nginx
LISTEN     0      511          *:88                       *:*                   users:(("nginx",pid=28791,fd=8),("nginx",pid=28790,fd=8),("nginx",pid=28789,fd=8),("nginx",pid=28788,fd=8),("nginx",pid=28787,fd=8))
LISTEN     0      511          *:80                       *:*                   users:(("nginx",pid=28791,fd=7),("nginx",pid=28790,fd=7),("nginx",pid=28789,fd=7),("nginx",pid=28788,fd=7),("nginx",pid=28787,fd=7))

或通过 ps -aux ,第二列就是 PID

ps -aux | grep nginx
root     28787  0.0  0.0  10560  1804 ?        Ss   09:33   0:00 nginx: master process
100      28788  0.0  0.0  11076  2884 ?        S    09:33   0:00 nginx: worker process
100      28789  0.0  0.0  11024  2500 ?        S    09:33   0:00 nginx: worker process
100      28790  0.0  0.0  11056  2888 ?        S    09:33   0:00 nginx: worker process
100      28791  0.0  0.0  11024  2500 ?        S    09:33   0:00 nginx: worker process
root     31719  0.0  0.0 112812   976 pts/2    S+   09:59   0:00 grep --color=auto nginx

2、查看进程的 cgroup

cat /proc/<pid>/cgroup
# cat /proc/28791/cgroup                                                                                                                                                                               
11:perf_event:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
10:pids:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
9:freezer:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
8:memory:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
7:devices:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
6:cpuacct,cpu:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
5:hugetlb:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
4:net_prio,net_cls:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
3:blkio:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
2:cpuset:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
1:name=systemd:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5

看到例如CPU、内存、磁盘都在 docker 中,因此此进程应该是运行在容器中。

3、确认容器服务

docker ps | grep <容器ID前4到10位>

# docker ps | grep 21d0c
21d0cf703b47   nginx   "tini entrypoint.sh"   32 minutes ago   Up 32 minutes      mynginx

云服务器禁用22端口并禁用root登录

1、添加sshd端口

编辑 /etc/ssh/sshd_config ,添加以下行:

Port 22
Port 2222

重启服务:

systemctl restart sshd

2、添加普通用户

useradd -m -s /bin/bash <user>
passwd <user> # 设置密码

允许无密切换 root

visudo

添加以下行:

<user>   ALL=(ALL)       NOPASSWD: ALL

3、禁用端口和root账号

注意:使用 ssh user@ip -p 2222 验证能否登录,使用 sudo su 切换到 root 账号,确保一切正常才能禁用!

编辑 /etc/ssh/sshd_config ,修改 PermitRootLogin yesPermitRootLogin no ,注释(或删除) Port 22

重启服务:

systemctl restart sshd

打印 apk 中的信息

前提是安装了 android studio,在 linux 中,使用以下命令:

~/Android/Sdk/build-tools/33.0.2/aapt dump <app.apk>

其中,33.0.2 要改成自己实际的版本。

linux 系统清理日志 /var/log/journal

1、用echo命令,将空字符串内容重定向到指定文件中

echo "" > system.journal

说明:此方法只会清空一次,一段时间后还要再次手动清空很麻烦,这里可以用以下命令让journalctl 自动维护空间

2、journalctl 命令自动维护文件大小

1)只保留近一周的日志

journalctl --vacuum-time=1w

2)只保留500MB的日志

journalctl --vacuum-size=500M

3)直接删除 /var/log/journal/ 目录下的日志文件

rm -rf /var/log/journal/<folder>

Rancher 部署流程

基本配置

硬件资源

  • Rancher 2v6G
  • Worker 2v4G

至少两台服务器,1台 Rancher 和 1台 Workder,条件允许 Worker 应该多于1台。

安装 centos7

两台服务器上的统一配置

基础配置

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
systemctl disable --now firewalld

安装 docker

curl -fSL# https://get.docker.com | bash -s docker --mirror Aliyun
yum install -y -q docker-compose
systemctl enable --now docker

重启服务器。

Rancher 部署

设置计算机名:

hostnamectl set-hostname rancher

添加文件 /home/docker/rancher/docker-compose.yml

version: '3.5'
services:
  rancher:
    image: rancher/rancher:v2.7-head
    container_name: rancher
    restart: unless-stopped
    privileged: true
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./rancher:/var/lib/rancher

启动服务:

docker-compose up -d

登录及首次配置

浏览器打开 rancher 的 IP,等待/刷新,进入欢迎界面。

欢迎界面左下角切换中文语言。

按照欢迎界面的提示找到登录密码并登录。

设置新密码,和服务器 URL,不要允许统计信息。

Worker 部署

导航选择「用户&认证」,「创建」,添加新用户 test。

导航选择「集群管理」,「创建」,选择「使用现有节点并使用 RKE 创建集群」-「自定义」,「集群名称」按需填写,「Member Roles」(成员角色)添加用户「test」,角色「Owner」,「下一步」。

主机的角色选择所有角色,在 RKE Master 粘贴脚本执行。

主机的角色选择 Worker 角色,在 RKE Node1 粘贴脚本执行。

导航第一个菜单选择 test 切换用户,等待部署完成。

linux 命令行使用 wifi

命令都可简写,例如:nmcli device status 可以简写成 nmcli d s

网卡状态

$ nmcli device status
DEVICE             TYPE      STATE         CONNECTION 
enp0s3             ethernet  connected     enp0s3     
wlp0s11u1          wifi      disconnected  --         
p2p-dev-wlp0s11u1  wifi-p2p  disconnected  --         
lo                 loopback  unmanaged     --

无线列表

$ nmcli -p device wifi list [ifname wlan0]
==============================
  Wi-Fi scan list (wlp0s11u1)
==============================
IN-USE  SSID                        MODE   CHAN  RATE        SIGNAL  BARS  SECURITY  
--------------------------------------------------------------------------------------------------------------
        ChinaNet-vh4h               Infra  6     130 Mbit/s  84      ▂▄▆█  WPA1 WPA2 
        ChinaNet-hxeh               Infra  8     130 Mbit/s  84      ▂▄▆█  WPA1      
        kefu                        Infra  1     135 Mbit/s  74      ▂▄▆_  WPA1 WPA2 
        TP-LINK_chen                Infra  6     405 Mbit/s  74      ▂▄▆_  WPA1 WPA2

连接网络

$ sudo nmcli -w 10 device wifi connect <SSID>  password <PASSWORD>

断开网络

$ sudo nmcli device disconnect

linux 中压缩/解压 7z 文件

安装

# centos7
yum install -y p7zip
#ubuntu
apt-get install -y p7zip

压缩

7za a zipfile.7z /path/to/file_or_folder

解压

7za x zipfile.7z [-o/path/to/folder]

o参数用于指定解压目录,-o 之后没有空格

linux 挂载 nfs/dav/smb 文件系统

NFS

sudo apt install -y nfs-common
sudo mount.nfs ip:port /mnt

DAV

sudo apt install -y davfs2
sudo mount.davfs -o noexec http://ip:port /mnt

更多:

How to mount WebDAV share

https://sleeplessbeastie.eu/2017/09/04/how-to-mount-webdav-share/embed/#?secret=i25ATGJKQR

SMB

sudo mount.cifs //ip/target /mnt/dir -o vers=1.0,username=guest,password=

参数 vers 还可以是 2.03.0

更多:
https://zhuanlan.zhihu.com/p/26763026

附:群晖启用 NFS

  • 控制面板 > 文件服务 > NFS > 「启动 NFS 服务」打勾
  • 控制面板 > 共享文件夹 > 选择一个共享文件夹 > 编辑 > NFS 权限 > 创建/编辑
    • 主机名:* 192.168.0.0/24
    • Squash:映射 root 为 admin
    • 安全性:sys
    • 启动异步
    • 允许来自非特权端口的连接
    • 允许用户访问已装载的子文件夹

linux 手动释放缓存

sync && echo 1 > /proc/sys/vm/drop_caches

执行 echo N > /proc/sys/vm/drop_caches,再free –m查看内存使用情况,输入不同的N值,free –m内存中缓存buffers会有差异,现在我们就是要解释/proc/sys/vm、drop_caches, 这个文件到底是什么?另外可以写入哪些数值,具体适用于什么场景

查看linux内核文档,可以得到以下信息: