Linux命令

🐧 Linux 运维命令

适用场景:系统管理、故障排查、性能调优、自动化运维 核心原则:生产环境安全第一,操作前确认,高危命令需谨慎。


📂 第一章:文件管理与搜索 (核心基础)

1.1 目录与文件操作增强版 (ls, cd, pwd, ln)

  • ls (List)

    • ls -lhS --color=auto[推荐] 按文件大小排序(大文件在顶),显示单位(KB/MB)。
    • ls -lart:按修改时间倒序(最新的在最下),快速定位刚刚被改动的文件。
    • ls -i:查看 inode 号(解决文件名乱码无法删除的“钉子户”文件)。
  • ln (Link) —— 链接管理

    • ln -s /path/to/source /path/to/link[常用] 创建软链接(快捷方式)。注意:源路径建议写绝对路径,防止失效。
    • ln source target:创建硬链接(同一个 inode,防误删)。

1.2 文件增删改 (mkdir, rm, cp, mv)

  • rm (Remove) —— ⚠️ 高危区

    • [黄金法则]:使用通配符前,先用 ls 确认!例如:ls *.log && rm -f *.log
    • rm -rf /path:强制递归删除。
    • [避坑]:严禁在脚本中使用 rm -rf /${VAR}/*,如果变量未定义,就是删根!
  • cp (Copy) & mv (Move)

    • cp -a source dest[备份首选] 完整保留权限、时间戳、所属主(等同于 -dR --preserve=all)。
    • mv -b source dest:如果目标存在,先自动备份目标文件(生成 file~)。

1.3 文件查找与内容查看 (find, tail, less)

  • find (搜索神器)

    • find /var/log -name "*.log" -mtime +7:查找 /var/log 下 7 天前的 log 文件。
    • find / -size +100M[磁盘清理] 全盘查找大于 100M 的大文件。
    • find . -name "*.tmp" -exec rm -f {} \;:查找并直接删除(慎用)。
    • find / -perm -u=s -type f:查找具有 SUID 权限的危险文件(安全审计)。
  • 内容查看

    • tail -f app.log[运维高频] 实时监控日志末尾输出。
    • tail -100f app.log:查看最后 100 行并保持实时刷新。
    • less file:翻页查看大文件(比 cat 更有利于内存,按 G 到底部,/keyword 搜索)。

📊 第二章:系统资源与性能深度监控

2.1 CPU 与 负载 (top, uptime, mpstat)

  • top (实时监控)

    • top -Hp <PID>[排查神器] 查看指定进程内的线程资源占用(定位 Java/Go 某线程高负载)。
    • 快捷键1 (展开多核), c (显示完整命令路径), k (杀进程).
    • [Load Average 解读]:右上角的三个数字分别代表 1、5、15 分钟的平均负载。如果数值 > CPU 核数,说明系统过载。
  • vmstat (虚拟内存与系统瓶颈)

    • vmstat 1:每秒刷新。
    • [关键指标]
      • r (Run):运行队列,> CPU 核数 = CPU 瓶颈。
      • b (Block):等待 IO 的进程数,高说明磁盘 IO 堵塞。
      • si/so:非 0 说明物理内存不够,正在用 Swap。

2.2 内存分析 (free, smem)

  • free
    • free -h:看内存总量。
    • [核心认知]:Linux 内存管理策略是“吃光用尽”。buff/cache 占用高是正常的(用于加速读写),重点看 available(应用程序真正可用的)。

2.3 磁盘 IO (iostat, iotop, du, df)

  • iostat

    • iostat -xzk 1:详细 IO 统计。
    • [判据]%util > 80% (磁盘忙碌);await > 10ms (响应慢);svctm (实际处理时间)。
  • du / df

    • df -Th:查看分区类型(xfs/ext4)和使用率。
    • df -i:查看 inode 使用率(inode 耗尽会导致有空间但无法写入)。
    • du -h --max-depth=1 /var | sort -hr | head -10[空间清理] 快速找出 /var 下最大的 10 个目录。

🌐 第三章:网络与连接 (新增增强章节)

3.1 网络连接与流量 (ss, iftop, nload)

  • ss (Socket Statistics - 推荐替代 netstat)

    • ss -tulnp:显示所有监听端口及对应的进程名(需 root)。
    • ss -an state established:查看所有已建立的连接。
    • ss -s:快速统计连接总数(SYN, ESTABLISHED 等)。
  • iftop

    • iftop -P:实时流量监控,显示谁在跟谁通信,以及占用的带宽。

3.2 网络连通性测试 (curl, nc, ping)

  • curl (接口测试)

    • curl -I www.google.com:只看 HTTP 响应头(检查 200 OK)。
    • curl -v http://127.0.0.1:8080:打印详细通信过程(Debug 专用)。
    • curl -o /dev/null -s -w "%{time_total}\n" http://baidu.com:测试网站响应耗时。
  • nc (Netcat - 网络瑞士军刀)

    • nc -z -v -w 2 192.168.1.1 3306[探测端口] 探测目标 IP 的 3306 端口是否通(替代 telnet)。
  • ip (IP配置)

    • ip addr:查看 IP 地址(替代 ifconfig)。
    • ip route:查看路由表(排查网关问题)。

📝 第四章:文本处理“三剑客” (运维必修)

4.1 grep (过滤)

  • grep -r "Error" /var/log/:递归搜索目录下所有文件。
  • grep -E "Failed|Error" file:正则匹配多个关键词。
  • grep -v "^#" config.conf | grep -v "^$"[配置清洗] 去除配置文件中的注释行和空行。
  • grep -C 5 "Exception" app.log:查看报错前后 5 行上下文。

4.2 awk (取列与统计)

  • awk '{print $1, $NF}' file:打印第 1 列和最后一列。
  • [实战] 统计 Nginx 日志 Top 10 访问 IP
    1
    
    awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
    
  • [实战] 统计 TCP 连接状态
    1
    
    ss -an | awk '{print $1}' | sort | uniq -c
    

4.3 sed (替换与修改)

  • sed 's/old/new/g' file:在屏幕输出替换结果。
  • sed -i.bak 's/8080/9090/g' config.xml[安全] 直接修改文件,并自动备份为 .bak
  • sed -n '/10:00/,/11:00/p' access.log:按时间范围截取日志。

💻 第五章:进程管理

  • ps & pgrep

    • ps aux --sort=-%cpu | head:列出最耗 CPU 的进程。
    • pgrep -a java:查看所有 Java 进程的完整命令。
  • kill

    • kill -15 <PID>[推荐] 优雅退出(TERM 信号)。
    • kill -9 <PID>:强制杀死(KILL 信号,可能丢数据)。
    • pkill -u user1:踢掉某个用户的所有进程。

🛠️ 第六章:系统服务与日志 (Systemd)

  • systemctl

    • systemctl status/start/stop/restart nginx
    • systemctl enable nginx:开机自启。
    • systemctl list-units --type=service --state=failed[故障概览] 列出所有挂掉的服务。
  • journalctl

    • journalctl -u nginx -f:实时看某服务日志。
    • journalctl -xe:服务启动失败时,看详细报错堆栈。
    • journalctl --disk-usage / journalctl --vacuum-time=7d:查看并清理 7 天前的系统日志。

📦 第七章:压缩、传输与软件包

7.1 压缩 (tar)

  • tar -czf backup.tar.gz /data:打包压缩。
  • tar -xzf backup.tar.gz -C /opt:解压到指定目录。

7.2 传输 (rsync, scp)

  • scp -r /local/dir user@host:/remote/dir:简单的远程拷贝。
  • rsync -avzP /source/ user@host:/dest/[推荐] 增量同步,显示进度条 (P)。

7.3 软件包管理 (基础)

  • CentOS/RHEL: yum update, yum install tree, yum clean all.
  • Ubuntu/Debian: apt update, apt install tree.

🔐 第八章:用户权限与安全加固

  • chmod / chown

    • chmod 755 file (脚本常用) / chmod 600 id_rsa (私钥文件必须权限)。
    • chown -R user:group /data
  • chattr (文件锁)

    • chattr +i /etc/passwd[防黑] 锁定关键文件,root 也无法修改/删除。
    • lsattr file:查看锁定状态。
  • sudo

    • visudo:编辑 sudo 权限配置(语法检查防错)。

⚙️ 第九章:内核与硬件信息 (专家级)

  • uname -a / cat /etc/os-release:查看系统版本内核。
  • lscpu:查看 CPU 架构核数。
  • lsblk:查看磁盘分区挂载。
  • dmesg | tail -20[硬件故障] 查看内核环形缓冲区(OOM Killer、硬件报错都在这)。
  • sysctl -p:重新加载内核参数(如 TCP 调优后)。

🧩 第十章:生产环境故障排查实战案例 (FAQ)

案例 1:CPU 100% 但找不到高负载进程

现象top CPU 高,但进程列表里没有特别高的。 原因:短命进程(频繁启动退出)或 内核态占用。 排查

  1. top 表头的 sy (System) 和 wa (IO Wait)。
  2. 如果是 sy 高,可能是驱动或内核 bug。
  3. 如果是 wa 高,使用 iotop 抓磁盘读写进程。

案例 2:磁盘满了但 du 统计不到大文件

现象df -h 显示 100%,du -sh 却只有 50%。 原因:文件被 rm 删除,但进程仍持有句柄(文件未真正释放)。 排查

1
lsof | grep deleted

解决:重启持有句柄的进程(如 nginx/java),或 echo > /proc/<PID>/fd/<FD> 置空。

案例 3:服务器变慢,网络卡顿

排查三板斧

  1. ping <网关>:看内网延迟丢包。
  2. curl -v <目标>:看 TCP 建连耗时。
  3. dmesg | grep -i "error":看网卡是否有物理报错。

📜 第十一章:自动化巡检脚本 (最终版)

保存为 health_check.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# Linux System Health Check Script
# V2.0 - Added Colors and detailed checks

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

echo -e "${GREEN}===== System Health Check $(date) =====${NC}"

# 1. 负载检查
load=$(uptime | awk -F'load average:' '{ print $2 }' | cut -d, -f1 | tr -d ' ')
echo -e "\n[1] Load Average (1min): $load"
if (( $(echo "$load > 4.0" | bc -l) )); then
    echo -e "${RED}ALERT: High Load!${NC}"
fi

# 2. 磁盘空间 (>85% 告警)
echo -e "\n[2] Disk Usage > 85%:"
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 }' )
  if [ $usep -ge 85 ]; then
    echo -e "${RED}WARNING: Running out of space \"$partition ($usep%)\"${NC}"
  else
    echo "  OK: $partition ($usep%)"
  fi
done

# 3. 内存情况
echo -e "\n[3] Memory Usage:"
free -h

# 4. 检查失败的服务
echo -e "\n[4] Failed Systemd Services:"
failed_services=$(systemctl list-units --type=service --state=failed --no-pager --plain | grep ".service")
if [ -n "$failed_services" ]; then
    echo -e "${RED}$failed_services${NC}"
else
    echo "  All services are healthy."
fi

# 5. 检查僵尸进程
zombies=$(ps aux | awk '{if ($8=="Z") print $0}' | wc -l)
echo -e "\n[5] Zombie Processes: $zombies"

echo -e "\n${GREEN}===== Check Complete =====${NC}"
本文采用 CC BY-NC-SA 4.0 许可协议
使用 Hugo 构建
主题 StackJimmy 设计