Linux运维必备命令大全:从入门到实战的50个高频技巧

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 -rfddiptables -F 等高风险命令,建议先用 echo 替换确认参数正确后再执行。

总结

本文整理的 50 个 Linux 运维命令覆盖了日常工作中 90% 以上的场景。建议将常用命令配置为 alias,将常用脚本保存到 ~/bin/ 目录并加入 PATH,逐步建立自己的运维工具库。

熟练掌握这些命令,不仅能大幅提升排查问题的效率,更能在关键时刻快速定位故障根因,是每位 Linux 运维工程师的核心竞争力。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容