Linux 运维命令速查手册(实战版)
适用对象:Linux 运维工程师、系统管理员、DevOps 工程师
核心目标:提升故障排查效率,减少命令查找时间
建议用法:收藏为浏览器书签,遇到问题Ctrl+F快速定位
一、文件与目录操作(高频)
1.1 目录导航
表格
1.2 文件操作
bash
复制
# 复制(保留属性 + 递归)
cp -rp source_dir target_dir
# 移动/重命名
mv -f old_name new_name # 强制覆盖不提示
# 删除(危险操作!)
rm -rf dir_name # 递归强制删除 ⚠️
rm -i file_name # 删除前确认(安全模式)
# 创建目录树
mkdir -p /a/b/c/d # 递归创建多级目录1.3 批量操作技巧
bash
复制
# 查找并删除大于 50M 的文件(释放磁盘空间神器)
find /var/log/ -size +50M -exec rm -f {} \;
# 查找 30 天前的日志并删除
find /var/log/ -name "*.log" -mtime +30 -delete
# 批量修改文件权限
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;二、文件查看与日志分析(排查神器)
2.1 基础查看
表格
2.2 日志截取(精准定位)
bash
复制
# 查看第 1000-3000 行(大日志文件分析)
sed -n '1000,3000p' filename
# 实时过滤错误关键字
tail -f app.log | grep --line-buffered "ERROR"
# 提取包含 IP 的请求日志
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
# 统计 404 状态码出现次数
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head -202.3 日志切割与归档
bash
复制
# 按日期切割日志(每天 0 点执行)
log_date=$(date +%Y%m%d)
mv app.log app.log.$log_date
touch app.log
kill -USR1 $(cat pidfile) # 通知进程重新打开日志文件
# 压缩 7 天前的日志
find /var/log/ -name "*.log.*" -mtime +7 -exec gzip {} \;三、文件搜索与查找(快速定位)
3.1 find 命令大全
bash
复制
# 按名称查找
find / -name "nginx.conf" # 精确匹配
find / -name "*.conf" # 模糊匹配
find /etc -type f -name "*.conf" # 仅查找文件
# 按时间查找(排查最近修改)
find /usr/bin -type f -mtime -1 # 1 天内修改
find /usr/bin -type f -atime +100 # 100 天未访问
# 按大小查找(磁盘清理)
find /var -size +100M # 大于 100M
find /var -size -1k # 小于 1KB
# 按权限查找(安全检查)
find / -perm -4000 # 查找 SUID 文件
find / -perm -2000 # 查找 SGID 文件
# 执行操作(谨慎使用)
find /tmp -type f -name "*.tmp" -delete # 直接删除
find . -name "*.log" -exec chmod 644 {} \; # 修改权限3.2 快速定位命令
bash
复制
which nginx # 查找可执行文件路径
whereis nginx # 查找二进制、源码、man 文档
locate nginx.conf # 基于数据库快速查找(需 updatedb)
# 查找被删除但仍被占用的文件(磁盘空间不释放问题)
lsof | grep deleted
lsof +L1 # 仅显示已删除但仍占用的文件四、权限管理(安全基石)
4.1 权限数字对照表
表格
常用组合:
755=rwxr-xr-x(目录默认)644=rw-r--r--(文件默认)700=rwx------(私有文件)
4.2 权限修改实战
bash
复制
# 递归修改网站目录权限(经典场景)
chown -R www:www /var/www/html/ # 更改所有者为 www 用户
chmod -R 755 /var/www/html/ # 目录 755
find /var/www/html/ -type f -exec chmod 644 {} \; # 文件 644
# 设置特殊权限
chmod u+s /bin/ping # SUID(普通用户执行 root 权限)
chmod g+s /home/shared # SGID(目录内文件继承组)
chmod o+t /tmp # Sticky(仅删除自己的文件)
# 批量修改属组
chgrp -R developers /project/*五、文本处理三剑客(grep/sed/awk)
5.1 grep 过滤
bash
复制
# 基础搜索
grep "error" app.log # 简单匹配
grep -i "error" app.log # 忽略大小写
grep -v "debug" app.log # 反向匹配(排除)
grep -n "error" app.log # 显示行号
# 递归搜索
grep -r "timeout" /etc/nginx/ # 递归目录
grep -rn "timeout" /etc/nginx/ # 递归 + 行号
grep -rl "timeout" /etc/nginx/ # 仅显示文件名
# 正则匹配
grep -E "^[0-9]{4}-[0-9]{2}" file # 匹配日期格式
grep -o "ip=[0-9.]*" access.log # 仅输出匹配部分
grep -A5 -B5 "Exception" app.log # 显示上下文 5 行5.2 sed 替换与编辑
bash
复制
# 文本替换(直接修改文件 -i)
sed -i 's/old_string/new_string/g' file.txt # 全局替换
sed -i 's/127.0.0.1/0.0.0.0/g' nginx.conf # 修改绑定 IP
sed -i '/^#/d' config.txt # 删除注释行
sed -i '/^$/d' config.txt # 删除空行
sed -i '20d' config.txt # 删除第 20 行
sed -i '$a\new_line' config.txt # 末尾追加行
# 批量替换多个文件
sed -i 's/localhost/192.168.1.100/g' *.conf5.3 awk 数据分析
bash
复制
# 提取特定列
awk '{print $1}' file.txt # 打印第一列
awk '{print $1,$3}' file.txt # 打印第 1、3 列
awk -F: '{print $1}' /etc/passwd # 指定分隔符为 :
# 条件过滤
awk '$3 > 100 {print $0}' file # 第三列大于 100
awk '/error/ {print $0}' logfile # 包含 error 的行
# 统计计算
awk '{sum+=$1} END {print sum}' file # 求和
awk '{count++} END {print count}' file # 计数
awk '{if($1>max) max=$1} END {print max}' file # 求最大值
# 实战:统计 TCP 连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'六、压缩与归档(传输备份)
表格
6.1 实用技巧
bash
复制
# 排除特定目录打包
tar -czvf backup.tar.gz /data --exclude=/data/logs --exclude=/data/tmp
# 分卷压缩(大文件传输)
tar -czvf - /data | split -b 100M - backup.tar.gz.part-
cat backup.tar.gz.part-* | tar -xzvf - # 合并解压
# 压缩并加密
zip -r -e secure.zip /data/ # 交互式输入密码
tar -czvf - /data | openssl enc -aes-256-cbc -out backup.tar.gz.enc七、系统与关机管理
7.1 关机/重启
bash
复制
shutdown -h now # 立即关机
shutdown -h +10 "System will shutdown in 10 minutes" # 10 分钟后关机并广播
shutdown -r now # 立即重启
shutdown -c # 取消定时关机
reboot # 快速重启
init 0 # 关机(切换运行级别)
init 6 # 重启7.2 系统信息查看
bash
复制
# 基础信息
uname -a # 内核版本
cat /etc/os-release # 系统版本(推荐)
uptime # 运行时长和负载
hostnamectl # 主机名和系统信息
# 硬件信息
lscpu # CPU 详细信息
free -h # 内存使用情况
df -h # 磁盘使用情况
lsblk # 块设备列表
fdisk -l # 磁盘分区详情
# 资源监控
vmstat 1 10 # 每秒采样,共 10 次
iostat -x 1 10 # IO 统计
sar -u 1 10 # CPU 使用率历史八、进程管理(故障排查核心)
8.1 进程查看
bash
复制
# ps 常用组合
ps aux | grep nginx # 查看特定进程
ps -ef | grep java # 查看完整命令行
ps aux --sort=-%mem | head -10 # 按内存占用排序 TOP10
ps aux --sort=-%cpu | head -10 # 按 CPU 占用排序 TOP10
# 树形结构查看
pstree -p # 显示 PID
pstree -a # 显示完整命令
# 查看端口占用
netstat -tunlp | grep 8080 # 查看 8080 端口
ss -tunlp | grep nginx # 新版系统推荐 ss 命令
lsof -i:8080 # 查看端口被哪个进程占用8.2 进程终止
bash
复制
# 优雅终止(推荐)
kill -15 <pid> # SIGTERM,允许清理资源
kill -TERM <pid> # 同上
# 强制终止(最后手段)
kill -9 <pid> # SIGKILL,立即终止
kill -KILL <pid> # 同上
# 批量终止
killall nginx # 终止所有 nginx 进程
pkill -f "python app.py" # 按完整命令匹配终止
pkill -9 -t pts/0 # 强制踢出终端用户
# 安全批量删除(先确认再执行)
ps aux | grep "keyword" | grep -v grep | awk '{print $2}' | xargs kill -98.3 性能分析(top 进阶)
bash
复制
# 监控特定进程
top -p <pid> # 仅监控指定进程
top -p $(pgrep -d',' nginx) # 监控多个进程
# 批量模式输出
top -b -n 1 -o %MEM | head -20 # 按内存排序输出一次
# 交互式快捷键(top 运行中按)
M # 按内存排序
P # 按 CPU 排序
c # 显示完整命令行
1 # 显示每个 CPU 核心
k # 输入 PID 终止进程九、网络诊断(连通性排查)
9.1 基础诊断
表格
9.2 网络配置查看
bash
复制
# IP 和路由
ip addr # 查看 IP 地址(新版)
ip route # 查看路由表
ifconfig # 传统命令(需安装 net-tools)
# 连接状态
netstat -tunap # 查看所有连接
ss -s # 连接统计摘要
cat /proc/net/tcp # 原始 TCP 连接数据
# DNS 排查
nslookup baidu.com # DNS 解析测试
dig baidu.com # 详细 DNS 信息
host baidu.com # 简单解析9.3 流量抓包
bash
复制
# tcpdump 常用场景
tcpdump -i eth0 # 抓取 eth0 网卡
tcpdump -i any port 80 # 抓取 80 端口
tcpdump -i eth0 host 192.168.1.1 # 抓取特定主机
tcpdump -i eth0 -w capture.pcap # 保存到文件
tcpdump -r capture.pcap # 读取文件
# 仅抓取 HTTP GET 请求
tcpdump -i eth0 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'十、Java 进程专项(jps/jstack/jmap)
10.1 基础命令
bash
复制
jps -lvm # 查看所有 Java 进程详情
jps -v # 查看 JVM 参数
# 查看堆内存
jmap -heap <pid> # 堆配置和使用情况
jmap -histo <pid> | head -20 # 对象统计 TOP20
jmap -dump:format=b,file=heap.hprof <pid> # 导出堆转储
# 线程分析
jstack <pid> > thread.dump # 导出线程栈
jstack -l <pid> | grep "java.lang.Thread.State:" | sort | uniq -c # 统计线程状态
# GC 查看
jstat -gc <pid> 1000 10 # 每秒 GC 统计,共 10 次
jstat -gccause <pid> 1000 # 查看 GC 原因10.2 故障排查流程
bash
复制
# 1. 找到最耗 CPU 的 Java 线程
top -Hp <java_pid> # 按 CPU 排序,记录线程 PID
printf "%x\n" <thread_pid> # 转为 16 进制
# 2. 查看线程栈
jstack <java_pid> | grep -A 20 <hex_thread_pid>
# 3. 分析内存溢出
jmap -dump:format=b,file=oom.hprof <pid>
# 使用 MAT 工具分析 hprof 文件附录:应急排查速查表
表格
📌 收藏建议:将此文档保存为浏览器书签,或导入 Halo 博客作为内部 Wiki
🔄 更新周期:建议每季度根据实际使用场景补充新命令
💡 进阶学习:掌握strace/perf/bpftrace进行系统级调试