Linux进阶命令详细用法大全

Linux 进阶命令详细用法大全


一、进程控制与任务调度


1. pstree — 树形显示进程关系

基础语法

pstree [选项]

实例

# 显示所有进程树
pstree

# 显示进程树并附带PID
pstree -p

# 显示指定用户的进程树
pstree -u root

# 显示指定PID的进程树(只显示该进程及其子进程)
pstree -p 1234

# 紧凑显示(合并相同子进程)
pstree -c

常用参数

参数 说明
-p 显示进程ID
-u 显示进程所属用户
-a 显示完整命令行参数
-h 高亮显示当前进程及其祖先
-n 按PID排序输出

2. pgrep — 按名称查找进程PID

基础语法

pgrep [选项] 进程名

实例

# 查找nginx进程的PID
pgrep nginx

# 查找完整命令行匹配"python server.py"的进程
pgrep -f "python.*server"

# 查找属于用户root的bash进程
pgrep -u root bash

# 查找PID范围在1000-2000内的进程
pgrep -g 1000-2000

# 显示进程名和PID
pgrep -l nginx

# 查找并统计匹配进程数量
pgrep -c nginx

常用参数

参数 说明
-f 匹配完整命令行(而非仅进程名)
-u 指定用户名或UID
-l 显示进程名和PID
-c 只显示匹配数量
-n 只显示最新(最近启动)的进程
-o 只显示最旧(最早启动)的进程

3. pkill — 按名称终止进程

基础语法

pkill [选项] 进程名

实例

# 终止所有nginx进程
pkill nginx

# 终止匹配完整命令行的进程(如所有Python脚本)
pkill -f "python.*server"

# 强制终止(发送SIGKILL信号)
pkill -9 nginx

# 终止属于指定用户的进程
pkill -u tomcat java

# 终止在指定终端运行的进程
pkill -t pts/0 bash

# 终止前先打印匹配的进程(安全预览)
pkill -l -f "test.sh"

常用参数

参数 说明
-f 匹配完整命令行
-u 指定用户名
-t 指定终端
-l 打印匹配的进程名
-9 强制终止(SIGKILL)
-15 正常终止(SIGTERM,默认)

避坑指南

  • pkill会匹配所有包含关键字的进程,建议先用pgrep -l预览再杀
  • 生产环境慎用pkill -f,可能误杀同名脚本

4. nohup — 忽略挂断信号运行

基础语法

nohup 命令 [参数] &

实例

# 后台运行脚本,退出终端后继续执行
nohup ./long_task.sh &

# 指定输出文件
nohup ./backup.sh > backup.log 2>&1 &

# 运行Python服务
nohup python3 app.py > app.log 2>&1 &

# 运行java程序
nohup java -jar myapp.jar > /dev/null 2>&1 &

常用参数

  • nohup本身无参数,输出默认追加到nohup.out
  • &:放到后台执行
  • 2>&1:将错误输出重定向到标准输出
  • >/dev/null:丢弃输出

避坑指南

  • 即使使用nohup,脚本中的子进程仍可能因终端关闭而退出
  • 配合disown可彻底脱离shell控制

5. disown — 从shell作业表中移除

基础语法

disown [选项] [任务号]

实例

# 将后台任务从作业表中移除
./long_task.sh &
disown

# 移除指定的作业
./task1.sh &
./task2.sh &
disown %1  # 移除任务1

# 移除所有后台任务
disown -a

# 移除正在运行的任务(默认只能移除已完成的任务)
disown -r

常用参数

参数 说明
%n 指定任务号(jobs命令查看)
-a 移除所有任务
-r 移除正在运行的任务

典型用法

# 完整流程:启动→挂起→脱离shell
nohup ./task.sh > task.log 2>&1 &
disown %1
# 现在可以安全退出终端

6. screen — 终端多路复用器

基础语法

screen [选项] [命令]

实例

# 创建新会话
screen -S mysession

# 列出所有会话
screen -ls

# 恢复会话
screen -r mysession
screen -r 12345  # 使用PID恢复

# 强制恢复(用于连接断开的会话)
screen -d -r mysession

# 在会话中执行命令后退出
screen -dmS mysession ./script.sh

# 退出会话(在screen内)
Ctrl + A, 然后按 D  # 分离(detach)
exit                  # 终止当前窗口

常用快捷键(在screen内)

快捷键 说明
Ctrl+A D 分离会话(detach)
Ctrl+A C 创建新窗口
Ctrl+A N 切换到下一个窗口
Ctrl+A P 切换到上一个窗口
Ctrl+A " 列出所有窗口
Ctrl+A K 关闭当前窗口
Ctrl+A ? 显示帮助

7. tmux — 更强大的终端复用器

基础语法

tmux [命令] [选项]

实例

# 创建新会话
tmux new -s mysession

# 列出会话
tmux ls

# 恢复会话
tmux attach -t mysession

# 创建会话并执行命令
tmux new -s mysession -d "python app.py"

# 分割窗格(水平/垂直)
tmux split-window -h  # 垂直分割
tmux split-window -v  # 水平分割

# 杀死会话
tmux kill-session -t mysession

常用快捷键(在tmux内,前缀键Ctrl+B)

快捷键 说明
Ctrl+B D 分离会话
Ctrl+B C 创建新窗口
Ctrl+B N 下一个窗口
Ctrl+B P 上一个窗口
Ctrl+B " 水平分割窗格
Ctrl+B % 垂直分割窗格
Ctrl+B 方向键 切换窗格
Ctrl+B Z 当前窗格全屏/恢复

8. timeout — 限制命令运行时长

基础语法

timeout [选项] 时长 命令 [参数]

实例

# 运行5秒后终止
timeout 5s ping google.com

# 运行10分钟后终止
timeout 10m ./long_task.sh

# 运行1小时后终止
timeout 1h ./backup.sh

# 超时时发送指定信号(默认SIGTERM)
timeout -s SIGKILL 10s ./stuck.sh

# 超时后保存退出状态(124=超时,0=正常完成)
timeout --preserve-status 10s ./task.sh
echo "退出码: $?"

常用参数

参数 说明
-s 指定超时发送的信号
-k 超时后先发SIGTERM,等待N秒后再强制杀
--preserve-status 返回命令的实际退出码(而非124)

时长格式

  • 5s:秒
  • 1m:分钟
  • 1h:小时
  • 1d:天

9. nice / renice — 调整进程优先级

nice — 启动时设置优先级

# 以低优先级启动(值越大优先级越低,范围-20到19)
nice -n 10 ./large_task.sh

# 以高优先级启动(需要root)
nice -n -10 ./important_task.sh

renice — 修改运行中进程的优先级

# 调整指定PID的优先级
renice -n 5 -p 1234

# 调整所有属于某用户的进程
renice -n 10 -u tomcat

# 调整某进程组的所有进程
renice -n 5 -g 1000

优先级说明

  • 范围:-20(最高)到19(最低)
  • 普通用户只能调高(增大)nice值
  • root用户可以调低(减小)nice值

10. taskset — 绑定进程到CPU核心

基础语法

taskset [选项] 掩码/CPU列表 命令

实例

# 查看进程当前绑定的CPU
taskset -p 1234

# 将进程绑定到CPU 0和1(掩码0x3表示bit0和bit1)
taskset -cp 0,1 1234

# 绑定到CPU 0-3
taskset -cp 0-3 1234

# 启动时绑定到CPU 2
taskset -c 2 ./heavy_task.sh

# 启动时绑定到多个CPU
taskset -c 1,3,5 ./app

常用参数

参数 说明
-c 使用CPU列表(如0,2,4-7)
-p 操作已有进程(后跟PID)
-a 影响进程及其所有子线程

掩码计算

# CPU 0: 0x1 (二进制 0001)
# CPU 1: 0x2 (0010)
# CPU 2: 0x4 (0100)
# CPU 0和2: 0x5 (0101)
taskset -p 0x5 1234

11. crontab — 周期性定时任务

基础语法

crontab [选项] [文件]

实例

# 编辑当前用户的crontab
crontab -e

# 查看当前用户的定时任务
crontab -l

# 删除所有定时任务
crontab -r

# 从文件导入任务
crontab my_cron.txt

# 以指定用户身份操作(需root)
crontab -u username -e

crontab时间格式

* * * * * 命令
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 星期几 (0-7, 0和7都表示周日)
│ │ │ └─── 月份 (1-12)
│ │ └───── 日 (1-31)
│ └─────── 小时 (0-23)
└───────── 分钟 (0-59)

