Linux 系统命令使用速查手册

适用 :CentOS/RHEL 7+、Ubuntu/Debian 20+、AlmaLinux/RockyLinux 8+

Shell:Bash 5.x / Zsh 5.x


第一章:文件与目录操作

1.1 基础导航

命令 说明 示例
pwd 显示当前工作目录(绝对路径) pwd/home/user/projects
pwd -P 显示物理路径(解析所有符号链接) pwd -P
cd [目录] 切换目录 cd /var/log
cd ~cd 切换到当前用户的家目录 cd ~
cd - 切换到上一次所在的目录 cd -
ls [选项] [路径] 列出目录内容 ls -la /etc
ls -l 长格式显示(权限/所有者/大小/时间) ls -l
ls -la 显示所有文件(含隐藏文件 . 开头) ls -la ~
ls -lh 人类可读的文件大小(K/M/G) ls -lh /var/log
ls -lt 按修改时间倒序排列 ls -lt
ls -lS 按文件大小倒序排列 ls -lS /tmp
ls -R 递归列出子目录 ls -R /etc/nginx
ls -i 显示文件的 inode 号 ls -i /etc/passwd
tree [目录] 以树状结构显示目录(需安装) tree -L 2 /etc

ls 输出字段解析

复制代码
-rw-r--r-- 1 root root 1.2K Jan 15 10:23 nginx.conf
│└┬┘└┬┘└┬┘ │  │    │    │    │         └── 文件名
│ │  │  │   │  │    │    │    └────────── 修改时间
│ │  │  │   │  │    │    └─────────────── 文件大小
│ │  │  │   │  │    └──────────────────── 所属组
│ │  │  │   │  └───────────────────────── 所有者
│ │  │  │   └──────────────────────────── 硬链接数
│ │  │  └──────────────────────────────── 其他人权限
│ │  └─────────────────────────────────── 所属组权限
│ └────────────────────────────────────── 所有者权限
└──────────────────────────────────────── 文件类型(-普通文件、d目录、l链接、c字符设备、b块设备、 s套接字、p管道)

1.2 文件与目录创建

命令 说明 示例
touch [文件] 创建空文件 / 更新文件时间戳 touch app.log
touch {a,b,c}.txt 批量创建多个文件 创建 a.txtb.txtc.txt
mkdir [目录] 创建目录 mkdir backups
mkdir -p [路径] 递归创建(含父目录,不报错) mkdir -p /data/app/logs/2024
mkdir -m 750 [目录] 创建时指定权限 mkdir -m 750 /data/private
cp [源] [目标] 复制文件 cp nginx.conf nginx.conf.bak
cp -r [源] [目标] 递归复制目录 cp -r /etc/nginx /backup/nginx-2024
cp -a [源] [目标] 归档复制(保留所有属性、链接) cp -a /data/ /backup/data/
cp -v [源] [目标] 显示复制过程 cp -v *.conf /backup/
cp --parents [源] [目标] 保持目录结构复制 cp --parents /etc/nginx/nginx.conf /backup/
mv [源] [目标] 移动文件/目录 mv oldname.txt newname.txt
mv -f [源] [目标] 强制覆盖 mv -f file1.txt file2.txt
mv -n [源] [目标] 不覆盖已存在文件 mv -n source.txt dest.txt
ln -s [源] [链接名] 创建符号链接(软链接) ln -s /data/logs /var/log/app
ln [源] [链接名] 创建硬链接 ln file.txt hardlink.txt
readlink -f [链接] 解析符号链接到最终目标 readlink -f /usr/bin/java

1.3 删除操作

命令 说明 示例
rm [文件] 删除文件 rm app.log
rm -i [文件] 删除前确认 rm -i important.txt
rm -f [文件] 强制删除(不确认) rm -f *.tmp
rm -r [目录] 递归删除目录 rm -r old_project/
rm -rf [目录] 强制递归删除(高危!) rm -rf /tmp/build_cache/
rmdir [空目录] 删除空目录 rmdir empty_dir/
rmdir -p [路径] 递归删除空目录 rmdir -p a/b/c

