Linux 性能监控命令详解
概述
Linux 命令行是运维和开发中最强大的工具之一。掌握常用命令不仅能提升日常操作效率,还能在服务器管理、自动化脚本编写、问题排查等场景中发挥关键作用。本文系统梳理 Linux 中最常用的命令,涵盖文件操作、进程管理、网络诊断、文本处理等核心领域,配以实际示例,帮助你建立完整的命令行技能体系。
基础语法
Linux 命令遵循通用的语法结构:命令名 [选项] [参数]。选项通常以 - 开头(全写如 --help 或单写如 -a),参数是命令的操作对象。管道符 | 将前一个命令的输出作为后一个命令的输入,重定向符 > 和 >> 分别用于覆盖和追加写入文件。
- ls:列出目录内容,-l 详细信息,-a 显示隐藏文件,-h 人性化大小。
- cd:切换目录,~ 表示家目录,.. 表示上级目录,- 表示上一个目录。
- cp/mv/rm:复制、移动(重命名)、删除文件,rm -rf 递归强制删除目录。
- grep/find/awk/sed:文本搜索和处理的瑞士军刀。
- chmod/chown:修改文件权限和所有者。
善用 man 命令查看任何命令的完整手册,例如 man ls 会显示 ls 的所有选项说明。
完整代码示例+注释
# === 文件和目录操作 ===
ls -lah /var/log # 列出日志目录详情(包含隐藏文件)
cd ~ # 切换到家目录
pwd # 显示当前工作目录完整路径
复制目录(保留权限、时间戳等属性)
cp -a /home/user/data /backup/ # -a = -dR --preserve=all
查找文件(按名称、大小、时间)
find /var -name "*.log" -size +100M # 查找大于100MB的日志文件
find . -type f -mtime -7 # 查找7天内修改过的文件
find /tmp -name "*.tmp" -exec rm {} \; # 查找并删除 tmp 文件
=== 文本处理三剑客:grep/find/awk/sed ===
grep:搜索包含关键词的行
grep -rn "error" /var/log/ --include="*.log" # 递归搜索所有日志文件
grep -E "warn|error|critical" app.log # 支持正则,匹配多个关键词
awk:强大的文本分析工具
打印第1、3、4列(默认以空格分隔)
ls -l | awk '{print $1, $3, $9}'
打印文件内容并添加行号
awk '{print NR ": " $0}' data.txt
过滤并统计:统计每个IP的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
sed:流编辑器,替换文本
sed -i 's/old_string/new_string/g' file.txt # 全局替换(-i 直接修改文件)
sed -n '10,20p' file.txt # 打印第10-20行
sed '/^#/d' config.conf # 删除所有注释行
=== 进程和系统监控 ===
ps aux | grep nginx # 查看 nginx 进程详情
top -Hp 1234 # 查看 PID 1234 的线程
htop # 交互式进程查看(比 top 更直观)
查看资源占用最高的进程
ps aux --sort=-%mem | head -11 # 按内存排序(前10)
ps aux --sort=-%cpu | head -11 # 按 CPU 排序(前10)
kill 信号控制进程
kill -SIGTERM 5678 # 优雅终止进程(推荐优先使用)
kill -SIGKILL 5678 # 强制杀死进程(不得已才用)
killall -SIGTERM nginx # 按名称杀死所有 nginx 进程
=== 网络诊断 ===
netstat -tlnp | grep :80 # 查看端口 80 的监听情况
ss -tlnp | grep :80 # ss 比 netstat 更快(现代替代工具)
curl -I https://example.com # 检查 HTTP 响应头
wget -r -l 2 https://example.com # 递归下载网站(限制深度2)
端口扫描(需要 nmap)
nmap -sV 192.168.1.1 -p 1-1000 # 扫描 IP 的端口范围
=== 磁盘和文件大小 ===
df -h # 查看各分区使用情况
du -sh * | sort -h # 查看当前目录各子目录大小(人性化显示)
ncdu # 交互式磁盘使用分析工具
=== 系统信息 ===
uname -a # 内核版本、系统架构
uptime # 系统运行时间和负载
free -h # 内存使用情况
cat /proc/cpuinfo | grep "model name" | head -1 # CPU 型号
=== 管道组合示例 ===
找出最占空间的日志文件并排序
find /var/log -name "*.log" -exec du -h {} \; | sort -h | tail -5
统计 nginx 访问日志中各 HTTP 状态码的数量
cat access.log | awk '{print $9}' | sort | uniq -c | sort -rn
实时监控日志中包含 error 的新行
tail -f /var/log/app.log | grep --line-buffered error
运行效果
执行 ls -lah /var/log 会显示日志目录下所有文件的详细信息,包括文件权限、所有者、大小、修改时间,以及以 . 开头的隐藏文件。find 命令配合 -size +100M 可以快速定位磁盘清理的目标文件。awk 的统计示例能够从访问日志中提取 IP 并计算每个 IP 的访问次数。
tail -f 实时监控是排查生产环境问题的利器,配合 grep 可以只关注感兴趣的日志行。ncdu 启动后会以交互式界面展示目录大小分布,按键盘方向键可以深入查看子目录,用 q 退出,非常适合在远程服务器上快速分析磁盘占用。
常见问题
Q1:rm -rf / 真的会删除整个系统吗
现代 Linux 系统中,root 用户执行 rm -rf / 在较新版本的 rm 工具上会被明确拒绝并报错。早期版本确实可能造成灾难性后果。无论如何,在使用 rm -rf 时务必确认目标路径无误,建议先用 ls 检查确认后再执行删除操作。对于重要目录,建议使用 trash 命令(将文件移入回收站)替代直接删除。
Q2:管道和重定向的区别
管道 | 将前一个命令的标准输出连接到下一个命令的标准输入,两个命令同时执行。重定向 > 或 >> 将命令输出写入文件,> 会覆盖原文件,>> 追加到文件末尾。stderr 默认不会通过管道传递,可以用 2>&1 将 stderr 合并到 stdout。
Q3:如何让命令在后台运行且不受终端关闭影响
在命令后加 & 可以后台运行(nohup command &),但更推荐使用 screen 或 tmux 创建持久会话,这样即使 SSH 断开也能重新连接恢复。nohup 只保证进程不接收 SIGHUP 信号,但不提供会话恢复能力。
Q4:如何批量重命名文件
可以用 rename 命令(perl 版本功能强大):rename 's/old_prefix/new_prefix/' *.txt 将所有 txt 文件的 old_prefix 替换为 new_prefix。或者用 mmv 命令:mmv "*.txt" "#1_new.txt" 实现批量加前缀。更复杂的可以用 Python 脚本处理。
延伸阅读
- Linux Command Line Basics:GNU Coreutils 官方文档 — 包含所有基础命令的完整说明。
- explainshell.com:输入任意命令即可获得每个部分的详细解释,非常适合学习新命令。
- 《Linux高性能服务器编程》游渼源:深入讲解 Linux 网络编程和服务器性能优化。