常用示例

# 每天凌晨2点备份
0 2 * * * /usr/local/bin/backup.sh

# 每周一早上6点清理
0 6 * * 1 /usr/local/bin/cleanup.sh

# 每5分钟检查服务
*/5 * * * * /usr/local/bin/health_check.sh

# 每月1号凌晨3点生成报表
0 3 1 * * /usr/local/bin/gen_report.sh

# 工作日每小时执行
0 * * * 1-5 /usr/local/bin/hourly_task.sh

# 每30分钟执行
*/30 * * * * /usr/local/bin/half_hour_task.sh

避坑指南

  • crontab环境变量极少,脚本中必须使用绝对路径
  • 可在crontab顶部设置PATH=/usr/local/bin:/usr/bin:/bin
  • 输出重定向到日志:0 2 * * * /script.sh >> /var/log/cron.log 2>&1

12. at — 一次性定时任务

基础语法

at [选项] 时间

实例

# 2小时后执行
at now + 2 hours
at> /usr/local/bin/backup.sh
at> <Ctrl+D>  # 按Ctrl+D保存退出

# 明天下午3点执行
at 3pm tomorrow
at> echo "任务执行" | mail -s "通知" [email protected]
at> <Ctrl+D>

# 从文件读取任务
echo "/usr/bin/cleanup.sh" | at now + 1 day

# 查看待执行任务
atq

# 删除指定任务
atrm 5  # 删除任务编号5

# 指定用户(需root)
at -u username 10:00

常用参数

参数 说明
-l 列出待执行任务(同atq)
-r 删除任务(同atrm)
-f 从文件读取命令
-q 指定队列(a/b/c…)
-m 任务完成后发送邮件

二、网络诊断与通信


13. ss — 套接字统计(替代netstat)

基础语法

ss [选项] [过滤]

实例

# 查看所有TCP连接
ss -t

# 查看所有UDP连接
ss -u

# 查看所有监听端口
ss -l

# 显示进程信息(需要root)
ss -p

# 查看所有TCP监听端口及进程
ss -tlnp

# 查看所有已建立的连接
ss -t state established

# 查看端口8080的连接
ss -tuln sport = :8080  # 源端口
ss -tuln dport = :443   # 目标端口

# 查看IPv4所有连接
ss -4

# 查看IPv6所有连接
ss -6

# 显示统计摘要
ss -s

常用参数

参数 说明
-t TCP套接字
-u UDP套接字
-l 监听状态的套接字
-n 不解析服务名(显示数字端口)
-p 显示进程PID和名称
-a 显示所有套接字(含监听和非监听)
-s 统计摘要
-4/-6 IPv4/IPv6

14. traceroute — 路由追踪

基础语法

traceroute [选项] 目标地址

实例

# 追踪到百度的路由
traceroute baidu.com

# 跳过DNS解析(加快速度)
traceroute -n baidu.com

# 设置最大跳数(默认30)
traceroute -m 10 baidu.com

# 使用ICMP包(而非UDP)
traceroute -I baidu.com

# 指定端口
traceroute -p 80 baidu.com

# IPv6追踪
traceroute -6 2001:4860:4860::8888

常用参数

参数 说明
-n 不解析IP为域名
-m 最大跳数(TTL)
-p 指定起始端口
-I 使用ICMP Echo
-T 使用TCP SYN
-w 等待响应时间(秒)

15. mtr — 动态路由追踪(ping+路由)

基础语法

mtr [选项] 目标地址

实例

# 追踪到谷歌
mtr google.com

# 只显示前10跳
mtr -m 10 google.com

# 报告模式(发送10个包后生成报告)
mtr -r -c 10 google.com

# 报告模式输出到文件
mtr -r -c 100 google.com > report.txt

# 使用TCP(需要端口)
mtr -T -P 443 google.com

# 禁用DNS解析
mtr -n google.com

# 间隔0.5秒发送(默认1秒)
mtr -i 0.5 google.com

输出字段说明

字段 说明
Loss% 丢包率
Snt 已发送包数
Last 最近一次延迟
Avg 平均延迟
Best 最低延迟
Wrst 最高延迟
StDev 延迟标准差

16. tcpdump — 命令行抓包

基础语法

tcpdump [选项] [过滤表达式]

实例

# 抓取所有包
tcpdump -i eth0

# 抓取指定端口的包
tcpdump -i any port 80

# 抓取HTTP流量并保存
tcpdump -i eth0 port 80 -w http.pcap

# 读取保存的包文件
tcpdump -r http.pcap

# 只抓取10个包
tcpdump -c 10 -i eth0

# 显示IP地址而非主机名
tcpdump -n -i eth0

# 显示更详细信息(协议头)
tcpdump -v -i eth0

# 抓取SYN包(TCP三次握手)
tcpdump -i any 'tcp[13] & 2 != 0'

# 抓取源IP或目标IP
tcpdump -i eth0 host 192.168.1.1

# 抓取源IP为10.0.0.1的包
tcpdump -i eth0 src 10.0.0.1

# 抓取目标端口为443的包
tcpdump -i eth0 dst port 443

# 抓取ICMP包(ping)
tcpdump -i eth0 icmp

常用参数

参数 说明
-i 指定网卡(any表示所有)
-w 写入文件(pcap格式)
-r 读取pcap文件
-c 抓取N个包后停止
-n 不解析域名和端口
-v/-vv 详细输出
-A 以ASCII显示包内容

过滤表达式

# 组合过滤(and/or)
tcpdump -i eth0 'port 80 and host 192.168.1.1'

# 排除某IP
tcpdump -i eth0 'not host 192.168.1.1'

# 抓取大于1000字节的包
tcpdump -i eth0 'greater 1000'

17. nmap — 网络扫描

基础语法

nmap [扫描类型] [选项] 目标

实例

# 扫描指定IP的开放端口(默认1-1000)
nmap 192.168.1.1

# 扫描1-10000端口
nmap -p 1-10000 192.168.1.1

# 扫描常见端口
nmap -p 22,80,443,3306 192.168.1.1

# TCP SYN扫描(半开扫描,需root)
nmap -sS 192.168.1.1

# TCP连接扫描
nmap -sT 192.168.1.1

# UDP扫描
nmap -sU 192.168.1.1

# 操作系统检测
nmap -O 192.168.1.1

# 服务版本检测
nmap -sV 192.168.1.1

# 快速扫描(只扫常用端口)
nmap -F 192.168.1.1

# 扫描整个子网
nmap 192.168.1.0/24

# 从文件读取目标
nmap -iL targets.txt

常用参数

参数 说明
-p 指定端口范围
-sS SYN扫描(半开)
-sT TCP连接扫描
-sU UDP扫描
-O 操作系统检测
-sV 服务版本检测
-F 快速扫描(100个端口)
-A 全面扫描(OS+版本+脚本)
-T0~5 扫描速度(0最慢5最快)

18. nc — 网络瑞士军刀

基础语法

nc [选项] [主机] [端口]

实例

# 端口扫描
nc -zv 192.168.1.1 22
nc -zv 192.168.1.1 1-1000

# 监听端口(服务端)
nc -l 9999

# 连接远程端口(客户端)
nc 192.168.1.100 9999

# 传输文件(服务端接收)
nc -l 9999 > received.txt

# 传输文件(客户端发送)
nc 192.168.1.100 9999 < file.txt

# 传输目录(压缩后发送)
tar -czf - /data | nc -l 9999
nc 192.168.1.100 9999 | tar -xzf -

# 聊天(一行行发送)
nc -l 9999
# 另一边:nc 192.168.1.100 9999

# 反向Shell(客户端获得服务端Shell)
# 服务端(目标机器)
nc -l 9999 -e /bin/bash
# 客户端
nc 192.168.1.100 9999

# 超时设置
nc -w 2 192.168.1.1 22

常用参数

参数 说明
-l 监听模式(服务端)
-p 指定本地端口
-v 详细输出
-z 零I/O模式(仅扫描)
-n 不解析域名
-w 超时时间(秒)
-e 执行程序(危险,需谨慎)
-u UDP模式

19. dig — DNS查询工具

基础语法

dig [选项] 域名 [记录类型] [@DNS服务器]

实例

# 查询A记录(默认)
dig baidu.com

# 查询指定DNS服务器
dig @8.8.8.8 baidu.com

# 只返回IP地址(精简输出)
dig baidu.com +short

