Linux 是服务器运维的基石,无论是日常排查问题、性能调优还是自动化部署,熟练掌握常用命令都是每位运维工程师的必备技能。本文系统整理了 50 个高频 Linux 运维命令,涵盖文件操作、进程管理、网络诊断、磁盘监控、日志分析等核心场景,每个命令都附有实战示例,拿来即用。
一、文件与目录操作
1. find — 强大的文件搜索
find 是 Linux 中最灵活的文件查找工具,支持按名称、大小、时间、权限等多维度搜索。
# 查找 /var/log 下 7 天内修改过的 .log 文件
find /var/log -name "*.log" -mtime -7
# 查找大于 100MB 的文件
find / -type f -size +100M 2>/dev/null
# 查找并删除 30 天前的临时文件
find /tmp -type f -mtime +30 -delete
# 查找属于某用户的所有文件
find /home -user deploy -type f
# 查找权限为 777 的危险文件
find / -perm 777 -type f 2>/dev/null
2. rsync — 高效文件同步
比 cp 更强大,支持增量同步、断点续传、远程传输。
# 本地目录同步(保留权限、时间戳)
rsync -avz /data/source/ /data/backup/
# 同步到远程服务器
rsync -avz -e "ssh -p 22" /data/web/ deploy@192.168.1.100:/var/www/html/
# 排除某些目录
rsync -avz --exclude='node_modules' --exclude='.git' /project/ user@server:/deploy/
# 删除目标中源没有的文件(镜像同步)
rsync -avz --delete /data/source/ /data/backup/
3. tar — 打包与压缩
# 打包并压缩(gzip)
tar -czvf backup_$(date +%Y%m%d).tar.gz /data/web/
# 解压到指定目录
tar -xzvf backup_20260424.tar.gz -C /restore/
# 查看压缩包内容(不解压)
tar -tzvf backup.tar.gz
# 使用 bzip2 压缩(压缩率更高)
tar -cjvf archive.tar.bz2 /data/
# 排除目录打包
tar -czvf backup.tar.gz --exclude=/data/logs /data/
二、进程与系统监控
4. top / htop — 实时进程监控
# top 常用快捷键
# P - 按 CPU 排序
# M - 按内存排序
# k - 杀死进程(输入 PID)
# 1 - 显示每个 CPU 核心
# q - 退出
# 非交互模式,输出一次后退出(适合脚本)
top -bn1 | head -20
# htop 安装(更友好的界面)
yum install htop -y # CentOS
apt install htop -y # Ubuntu
5. ps — 进程快照
# 查看所有进程(BSD 风格)
ps aux
# 查找特定进程
ps aux | grep nginx
# 显示进程树
ps axjf
# 查看进程的完整命令行
ps -ef | grep java
# 按 CPU 使用率排序,取前 10
ps aux --sort=-%cpu | head -10
# 按内存使用率排序
ps aux --sort=-%mem | head -10
6. systemctl — 服务管理
# 启动/停止/重启服务
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
# 重新加载配置(不中断服务)
systemctl reload nginx
# 设置开机自启
systemctl enable nginx
systemctl disable nginx
# 查看服务状态
systemctl status nginx
# 查看所有运行中的服务
systemctl list-units --type=service --state=running
# 查看启动失败的服务
systemctl --failed
7. kill / pkill / killall
# 优雅终止进程(SIGTERM)
kill 1234
# 强制杀死进程(SIGKILL)
kill -9 1234
# 按名称杀死进程
pkill nginx
killall java
# 向进程发送重载信号
kill -HUP $(cat /var/run/nginx.pid)
# 杀死某用户的所有进程
pkill -u deploy
三、网络诊断与管理
8. ss / netstat — 网络连接查看
# 查看所有监听端口(ss 更快,推荐)
ss -tlnp
# 查看所有 TCP 连接
ss -tnp
# 查看某端口占用
ss -tlnp | grep :80
lsof -i :80
# 统计连接状态
ss -s
# 查看 ESTABLISHED 连接数
ss -tn | grep ESTABLISHED | wc -l
# 传统 netstat(部分系统仍需用)
netstat -tlnp
netstat -an | grep :3306
9. curl — HTTP 调试利器
# 基本 GET 请求
curl https://api.example.com/health
# 显示响应头
curl -I https://xjahb.cn
# POST JSON 数据
curl -X POST https://api.example.com/data -H "Content-Type: application/json" -d '{"key":"value"}'
# 带认证的请求
curl -u username:password https://api.example.com/
# 下载文件并显示进度
curl -O -# https://example.com/file.tar.gz
# 测试接口响应时间
curl -o /dev/null -s -w "DNS: %{time_namelookup}s
Connect: %{time_connect}s
Total: %{time_total}s
" https://xjahb.cn
# 跟随重定向
curl -L https://short.url/abc
10. tcpdump — 网络抓包
# 抓取 eth0 上的 HTTP 流量
tcpdump -i eth0 port 80 -A
# 抓取与特定 IP 的通信
tcpdump -i any host 192.168.1.100
# 保存到文件(用 Wireshark 分析)
tcpdump -i eth0 -w /tmp/capture.pcap
# 抓取 DNS 查询
tcpdump -i any port 53
# 只显示 SYN 包(连接建立)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
11. iptables — 防火墙规则
# 查看当前规则
iptables -L -n -v
# 允许特定端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许特定 IP 访问
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# 封禁某 IP
iptables -A INPUT -s 1.2.3.4 -j DROP
# 保存规则(CentOS)
service iptables save
# 使用 firewalld(现代 CentOS/RHEL)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
四、磁盘与存储管理
12. df / du — 磁盘使用分析
# 查看磁盘挂载点使用情况(人类可读)
df -h
# 查看 inode 使用情况(inode 耗尽也会导致无法写入)
df -i
# 查看当前目录各子目录大小
du -sh *
# 找出最大的目录(前 10)
du -h /var | sort -rh | head -10
# 查看某目录总大小
du -sh /var/log/
# 实时监控磁盘 IO
iostat -x 1 5
13. lsblk / fdisk — 磁盘分区
# 查看所有块设备
lsblk
# 查看磁盘分区详情
fdisk -l /dev/sda
# 查看磁盘 UUID(挂载时用)
blkid
# 挂载新磁盘
mount /dev/sdb1 /data
# 永久挂载(写入 /etc/fstab)
echo "UUID=xxxx-xxxx /data ext4 defaults 0 0" >> /etc/fstab
五、日志分析
14. journalctl — systemd 日志
# 查看最近 100 条日志
journalctl -n 100
# 实时跟踪日志
journalctl -f
# 查看某服务的日志
journalctl -u nginx -f
# 查看今天的日志
journalctl --since today
# 查看某时间段的日志
journalctl --since "2026-04-24 00:00:00" --until "2026-04-24 12:00:00"
# 查看内核日志
journalctl -k
# 按优先级过滤(err/warning/info)
journalctl -p err
15. grep / awk / sed — 日志三剑客
# grep:查找包含 ERROR 的行
grep -n "ERROR" /var/log/app.log
# 查找并显示前后 3 行上下文
grep -C 3 "OutOfMemory" /var/log/app.log
# 统计 ERROR 出现次数
grep -c "ERROR" /var/log/app.log
# awk:提取 Nginx 访问日志中的 IP 并统计 TOP10
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# awk:统计 HTTP 状态码分布
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
# sed:替换配置文件中的值
sed -i 's/max_connections = 100/max_connections = 500/' /etc/mysql/my.cnf
# sed:删除空行
sed -i '/^$/d' config.txt
# 组合使用:找出最近 1 小时的 500 错误
awk -v d="$(date -d '1 hour ago' '+%d/%b/%Y:%H')" '$0 ~ d && $9==500' /var/log/nginx/access.log
六、性能调优
16. vmstat — 系统性能概览
# 每秒刷新一次,共 5 次
vmstat 1 5
# 输出说明:
# r - 运行队列(>CPU核数说明CPU繁忙)
# b - 阻塞进程数
# si/so - swap 换入/换出(有值说明内存不足)
# bi/bo - 块设备读/写(磁盘IO)
# us/sy/id/wa - 用户/系统/空闲/等待IO的CPU占比
17. free — 内存使用
# 人类可读格式
free -h
# 每秒刷新
watch -n 1 free -h
# 清理缓存(谨慎在生产环境使用)
sync && echo 3 > /proc/sys/vm/drop_caches
18. ulimit — 资源限制
# 查看当前限制
ulimit -a
# 设置最大打开文件数(当前会话)
ulimit -n 65535
# 永久修改(/etc/security/limits.conf)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 查看某进程的文件描述符数量
ls /proc/$(pgrep nginx | head -1)/fd | wc -l
七、实用运维脚本
19. 一键查看服务器健康状态
#!/bin/bash
# server_health.sh - 服务器健康检查脚本
echo "========== 服务器健康报告 =========="
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机: $(hostname)"
echo ""
echo "--- CPU 使用率 ---"
top -bn1 | grep "Cpu(s)" | awk '{print "使用率: " 100-$8 "%"}'
echo ""
echo "--- 内存使用 ---"
free -h | awk 'NR==2{printf "总计: %s | 已用: %s | 可用: %s | 使用率: %.1f%%
", $2,$3,$7,$3/$2*100}'
echo ""
echo "--- 磁盘使用 ---"
df -h | awk 'NR>1 && $5+0 > 70 {print "⚠️ " $0}'
df -h | awk 'NR>1 && $5+0 <= 70 {print "✅ " $0}'
echo ""
echo "--- 系统负载 ---"
uptime
echo ""
echo "--- 网络连接数 ---"
echo "ESTABLISHED: $(ss -tn | grep -c ESTABLISHED)"
echo "TIME_WAIT: $(ss -tn | grep -c TIME-WAIT)"
echo ""
echo "--- 最近登录 ---"
last | head -5
20. 批量检测端口连通性
#!/bin/bash
# check_ports.sh
HOSTS=("192.168.1.100" "192.168.1.101" "192.168.1.102")
PORTS=(22 80 443 3306 6379)
for host in "${HOSTS[@]}"; do
echo "检测主机: $host"
for port in "${PORTS[@]}"; do
if timeout 2 bash -c "echo >/dev/tcp/$host/$port" 2>/dev/null; then
echo " ✅ $port 开放"
else
echo " ❌ $port 关闭/超时"
fi
done
echo ""
done
八、常用快捷技巧
21. 历史命令与快捷键
# 搜索历史命令(Ctrl+R 然后输入关键词)
# 执行上一条命令
!!
# 执行历史中第 100 条命令
!100
# 替换上条命令中的字符串并执行
^old^new
# 查看最近 20 条命令
history 20
# 清除历史(安全操作后)
history -c
22. screen / tmux — 会话保持
# tmux 基本操作
tmux new -s deploy # 新建名为 deploy 的会话
tmux attach -t deploy # 重新连接会话
tmux ls # 列出所有会话
tmux kill-session -t deploy # 删除会话
# tmux 快捷键(前缀 Ctrl+B)
# Ctrl+B d - 分离会话(后台运行)
# Ctrl+B c - 新建窗口
# Ctrl+B n - 下一个窗口
# Ctrl+B % - 垂直分屏
# Ctrl+B " - 水平分屏
23. alias — 命令别名
# 添加到 ~/.bashrc 或 ~/.zshrc
alias ll='ls -alh --color=auto'
alias grep='grep --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
alias ports='ss -tlnp'
alias myip='curl -s ifconfig.me'
alias update='apt update && apt upgrade -y'
alias logs='journalctl -f'
alias df='df -h'
alias du='du -sh'
# 生效
source ~/.bashrc
💡 运维小贴士:在生产环境执行危险命令前,养成先在测试环境验证的习惯。对于
rm -rf、dd、iptables -F等高风险命令,建议先用echo替换确认参数正确后再执行。
总结
本文整理的 50 个 Linux 运维命令覆盖了日常工作中 90% 以上的场景。建议将常用命令配置为 alias,将常用脚本保存到 ~/bin/ 目录并加入 PATH,逐步建立自己的运维工具库。
熟练掌握这些命令,不仅能大幅提升排查问题的效率,更能在关键时刻快速定位故障根因,是每位 Linux 运维工程师的核心竞争力。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容