Linux 系统管理:高频运维场景的一键命令合集

  • 1407 字
  • 0 条评论

查看所有硬盘的SMART详细信息

依赖包安装

1
sudo apt install smartmontools

命令介绍

首先使用lsblk获取所有的存储设备,然后使用grep过滤出sd、hd、nvme、vd开头的设备,最后使用xargs和smartctl获取每个设备的SMART信息。

1
lsblk -d -o NAME | grep -E '^(sd|hd|nvme|vd)' | xargs -I {} sudo smartctl -a "/dev/{}"

查看所有硬盘的SMART详细信息(极简输出)

依赖包安装

1
sudo apt install smartmontools

命令介绍

流程同上

1
lsblk -d -o NAME | grep -E '^(sd|hd|nvme|vd)' | xargs -I {} sudo smartctl -H "/dev/{}"

定位进程所属容器/Pod

依赖包安装

定位pod需要crictl

1
sudo apt install crictl

命令介绍

Docker

首先使用cat和grep获取进程所属的cgroup,然后使用docker ps和grep获取容器ID。

1
docker ps | grep $(sudo cat /proc/<pid>/cgroup | grep -oP 'docker-\K[a-f0-9]+' | head -c 12)

ctr(containerd)

首先使用cat和grep获取进程所属的cgroup,然后选取包含pids的一行以去掉重复数据,直接从最后的信息中提取命名空间和容器名称。

1
sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print $(NF-1), $NF}'

Kubernetes获取容器id

首先使用cat和grep获取进程所属的cgroup, 然后选取包含pids的一行以去掉重复数据,从行中解析最后一级的前12位。

1
sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print substr($NF,1,12)}'

Kubernetes获取Pod名称

使用crictl根据容器ID获取Pod名称。其中容器ID为上一步获取到的12位ID。

1
crictl inspect -o go-template --template='{{index .status.labels "io.kubernetes.pod.name"}}' $(sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print substr($NF,1,12)}')

常见问题

Linux怎么查看所有硬盘的SMART健康状态?

先安装smartmontools,然后用lsblk列出存储设备,过滤出sd、hd、nvme、vd开头的设备,再用xargs配合smartctl -H查看每个硬盘的健康状态。一条命令:lsblk -d -o NAME | grep -E '^(sd|hd|nvme|vd)' | xargs -I {} sudo smartctl -H "/dev/{}"。

如何定位Linux进程属于哪个Docker容器?

查看进程的cgroup信息,用grep提取docker-后面的12位容器ID,再用docker ps过滤出对应容器。命令:docker ps | grep $(sudo cat /proc/<pid>/cgroup | grep -oP 'docker-\K[a-f0-9]+' | head -c 12)。注意替换<pid>为实际进程号。

Kubernetes中怎么根据进程ID找到Pod名称?

先通过进程的cgroup信息提取容器ID前12位,然后用crictl inspect命令查询Pod名称。具体命令:crictl inspect -o go-template --template='{{index .status.labels "io.kubernetes.pod.name"}}' $(sudo cat /proc/<pid>/cgroup | grep pids | awk -F'/' '{print substr($NF,1,12)}')。注意需要安装crictl。

分享
分享提示信息