# 查询MX记录(邮件交换)
dig baidu.com MX

# 查询NS记录(域名服务器)
dig baidu.com NS

# 查询TXT记录
dig baidu.com TXT

# 查询CNAME记录
dig www.baidu.com CNAME

# 查询所有记录
dig baidu.com ANY

# 反向查询(IP到域名)
dig -x 8.8.8.8

# 追踪DNS解析路径
dig baidu.com +trace

# 使用TCP方式查询
dig baidu.com +tcp

记录类型

类型 说明
A IPv4地址
AAAA IPv6地址
MX 邮件交换服务器
NS 域名服务器
CNAME 别名记录
TXT 文本记录
SOA 授权记录
PTR 反向解析

20. ip — 网络配置(替代ifconfig)

基础语法

ip [选项] 对象 命令

查看网络信息

# 查看所有网络接口
ip addr
ip a  # 简写

# 查看指定接口
ip addr show eth0

# 查看路由表
ip route
ip r  # 简写

# 查看ARP表
ip neigh
ip n  # 简写

# 查看链路状态
ip link show

# 查看统计信息
ip -s link show eth0

配置网络

# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down

# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0

# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0

# 添加默认网关
ip route add default via 192.168.1.1

# 添加静态路由
ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0

# 删除路由
ip route del 10.0.0.0/8

# 清空ARP表
ip neigh flush all

21. ethtool — 网卡参数查看

基础语法

ethtool [选项] 接口名

实例

# 查看网卡基本信息
ethtool eth0

# 查看网卡驱动信息
ethtool -i eth0

# 查看网卡统计
ethtool -S eth0

# 设置网卡速率和双工模式
ethtool -s eth0 speed 1000 duplex full

# 查看光模块信息(SFP)
ethtool -m eth0

# 查看网卡支持的功能
ethtool -k eth0

# 开启/关闭硬件校验和
ethtool -K eth0 rx on tx on

# 查看网卡缓冲区
ethtool -g eth0

# 设置环缓冲区大小
ethtool -G eth0 rx 4096 tx 4096

22. iperf3 — 网络带宽测试

基础语法

iperf3 [选项]

服务端

# 启动服务端(默认端口5201)
iperf3 -s

# 指定端口
iperf3 -s -p 5202

# 后台运行
iperf3 -s -D

# 记录日志
iperf3 -s -J > result.json

客户端

# 测试上行带宽(默认)
iperf3 -c 192.168.1.1

# 测试下行带宽
iperf3 -c 192.168.1.1 -R

# 指定测试时长(秒)
iperf3 -c 192.168.1.1 -t 30

# 测试UDP带宽
iperf3 -c 192.168.1.1 -u -b 100M

# 指定端口
iperf3 -c 192.168.1.1 -p 5202

# 并行流(增加吞吐)
iperf3 -c 192.168.1.1 -P 4

# 反向传输
iperf3 -c 192.168.1.1 -R

23. iftop — 实时流量监控

基础语法

iftop [选项]

实例

# 监控默认网卡
iftop

# 监控指定网卡
iftop -i eth0

# 不解析主机名(加快速度)
iftop -n

# 显示端口信息
iftop -P

# 过滤指定IP
iftop -f "host 192.168.1.1"

# 以MB为单位显示
iftop -B

# 设置刷新间隔
iftop -t 2  # 每2秒刷新

交互快捷键(运行中)

按键 说明
h 显示帮助
n 切换DNS解析
s 切换源IP显示
d 切换目标IP显示
p 显示端口号
q 退出

24. nethogs — 按进程显示流量

基础语法

nethogs [选项] [网卡]

实例

# 监控所有网卡
nethogs

# 监控指定网卡
nethogs eth0

# 每秒刷新
nethogs -d 2

# 只监控eth0,5秒刷新
nethogs eth0 -d 5

# 查看进程流量排序
nethogs -c 10  # 只显示前10

三、磁盘与存储管理


25. df — 磁盘空间查看

基础语法

df [选项] [挂载点]

实例

# 查看所有挂载点
df

# 人类可读格式
df -h

# 以MB显示
df -m

# 显示文件系统类型
df -T

# 查看inode使用情况
df -i

# 只查看特定挂载点
df -h /

# 排除伪文件系统
df -h -x tmpfs -x devtmpfs

# 显示总计
df -h --total

26. du — 目录大小统计

基础语法

du [选项] [路径]

实例

# 当前目录大小
du

# 人类可读
du -h

# 只显示总计
du -sh /var

# 显示各子目录大小
du -h --max-depth=1 /var

# 排序找出最大目录
du -sh * | sort -rh

# 排除特定目录
du -h --exclude=cache /var

# 显示文件和目录大小
du -ah /var/log

# 统计总大小
du -sh /home/user

27. fdisk — 磁盘分区

基础语法

fdisk [选项] 磁盘设备

实例

# 查看所有磁盘分区
fdisk -l

# 查看指定磁盘
fdisk -l /dev/sda

# 进入交互式分区界面
fdisk /dev/sdb

# 显示分区类型
fdisk -l -t dos /dev/sda

交互命令(fdisk /dev/sdb 内)

命令 说明
m 显示帮助
p 显示分区表
n 创建新分区
d 删除分区
t 修改分区类型
w 写入并退出
q 不保存退出

28. parted — GPT分区工具

基础语法

parted [选项] [设备] [命令]

实例

# 查看所有分区
parted -l

# 交互模式
parted /dev/sdb

# 创建GPT分区表
parted /dev/sdb mklabel gpt

# 创建分区(起始0%,结束100%)
parted /dev/sdb mkpart primary 0% 100%

# 创建分区(指定大小)
parted /dev/sdb mkpart primary ext4 1MiB 10GiB

# 删除分区
parted /dev/sdb rm 1

# 调整分区大小
parted /dev/sdb resizepart 1 20GiB

# 非交互模式
parted -s /dev/sdb mkpart primary ext4 0% 100%

29. mkfs — 格式化文件系统

基础语法

mkfs.[文件系统类型] [选项] 设备

实例

# 格式化为ext4
mkfs.ext4 /dev/sdb1

# 格式化为xfs
mkfs.xfs /dev/sdb1

# 格式化为ext3
mkfs.ext3 /dev/sdb1

# 格式化为FAT32
mkfs.vfat /dev/sdb1

# 格式化为NTFS(需ntfs-3g)
mkfs.ntfs /dev/sdb1

# 格式化时指定卷标
mkfs.ext4 -L data_disk /dev/sdb1

# 快速格式化(不检查坏块)
mkfs.ext4 -F /dev/sdb1

30. mount/umount — 挂载/卸载

基础语法

mount [选项] 设备 挂载点
umount [选项] 挂载点|设备

实例

# 挂载设备
mount /dev/sdb1 /mnt/data

# 只读挂载
mount -o ro /dev/sdb1 /mnt/data

# 挂载ISO文件
mount -o loop /path/to/image.iso /mnt/iso

# 挂载NFS
mount -t nfs 192.168.1.100:/export /mnt/nfs

# 挂载并指定文件系统类型
mount -t ext4 /dev/sdb1 /mnt/data

# 重新挂载(从只读改为读写)
mount -o remount,rw /mnt/data

# 显示所有已挂载系统
mount

# 卸载
umount /mnt/data
umount /dev/sdb1

# 强制卸载(当设备忙)
umount -f /mnt/data

# 懒惰卸载(等设备空闲后自动卸载)
umount -l /mnt/data

31. blkid — 查看块设备UUID

基础语法

blkid [选项] [设备]

实例

# 查看所有块设备
blkid

# 查看指定设备
blkid /dev/sda1

# 只显示UUID
blkid -s UUID /dev/sda1

# 只显示文件系统类型
blkid -s TYPE /dev/sda1

# 只显示LABEL
blkid -s LABEL /dev/sda1

# 输出键值对
blkid -o export /dev/sda1

32. lsblk — 树形显示块设备

基础语法

lsblk [选项]

实例

# 显示所有块设备树
lsblk

# 显示文件系统信息
lsblk -f

# 显示UUID和挂载点
lsblk -o NAME,UUID,MOUNTPOINT

# 显示磁盘大小
lsblk -b  # 字节
lsblk -m  # 人类可读

# 显示拓扑信息
lsblk -t

# 只显示磁盘(不显示分区)
lsblk -d

# JSON格式输出
lsblk -J

33. fsck — 文件系统检查修复

