Linux 运维命令速查手册(实战版)

适用对象:Linux 运维工程师、系统管理员、DevOps 工程师
核心目标:提升故障排查效率,减少命令查找时间
建议用法:收藏为浏览器书签,遇到问题 Ctrl+F 快速定位


一、文件与目录操作(高频)

1.1 目录导航

表格

命令

作用

示例

cd /path

进入指定目录

cd /var/log

cd ..

返回上级目录

-

cd -

返回上次所在目录

快速切换两个目录

pwd

显示当前完整路径

pwd/root

ls -lah

查看文件详情(含隐藏文件)

最常用组合

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 基础查看

表格

场景

命令

说明

查看小文件

cat file

直接输出全部内容

查看大文件

less file

支持上下翻页、搜索 /keyword

实时追踪日志

tail -f /var/log/messages

排查故障必用

查看前 N 行

head -n 100 file

看日志开头

查看后 N 行

tail -n 100 file

看日志结尾

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 -20

2.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 权限数字对照表

表格

权限

数字

说明

r(读)

4

查看文件内容 / 列出目录

w(写)

2

修改文件 / 创建删除目录内文件

x(执行)

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' *.conf

5.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]}'

六、压缩与归档(传输备份)

表格

格式

压缩

解压

查看

tar.gz

tar -czvf file.tar.gz dir/

tar -xzvf file.tar.gz

tar -tzvf file.tar.gz

tar.bz2

tar -cjvf file.tar.bz2 dir/

tar -xjvf file.tar.bz2

tar -tjvf file.tar.bz2

zip

zip -r file.zip dir/

unzip file.zip

unzip -l file.zip

gz

gzip file

gunzip file.gz

zcat file.gz

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 -9

8.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 基础诊断

表格

命令

用途

示例

ping

测试连通性

ping -c 4 baidu.com

curl

测试 HTTP

curl -I http://localhost:8080

wget

下载测试

wget --spider http://example.com

telnet

测试端口

telnet 192.168.1.1 22

nc

端口扫描

nc -zv 192.168.1.1 20-80

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 文件

附录:应急排查速查表

表格

问题现象

排查命令

解决思路

磁盘满

df -h / du -sh * / lsof +L1

清理日志 / 删除大文件 / 重启释放句柄

CPU 高

top / ps aux --sort=-%cpu

定位进程 → 定位线程 → 分析堆栈

内存高

free -h / ps aux --sort=-%mem

确认是否泄漏 / 调整 JVM 参数 / OOM 分析

网络不通

ping / telnet / traceroute

检查防火墙 / 路由 / DNS / 端口监听

服务起不来

systemctl status / journalctl -xe

查看日志定位错误 / 检查依赖 / 端口冲突

僵尸进程

`ps aux

grep Z`

找到父进程 / 重启父进程

连接过多

ss -s / netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

调整内核参数 / 优化应用连接池


📌 收藏建议:将此文档保存为浏览器书签,或导入 Halo 博客作为内部 Wiki
🔄 更新周期:建议每季度根据实际使用场景补充新命令
💡 进阶学习:掌握 strace / perf / bpftrace 进行系统级调试