1. Linux运维工程师的日常工具箱
作为一名在Linux系统上摸爬滚打多年的老运维,我深知命令行工具就是我们的瑞士军刀。每天与服务器打交道,没有这些命令傍身,就像战士上战场没带枪一样寸步难行。今天我就来分享那些真正在实战中高频使用的20个核心命令,它们构成了Linux运维工作的基础骨架。
这些命令不是随便从手册里挑出来的,而是经过多年运维实战验证的。从系统监控到故障排查,从性能分析到日志处理,每一个命令都对应着运维日常工作中的关键场景。掌握它们不仅能提高工作效率,更能让你在服务器出现问题时快速定位原因。
2. 系统状态监控三剑客
2.1 top命令:实时系统监控仪表盘
top命令是我每天打开终端第一个运行的命令,它提供了系统运行的实时快照。就像汽车的仪表盘,它能立即告诉你CPU、内存、负载等关键指标的状态。
进阶用法:
top -c -u username # 显示完整命令路径并过滤特定用户进程在监控时我特别关注:
- load average三个数值(1分钟、5分钟、15分钟负载)
- %CPU和%MEM列,找出资源占用异常的进程
- Tasks行中的僵尸进程数量
提示:按"1"可以展开显示每个CPU核心的详细使用情况,这在多核服务器上特别有用。
2.2 vmstat:系统性能的显微镜
当top显示系统负载高时,vmstat就是我的第二把手术刀。它能提供更详细的系统资源使用统计:
vmstat 1 5 # 每隔1秒采样一次,共采样5次关键指标解读:
- r列:运行队列长度,持续大于CPU核心数说明CPU饱和
- si/so列:交换分区活动情况,非零值可能预示内存不足
- us/sy/id列:用户态/内核态/空闲CPU时间占比
2.3 free:内存使用情况速查
内存问题经常是系统性能的隐形杀手。free -h以人类可读格式显示内存使用情况:
total used free shared buff/cache available Mem: 15G 4.2G 2.1G 456M 8.7G 9.8G Swap: 2.0G 512M 1.5G重点关注available列而非free列,因为Linux会主动利用空闲内存做缓存。当available接近total的10%时就需要警惕了。
3. 磁盘管理必备技能
3.1 df:磁盘空间监控
磁盘爆满是运维最常遇到的紧急情况之一。我习惯用df -hT来查看:
Filesystem Type Size Used Avail Use% Mounted on /dev/nvme0n1p2 ext4 200G 45G 146G 24% /- 定期检查关键分区(如/、/var、/home)的使用率
- 使用率超过80%就需要考虑清理或扩容
3.2 du:找出空间占用大户
当df显示空间不足时,du就是我的空间侦探:
du -sh /var/* | sort -rh | head -10 # 找出/var下最大的10个目录常用参数组合:
-s:只显示总计-h:人类可读格式--max-depth=1:限制递归深度
3.3 iostat:磁盘I/O性能分析
当系统变慢但CPU和内存看起来正常时,磁盘I/O往往是罪魁祸首:
iostat -x 1 # 显示扩展统计,每秒刷新关键指标:
- %util:设备利用率,接近100%表示I/O饱和
- await:平均I/O等待时间(ms),通常应<10ms
4. 网络运维核心工具
4.1 netstat/ss:网络连接分析
虽然netstat正在被ss取代,但两者都很有用:
ss -tulnp # 显示所有监听端口和连接关键用途:
- 检查服务是否监听正确端口
- 找出异常连接
- 统计连接数
4.2 ping:网络连通性测试
最基本的网络诊断工具:
ping -c 4 -i 0.2 example.com # 发送4个包,间隔0.2秒高级技巧:
- 结合
traceroute诊断网络路径问题 - 使用
mtr获得更全面的网络质量数据
4.3 tcpdump:网络流量抓包
当需要深入分析网络问题时:
tcpdump -i eth0 -nn 'port 80' -w capture.pcap常用过滤表达式:
- host 192.168.1.1
- port 22
- tcp and not port 22
5. 日志分析专家命令
5.1 grep:日志内容过滤
grep是日志分析的第一工具:
grep -E 'ERROR|WARN' /var/log/syslog # 查找错误和警告实用参数:
-A 3 -B 2:显示匹配行前后内容-v:反向匹配-c:统计匹配次数
5.2 tail:实时日志监控
追踪日志文件的最新内容:
tail -f /var/log/nginx/access.log # 实时显示日志更新组合技巧:
tail -f logfile | grep --line-buffered "keyword"5.3 awk:日志数据提取
从结构化日志中提取特定字段:
awk '{print $1,$7,$9}' access.log # 提取IP、URL和状态码高级用法:
awk '$9 == 500 {count++} END {print count}' access.log # 统计500错误次数6. 进程管理关键命令
6.1 ps:进程状态查看
比top更灵活的进程查看工具:
ps aux --sort=-%mem | head # 按内存使用排序常用组合:
ps -ef:完整格式列表ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu:自定义输出列
6.2 kill:进程控制
终止异常进程的标准方式:
kill -9 1234 # 强制终止PID为1234的进程信号类型:
-15(TERM):优雅终止(默认)-9(KILL):强制终止-HUP:重新加载配置
6.3 lsof:查看打开文件
当收到"Too many open files"错误时:
lsof -u username # 查看用户打开的文件 lsof -i :80 # 查看使用80端口的进程7. 文件操作高效工具
7.1 find:文件搜索
比图形界面更强大的文件查找:
find / -type f -size +100M -exec ls -lh {} \; # 查找大于100MB的文件常用条件:
-name "*.log"-mtime +7(修改时间超过7天)-user root
7.2 rsync:文件同步
比scp更强大的同步工具:
rsync -avz --delete /source/ user@remote:/dest/ # 镜像同步关键参数:
-a:归档模式(保留权限等)-z:压缩传输--progress:显示进度
7.3 tar:归档打包
创建备份的必备技能:
tar -czvf backup.tar.gz /path/to/backup # 创建压缩包 tar -xzvf backup.tar.gz -C /target # 解压到指定目录8. 系统信息查询命令
8.1 uname:系统信息
快速查看系统基本信息:
uname -a # 显示所有信息输出示例:
Linux server1 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux8.2 lsb_release:发行版信息
获取Linux发行版详细信息:
lsb_release -a典型输出:
Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal9. 用户权限管理命令
9.1 sudo:特权执行
安全执行特权命令的方式:
sudo -u username command # 以指定用户身份执行配置技巧:
- 使用
visudo安全编辑sudoers文件 - 限制特定用户可以执行的命令
9.2 chmod/chown:权限管理
文件权限管理基础:
chmod 755 script.sh # 设置权限为rwxr-xr-x chown user:group file # 更改所有者和组权限数字含义:
- 4:读(r)
- 2:写(w)
- 1:执行(x)
10. 文本处理大师级命令
10.1 sed:流编辑器
批量修改文本的利器:
sed -i 's/old/new/g' file.txt # 替换文件中的所有old为new高级用法:
sed -n '10,20p' file.log # 只打印10-20行10.2 cut:字段提取
处理结构化文本的好帮手:
cut -d',' -f1,3 data.csv # 提取CSV文件的第1和第3列常用参数:
-d:指定分隔符-f:指定字段
11. 运维工作流优化技巧
在实际运维工作中,我通常会将这些命令组合使用,形成高效的工作流。例如,当半夜收到服务器报警时,我的标准排查流程是:
- 先用
top快速查看系统整体状态 - 用
vmstat和iostat确认是CPU、内存还是I/O问题 - 用
ps和lsof定位问题进程 - 用
grep和tail分析相关日志 - 根据情况用
kill终止异常进程或采取其他措施
另一个常用场景是磁盘空间告警处理:
# 找出大文件 find / -type f -size +100M -exec ls -lh {} + | sort -k5 -rh | head -20 # 分析日志文件 du -sh /var/log/* | sort -rh12. 命令组合与自动化
真正的Linux运维高手不在于记住所有命令参数,而在于知道如何组合这些基础工具解决问题。我常用的几种组合模式:
管道(|)连接:将一个命令的输出作为下一个命令的输入
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -nr命令替换:将一个命令的输出作为另一个命令的参数
kill $(ps aux | grep '[n]ginx' | awk '{print $2}')后台执行:将耗时命令放到后台运行
nohup ./long_running_script.sh > output.log 2>&1 &
13. 安全使用注意事项
在使用这些强大命令时,也需要特别注意:
- 慎用
rm -rf:删除前先确认路径,可以使用ls先查看 - 生产环境谨慎使用
kill -9:可能导致数据不一致 chmod和chown修改系统文件前备份- 使用
sudo时确认命令的正确性 - 修改关键配置文件前先做备份
我个人的安全习惯是:
- 对重要操作先使用
echo测试命令输出 - 使用
alias为危险命令添加确认提示alias rm='rm -i'
14. 学习进阶路径建议
掌握这20个命令只是Linux运维的起点。根据我的经验,建议的学习路径是:
- 先熟练使用这些基础命令
- 学习每个命令的常用参数和组合方式
- 理解Linux系统工作原理(进程、内存、文件系统等)
- 学习Shell脚本编程,自动化重复任务
- 深入研究特定服务(如Nginx、MySQL)的专用命令
推荐的学习资源:
man命令:所有Linux命令都有详细手册tldr工具:简洁实用的命令示例- 在线实验环境:如Linux容器,可以安全练习
15. 环境变量与配置优化
为了让这些命令更好用,我会配置一些环境变量和别名:
# 在~/.bashrc中添加 export HISTTIMEFORMAT="%F %T " # 为history添加时间戳 alias ll='ls -alFh' alias grep='grep --color=auto'对于经常使用的复杂命令,可以封装成函数:
# 查找并删除7天前的日志文件 function clean_old_logs() { find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \; }16. 性能监控实战案例
去年我们遇到一个生产环境CPU使用率突然飙升的问题,我是这样排查的:
- 首先用
top发现一个Java进程占用了300% CPU - 用
ps -Lf <pid>查看该进程的所有线程 - 用
jstack获取Java线程堆栈(需要JDK工具) - 发现是某个SQL查询没有使用索引导致全表扫描
- 联系开发团队优化查询后问题解决
这个案例展示了如何将系统命令与特定技术栈工具结合使用。
17. 日志分析实战技巧
对于大型日志文件的分析,我总结了几点经验:
- 先用
head或tail查看日志格式 - 使用
grep -n定位关键事件的行号 - 用
sed提取特定时间范围的日志 - 用
awk统计错误类型和频率 - 最终结果可以导入
sort和uniq进一步处理
例如分析Nginx访问日志中的异常请求:
awk '$9 >= 400 {print $7,$9}' access.log | sort | uniq -c | sort -nr18. 服务器安全加固命令
除了日常运维,这些命令也常用于安全加固:
检查异常登录:
last -i | grep -v '127.0.0.1'查找SUID/SGID文件(潜在提权风险):
find / -perm -4000 -o -perm -2000 -type f -exec ls -la {} \;检查开放端口:
netstat -tulnp | grep -v '127.0.0.1'
19. 备份与恢复策略
可靠的备份是运维的生命线。我常用的备份命令组合:
数据库备份:
mysqldump -u root -p --all-databases | gzip > backup_$(date +%F).sql.gz目录增量备份:
rsync -a --link-dest=/path/to/previous/backup /source/ /backup/$(date +%F)/验证备份完整性:
gzip -t backup_file.gz && echo "OK" || echo "Corrupted"
20. 命令替代方案与新工具
虽然这些传统命令非常强大,但现代Linux系统也出现了一些替代工具:
htop替代top:更友好的交互界面ncdu替代du:交互式磁盘使用分析jq处理JSON日志:替代awk处理结构化数据bat替代cat:语法高亮和分页显示
不过,我建议先掌握基础命令,因为这些工具在所有Linux系统上都可用,而新工具可能需要额外安装。