⚠️ 安全删除别名(建议加入 ~/.bashrc

bash 复制代码
alias rm='rm -i'           # 删除前确认
alias cp='cp -i'           # 覆盖前确认
alias mv='mv -i'           # 覆盖前确认

1.4 查看文件内容

命令 说明 示例
cat [文件] 显示整个文件内容 cat /etc/passwd
cat -n [文件] 显示行号 cat -n app.log
cat file1 file2 > file3 合并多个文件 cat a.log b.log > combined.log
tac [文件] 倒序显示(从最后一行开始) tac /var/log/syslog
head [文件] 显示前10行 head /var/log/nginx/access.log
head -n 20 [文件] 显示前20行 head -n 20 app.log
head -c 1K [文件] 显示前1KB head -c 1K data.bin
tail [文件] 显示最后10行 tail /var/log/syslog
tail -n 50 [文件] 显示最后50行 tail -n 50 app.log
tail -f [文件] 实时追踪文件新增内容 tail -f /var/log/nginx/access.log
tail -F [文件] 追踪(文件被旋转后仍追踪) tail -F /var/log/app.log
tail -n 100 -f [文件] 显示最后100行并持续追踪 tail -n 100 -f app.log
more [文件] 分页显示(只能向下翻页) more /var/log/syslog
less [文件] 分页显示(支持上下翻页/搜索) less /var/log/syslog

less 操作键

按键 功能
Space / f 向下翻一页
b 向上翻一页
/ j / Enter 向下移一行
/ k 向上移一行
g 跳到文件开头
G 跳到文件末尾
/pattern 向下搜索
?pattern 向上搜索
n 下一个匹配
N 上一个匹配
q 退出

1.5 文件搜索

find(功能最强大的文件查找)
bash 复制代码
# 基础语法:find [路径] [表达式] [动作]

# 按名称搜索
find /etc -name "*.conf"              # 精确匹配文件名(区分大小写)
find /etc -iname "*.conf"             # 忽略大小写
find /etc -name "nginx.*"             # 支持通配符
find /home -not -name "*.txt"         # 排除匹配

# 按类型搜索
find /var/log -type f                 # 普通文件
find /var -type d                     # 目录
find /run -type l                     # 符号链接

# 按大小搜索
find /var/log -size +100M             # 大于 100MB
find /var/log -size -1K               # 小于 1KB
find /var/log -size 10M               # 精确等于 10MB
find /var/log -size +1G -size -5G     # 1GB 到 5GB 之间

# 按时间搜索
find /var/log -mtime -1               # 1 天内修改过的
find /var/log -mtime +7               # 7 天前修改的
find /var/log -atime +30              # 30 天前访问过的
find /tmp -ctime +7                   # 7 天前状态变更的
find /var/log -mmin -60               # 1 小时内修改的

# 按权限搜索
find /etc -perm 644                   # 精确权限 644
find /etc -perm /u=s                  # SUID 文件

# 按所有者搜索
find /home -user root                 # 属于 root 的文件
find /home -group developers          # 属于 developers 组

# 执行动作
find /tmp -name "*.log" -delete                           # 删除匹配文件
find /var/log -name "*.log" -exec rm -f {} \;             # 对每个匹配执行命令
find /var/log -name "*.log" -exec ls -lh {} \;            # 列出匹配文件详情
find /etc -name "*.conf" | xargs grep -l "listen"         # 管道传递给 xargs
find /var/log -size +100M -exec ls -lhS {} + | head -10   # 查找大文件并排序
locate(基于数据库的快速查找)
bash 复制代码
locate nginx.conf              # 快速查找文件(需 updatedb)
locate -i nginx.conf           # 忽略大小写
locate -r 'nginx.*\.conf$'    # 正则匹配

# 更新 locate 数据库(通常由 cron 每日自动执行)
sudo updatedb
which / whereis / type(查找命令位置)
bash 复制代码
which nginx                    # 查找可执行文件路径($PATH)
which -a nginx                 # 查找所有匹配
whereis nginx                  # 查找二进制/源码/手册页位置
whereis -b nginx               # 只查二进制
type ls                        # 显示命令类型(alias/builtin/file)
type -a ls                     # 显示所有匹配

第二章:文本处理三剑客

2.1 grep(文本过滤)

bash 复制代码
# 基础搜索
grep "error" app.log                    # 包含 "error" 的行
grep -i "error" app.log                 # 忽略大小写
grep -v "error" app.log                 # 不包含 "error" 的行
grep -n "error" app.log                 # 显示行号
grep -c "error" app.log                 # 统计匹配行数
grep -l "error" *.log                   # 只列出包含匹配的文件名
grep -L "error" *.log                   # 列出不包含匹配的文件名

# 正则表达式
grep "^2024-01" app.log                 # 以 2024-01 开头
grep "500$" app.log                     # 以 500 结尾
grep -E "4[0-9]{2}" app.log            # 400-499(扩展正则)
grep -P "\b\d{3}\b" app.log            # Perl 正则,匹配三位数字
grep -w "error" app.log                 # 匹配完整单词(不是 substring)

# 上下文
gep -C 3 "Exception" app.log            # 显示匹配行前后 3 行
grep -B 5 "Exception" app.log           # 显示匹配行前 5 行
grep -A 5 "Exception" app.log           # 显示匹配行后 5 行

# 多条件
grep -E "ERROR|WARN|FATAL" app.log     # 匹配任一模式
grep "error" app.log | grep -v "debug"  # 管道组合(含 error 但不含 debug)

# 递归搜索
grep -r "listen 80" /etc/nginx/         # 递归目录搜索
grep -ri "database_url" /etc/           # 递归 + 忽略大小写

# 实用组合
# 统计各 IP 访问次数
grep -oP '\d+\.\d+\.\d+\.\d+' access.log | sort | uniq -c | sort -rn | head

2.2 sed(流编辑器)

bash 复制代码
# 基本语法:sed [选项] '命令' 文件

# 替换(s/旧/新/标志)
sed 's/foo/bar/' file.txt               # 每行第一个 foo 替换为 bar
sed 's/foo/bar/g' file.txt              # 全局替换
sed 's/foo/bar/2' file.txt              # 替换每行第2个匹配
sed 's/foo/bar/2g' file.txt             # 从第2个开始全部替换
sed 's|/usr/local|/opt|g' file.txt      # 使用 | 作为分隔符(避免转义/)
sed -i 's/foo/bar/g' file.txt           # 直接修改文件(原地编辑)
sed -i.bak 's/foo/bar/g' file.txt       # 修改前备份为 file.txt.bak

# 删除行
sed '3d' file.txt                       # 删除第3行
sed '2,5d' file.txt                     # 删除 2-5 行
sed '/^$/d' file.txt                    # 删除空行
sed '/^#/d' file.txt                    # 删除注释行(以#开头)
sed '/^$/d;/^#/d' file.txt              # 删除空行和注释行

# 打印行
sed -n '5p' file.txt                    # 只打印第5行
sed -n '10,20p' file.txt                # 打印 10-20 行
sed -n '/pattern/p' file.txt            # 打印匹配行(等价于 grep)

# 插入/追加
sed '2i\# This is inserted' file.txt    # 在第2行前插入
sed '$a\# This is appended' file.txt    # 在文件末尾追加

# 高级替换
sed 's/^\[.*\] \[ERROR\] //g' app.log  # 删除日志前缀
sed -E 's/([0-9]+)\.([0-9]+)/\2.\1/'   # 交换两组数字(扩展正则)

# 从管道读取
cat file.txt | sed 's/foo/bar/g'
df -h | sed -n '2p'                     # 只显示 df 的第二行

2.3 awk(文本分析处理)

bash 复制代码
# 基本语法:awk '模式 {动作}' 文件
# 默认按空白字符分割字段,$1 表示第1个字段,$0 表示整行

# 打印指定列
awk '{print $1}' file.txt               # 打印第1列
awk '{print $1, $3}' file.txt           # 打印第1和第3列
awk '{print $NF}' file.txt              # 打印最后一列
awk -F: '{print $1}' /etc/passwd        # 指定分隔符为 :
awk -F',' '{print $2}' data.csv         # CSV 第2列

# 条件过滤
awk '$3 > 100 {print $0}' file.txt      # 第3列大于100的行
awk '$2 == "ERROR" {print $0}' log.txt  # 第2列等于 ERROR
awk '/pattern/ {print $0}' file.txt     # 匹配正则
awk '$1 ~ /^2024/ {print}' log.txt      # 第1列以 2024 开头

# 内置变量
awk '{print NR, $0}' file.txt           # NR=行号,打印带行号
awk 'END {print NR}' file.txt           # 统计总行数
awk '{print FNR, $0}' file1 file2       # FNR=各文件的行号
awk '{print NF}' file.txt               # NF=每行的字段数

# 计算
awk '{sum += $3} END {print sum}' file.txt          # 求第3列总和
awk '{sum += $3} END {print "Average:", sum/NR}' file.txt
awk '$3 > max {max=$3; line=$0} END {print max, line}' file.txt  # 最大值行

# BEGIN/END 块
awk 'BEGIN {print "Start Processing"} {print $1} END {print "Done"}' file.txt

# 关联数组(计数)
awk '{count[$1]++} END {for (ip in count) print count[ip], ip}' access.log

# 格式化输出
awk '{printf "%-15s %10d\n", $1, $3}' file.txt       # 左对齐15字符 + 右对齐10数字

# 实用组合:统计磁盘使用
df -h | awk 'NR>1 {sum+=$3} END {print "Total used: " sum/1024/1024/1024 " GB"}'

2.4 其他文本工具

命令 说明 示例
sort 排序 sort -t: -k3 -n /etc/passwd(按第3列数字排序)
sort -r 倒序 `ls -lS /tmp
sort -u 排序并去重 sort -u names.txt
uniq 去重(相邻行) `sort file.txt
uniq -c 去重并计数 `sort file.txt
uniq -d 只显示重复行 `sort file.txt
wc -l 统计行数 wc -l /etc/passwd
wc -w 统计单词数 wc -w essay.txt
wc -c 统计字节数 wc -c file.bin
cut -d: -f1 按分隔符截取字段 cut -d: -f1,3 /etc/passwd
cut -c1-10 按字符位置截取 cut -c1-10 file.txt
tr 'a-z' 'A-Z' 字符转换 `echo "hello"
tr -d ' ' 删除字符 `echo "a b c"
tr -s ' ' 压缩连续字符 `echo "a b c"
paste file1 file2 合并文件(并行拼接) paste -d',' a.txt b.txt
diff file1 file2 文件差异对比 diff -u config.old config.new
colordiff 彩色差异显示 colordiff file1 file2
comm file1 file2 两文件交集/差集 comm -12 sorted1 sorted2

第三章:文件权限与所有权

3.1 权限管理

命令 说明 示例
chmod [模式] [文件] 修改权限 chmod 755 script.sh
chmod u+x file 给所有者添加执行权限 chmod u+x deploy.sh
chmod go-w file 去除组和其他人的写权限 chmod go-w config.yml
chmod -R 755 [目录] 递归修改权限 chmod -R 755 /data/app
chmod +x *.sh 给所有 .sh 文件添加执行权限 chmod +x /usr/local/bin/*.sh
chown [用户:组] [文件] 修改所有者 chown nginx:nginx /var/log/nginx
chown -R user:group [目录] 递归修改 chown -R appuser:appgroup /data/app
chgrp [组] [文件] 只修改所属组 chgrp wheel /usr/local/bin/script

数字权限模式

数字 权限 说明
7 rwx 读+写+执行
6 rw- 读+写
5 r-x 读+执行
4 r-- 只读
0 --- 无权限

常用组合

  • 755 = rwxr-xr-x(脚本/目录)
  • 644 = rw-r--r--(普通文件)
  • 700 = rwx------(私有文件)
  • 750 = rwxr-x---(组内共享)
  • 777 = rwxrwxrwx(开放权限,尽量避免)

3.2 特殊权限

权限 命令 说明
SUID (4000) chmod u+s /usr/bin/passwd 以文件所有者权限执行
SGID (2000) chmod g+s /shared/dir 在目录中创建的文件继承组
Sticky (1000) chmod +t /tmp 只有所有者才能删除自己的文件
bash 复制代码
# 查找具有 SUID 的文件(安全检查)
find / -perm -4000 -type f 2>/dev/null

# 查找具有 SGID 的文件
find / -perm -2000 -type f 2>/dev/null

3.3 ACL(访问控制列表)

bash 复制代码
# 安装:sudo apt install acl  /  sudo yum install acl

getfacl file.txt                        # 查看 ACL
setfacl -m u:username:rw file.txt       # 给用户添加读写权限
setfacl -m g:groupname:r file.txt       # 给组添加读权限
setfacl -x u:username file.txt          # 删除用户的 ACL
setfacl -b file.txt                     # 清除所有 ACL
setfacl -R -m d:u:username:rx /data     # 递归 + 默认 ACL

第四章:磁盘与文件系统管理

4.1 磁盘空间查看

命令 说明 示例
df -h 查看文件系统磁盘使用(人类可读) df -h
df -hT 显示文件系统类型 df -hT
df -h / 查看指定挂载点 df -h /var
df -i 查看 inode 使用情况 df -i
du -sh [目录] 查看目录总大小 du -sh /var/log
du -sh * 查看当前目录各子项大小 `du -sh *
du -h --max-depth=1 [目录] 查看一级子目录大小 du -h --max-depth=1 /var
`du -ah [目录] sort -rh head -20`
ncdu [目录] 交互式磁盘分析(需安装) ncdu /var

4.2 文件系统操作

bash 复制代码
# 查看已挂载的文件系统
cat /proc/mounts
mount | grep ext4

# 查看块设备
lsblk
lsblk -f    # 显示文件系统类型和 UUID

# 查看分区表
fdisk -l /dev/sda                    # MBR/GPT 分区表
parted -l                             # 所有磁盘分区

# 创建文件系统
mkfs.ext4 /dev/sdb1                   # 格式化为 ext4
mkfs.xfs /dev/sdb1                    # 格式化为 xfs
mkswap /dev/sdb2                      # 创建 swap

# 挂载
mount /dev/sdb1 /mnt/data             # 临时挂载
mount -a                              # 挂载 /etc/fstab 中所有条目
mount -o remount,rw /                 # 重新挂载根目录为可读写

# 卸载
umount /mnt/data                      # 卸载挂载点
umount /dev/sdb1                      # 卸载设备
fuser -m /mnt/data                    # 查看占用挂载点的进程

# 查看 UUID
blkid
blkid /dev/sda1

# 自动挂载配置(/etc/fstab)
# UUID=xxxxx  /data   ext4    defaults,noatime,nodiratime  0  2

4.3 LVM(逻辑卷管理)

bash 复制代码
# 查看 PV/VG/LV
pvs                                     # 物理卷
vgs                                     # 卷组
lvs                                     # 逻辑卷
lvdisplay                               # 详细信息

# 扩展逻辑卷
lvextend -L +10G /dev/vg0/data         # 增加 10GB
lvextend -l +100%FREE /dev/vg0/data    # 使用所有剩余空间
resize2fs /dev/vg0/data                 # 扩展 ext4 文件系统
xfs_growfs /dev/vg0/data                # 扩展 xfs 文件系统

# 创建快照(备份前)
lvcreate -L 5G -s -n data_snap /dev/vg0/data

4.4 磁盘 I/O 监控

命令 说明 示例
iostat -x 1 扩展磁盘 I/O 统计(每秒刷新) iostat -x 1 5
iostat -d 只显示设备 I/O iostat -d 2
iotop 按进程显示 I/O 使用(需 root) sudo iotop
vmstat -d 磁盘统计摘要 vmstat -d 1

第五章:进程管理

5.1 进程查看

命令 说明 示例
ps aux 显示所有进程详细信息 ps aux
ps -ef 全格式显示所有进程 ps -ef
`ps aux grep nginx` 查找特定进程
`ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu head` 自定义输出列
pgrep nginx 按名称查找 PID pgrep -a nginx(显示命令行)
pgrep -u root sshd 按用户和名称查找 pgrep -u root sshd
pidof nginx 查找进程 PID pidof sshd
pstree 以树状显示进程关系 pstree -p(显示 PID)
top 动态进程监控 top
htop 增强版 top(需安装) htop

ps 状态码

状态 说明
R 运行中(Running)
S 睡眠中(Sleeping,可中断)
D 不可中断睡眠( usually I/O)
T 已停止(Stopped)
Z 僵尸进程(Zombie)
< 高优先级
N 低优先级
+ 前台进程
l 多线程

5.2 top 操作指南

按键 功能
M 按内存排序
P 按 CPU 排序
T 按运行时间排序
k 输入 PID 杀死进程
r 修改进程优先级(renice)
c 显示完整命令行
1 显示各 CPU 核心使用情况
d [秒] 修改刷新间隔
W 保存当前配置到 ~/.toprc
q 退出
h 帮助

5.3 进程控制

bash 复制代码
# 前台/后台运行
command &                               # 后台运行
Ctrl + Z                                # 暂停前台进程
bg                                      # 将暂停的进程放入后台
fg                                      # 将后台进程调至前台
fg %1                                   # 将作业号1调至前台
jobs                                    # 查看当前会话的后台任务

# 终止进程
kill PID                                # 发送 SIGTERM(优雅终止)
kill -9 PID                             # 发送 SIGKILL(强制终止)
kill -HUP PID                           # 发送 SIGHUP(重载配置)
killall nginx                           # 按名称杀死所有匹配进程
pkill nginx                             # 按名称模式杀死进程
pkill -f "java -jar app.jar"            # 匹配完整命令行
pkill -u username                       # 杀死某用户的所有进程

# 优先级调整
nice -n 10 command                      # 以低优先级启动(10是较低优先级)
renice -n 5 -p PID                      # 修改运行中进程的优先级
renice -n -5 -p PID                     # 提升优先级(需要 root)

# nohup:用户退出后进程继续运行
nohup java -jar app.jar &               # 后台运行,忽略 HUP 信号
nohup ./script.sh > output.log 2>&1 &   # 输出重定向

5.4 systemd 服务管理

bash 复制代码
# 服务控制
systemctl start nginx                   # 启动服务
systemctl stop nginx                    # 停止服务
systemctl restart nginx                 # 重启服务
systemctl reload nginx                  # 重载配置(不中断服务)
systemctl status nginx                  # 查看状态
systemctl enable nginx                  # 开机自启
systemctl disable nginx                 # 禁用自启
systemctl is-active nginx               # 检查是否运行中
systemctl is-enabled nginx              # 检查是否开机自启

# 查看所有服务
systemctl list-units --type=service --state=running    # 运行中的服务
systemctl list-unit-files --type=service --state=enabled  # 开机自启的服务
systemctl --failed                      # 查看失败的服务

# 日志查看(journalctl)
journalctl -u nginx                     # 查看 nginx 服务日志
journalctl -u nginx -f                  # 实时追踪
journalctl -u nginx --since "2024-01-15 10:00" --until "2024-01-15 12:00"
journalctl -u nginx -n 100              # 最后 100 行
journalctl -u nginx --no-pager          # 直接输出,不分页
journalctl --disk-usage                 # 日志占用的磁盘空间
journalctl --vacuum-time=7d             # 保留最近 7 天的日志
journalctl -p err                       # 只显示错误级别以上的日志

# 服务文件位置
/etc/systemd/system/                    # 自定义服务
/lib/systemd/system/                    # 系统服务
/usr/lib/systemd/system/                # 包安装的服务

# 重新加载 systemd(修改服务文件后)
systemctl daemon-reload

第六章:网络管理

6.1 网络配置查看

命令 说明 示例
ip addr 查看 IP 地址(替代 ifconfig) ip addr
ip addr show eth0 查看指定网卡 ip addr show dev eth0
ip link 查看链路状态 ip link show
ip -s link 查看网卡统计 ip -s link show eth0
ip route 查看路由表 ip route
ip route get 8.8.8.8 查看到目标的路由 ip route get 8.8.8.8
ip neigh 查看 ARP 表 ip neigh
ss -tlnp 查看监听端口(替代 netstat) ss -tlnp
ss -tnp 查看 TCP 连接 ss -tnp
`ss -tlnp grep :80` 查看 80 端口
ss -s 连接统计摘要 ss -s

ss 选项说明

  • -t TCP / -u UDP / -x Unix socket
  • -l 监听 / -a 所有
  • -n 显示数字端口(不解析服务名)
  • -p 显示进程信息(需要 root)

6.2 网络诊断

bash 复制代码
# ping:测试连通性
ping 8.8.8.8                              # 持续 ping(Ctrl+C 停止)
ping -c 4 google.com                      # 只发送 4 个包
ping -i 0.5 192.168.1.1                   # 每 0.5 秒发送一次

# traceroute:追踪路由路径
traceroute google.com                     # UDP 模式
traceroute -I google.com                  # ICMP 模式
tracepath google.com                      # 无需 root,自动发现 MTU
mtr google.com                            # 实时 traceroute(交互式)

# curl:HTTP 请求测试
curl -I https://example.com               # 只显示响应头
curl -v https://example.com               # 详细模式(含握手过程)
curl -o file.zip https://example.com/file.zip    # 下载文件
curl -L https://t.co/xxx                  # 跟随重定向
curl -H "Authorization: Bearer token" https://api.example.com/data
curl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" https://api.example.com
curl -k https://self-signed.example.com   # 忽略证书验证
curl --resolve example.com:443:192.168.1.10 https://example.com   # 指定解析 IP

# wget:文件下载
wget https://example.com/file.tar.gz
wget -O custom_name.tar.gz https://example.com/file.tar.gz
wget -c https://example.com/large_file.iso    # 断点续传
wget --limit-rate=1m https://example.com/file # 限速 1MB/s

# nslookup / dig:DNS 查询
nslookup google.com
dig google.com                            # 详细信息
dig @8.8.8.8 google.com                   # 指定 DNS 服务器
dig +trace google.com                     # 追踪完整解析链
dig -x 8.8.8.8                            # 反向 DNS 查询

# telnet / nc:端口连通性测试
telnet 192.168.1.10 3306                  # 测试 3306 端口
timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.1.10/3306'  # Bash 原生测试
nc -zv 192.168.1.10 80 443                # 扫描多个端口
nc -zv -w 3 192.168.1.10 1-1000           # 扫描端口范围

# whois:域名注册信息
whois example.com

6.3 防火墙

bash 复制代码
# firewalld(CentOS/RHEL)
firewall-cmd --state                      # 查看状态
firewall-cmd --list-all                   # 查看所有规则
firewall-cmd --list-ports                 # 查看开放端口
firewall-cmd --list-services              # 查看开放服务
firewall-cmd --add-port=8080/tcp          # 临时开放 8080
firewall-cmd --add-port=8080/tcp --permanent   # 永久开放
firewall-cmd --remove-port=8080/tcp --permanent # 永久移除
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
firewall-cmd --reload                     # 重载规则

# ufw(Ubuntu/Debian)
ufw status                                # 查看状态
ufw enable                                # 启用
ufw disable                               # 禁用
ufw default deny incoming                 # 默认拒绝入站
ufw default allow outgoing                # 默认允许出站
ufw allow 22/tcp                          # 开放 SSH
ufw allow 80/tcp                          # 开放 HTTP
ufw allow 443/tcp                         # 开放 HTTPS
ufw allow from 192.168.1.0/24 to any port 3306  # 允许特定网段访问 3306
ufw delete allow 8080                     # 删除规则
ufw status numbered                       # 显示带编号的规则
ufw delete 3                              # 删除编号3的规则

# iptables(底层,所有防火墙最终都调用它)
iptables -L -n -v                         # 列出所有规则
iptables -L -n --line-numbers             # 带行号
iptables -A INPUT -p tcp --dport 22 -j ACCEPT       # 允许 SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # 允许 HTTP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  # 允许已建立的连接
iptables -P INPUT DROP                    # 默认丢弃入站
iptables -D INPUT 3                       # 删除 INPUT 链第3条规则
iptables -F                               # 清空所有规则

6.4 网络抓包

bash 复制代码
# tcpdump(需要 root)
sudo tcpdump -i eth0                      # 抓取 eth0 所有流量
sudo tcpdump -i eth0 port 80              # 只抓 80 端口
sudo tcpdump -i eth0 host 192.168.1.10    # 只抓特定 IP
sudo tcpdump -i eth0 tcp port 3306 -w capture.pcap   # 保存到文件
sudo tcpdump -nn -i eth0 port 443 and host 10.0.0.5 # 组合条件
sudo tcpdump -r capture.pcap              # 读取抓包文件
sudo tcpdump -i eth0 -c 100 -w - | strings   # 提取明文内容

# tshark(Wireshark CLI)
sudo tshark -i eth0 -f "tcp port 80"
sudo tshark -r capture.pcap -Y "http.request"

第七章:用户与权限管理

7.1 用户管理

命令 说明 示例
useradd [用户名] 创建用户 sudo useradd -m -s /bin/bash john
useradd -r [用户名] 创建系统用户 sudo useradd -r nginx
userdel [用户名] 删除用户 sudo userdel john
userdel -r [用户名] 删除用户及其家目录 sudo userdel -r john
usermod -aG [组] [用户] 将用户添加到附加组 sudo usermod -aG docker john
usermod -s /bin/zsh [用户] 修改用户 shell sudo usermod -s /bin/zsh john
passwd [用户] 修改密码 sudo passwd john
chage -l [用户] 查看密码过期信息 sudo chage -l john
id [用户] 查看用户 ID 和组 id john
whoami 显示当前用户名 whoami
who 显示已登录用户 who
w 显示已登录用户及活动 w
last 显示最近登录记录 last
lastb 显示失败登录尝试 sudo lastb
bash 复制代码
# 创建用户(完整示例)
sudo useradd -m -s /bin/bash -G sudo,developers -c "John Developer" john
# -m: 创建家目录  -s: 指定 shell  -G: 附加组  -c: 注释
sudo passwd john

# 锁定/解锁用户
sudo passwd -l john                       # 锁定
sudo passwd -u john                       # 解锁

7.2 用户组管理

命令 说明 示例
groupadd [组名] 创建组 sudo groupadd developers
groupdel [组名] 删除组 sudo groupdel developers
groupmod -n [新名] [旧名] 重命名组 sudo groupmod -n devs developers
gpasswd -a [用户] [组] 添加用户到组 sudo gpasswd -a john developers
gpasswd -d [用户] [组] 从组中移除用户 sudo gpasswd -d john developers
groups [用户] 查看用户所属组 groups john
getent group [组名] 查看组成员 getent group developers

7.3 sudo 权限

bash 复制代码
# 编辑 sudo 配置
sudo visudo                               # 安全编辑 /etc/sudoers

# /etc/sudoers 配置示例
# 用户权限
john ALL=(ALL:ALL) ALL                    # john 可以执行所有命令
john ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx    # 免密执行特定命令

# 组权限
%developers ALL=(ALL) ALL                 # developers 组的所有用户

# 查看当前用户的 sudo 权限
sudo -l

第八章:压缩与归档

8.1 tar(归档)

bash 复制代码
# 创建归档
tar -cvf archive.tar /data/app            # 创建 tar 归档(仅打包,不压缩)
tar -czvf archive.tar.gz /data/app        # 创建 gzip 压缩归档(.tar.gz / .tgz)
tar -cjvf archive.tar.bz2 /data/app       # 创建 bzip2 压缩归档
tar -cJvf archive.tar.xz /data/app        # 创建 xz 压缩归档(最高压缩率)

# 选项说明:
# -c 创建  -x 解压  -t 列出内容
# -v 详细  -f 指定文件名
# -z gzip  -j bzip2  -J xz
# -p 保留权限  --exclude=PATTERN 排除文件

# 解压归档
tar -xvf archive.tar                      # 解压 tar
tar -xzvf archive.tar.gz                  # 解压 gzip
tar -xjvf archive.tar.bz2                 # 解压 bzip2
tar -xJvf archive.tar.xz                  # 解压 xz
tar -xzvf archive.tar.gz -C /target/dir   # 解压到指定目录
tar -xzvf archive.tar.gz path/inside      # 只提取归档内的某个路径

# 列出归档内容
tar -tzvf archive.tar.gz                  # 列出 gzip 归档内容

# 排除文件
 tar -czvf backup.tar.gz /data --exclude='*.log' --exclude='/data/tmp'

# 增量备份
tar -czvf backup-$(date +%Y%m%d).tar.gz --listed-incremental=/var/log/tar.snapshot /data

8.2 压缩工具

命令 说明 示例
gzip [文件] gzip 压缩(替换原文件) gzip app.log
gzip -d [文件] gzip 解压 gzip -d app.log.gz
gunzip [文件] 同 gzip -d gunzip app.log.gz
zcat [文件] 查看压缩文件内容 zcat app.log.gz
bzip2 [文件] bzip2 压缩 bzip2 app.log
bunzip2 [文件] bzip2 解压 bunzip2 app.log.bz2
xz [文件] xz 压缩(最高压缩率) xz app.log
unxz [文件] xz 解压 unxz app.log.xz
zip -r [压缩包] [目录] zip 压缩 zip -r backup.zip /data/app
unzip [压缩包] zip 解压 unzip backup.zip
unzip -l [压缩包] 列出 zip 内容 unzip -l backup.zip
unzip [压缩包] -d [目录] 解压到指定目录 unzip backup.zip -d /data/restore

8.3 dd(底层数据复制)

bash 复制代码
# 创建指定大小的空文件
dd if=/dev/zero of=file.bin bs=1M count=100     # 100MB 空文件
dd if=/dev/urandom of=random.bin bs=1K count=10  # 10KB 随机数据

# 备份磁盘
dd if=/dev/sda of=/backup/sda.img bs=4M status=progress

# 恢复磁盘
dd if=/backup/sda.img of=/dev/sda bs=4M status=progress

# 制作启动盘
dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress conv=fsync

# 擦除磁盘
dd if=/dev/urandom of=/dev/sda bs=4M status=progress

第九章:系统监控与性能分析

9.1 系统资源概览

命令 说明 示例
free -h 内存使用情况 free -h
free -m 以 MB 显示 free -m
uptime 系统运行时间、负载 uptime
vmstat 1 5 系统整体统计(1秒刷新,共5次) vmstat 1 5
vmstat -s 统计摘要 vmstat -s
mpstat -P ALL 1 各 CPU 核心使用率 mpstat -P ALL 1
sar -u 1 5 CPU 使用率历史 sar -u 1 5
sar -r 1 5 内存使用率历史 sar -r 1 5
sar -d 1 5 磁盘 I/O 历史 sar -d 1 5
dmesg 内核环缓冲消息 `dmesg
dmesg -T 带时间戳 `dmesg -T
watch -n 1 'free -h' 每隔1秒执行命令 watch -n 1 'df -h'

9.2 CPU 分析

bash 复制代码
# 查看 CPU 信息
lscpu                                     # CPU 架构/核心/线程数
cat /proc/cpuinfo                         # 详细 CPU 信息
cat /proc/loadavg                         # 1/5/15 分钟负载

# 进程级 CPU 分析
perf top                                  # 实时热点函数分析(需 root)
perf record -g ./program                  # 记录程序性能
perf report                               # 分析报告

# strace:跟踪系统调用
strace -p PID                             # 跟踪进程系统调用
strace -c -p PID                          # 统计各系统调用次数
strace -e trace=open,read,write ./program # 只跟踪特定调用

# lsof:查看进程打开的文件
lsof -p PID                               # 查看进程打开的文件
lsof -i :80                               # 查看占用 80 端口的进程
lsof +D /var/log                          # 查看占用目录的进程

9.3 内存分析

bash 复制代码
# 内存详细信息
cat /proc/meminfo                         # 内核内存统计
smem -r                                   # PSS(比例集大小,更准确的内存占用)

# 进程内存
pmap PID                                  # 进程内存映射
pmap -x PID                               # 扩展格式(含 RSS/Dirty)

# OOM 排查
dmesg | grep -i "out of memory"           # 查看 OOM 记录
cat /var/log/messages | grep "Out of memory"
journalctl -k | grep "Out of memory"      # systemd 系统

9.4 综合监控工具

bash 复制代码
# glances(推荐)
glances                                   # 全能系统监控(CPU/内存/磁盘/网络/进程)
glances --export csv                      # 导出为 CSV

# nmon
nmon                                      # IBM 出品,按键切换视图

# atop
sudo atop                                 # 记录历史性能数据,事后分析
atop -r /var/log/atop/atop_20240115      # 读取历史文件

# bcc/BPF(高级,内核级追踪)
sudo biolatency                           # 块 I/O 延迟分布
sudo execsnoop                            # 追踪新进程创建
sudo opensnoop                            # 追踪文件打开
sudo tcplife                              # 追踪 TCP 连接生命周期

第十章:定时任务(crontab)

10.1 crontab 语法

复制代码
# 格式: 分 时 日 月 周 命令
# 范围: 0-59 0-23 1-31 1-12 0-7(0和7都是周日)

* * * * * command           # 每分钟执行
*/5 * * * * command         # 每5分钟执行
0 * * * * command           # 每小时执行
0 0 * * * command           # 每天0点执行
0 2 * * * command           # 每天2点执行
0 0 * * 0 command           # 每周日执行
0 0 1 * * command           # 每月1日执行
0 0 1 1 * command           # 每年1月1日执行
0 9-18 * * 1-5 command      # 工作日 9-18 点每小时执行
0,30 * * * * command        # 每小时的 0 分和 30 分执行

# 特殊字符串
@reboot command             # 系统启动时执行
@yearly  command            # 每年1月1日 0:00(同 0 0 1 1 *)
@monthly command            # 每月1日 0:00
@weekly  command            # 每周日 0:00
@daily   command            # 每天 0:00
@hourly  command            # 每小时 0 分

10.2 crontab 管理

bash 复制代码
crontab -l                                # 列出当前用户的定时任务
crontab -e                                # 编辑定时任务
crontab -r                                # 删除所有定时任务(慎用)
crontab file.txt                          # 从文件导入定时任务
sudo crontab -u www-data -l               # 查看其他用户的定时任务

# 系统级定时任务(/etc/crontab)
cat /etc/crontab

# 预定义目录(放入脚本即可,无需编辑 crontab)
/etc/cron.hourly/                         # 每小时执行
/etc/cron.daily/                          # 每天执行
/etc/cron.weekly/                         # 每周执行
/etc/cron.monthly/                        # 每月执行

# 日志
grep CRON /var/log/syslog                 # Debian/Ubuntu
grep CRON /var/log/cron                   # CentOS/RHEL

# 环境变量(crontab 中的 PATH 通常很精简,建议显式设置)
# 在 crontab 文件顶部添加:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO="admin@example.com"

第十一章:SSH 远程管理

11.1 SSH 基础

bash 复制代码
# 连接远程主机
ssh user@192.168.1.10
ssh -p 2222 user@192.168.1.10             # 指定端口
ssh -i ~/.ssh/id_rsa user@host            # 指定私钥
ssh -v user@host                          # 调试模式(排查连接问题)
ssh -vvv user@host                        # 更详细的调试

# 执行远程命令(不登录)
ssh user@host "ls -la /var/log"
ssh user@host "sudo systemctl restart nginx"

# 复制文件(scp)
scp file.txt user@host:/remote/path/                     # 本地 → 远程
scp user@host:/remote/file.txt ./local/                  # 远程 → 本地
scp -r /local/dir user@host:/remote/path/                # 递归目录
scp -P 2222 file.txt user@host:/path/                    # 指定端口
scp -i ~/.ssh/key file.txt user@host:/path/              # 指定密钥

# rsync(增量同步,更高效)
rsync -avz /local/data/ user@host:/remote/data/          # 同步目录
rsync -avz --delete /local/data/ user@host:/remote/data/ # 删除远程多余文件
rsync -avz --exclude='*.log' /data/ user@host:/backup/   # 排除文件
rsync -avz --progress /bigfile.iso user@host:/data/      # 显示进度
rsync -avz -e "ssh -p 2222" /data/ user@host:/backup/   # 指定 SSH 端口

11.2 SSH 密钥管理

bash 复制代码
# 生成密钥对
ssh-keygen -t ed25519 -C "comment"        # 推荐算法(ed25519)
ssh-keygen -t rsa -b 4096 -C "comment"    # RSA 4096
ssh-keygen -f ~/.ssh/my_key               # 指定文件名
ssh-keygen -p -f ~/.ssh/id_rsa            # 修改私钥密码

# 复制公钥到远程主机(免密登录)
ssh-copy-id user@host
ssh-copy-id -i ~/.ssh/my_key.pub user@host

# 手动添加公钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# SSH Agent(管理多个密钥)
eval $(ssh-agent -s)                      # 启动 agent
ssh-add ~/.ssh/id_rsa                     # 添加密钥
ssh-add -l                                # 列出已添加的密钥
ssh-add -D                                # 清除所有密钥

# SSH 配置(~/.ssh/config)
Host myserver
    HostName 192.168.1.10
    User admin
    Port 2222
    IdentityFile ~/.ssh/my_key
    ServerAliveInterval 60

# 使用配置连接
ssh myserver                              # 等价于 ssh -p 2222 -i ~/.ssh/my_key admin@192.168.1.10

11.3 SSH 隧道

bash 复制代码
# 本地端口转发:将本地端口映射到远程主机的端口
# 访问 localhost:8080 → 相当于访问 remote-server:80
ssh -L 8080:remote-server:80 user@jump-host

# 远程端口转发:将远程主机的端口映射到本地
# 在 remote-server 上访问 remote-server:9090 → 相当于访问 localhost:3000
ssh -R 9090:localhost:3000 user@remote-server

# 动态 SOCKS 代理
ssh -D 1080 user@vps-server               # 本地 1080 端口成为 SOCKS5 代理

# 后台保持隧道
ssh -fN -L 8080:remote:80 user@jump-host  # -f 后台运行  -N 不执行远程命令

第十二章:实用技巧与快捷键

12.1 Bash 快捷键

快捷键 功能
Ctrl + A 光标移到行首
Ctrl + E 光标移到行尾
Ctrl + U 删除光标前所有字符
Ctrl + K 删除光标后所有字符
Ctrl + W 删除光标前一个单词
Ctrl + Y 粘贴刚才删除的内容
Ctrl + R 反向搜索历史命令
Ctrl + G 取消搜索
Ctrl + L 清屏(同 clear
Ctrl + C 终止当前进程
Ctrl + D 退出/发送 EOF
Ctrl + Z 暂停前台进程
Ctrl + T 交换光标前两个字符
Alt + B 光标前移一个单词
Alt + F 光标后移一个单词
Alt + D 删除光标后一个单词
!! 执行上一条命令
!n 执行历史第 n 条命令
!$ 上条命令的最后一个参数
!* 上条命令的所有参数
sudo !! 用 sudo 执行上条命令

12.2 重定向与管道

bash 复制代码
command > file.txt            # 标准输出重定向到文件(覆盖)
command >> file.txt           # 标准输出追加到文件
command 2> error.log          # 标准错误重定向
c ommand &> all.log           # 标准输出和错误都重定向
c ommand > out.log 2>&1       # 同上(传统写法)
command > /dev/null 2>&1      # 丢弃所有输出
command < input.txt           # 从文件读取输入
command << EOF                # Here Document(多行输入)
command <<< "string"          # Here String

command1 | command2           # 管道:command1 的输出作为 command2 的输入
command1 |& command2          # 管道同时传递 stdout 和 stderr

# 进程替换(将命令输出作为文件参数)
diff <(sort file1) <(sort file2)

12.3 环境变量

bash 复制代码
# 查看
env                                         # 显示所有环境变量
printenv PATH                               # 显示指定变量
echo $HOME                                  # 显示家目录
echo $PATH                                  # 显示命令搜索路径
echo $?                                     # 上条命令的退出码(0=成功)

# 设置
export MY_VAR="value"                       # 当前会话有效
export PATH="$PATH:/usr/local/bin"          # 追加到 PATH
export PATH="/usr/local/bin:$PATH"          # 加到 PATH 前面

# 永久设置(写入配置文件)
echo 'export PATH="$PATH:/usr/local/go/bin"' >> ~/.bashrc
source ~/.bashrc                            # 重新加载配置

# 删除
unset MY_VAR

12.4 实用别名(推荐加入 ~/.bashrc

bash 复制代码
# 安全别名
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# 便捷别名
alias ll='ls -alFh'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias diff='diff --color=auto'
alias mkdirp='mkdir -p'

# 工具别名
alias tf='tail -f'
alias ports='ss -tlnp'
alias meminfo='free -h'
alias cpuinfo='lscpu'
alias du1='du -h --max-depth=1'
alias du1s='du -h --max-depth=1 | sort -rh'
alias myip='curl -s https://ipinfo.io/ip'

# Git 别名(如果常用)
alias gs='git status'
alias gp='git pull'
alias gl='git log --oneline -10'

12.5 一键实用命令

bash 复制代码
# 查找并杀死占用端口的进程
kill -9 $(ss -tlnp | grep ':8080' | awk '{print $7}' | cut -d',' -f2 | cut -d'=' -f2)

# 批量重命名(去除文件名中的空格)
for f in *\ *; do mv "$f" "${f// /_}"; done

# 生成随机密码
openssl rand -base64 32
< /dev/urandom tr -dc 'A-Za-z0-9' | head -c 32; echo

# 查看命令执行时间
time command

# 限制进程资源使用
timeout 60s ./long-running-script.sh      # 60秒后终止
ulimit -v 1048576                         # 限制虚拟内存 1GB
nice -n 10 command                        # 低优先级运行

# 批量修改文件编码
find . -name "*.java" -exec iconv -f GBK -t UTF-8 {} -o {} \;

# 查看目录下文件数量
find . -type f | wc -l
ls -lR | grep "^-" | wc -l

# 查看当前目录大小排序
du -h --max-depth=1 2>/dev/null | sort -rh | head -20

# 快速 HTTP 静态文件服务器
python3 -m http.server 8000               # Python
npx serve -l 8000                          # Node.js
php -S 0.0.0.0:8000                       # PHP

附录:vi/vim 常用命令

模式切换

命令 说明
Esc 回到普通模式
i 在光标前插入
a 在光标后插入
o 在当前行下方新建行插入
I 在行首插入
A 在行尾插入
O 在当前行上方新建行插入
v 进入可视模式(字符选择)
V 进入可视模式(行选择)
: 进入命令模式

移动光标

命令 说明
h/j/k/l 左/下/上/右
w/b 下一个/上一个单词开头
0/$ 行首/行尾
gg/G 文件开头/文件末尾
Ctrl+f/b 下/上翻一页
:n 跳到第 n 行

编辑操作

命令 说明
x 删除光标处字符
dd 删除当前行
yy 复制当前行
p 粘贴
u 撤销
Ctrl+r 重做
r 替换单个字符

保存退出

命令 说明
:w 保存
:q 退出
:wqZZ 保存并退出
:q! 不保存强制退出
:w !sudo tee % 强制保存只读文件(需要 sudo)

搜索替换

命令 说明
/pattern 向下搜索
?pattern 向上搜索
n/N 下一个/上一个匹配
:%s/old/new/g 全文替换
:%s/old/new/gc 全文替换(每次确认)

说明 :本手册中的命令已在 CentOS 7/8、Ubuntu 20.04/22.04、Debian 11/12 上验证。部分工具(如 htopglancestreencdu)可能需要通过包管理器额外安装。

相关推荐
武子康1 小时前
调查研究-153 Cloudflare 能部署网站吗?2026 年完整对比 Vercel / Netlify / 自建服务器
大数据·运维·服务器·人工智能·部署·devops·opc
夜月yeyue1 小时前
KCP 与 UDP 可靠传输
linux·网络·单片机·网络协议·udp·php
utf8mb4安全女神2 小时前
子网划分【概念+实操+理解】
运维·服务器·网络
xcLeigh2 小时前
KES数据库运维监控与故障排查实战
运维·数据库·sql·故障排查·运维监控·kes
比昨天多敲两行2 小时前
Linux信号
linux·运维·服务器
sulikey2 小时前
ELF文件中的“节“与“段“,如何与虚拟地址空间中的“分页“和“分段“产生联系?
linux·服务器·elf·虚拟地址空间·分页·分段·elf文件
志栋智能2 小时前
超自动化安全:构建智能安全运营的神经系统
大数据·运维·网络·人工智能·安全·自动化
着迷不白2 小时前
四、Linux 文件权限+sudo权限委派+IO重定向+vim高级
linux·运维·服务器