基础语法

fsck [选项] 设备

实例

# 检查文件系统(必须先卸载)
umount /dev/sdb1
fsck /dev/sdb1

# 自动修复
fsck -a /dev/sdb1
fsck -y /dev/sdb1  # 所有问题回答yes

# 强制检查(即使文件系统看起来干净)
fsck -f /dev/sdb1

# 只检查不修复
fsck -n /dev/sdb1

# 检查ext4文件系统
fsck.ext4 /dev/sdb1

# 检查xfs文件系统
xfs_repair /dev/sdb1

避坑指南

  • 检查的设备必须处于未挂载状态
  • 根分区检查需进入救援模式

34. dd — 低级数据复制

基础语法

dd if=输入文件 of=输出文件 [选项]

实例

# 创建1G空文件
dd if=/dev/zero of=test.img bs=1M count=1024

# 备份硬盘到镜像
dd if=/dev/sda of=/backup/sda.img bs=4M

# 从镜像恢复
dd if=/backup/sda.img of=/dev/sda bs=4M

# 克隆分区
dd if=/dev/sda1 of=/dev/sdb1 bs=4M

# 创建启动盘
dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress

# 生成随机数据文件
dd if=/dev/urandom of=random.dat bs=1M count=100

# 测磁盘写入速度
dd if=/dev/zero of=test bs=1M count=1024 conv=fdatasync

# 销毁磁盘数据
dd if=/dev/urandom of=/dev/sdb bs=4M

常用参数

参数 说明
bs= 块大小
count= 块数量
seek= 输出跳过块数
skip= 输入跳过块数
conv=fdatasync 确保数据写入物理磁盘
status=progress 显示进度(新版dd)

35. fallocate — 快速创建文件

基础语法

fallocate [选项] 文件名

实例

# 创建10G文件(瞬间完成)
fallocate -l 10G largefile.bin

# 创建文件并填充指定字符
fallocate -l 1G -z test.bin

# 压缩文件(释放空洞)
fallocate -d file.bin

# 预分配空间(保留不写入)
fallocate -l 5G -n sparse_file.bin

# 扩展文件长度
fallocate -l +100M logfile.log

与dd对比

# dd方式(慢)
dd if=/dev/zero of=test.img bs=1M count=1024

# fallocate方式(快100倍以上)
fallocate -l 1G test.img

36. rsync — 高效文件同步

基础语法

rsync [选项] 源 目标

实例

# 本地复制(类似cp)
rsync -av /source/ /dest/

# 远程复制(推)
rsync -av /local/data/ user@host:/remote/data/

# 远程复制(拉)
rsync -av user@host:/remote/data/ /local/data/

# 增量备份(只传输变化)
rsync -av --delete /source/ /backup/

# 排除特定文件
rsync -av --exclude='*.log' /source/ /dest/

# 排除多个目录
rsync -av --exclude='cache' --exclude='tmp' /source/ /dest/

# 显示传输进度
rsync -av --progress /large_file user@host:/dest/

# 压缩传输(节省带宽)
rsync -avz /source/ user@host:/dest/

# 保持文件属性(权限、时间、所有者)
rsync -avogp /source/ /dest/

# 限速传输(KB/s)
rsync -av --bwlimit=1000 /source/ user@host:/dest/

# 基于SSH使用不同端口
rsync -av -e "ssh -p 2222" /source/ user@host:/dest/

常用参数

参数 说明
-a 归档模式(保留权限、时间等)
-v 详细输出
-z 传输时压缩
-P 显示进度(同–progress)
--delete 删除目标端多余文件(保持完全同步)
--exclude 排除文件/目录
--bwlimit 限速(KB/s)

37. lsof — 列出打开的文件

基础语法

lsof [选项] [文件名]

实例

# 列出所有打开的文件
lsof

# 查看指定用户打开的文件
lsof -u username

# 查看指定进程打开的文件
lsof -p 1234

# 查看某个文件被哪些进程使用
lsof /var/log/syslog

# 查看目录下打开的文件
lsof +D /var/log/

# 查看端口8080被谁占用
lsof -i :8080

# 查看TCP连接
lsof -i tcp

# 查看UDP连接
lsof -i udp

# 查看所有网络连接
lsof -i

# 查找已删除但未释放空间的文件
lsof +L1

# 列出NFS打开的文件
lsof -N

# 组合条件(排除root用户)
lsof -u ^root

常用参数

参数 说明
-p 指定进程PID
-u 指定用户
-i 网络连接
+D 递归目录
+L1 显示已删未释放
-c 指定命令名

38. fuser — 查看文件被谁使用

基础语法

fuser [选项] 文件/目录

实例

# 查看文件被哪些进程使用
fuser /var/log/syslog

# 查看目录被哪些进程使用
fuser -v /mnt/data

# 显示进程名和用户
fuser -v /var/log/

# 使用TCP端口查找进程
fuser -v -n tcp 80
fuser -v 80/tcp

# 使用UDP端口
fuser -v -n udp 53

# 杀死使用文件的进程
fuser -k /var/log/syslog

# 交互式询问后杀死
fuser -k -i /var/log/syslog

# 显示完整信号
fuser -v -n tcp 8080

常用参数

参数 说明
-v 详细输出
-k 杀死使用文件的进程
-i 交互模式(确认后杀)
-n 指定命名空间(tcp/udp/file)

四、系统监控与性能分析


39. htop — 增强版top

基础语法

htop [选项]

实例

# 启动htop
htop

# 只显示指定用户的进程
htop -u username

# 以树形显示
htop -t

# 排序方式
htop -s PERCENT_CPU  # 按CPU排序

交互快捷键

按键 说明
F1 / h 帮助
F2 / s 设置
F3 / / 搜索
F4 / \ 过滤
F5 / t 树形视图
F6 / > 排序
F7 / ] 增加nice值(降低优先级)
F8 / [ 减少nice值
F9 / k 杀死进程
F10 / q 退出
空格 标记进程

40. vmstat — 虚拟内存统计

基础语法

vmstat [选项] [刷新间隔] [次数]

实例

# 显示一次统计
vmstat

# 每秒刷新,共5次
vmstat 1 5

# 显示磁盘统计
vmstat -d

# 显示磁盘分区统计
vmstat -D

# 显示内存统计(以MB为单位)
vmstat -S M

# 显示活动和非活动内存
vmstat -a

# 显示slab信息
vmstat -s

输出字段解读

字段 说明
r 运行队列(>CPU核心数表示过载)
b 阻塞进程数
si/so swap换入/换出(>0表示内存不足)
us/sy/id/wa 用户/系统/空闲/IO等待CPU百分比
in 中断数
cs 上下文切换数

41. iostat — IO统计

基础语法

iostat [选项] [刷新间隔] [次数]

实例

# 显示一次统计
iostat

# 每秒刷新
iostat 1

# 显示详细IO信息
iostat -x 1

# 只显示磁盘信息(不显示CPU)
iostat -d 1

# 以MB为单位显示
iostat -m

# 显示设备名而非分区
iostat -N

# 显示LVM信息
iostat -g

# 持续监控,显示5次
iostat -x 2 5

关键指标解读

指标 说明 告警阈值
%util 磁盘利用率 >90%表示满负载
await 平均IO延迟 >10ms表示慢
svctm 服务时间 越高表示设备性能差
r/s/w/s 每秒读写次数 随业务变化
rkB/s/wkB/s 每秒读写KB -

42. mpstat — 多核CPU监控

基础语法

mpstat [选项] [刷新间隔] [次数]

实例

# 显示所有核心统计
mpstat -P ALL 1

# 只显示CPU0
mpstat -P 0 1

# 显示一次统计
mpstat

# 显示每个核心的CPU使用率
mpstat -P ALL 2 5

43. sar — 系统活动报告

基础语法

sar [选项] [刷新间隔] [次数]

实例

# 查看CPU使用率
sar -u 1 3

# 查看内存使用
sar -r 1 3

# 查看swap使用
sar -S 1 3

# 查看磁盘IO
sar -b 1 3

# 查看网络流量
sar -n DEV 1 3

# 查看所有网卡流量
sar -n EDEV 1 3

# 查看历史数据(/var/log/sa/)
sar -u -f /var/log/sa/sa22

# 查看今天的CPU历史
sar -u

# 查看进程队列
sar -q 1 3

44. dstat — 全能性能工具

基础语法

dstat [选项] [刷新间隔] [次数]

实例

# 默认统计(CPU/磁盘/网络/内存)
dstat

# 显示CPU、磁盘、网络、内存
dstat -c -d -n -m

# 显示最占用CPU的进程
dstat --top-cpu

# 显示最占用IO的进程
dstat --top-io

# 显示最占用内存的进程
dstat --top-mem

# 显示完整统计
dstat -cdngy 1

# 以CSV格式输出
dstat -cdngy --output report.csv

45. perf — 性能调优终极工具

基础语法

perf [命令] [选项]

实例

# 实时显示CPU热点函数
perf top

# 对进程采样10秒
perf record -p 1234 -g -- sleep 10

# 查看采样报告
perf report

# 统计性能事件
perf stat -e cpu-clock,task-clock ./program

# 统计CPU周期
perf stat -e cycles,instructions ./program

# 生成火焰图数据
perf record -F 99 -ag -- sleep 30
perf script > out.perf

# 统计系统调用
perf trace -p 1234

# 监控所有CPU的缓存命中
perf stat -e cache-misses,cache-references ./program

46. strace — 追踪系统调用

基础语法

strace [选项] 命令/PID

实例

# 追踪命令的系统调用
strace ls

# 附加到运行中的进程
strace -p 1234

# 只追踪特定系统调用
strace -e trace=open,read,write ls

# 追踪网络相关调用
strace -e trace=network curl google.com

# 显示时间戳
strace -tt ls

# 显示调用耗时
strace -T ls

# 统计系统调用次数
strace -c ls

# 输出到文件
strace -o output.log ls

# 追踪子进程(慎用,会很慢)
strace -f -p 1234

47. ltrace — 追踪库函数调用

基础语法

ltrace [选项] 命令/PID

实例

# 追踪库函数
ltrace ls

# 附加到进程
ltrace -p 1234

# 只追踪特定库函数
ltrace -e malloc+free ls

# 显示时间戳
ltrace -tt ls

# 输出到文件
ltrace -o output.log ls

48. gdb — GNU调试器

基础语法

gdb [选项] [程序] [核心文件]

实例

# 调试程序
gdb ./myapp

# 附加到运行进程
gdb -p 1234

# 调试core文件
gdb ./myapp core.1234

# 运行参数
gdb --args ./myapp -c config.ini

# 常用gdb命令(在gdb内)
(gdb) run         # 运行
(gdb) break main  # 设置断点
(gdb) next        # 下一步
(gdb) step        # 步入
(gdb) print var   # 打印变量
(gdb) bt          # 查看堆栈
(gdb) info threads # 查看线程
(gdb) thread 2    # 切换线程
(gdb) continue    # 继续执行
(gdb) quit        # 退出

49. dmesg — 内核消息

基础语法

dmesg [选项]

实例

# 显示所有内核消息
dmesg

# 显示带时间戳
dmesg -T

# 显示最近20条
dmesg -T | tail -20

# 显示错误级别消息
dmesg -l err

# 显示警告及以上
dmesg -l warn,err

# 实时查看
dmesg -w

# 清除内核缓冲区
dmesg -c

# 查看硬件检测
dmesg | grep -i "hardware\|device"

50. journalctl — systemd日志

基础语法

journalctl [选项] [匹配规则]

实例

# 显示所有日志
journalctl

# 实时查看
journalctl -f

# 查看指定服务
journalctl -u nginx

# 查看指定时间后
journalctl --since "1 hour ago"
journalctl --since "2024-01-01 00:00:00"

# 查看指定时间范围
journalctl --since "today" --until "now"

# 显示指定PID
journalctl _PID=1234

# 显示内核日志
journalctl -k

# 显示错误级别
journalctl -p err

# 显示最近20行
journalctl -n 20

# 输出JSON格式
journalctl -o json

# 查看磁盘占用
journalctl --disk-usage

# 清理日志(保留2天)
journalctl --vacuum-time=2d

五、文本处理(三剑客之外)


51. sed — 流编辑器

基础语法

sed [选项] '动作' 文件

实例

# 替换每行第一个hello为world
sed 's/hello/world/' file.txt

# 替换所有(全局)
sed 's/hello/world/g' file.txt

# 替换并保存(备份)
sed -i.bak 's/old/new/g' file.txt

# 删除第3行
sed '3d' file.txt

# 删除5-10行
sed '5,10d' file.txt

# 删除空行
sed '/^$/d' file.txt

# 删除包含pattern的行
sed '/pattern/d' file.txt

# 只打印第5行
sed -n '5p' file.txt

# 打印匹配行
sed -n '/error/p' file.txt

# 在匹配行前插入
sed '/pattern/i\插入内容' file.txt

# 在匹配行后追加
sed '/pattern/a\追加内容' file.txt

# 替换匹配行中的内容
sed '/pattern/s/old/new/g' file.txt

# 匹配行范围
sed '/start/,/end/ s/old/new/g' file.txt

# 多次替换
sed -e 's/a/A/g' -e 's/b/B/g' file.txt

52. awk — 文本处理编程语言

基础语法

awk '模式{动作}' 文件

实例

# 打印第1列和第3列
awk '{print $1, $3}' file.txt

# 打印整行
awk '{print $0}' file.txt

# 指定分隔符
awk -F':' '{print $1}' /etc/passwd

# 以冒号为分隔符,打印第1和第7列
awk -F':' '{print $1, $7}' /etc/passwd

# 匹配包含root的行
awk '/root/ {print $1}' /etc/passwd

# 打印行号
awk '{print NR, $0}' file.txt

# 打印最后一列
awk '{print $NF}' file.txt

# 过滤(第3列大于100)
awk '$3 > 100' file.txt

# 统计求和
awk '{sum += $2} END {print sum}' file.txt

# 计算平均值
awk '{sum += $2; count++} END {print sum/count}' file.txt

# 去重(经典用法)
awk '!seen[$0]++' file.txt

# 统计各IP访问次数
awk '{count[$1]++} END {for(ip in count) print ip, count[ip]}' access.log

# 格式化输出
awk '{printf "%-10s %5d\n", $1, $2}' file.txt

# 条件判断
awk '{if($3>80) print $1 "超时"; else print $1 "正常"}' file.txt

# BEGIN/END块
awk 'BEGIN{print "开始"} {print $1} END{print "结束"}' file.txt

# 多分隔符
awk -F'[,: ]' '{print $1, $3}' file.txt

# 输出指定行
awk 'NR>=10 && NR<=20' file.txt

53. tr — 字符替换/删除/压缩

基础语法

tr [选项] 集合1 [集合2]

实例

# 小写转大写
echo "hello" | tr 'a-z' 'A-Z'

# 大写转小写
echo "HELLO" | tr 'A-Z' 'a-z'

# 删除数字
echo "abc123def" | tr -d '0-9'

# 删除换行符
tr -d '\n' < file.txt

# 删除所有非字母字符
echo "hello123world!@" | tr -dc 'a-zA-Z'

# 压缩空格(多个空格变一个)
echo "a    b" | tr -s ' '

# 将换行替换为空格(合并为一行)
tr '\n' ' ' < file.txt

# 将逗号替换为TAB
tr ',' '\t' < csv.txt

# 只保留数字
echo "abc123def456" | tr -dc '0-9'

# 将多个连续换行压缩为单个
tr -s '\n' < file.txt

# Windows换行转Linux
tr -d '\r' < win.txt > linux.txt

54. diff — 比较文件差异

基础语法

diff [选项] 文件1 文件2

实例

# 比较两个文件
diff old.txt new.txt

# 统一格式输出(patch友好)
diff -u old.txt new.txt

# 忽略空格
diff -b file1 file2

# 忽略所有空白
diff -w file1 file2

# 忽略大小写
diff -i file1 file2

# 并排显示
diff -y file1 file2

# 只显示是否不同
diff -q file1 file2

# 递归比较目录
diff -r dir1/ dir2/

# 生成补丁
diff -u old.conf new.conf > update.patch

# 应用补丁
patch < update.patch

# 显示上下文(3行)
diff -c file1 file2

55. patch — 应用补丁

基础语法

patch [选项] < 补丁文件

实例

# 应用补丁
patch < update.patch

# 试运行(不实际修改)
patch --dry-run < update.patch

# 反向应用(回退)
patch -R < update.patch

# 备份原文件
patch -b < update.patch

# 指定目录
patch -d /path/to/dir < update.patch

# 忽略空格差异
patch -l < update.patch

56. paste — 按列合并文件

基础语法

paste [选项] 文件1 文件2

实例

# 默认TAB分隔合并
paste file1.txt file2.txt

# 逗号分隔
paste -d',' file1.txt file2.txt

# 多文件合并
paste -d':' file1 file2 file3

# 将文件所有行合并为一行
paste -s file.txt

# 用TAB合并所有行
paste -s -d'\t' file.txt

# 读取标准输入
echo "a b c" | paste -d',' - - -
# 输出: a,b,c

# 合并CSV文件
paste -d',' names.txt scores.txt > students.csv

57. join — 按字段合并(类数据库JOIN)

基础语法

join [选项] 文件1 文件2

实例

# 以第一列为连接键合并
join file1.txt file2.txt

# 指定分隔符
join -t',' file1.csv file2.csv

# 指定连接字段
join -1 1 -2 2 file1.txt file2.txt

# 输出未匹配的行
join -a1 file1.txt file2.txt
join -a2 file1.txt file2.txt

# 不显示连接字段
join -o 1.2,2.2 file1.txt file2.txt

58. comm — 比较已排序文件

基础语法

comm [选项] 文件1 文件2

实例

# 比较两个排序文件
comm file1.txt file2.txt
# 输出三列:仅在file1、仅在file2、共有

# 只显示共有行
comm -12 file1.txt file2.txt

# 只显示在file1中独有的
comm -23 file1.txt file2.txt

# 只显示在file2中独有的
comm -13 file1.txt file2.txt

# 不显示列分隔符
comm --nocheck-order file1.txt file2.txt

59. xargs — 构建命令行

基础语法

xargs [选项] [命令]

实例

# 基本用法
ls *.txt | xargs rm

# 每行一个参数
echo "file1 file2 file3" | xargs -n 1 ls -l

# 每行最多2个参数
echo "a b c d" | xargs -n 2

# 并发执行(10个并行)
cat urls.txt | xargs -n 1 -P 10 curl -O

# 使用占位符
find . -name "*.txt" | xargs -I {} cp {} /backup/

# 空文件不执行
find . -name "*.tmp" | xargs -r rm

# 交互确认
find . -name "*.log" | xargs -p rm

# 组合grep
find . -name "*.py" | xargs grep -l "error"

# 统计文件行数
find . -name "*.txt" | xargs wc -l

# 限制每次参数数量(分批处理)
echo {1..100} | xargs -n 10 echo

常用参数

参数 说明
-n 每行最大参数个数
-I 替换字符串
-P 并行执行数
-p 执行前询问
-r 无输入时不执行
-0 以null分隔(与find -print0配合)

60. parallel — 强大并行执行

基础语法

parallel [选项] 命令 ::: 参数列表

实例

# 并行压缩所有日志
parallel 'gzip {}' ::: *.log

# 并行wget下载
parallel -j 10 wget -q {} ::: urls.txt

# 从文件读取参数
parallel -a urls.txt wget -q {}

# 多个参数组合
parallel echo {1} {2} ::: {1..3} ::: {a..c}

# 替换字符串
parallel --xapply echo {1} {2} ::: a b c ::: 1 2 3

# 进度显示
parallel --progress gzip {} ::: *.log

# 按行读取
cat urls.txt | parallel --pipe -N 100 wget -q {}

# 远程执行
parallel -S user@host --transferfile {} gzip ::: *.log

61. split — 分割文件

基础语法

split [选项] 文件 [前缀]

实例

# 按行分割(每1000行)
split -l 1000 big.log chunk_

# 按大小分割(每100MB)
split -b 100M bigfile chunk_

# 按行分割并生成数字后缀
split -l 1000 -d big.log chunk_

# 指定后缀长度
split -l 1000 -a 3 big.log chunk_

# 按行数分割CSV(保留表头)
head -n1 big.csv > header.csv
tail -n+2 big.csv | split -l 1000 - chunk_

# 合并分割文件
cat chunk_* > restored_file

常用参数

参数 说明
-l 按行数分割
-b 按字节大小分割
-d 数字后缀(而非字母)
-a 后缀长度

六、文件权限与安全


62. setfacl / getfacl — ACL权限管理

getfacl — 查看ACL

# 查看文件ACL
getfacl file.txt

# 查看目录ACL
getfacl /data

setfacl — 设置ACL

# 给用户添加读写权限
setfacl -m u:username:rw file.txt

# 给组添加读取权限
setfacl -m g:groupname:r file.txt

# 删除用户ACL
setfacl -x u:username file.txt

# 递归设置目录ACL
setfacl -R -m u:username:rwx /data/

# 设置默认ACL(新文件继承)
setfacl -m d:u:username:rwx /data/

# 删除所有扩展ACL
setfacl -b file.txt

# 复制ACL到另一个文件
getfacl file1.txt | setfacl -set-file=- file2.txt

63. chattr / lsattr — 文件属性

lsattr — 查看属性

# 查看文件属性
lsattr file.txt

# 递归查看
lsattr -R /data/

chattr — 修改属性

# 设置为不可变(连root也不能删改)
chattr +i file.txt

# 解除不可变
chattr -i file.txt

# 只追加模式(只能添加不能修改删除)
chattr +a logfile.log

# 解除追加模式
chattr -a logfile.log

# 禁止文件更新访问时间
chattr +A file.txt

# 实时同步写入(类似sync)
chattr +S file.txt

# 允许文件数据崩溃安全
chattr +c file.txt

常用属性

属性 说明
a 只追加
i 不可变(不能被删除/修改)
A 不更新atime
S 同步写入
c 自动压缩
s 删除时安全擦除
u 删除时保留数据(可恢复)

64. umask — 默认权限掩码

基础语法

umask [掩码]

实例

# 查看当前umask
umask

# 设置umask(022表示新文件644,新目录755)
umask 022

# 设置umask为002(新文件664,新目录775)
umask 002

# 永久设置(写入~/.bashrc)
echo "umask 022" >> ~/.bashrc

umask计算

新文件权限 = 666 - umask
新目录权限 = 777 - umask

umask 022:
  文件: 666 - 022 = 644 (rw-r--r--)
  目录: 777 - 022 = 755 (rwxr-xr-x)

umask 002:
  文件: 666 - 002 = 664 (rw-rw-r--)
  目录: 777 - 002 = 775 (rwxrwxr-x)

65. chroot — 改变根目录

基础语法

chroot [选项] 新根目录 [命令]

实例

# 进入chroot环境
chroot /newroot /bin/bash

# 指定用户
chroot --userspec=user:group /newroot /bin/sh

# 在chroot中执行命令
chroot /newroot /bin/ls -l

# 结合mount准备环境
mount --bind /proc /newroot/proc
mount --bind /dev /newroot/dev
chroot /newroot /bin/bash

66. visudo — 安全编辑sudoers

基础语法

visudo [选项]

实例

# 编辑sudoers文件
visudo

# 检查语法(不编辑)
visudo -c

# 使用其他编辑器
visudo -e

# 指定文件
visudo -f /etc/sudoers.d/custom

sudoers配置示例

# 允许用户执行所有命令
username ALL=(ALL) ALL

# 允许用户执行特定命令
username ALL=(ALL) /usr/bin/systemctl restart nginx

# 无密码执行特定命令
username ALL=(ALL) NOPASSWD: /usr/bin/reboot

# 组权限
%admin ALL=(ALL) ALL
%users ALL=(ALL) /usr/bin/apt

# 禁止执行
username ALL=(ALL) !/usr/bin/passwd root

67. openssl — 加密/证书管理

基础语法

openssl 命令 [选项] [参数]

实例

# 生成随机密码(32位)
openssl rand -base64 32

# 生成私钥
openssl genrsa -out private.key 2048

# 生成公钥
openssl rsa -in private.key -pubout -out public.key

# 生成自签名证书
openssl req -new -x509 -key private.key -out cert.crt -days 365

# 查看证书内容
openssl x509 -in cert.crt -text -noout

# 加密文件
openssl enc -aes-256-cbc -salt -in file.txt -out file.enc

# 解密文件
openssl enc -d -aes-256-cbc -in file.enc -out file.txt

# 计算MD5
openssl md5 file.txt

# 计算SHA256
openssl sha256 file.txt

# 测试SSL连接
openssl s_client -connect google.com:443 -showcerts

# Base64编码
echo "hello" | openssl base64

# Base64解码
echo "aGVsbG8K" | openssl base64 -d

68. gpg — 文件加密签名

基础语法

gpg [选项] [文件]

实例

# 生成密钥对
gpg --gen-key

# 列出密钥
gpg --list-keys

# 对称加密文件
gpg -c file.txt

# 解密对称加密
gpg --decrypt file.txt.gpg > file.txt

# 非对称加密(使用接收者公钥)
gpg -e -r [email protected] file.txt

# 解密(使用私钥)
gpg -d file.txt.gpg > file.txt

# 签名
gpg -s file.txt

# 验签
gpg --verify file.txt.sig

# 导出公钥
gpg --export -a [email protected] > public.key

# 导入公钥
gpg --import public.key

# 清除签名
gpg --clearsign file.txt

七、系统信息与硬件


69. lscpu — CPU信息

基础语法

lscpu [选项]

实例

# 显示CPU信息
lscpu# 显示可解析格式
lscpu -e

# 显示CPU缓存
lscpu -C

# 显示扩展信息
lscpu --extended

# JSON格式
lscpu --json

70. lspci — PCI设备

基础语法

lspci [选项]

实例

# 列出所有PCI设备
lspci

# 详细信息
lspci -v
lspci -vv

# 树形显示
lspci -t

# 查看网卡
lspci | grep -i network

# 查看显卡
lspci | grep -i vga

# 以数字显示(不解析名称)
lspci -n

71. lsusb — USB设备

基础语法

lsusb [选项]

实例

# 列出所有USB设备
lsusb

# 详细信息
lsusb -v

# 树形显示
lsusb -t

# 指定设备
lsusb -s 001:002

72. lshw — 硬件配置

基础语法

lshw [选项]

实例

# 显示所有硬件
lshw

# 简要输出
lshw -short

# 显示指定类别
lshw -class cpu
lshw -class memory
lshw -class disk
lshw -class network

# HTML输出
lshw -html > hardware.html

# JSON输出
lshw -json > hardware.json

# 只显示可用的硬件
lshw -enable

73. dmidecode — 硬件DMI信息

基础语法

dmidecode [选项]

实例

# 显示所有信息
dmidecode

# 显示系统信息(型号/序列号)
dmidecode -t system

# 显示BIOS信息
dmidecode -t bios

# 显示内存信息
dmidecode -t memory

# 显示CPU信息
dmidecode -t processor

# 显示更少信息
dmidecode -s system-serial-number
dmidecode -s system-product-name

74. free — 内存使用

基础语法

free [选项]

实例

# 显示内存
free

# 人类可读
free -h

# 以MB显示
free -m

# 以GB显示
free -g

# 连续监控(每2秒)
free -s 2

# 显示总计行
free -t

# 显示低/高内存
free -l

# 旧式输出(兼容)
free -o

八、日志管理与调试


75. strings — 提取二进制文本

基础语法

strings [选项] 文件

实例

# 提取所有可打印字符串
strings /bin/ls

# 提取至少10字符的字符串
strings -n 10 /bin/ls

# 显示偏移量
strings -t x /bin/ls

# 从多个文件提取
strings *.so

# 搜索特定字符串
strings /usr/bin/nginx | grep version

76. hexdump — 十六进制查看

基础语法

hexdump [选项] 文件

实例

# 显示十六进制(规范格式)
hexdump -C file.bin

# 只显示十六进制(无ASCII)
hexdump -x file.bin

# 只显示ASCII
hexdump -c file.bin

# 单字节十六进制
hexdump -b file.bin

# 显示指定字节
hexdump -n 100 file.bin

# 跳过前10字节
hexdump -s 10 file.bin

77. od — 八进制/十六进制查看

基础语法

od [选项] 文件

实例

# 八进制显示(默认)
od file.txt

# 十六进制单字节
od -tx1 file.txt

# 十六进制双字节
od -tx2 file.txt

# 显示ASCII字符
od -c file.txt

# 跳过前16字节
od -j 16 file.txt

# 只显示前100字节
od -N 100 file.txt

78. objdump — 目标文件信息

基础语法

objdump [选项] 文件

实例

# 显示所有头信息
objdump -f /bin/ls

# 反汇编
objdump -d /bin/ls

# 显示符号表
objdump -t /bin/ls

# 显示动态符号
objdump -T /lib/libc.so.6

# 显示所有段
objdump -h /bin/ls

# 显示重定位信息
objdump -r /bin/ls

# 完整信息
objdump -a /bin/ls

79. readelf — ELF文件信息

基础语法

readelf [选项] 文件

实例

# 显示文件头
readelf -h /bin/ls

# 显示节表
readelf -S /bin/ls

# 显示程序头
readelf -l /bin/ls

# 显示动态节
readelf -d /bin/ls

# 显示符号表
readelf -s /bin/ls

# 显示所有
readelf -a /bin/ls

80. ldd — 动态库依赖

基础语法

ldd [选项] 程序

实例

# 查看程序依赖库
ldd /bin/ls

# 查看未知程序
ldd /usr/bin/nginx

# 仅显示缺失的库
ldd -d /bin/ls

# 显示版本信息
ldd -v /bin/ls

# 安全模式(不执行库)
ldd -r /bin/ls

九、Shell编程与辅助


81. printf — 格式化输出

基础语法

printf "格式" 参数...

实例

# 普通输出
printf "Hello %s\n" "World"

# 格式化数字
printf "%d %04d %+d\n" 1 2 3

# 格式化字符串(左对齐)
printf "%-10s %5d\n" "Name" 100

# 浮点数
printf "%.2f\n" 3.14159

# 转义字符
printf "Tab\t新行\n"

# 输出到变量
printf -v var "%s %s" "Hello" "World"
echo $var

# 十六进制/八进制
printf "0x%02X\n" 255
printf "0%o\n" 8

82. read — 读取输入

基础语法

read [选项] [变量名]

实例

# 读取一行
read var
echo $var

# 带提示符
read -p "请输入名字: " name

# 读取密码(不显示)
read -s -p "密码: " password

# 读取多个变量
read first last age

# 读取数组
read -a array

# 限制字符数
read -n 5 input

# 读取文件
while read line; do
    echo $line
done < file.txt

# 超时
read -t 5 input

# 分隔符
read -d ':' field1 field2

83. export — 环境变量

基础语法

export [选项] [变量=值]

实例

# 设置并导出变量
export PATH=$PATH:/usr/local/bin

# 设置变量(不导出,仅shell内有效)
var=value
# 导出已有变量
export var

# 查看所有环境变量
export -p

# 删除环境变量
export -n var

# 临时环境变量(仅对当前命令有效)
LANG=en_US.UTF-8 ls

84. env — 环境变量管理

基础语法

env [选项] [变量=值] [命令]

实例

# 显示所有环境变量
env

# 在干净环境中执行(无环境变量)
env -i /bin/bash

# 设置变量执行命令
env LANG=zh_CN.UTF-8 ./script.sh

# 删除环境变量
env -u PATH ./script.sh

# 显示指定变量
env | grep PATH

# 排序输出
env | sort

85. source — 在shell中执行脚本

基础语法

source 脚本
. 脚本  # 简写

实例

# 加载配置文件
source ~/.bashrc

# 在shell中执行脚本(变量保留)
source ./setup.sh

# 等价于
. ./setup.sh

# 加载函数库
source ./lib/functions.sh
my_function

# 使用相对路径
. ./env.sh

对比区别

# source:在当前shell执行,变量改变会保留
source script.sh
echo $var  # 能看到

# 直接执行:子shell执行,变量改变不保留
./script.sh
echo $var  # 看不到

86. exec — 替换当前shell

基础语法

exec [命令] [参数]

实例

# 替换当前shell为其他shell
exec /bin/zsh

# 在脚本中重定向所有输出
exec > log.txt 2>&1
echo "这行会写入log.txt"

# 在脚本中重定向输入
exec < input.txt

# 创建文件描述符
exec 3<> file.txt
echo "写入fd3" >&3

# 关闭文件描述符
exec 3>&-

87. set — 设置shell选项

基础语法

set [选项] [位置参数]

实例

# 开启调试模式(详细执行)
set -x
ls -l
set +x  # 关闭

# 遇错退出(脚本安全)
set -e
command_that_fails  # 脚本在此退出
echo "不会执行"

# 未定义变量报错
set -u
echo $undefined_var  # 报错

# 管道中任意命令失败即退出
set -o pipefail
false | echo "hello"  # 退出

# 显示当前设置
set -o

# 位置参数赋值
set -- arg1 arg2 arg3
echo $1  # arg1

常用选项

选项 说明
-x 调试模式(显示执行命令)
-e 命令失败时立即退出
-u 使用未定义变量时报错
-v 显示读取的输入行
-o pipefail 管道中任一命令失败即退出

88. shopt — bash内置选项

基础语法

shopt [选项] [选项名]

实例

# 列出所有选项
shopt

# 开启选项
shopt -s extglob
shopt -s histappend
shopt -s dotglob

# 关闭选项
shopt -u extglob

# 查看特定选项
shopt extglob

常用选项

选项 说明
extglob 扩展通配符
histappend 历史记录追加而非覆盖
dotglob 通配符匹配隐藏文件
nocaseglob 通配符忽略大小写
nullglob 无匹配时返回空而非原样

89. alias — 命令别名

基础语法

alias [别名=命令]

实例

# 创建别名
alias ll='ls -alh'
alias grep='grep --color=auto'
alias rm='rm -i'  # 交互删除(防误删)
alias mkdir='mkdir -pv'

# 查看所有别名
alias
alias -p

# 删除别名
unalias ll

# 删除所有别名
unalias -a

# 绕过别名
\ls  # 使用原始ls
command ls  # 使用原始ls

永久保存

# 写入 ~/.bashrc
echo "alias ll='ls -alh'" >> ~/.bashrc
echo "alias grep='grep --color=auto'" >> ~/.bashrc
source ~/.bashrc

90. type — 显示命令类型

基础语法

type [选项] 命令

实例

# 显示命令类型
type ls
type cd
type ifconfig

# 显示所有匹配(别名、函数、内置、外部)
type -a ls

# 只显示文件路径(外部命令)
type -p ls

# 跳过别名查找
type -t ls  # 返回alias/function/builtin/file

91. command — 忽略别名和函数

基础语法

command [选项] 命令 [参数]

实例

# 忽略别名执行原始命令
command ls

# 查找命令路径(不执行)
command -v ls

# 显示命令路径(类似which)
command -V ls

# 在PATH中查找(不包含shell函数)
command -p ls

92. time — 测量执行时间

基础语法

time [选项] 命令

实例

# 测量命令耗时
time ls -R /

# 测量脚本
time ./long_task.sh

# 详细输出(GNU time)
/usr/bin/time -v ./script.sh

# 输出到文件
/usr/bin/time -o time.log ./script.sh

# 指定输出格式
/usr/bin/time -f "耗时 %E, CPU %P" ./script.sh

输出说明

字段 说明
real 总耗时(墙钟时间)
user 用户态CPU时间
sys 内核态CPU时间

93. yes — 重复输出

基础语法

yes [字符串]

实例

# 输出y(用于自动确认)
yes | rm -i *.tmp

# 输出指定字符串
yes "Hello" | head -n 5

# 填充文件
yes | head -n 1000 > bigfile.txt

# 配合多命令
yes n | ./interactive_script.sh

# 无限输出到/dev/null(测试CPU)
yes > /dev/null

94. watch — 定时执行

基础语法

watch [选项] 命令

实例

# 每2秒查看进程
watch 'ps aux | grep nginx'

# 每5秒查看磁盘
watch -n 5 'df -h'

# 高亮变化
watch -d 'ls -l'

# 不显示标题
watch -t 'date'

# 查看日志(watch + tail)
watch -n 1 'tail -n 10 app.log'

# 查看网络连接
watch 'ss -tlnp'

# 查看内存
watch 'free -h'

# 查看负载
watch 'uptime'

常用参数

参数 说明
-n 刷新间隔(秒,默认2)
-d 高亮显示变化
-t 不显示标题行
-b 命令失败时响铃

95. script — 记录终端会话

基础语法

script [选项] [文件]

实例

# 开始记录会话
script session.log
# ... 执行命令 ...
exit  # 退出记录

# 追加到文件
script -a session.log

# 静默模式(不显示启动消息)
script -q session.log

# 记录命令执行
script -c "ls -l" ls.log

# 记录时间戳
script -t 2> timing.log session.log
# 回放(需scriptreplay)
scriptreplay timing.log session.log

十、压缩归档(补充)


96. bzip2 / bunzip2 — BZ2压缩

基础语法

bzip2 [选项] 文件
bunzip2 [选项] 文件.bz2

实例

# 压缩文件(生成.bz2)
bzip2 file.txt

# 保留原文件
bzip2 -k file.txt

# 解压
bunzip2 file.txt.bz2

# 强制解压(覆盖)
bunzip2 -f file.txt.bz2

# 测试压缩文件完整性
bzip2 -t file.txt.bz2

# 显示压缩率
bzip2 -v file.txt

# 压缩级别(1-9,默认9)
bzip2 -9 file.txt

97. xz / unxz — XZ高压缩率

基础语法

xz [选项] 文件
unxz [选项] 文件.xz

实例

# 压缩文件(高压缩率,较慢)
xz file.txt

# 保留原文件
xz -k file.txt

# 解压
unxz file.txt.xz
xz -d file.txt.xz  # 等价

# 压缩级别(0-9,默认6)
xz -9 file.txt

# 测试完整性
xz -t file.txt.xz

# 查看压缩信息
xz -l file.txt.xz

# 多线程压缩(需支持)
xz -T 4 file.txt

# 极速压缩(级别1)
xz -1 -k file.txt

98. 7z — 7-Zip压缩

基础语法

7z [命令] [选项] 压缩包 文件...

实例

# 创建7z压缩
7z a archive.7z file1 file2

# 创建带密码的压缩
7z a -p密码 archive.7z file.txt

# 解压
7z x archive.7z -o/path/to/extract

# 列出压缩包内容
7z l archive.7z

# 测试完整性
7z t archive.7z

# 创建ZIP格式
7z a -tzip archive.zip file.txt

# 创建GZIP格式
7z a -tgzip archive.gz file.txt

# 最大压缩
7z a -mx=9 archive.7z file.txt

99. zcat / zgrep — 查看压缩文件

基础语法

zcat 文件.gz
zgrep [grep选项] 模式 文件.gz

实例

# 查看gz文件(不解压)
zcat file.gz

# 查看多个gz
zcat *.gz

# 在gz中搜索
zgrep ERROR app.log.gz

# 带行号搜索
zgrep -n ERROR app.log.gz

# 递归搜索所有gz
zgrep -r ERROR /var/log/

# 管道处理
zcat log.gz | grep ERROR | wc -l

# 查看xz文件(需xzcat)
xzcat file.xz

# 查看bz2文件(需bzcat)
bzcat file.bz2

100. tar — 完整参数汇总

基础语法

tar [选项] [归档文件] [源文件]

创建归档

# 创建tar归档
tar -cvf archive.tar /path

# 创建gz压缩
tar -zcvf archive.tar.gz /path

# 创建bz2压缩
tar -jcvf archive.tar.bz2 /path

# 创建xz压缩
tar -Jcvf archive.tar.xz /path

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

解压归档

# 解压tar
tar -xvf archive.tar

# 解压gz
tar -zxvf archive.tar.gz

# 解压bz2
tar -jxvf archive.tar.bz2

# 解压xz
tar -Jxvf archive.tar.xz

# 解压到指定目录
tar -zxvf archive.tar.gz -C /target

# 只解压特定文件
tar -zxvf archive.tar.gz file.txt

查看内容

# 查看归档内容
tar -tvf archive.tar

# 查看gz归档内容
tar -tzvf archive.tar.gz

常用参数

参数 说明
-c 创建归档
-x 解压归档
-t 查看内容
-v 详细输出
-f 指定归档文件
-z gzip压缩
-j bzip2压缩
-J xz压缩
-C 指定目标目录
--exclude 排除文件

以上就是全部100个进阶命令的详细用法示例,涵盖了进程、网络、磁盘、性能、文本、权限、硬件、日志、Shell和压缩十个大类,对于各位NLer来说应该够用了,那天需要用到的时候记得来翻看一下。

10 个赞

好详细教程

Wow , thx

Interesting

非常详细,但有些是需要安装的吧(如果注明就更好了)

真的够全的,收藏起来了

好详细!!!佬什么时候来一期防火墙教程!

已收藏用到再查

谢谢分享

已保存命令 谢大佬

收藏备用。。

太有帮助了,感谢分享

太详细了,大佬:cow_face::beer_mug:

好长的篇幅,:+1: