Linux 常用命令速查手册

本文档面向实际开发、运维工作中的高频 Linux 命令,按功能分类整理,配有翔实示例,适合日常查阅。


目录


1. 文件与目录操作

1.1 切换目录 cd

cd /path/to/dir        # 切换到指定目录
cd ~                   # 切换到当前用户家目录
cd -                   # 切换到上一次所在目录
cd ..                  # 切换到上级目录
cd                     # 不带参数,等同于 cd ~

示例:

cd /var/log
cd ~
pwd                    # 显示当前目录:/home/username
cd -
pwd                    # 显示:/var/log

1.2 查看当前目录 pwd

pwd                    # 显示当前工作目录的绝对路径
pwd -P                 # 显示物理路径(跳过软链接)

1.3 列出目录内容 ls

ls                     # 列出当前目录文件
ls -l                  # 详细列表(权限、大小、时间)
ls -a                  # 显示所有文件(包括隐藏文件 . 开头)
ls -lh                 # 文件大小以人类可读方式显示(K、M、G)
ls -lt                 # 按修改时间倒序排列
ls -ltr                # 按修改时间正序排列(最旧的在前)
ls -R                  # 递归列出子目录

示例:

ls -lha /home
# total 76
# drwxr-xr-x  5 root  root 4096 Jun  4 10:00 .
# drwxr-xr-x 12 root  root 4096 Jun  4 09:00 ..
# -rw-------  1 root  root 5734 Jun  4 10:00 .bash_history
# drwxr-xr-x  2 root  root 4096 Jun  4 09:30 projects

参数可以组合使用:

ls -lhtr /var/log

1.4 创建目录 mkdir

mkdir dirname                  # 创建单个目录
mkdir -p dir1/dir2/dir3        # 递归创建目录(父目录不存在时一并创建)
mkdir -m 755 mydir             # 创建目录并指定权限

示例:

mkdir -p /home/user/projects/webapp/{src,config,logs}
# 一次性创建多级目录结构

1.5 创建/修改文件 touch

touch filename                 # 创建空文件
touch file1 file2 file3        # 批量创建空文件
touch -t 202606041200 file     # 指定文件时间戳(YYYYMMDDhhmm)

示例:

touch app.log
touch config.yaml database.conf

1.6 复制文件和目录 cp

cp source dest                 # 复制文件
cp -r source_dir dest_dir      # 递归复制目录
cp -a source_dir dest_dir      # 保持文件属性(权限、时间戳、软链接)复制
cp -i source dest              # 目标存在时提示确认
cp -v source dest              # 显示复制过程

示例:

cp /etc/nginx/nginx.conf /backup/nginx.conf.bak
cp -r /home/user/projects /backup/projects_backup
cp -a /opt/app /mnt/disk/app_copy

1.7 移动和重命名 mv

mv source dest                 # 移动或重命名文件/目录
mv -i source dest              # 目标存在时提示确认
mv -v source dest              # 显示移动过程
mv oldname newname             # 重命名(在同一目录下移动)

示例:

mv /tmp/app.log /var/log/app.log
mv myapp_v1 myapp              # 重命名目录
mv server.conf server.conf.bak # 备份配置文件

1.8 删除文件和目录 rm

rm filename                    # 删除文件
rm -r dirname                   # 递归删除目录
rm -rf dirname                  # 强制递归删除(不提示,慎用)
rm -i filename                 # 删除前确认
rm -v filename                 # 显示删除过程

示例:

rm -rf /tmp/test_dir
rm -i *.log                     # 交互式删除所有 .log 文件

警告rm -rf / 会删除系统根目录,切勿执行。rm -rf /tmp/* 会清空 /tmp,务必确认路径正确。

1.9 软链接与硬链接 ln

ln -s /path/to/file linkname   # 创建软链接(符号链接,类似 Windows 快捷方式)
ln /path/to/file hardlink       # 创建硬链接(同一文件的多个别名)
ln -sf /new/path linkname      # 强制重新创建软链接

示例:

ln -s /var/log/nginx /home/user/nginx_logs
ln /data/db/datafile.db /backup/datafile_link
ls -la /home/user/nginx_logs   # 显示 -> /var/log/nginx

1.10 查看文件类型 file

file filename

示例:

file /bin/ls
# /bin/ls: ELF 64-bit LSB executable, x86-64

file script.sh
# script.sh: Bourne-Again shell script, ASCII text executable

file image.png
# image.png: PNG image data, 1920 x 1080

2. 文本处理

2.1 查看文件内容

cat — 完整输出文件

cat filename                    # 输出文件全部内容
cat -n filename                 # 显示行号
cat -b filename                 # 显示行号(跳过空白行)
cat file1 file2 > file3        # 合并文件

示例:

cat /etc/os-release
cat -n /var/log/nginx/access.log | head -20  # 显示前20行并加行号

less — 分页查看文件(支持搜索)

less filename

交互式按键:

按键 作用
j / k 向下 / 向上滚动一行
G / g 跳到文件末尾 / 开头
/keyword 搜索关键词(n 下一个,N 上一个)
q 退出

示例:

less /var/log/nginx/error.log
# 大文件推荐用 less,避免卡顿

more — 分页查看(较老)

more filename

head — 查看文件头部

head filename                   # 默认显示前10行
head -n 20 filename             # 显示前20行
head -c 100 filename            # 显示前100字节

示例:

head -n 5 /etc/passwd
# root:x:0:0:root:/root:/bin/bash
# daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

tail — 查看文件尾部

tail filename                   # 默认显示后10行
tail -n 20 filename             # 显示后20行
tail -f filename                # 实时追踪文件变化(Ctrl+C 退出)
tail -F filename                # 追踪(即使文件被删除重建也继续追踪)
tail -f /var/log/nginx/access.log

示例:

# 实时查看日志
tail -f /var/log/app.log

# 查看最后100行
tail -n 100 /var/log/syslog

# 组合:查看第100行到第150行
sed -n '100,150p' /var/log/app.log

sed — 流编辑器

sed -n '10,20p' filename        # 打印第10到20行
sed 's/old/new/g' filename      # 全局替换(不修改原文件)
sed -i 's/old/new/g' filename   # 直接修改原文件
sed '/keyword/d' filename       # 删除包含 keyword 的行
sed -n '/pattern/p' filename    # 只打印匹配的行

示例:

# 将配置文件中 debug=false 替换为 debug=true
sed -i 's/debug=false/debug=true/g' config.ini

# 删除空行
sed -i '/^$/d' filename

# 在第5行后插入一行
sed -i '5a\new line content' filename

# 打印包含 error 的行
sed -n '/error/p' /var/log/app.log

awk — 强大的文本分析工具

awk '{print $1}' filename               # 打印第1列(默认以空格分隔)
awk -F',' '{print $1, $3}' filename     # 指定逗号为分隔符
awk '$3 > 100 {print $0}' filename      # 条件过滤
awk '/pattern/ {print $0}' filename      # 匹配模式打印整行

示例:

# 打印 /etc/passwd 每行的用户名和shell
awk -F':' '{print $1, $7}' /etc/passwd

# 打印第3列大于 100 的行
awk -F',' '$3 > 100 {print $0}' data.csv

# 统计文件行数
awk 'END {print NR}' filename

# 累加第3列
awk '{sum+=$3} END {print sum}' filename

grep — 文本搜索

grep "keyword" filename              # 搜索包含关键词的行
grep -i "keyword" filename          # 忽略大小写
grep -r "keyword" dir/              # 递归搜索目录
grep -n "keyword" filename          # 显示行号
grep -c "keyword" filename          # 统计匹配行数
grep -v "keyword" filename          # 反向选择(不包含关键词的行)
grep -E "error|warn" filename       # 使用扩展正则,匹配多个关键词
grep --color=auto "keyword" file    # 高亮显示关键词

示例:

# 在日志中查找错误信息
grep -n "ERROR" /var/log/app.log

# 递归搜索当前目录下所有 .py 文件
grep -rn "def main" --include="*.py" .

# 统计 nginx 访问日志中 404 次数
grep -c "404" /var/log/nginx/access.log

# 排除注释行和空行,查看配置文件
grep -v "^#" config.conf | grep -v "^$"

cut — 提取列

cut -d',' -f1,3 filename          # 以逗号分隔,提取第1和第3列
cut -c1-10 filename               # 提取每行第1到第10个字符
cut -d' ' -f1 filename           # 以空格分隔,提取第1列

示例:

# 提取用户名
cut -d':' -f1 /etc/passwd

# 提取 IP 地址(假设日志中 IP 在第1列)
cut -d' ' -f1 /var/log/nginx/access.log | sort | uniq -c

sort — 排序

sort filename                    # 默认按字典序升序排序
sort -r filename                 # 降序
sort -n filename                 # 按数值大小排序
sort -k2 filename                # 按第2列排序
sort -u filename                 # 去重排序
sort -t',' -k3 -n filename       # 以逗号分隔,按第3列数值排序

示例:

# 排序并去重统计 IP 访问量
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -10

uniq — 去重(需配合 sort 使用)

uniq filename                    # 去除相邻重复行
uniq -c filename                 # 显示重复次数
uniq -d filename                 # 只显示重复的行
uniq -u filename                 # 只显示没有重复的行

示例:

# 统计每个 IP 访问次数
cat access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head -10

wc — 统计行数/字数/字节数

wc filename                     # 显示行数、词数、字节数
wc -l filename                   # 只统计行数
wc -w filename                   # 统计词数
wc -c filename                   # 统计字节数

示例:

wc -l /var/log/nginx/access.log
# 15432 /var/log/nginx/access.log

# 统计当前目录文件数
ls -l | wc -l

diff — 对比两个文件差异

diff file1 file2                # 显示两文件差异
diff -u file1 file2 > patch.txt  # 生成 unified 格式补丁
diff -r dir1 dir2                # 递归比较目录

示例:

diff nginx.conf nginx.conf.bak
# 2,3d1
# < worker_processes 4;
# < error_log /var/log/nginx/error.log;

echo — 输出字符串

echo "hello world"
echo $PATH                        # 输出变量值
echo -e "line1\nline2"           # 支持转义字符
echo "text" > filename           # 写入文件(覆盖)
echo "text" >> filename          # 追加到文件末尾

3. 用户与权限

3.1 用户相关命令

useradd — 创建用户

useradd username                 # 创建用户(使用默认配置)
useradd -m username              # 创建用户并建立家目录
useradd -m -s /bin/bash username # 指定登录 shell
useradd -g groupname username    # 指定主用户组
useradd -G group1,group2 username # 指定附加用户组

示例:

useradd -m -s /bin/bash -G docker deploy

userdel — 删除用户

userdel username                 # 删除用户(保留家目录)
userdel -r username              # 删除用户并删除家目录

usermod — 修改用户

usermod -l newname oldname      # 修改用户名
usermod -aG groupname username   # 将用户添加到组(保留原有组)
usermod -s /bin/sh username      # 修改登录 shell
usermod -L username              # 锁定用户(禁止登录)
usermod -U username              # 解锁用户

passwd — 设置密码

passwd username                  # 修改用户密码
passwd -l username               # 锁定密码
passwd -d username               # 删除密码(无密码登录)

whoami — 查看当前用户名

whoami
# root 或 username

id — 查看用户 UID、GID

id username
# uid=1000(username) gid=1000(username) groups=1000(username),4(adm),27(sudo)

who — 查看当前登录用户

who
# root     pts/0    Jun  4 10:00 (192.168.1.100)

w — 查看登录用户及当前操作

w
# 10:00:00 up 2 days,  3:22,  2 users,  load average: 0.15, 0.10, 0.05
# USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
# root     pts/0    192.168.1.100    10:00    0.00s  0.00s  0.00s w

3.2 用户组命令

groupadd groupname               # 创建用户组
groupdel groupname               # 删除用户组
groups username                  # 查看用户所属的所有组

3.3 权限命令 chmod

权限数字对照:r=4, w=2, x=1

数字 权限
7 rwx(读+写+执行)
6 rw-(读+写)
5 r-x(读+执行)
4 r–(只读)
0 —(无权限)
chmod 755 filename               # 所有者 rwx,组其他人 rx
chmod 644 filename               # 所有者 rw,组其他人 r
chmod 600 filename               # 仅所有者 rw
chmod +x script.sh              # 添加执行权限
chmod -x script.sh             # 移除执行权限
chmod -R 755 dirname            # 递归修改目录权限
chmod u+x filename              # 给所有者添加执行权限
chmod g+w filename              # 给组添加写权限
chmod o-r filename              # 移除其他用户的读权限

示例:

chmod 755 /home/user/myscript.sh
chmod -R 644 /var/www/html
chmod u+x,g+x script.sh          # 所有者+组都添加执行权限

3.4 所有者命令 chown

chown user:group filename        # 修改文件所有者和组
chown user filename             # 只修改所有者
chown :group filename           # 只修改组
chown -R user:group dirname     # 递归修改目录

示例:

chown www-data:www-data /var/www/html
chown -R nginx:nginx /var/log/nginx

3.5 查看/修改文件属性 lsattr / chattr

lsattr filename                  # 查看文件特殊属性
chattr +i filename              # 设置不可修改属性(root 也无法删除/修改)
chattr -i filename              # 移除不可修改属性
chattr +a filename             # 只可追加,不能覆盖或删除

示例:

chattr +i /etc/passwd           # 防止 /etc/passwd 被修改
lsattr /etc/passwd              # 显示:----i---------e---- /etc/passwd

4. 进程管理

4.1 查看进程

ps — 静态查看进程

ps                          # 显示当前终端的进程
ps -ef                      # 显示所有进程(完整格式)
ps aux                      # 显示所有进程(BSD 格式,包含 CPU/内存占用)
ps -u username             # 查看指定用户的进程
ps -p <pid>                # 查看指定 PID 的进程
ps --forest                # 显示进程树(父子关系)

示例:

ps aux | grep nginx
# nginx   1234  0.1  0.5  12500  4500 ?    S    09:00   0:00 nginx: master process
# nginx   1235  0.2  0.5  12600  4600 ?    S    09:00   0:01 nginx: worker process

ps -ef | grep python
ps --forest

top — 动态监控进程

top                         # 启动交互式进程监控
top -p <pid>               # 监控指定进程
top -u username            # 只显示指定用户的进程
top -d 2                   # 每2秒刷新一次(默认3秒)
top -n 5                   # 刷新5次后退出

交互式按键:

按键 作用
q 退出
M 按内存占用排序
P 按 CPU 占用排序
k 终止指定进程(输入 PID)
1 展开/折叠 CPU 各核心详情
h 显示帮助

示例:

top
# top - 10:00:00 up 2 days,  3:00,  1 user,  load average: 0.15, 0.10, 0.05
# Tasks: 120 total,   2 running, 118 sleeping
# %Cpu(s):  5.2 us,  1.3 sy,  0.0 ni, 93.5 id
# MiB Mem :  16000.0 total,   8000.0 free,   4000.0 used
# MiB Swap:   2000.0 total,   2000.0 free,      0.0 used

htop — 增强版进程监控(需安装)

htop                        # 启动 htop(更友好的交互界面)
htop -u username           # 只显示指定用户

pstree — 进程树

pstree                      # 显示所有进程的树状结构
pstree -p                   # 显示 PID
pstree -u username          # 显示指定用户的进程树

4.2 管理进程

kill — 终止进程

kill <pid>                  # 正常终止进程
kill -9 <pid>              # 强制杀死进程(SIGKILL)
kill -15 <pid>             # 优雅终止(SIGTERM,默认)
kill -2 <pid>              # 相当于 Ctrl+C(SIGINT)
kill -l                    # 查看所有信号编号

常用信号:

信号 编号 说明
SIGTERM 15 优雅终止(默认)
SIGKILL 9 强制杀死
SIGINT 2 相当于 Ctrl+C

示例:

kill 1234                  # 优雅终止
kill -9 1234               # 强制杀死
kill -9 $(ps aux | grep python | grep -v grep | awk '{print $2}')
# 一行命令杀掉所有 python 进程

killall — 按名称终止进程

killall nginx              # 终止所有 nginx 进程
killall -9 nginx           # 强制杀死
killall -u username        # 终止指定用户的所有进程

pkill — 按名称/条件终止进程

pkill nginx               # 终止所有匹配 nginx 的进程
pkill -f "python script"  # 终止包含此命令行的进程

nohup — 后台运行(忽略挂断信号)

nohup python app.py > output.log 2>&1 &
# > output.log 重定向标准输出
# 2>&1 将标准错误重定向到标准输出
# & 后台运行

示例:

nohup python app.py > /var/log/app.log 2>&1 &
nohup ./start.sh &

bg / fg — 后台/前台任务管理

# Ctrl+Z 将当前任务挂起到后台
# jobs 查看后台任务
jobs
# [1]+  Stopped                 python app.py
# [2]-  Running                 node server.js &

fg %1                       # 将1号任务切回前台
bg %1                       # 将1号任务切到后台继续运行

nice / renice — 调整进程优先级

nice -n 10 command         # 以优先级10启动命令(-20~19,越低优先级越高)
renice 10 -p <pid>         # 修改运行中进程的优先级
renice -n -5 -u username   # 修改指定用户所有进程的优先级

4.3 查看进程打开的文件 lsof

lsof                        # 显示所有打开的文件
lsof -p <pid>              # 查看指定进程打开的文件
lsof /var/log/app.log      # 查看谁在使用该文件
lsof -i :8080              # 查看谁在使用8080端口
lsof -i tcp                # 查看所有 TCP 连接
lsof -u username           # 查看指定用户的文件

示例:

lsof -i :3306              # 查看谁在占用 MySQL 端口
lsof -p $(pgrep -f nginx) # 查看 nginx 进程打开的所有文件

5. 网络命令

5.1 网络配置查看

ip — 查看/管理网络配置(现代命令)

ip addr show               # 查看所有网络接口的 IP 地址
ip addr add 192.168.1.100/24 dev eth0   # 给 eth0 添加 IP
ip addr del 192.168.1.100/24 dev eth0   # 删除 IP
ip link show               # 查看网络接口状态
ip link set eth0 up        # 启用网络接口
ip link set eth0 down      # 禁用网络接口
ip route show              # 查看路由表
ip route add default via 192.168.1.1    # 添加默认网关

示例:

ip addr show
# 1: lo: <LOOPBACK,UP> mtu 65536 qdisc noqueue
#     inet 127.0.0.1/8 scope host lo
# 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast
#     inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0

ifconfig — 查看网络接口(旧版,推荐用 ip

ifconfig
ifconfig eth0
ifconfig eth0 192.168.1.100 netmask 255.255.255.0

5.2 测试网络连通性

ping — 检测网络连通性

ping 8.8.8.8               # 测试到 8.8.8.8 的连通性
ping google.com             # 通过域名测试
ping -c 4 google.com        # 只发4个包后停止
ping -i 0.5 google.com      # 每0.5秒发一个包
ping -s 1024 google.com     # 指定数据包大小

示例:

ping -c 3 google.com
# 64 bytes from 142.250.191.14: icmp_seq=1 ttl=115 time=15.2 ms
# 64 bytes from 142.250.191.14: icmp_seq=2 ttl=115 time=14.8 ms
# 64 bytes from 142.250.191.14: icmp_seq=3 ttl=115 time=14.5 ms

traceroute — 路由追踪

traceroute google.com      # 追踪到目标的路由路径
traceroute -m 15 google.com # 最多15跳
tracert google.com         # Windows 下使用 tracert

5.3 端口与连接

netstat — 查看网络连接状态(旧版)

netstat -tuln              # 查看所有监听端口(UDP/TCP)
netstat -an                # 查看所有连接
netstat -r                 # 查看路由表
netstat -i                  # 查看网络接口统计
netstat -p                  # 显示进程 PID 和名称

示例:

netstat -tulnp | grep :80
# tcp  LISTEN  1234/nginx  0.0.0.0:80  0.0.0.0:*

ss — 查看网络连接(现代命令,比 netstat 更高效)

ss -tulnp                  # 查看监听端口
ss -tan                    # 查看所有 TCP 连接
ss -tlnp | grep :8080      # 查看8080端口
ss -tp                     # 显示进程名
ss state established        # 只显示已建立的连接
ss -s                     # 统计摘要

示例:

ss -tulnp | grep :3306
# State     Recv-Q    Send-Q    Local Address:Port    Peer Address:Port
# LISTEN    0         128       0.0.0.0:3306         0.0.0.0:*

lsof — 查看端口占用

lsof -i :8080
lsof -i tcp:3306

5.4 DNS 查询

nslookup google.com         # DNS 查询(域名解析)
dig google.com              # 更详细的 DNS 查询
dig google.com A            # 查询 A 记录
dig google.com MX           # 查询邮件记录
host google.com             # 简单 DNS 查询

示例:

dig google.com +short
# 142.250.191.14

5.5 下载工具

curl — 请求 URL

curl https://example.com           # 请求网页
curl -o filename https://...        # 下载并保存
curl -O https://...                 # 按远程文件名保存
curl -I https://...                 # 只获取 HTTP 头
curl -X POST https://...            # 发送 POST 请求
curl -d "name=test" https://...     # POST 数据
curl -H "Authorization: Bearer xxx" https://...  # 带请求头
curl -L https://...                 # 跟随重定向
curl -k https://...                 # 忽略 SSL 证书验证

示例:

curl -O https://releases.nginx.org/nginx/nginx-1.26.0.tar.gz
curl -X POST https://api.example.com/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}'
curl -I https://www.google.com

wget — 下载文件

wget https://example.com/file.tar.gz        # 下载文件
wget -O output.tar.gz https://...           # 指定输出文件名
wget -c https://...                        # 断点续传
wget -r -np https://...                    # 递归下载(不跨越上级目录)
wget -q https://...                        # 静默模式
wget --user=user --password=pass https://... # HTTP 认证下载

5.6 网络测试带宽 iperf3

# 服务器端
iperf3 -s

# 客户端
iperf3 -c <server-ip>
iperf3 -c <server-ip> -t 30       # 测试30秒
iperf3 -c <server-ip> -P 4        # 4个并行连接

6. 磁盘与文件系统

6.1 查看磁盘使用

df — 磁盘空间使用

df                          # 显示所有文件系统
df -h                       # 人类可读格式(K/M/G)
df -h /home                 # 查看指定挂载点的使用情况
df -i                       # 显示 inode 使用情况
df -T                       # 显示文件系统类型

示例:

df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1       100G   45G   55G  45% /
# tmpfs           2.0G     0  2.0G   0% /dev/shm
# /dev/sdb1       500G  200G  300G  40% /data

du — 目录/文件大小

du filename                  # 查看文件大小
du -sh dirname               # 查看目录总大小(不递归)
du -sh *                     # 查看当前目录下各文件/目录大小
du -h --max-depth=1 /home    # 只看一级子目录
du -ah /home                 # 显示所有文件大小
du -sh /*                    # 查看根目录下各项目大小
du --exclude="*.log" dirname # 排除指定文件

示例:

du -sh /var/log
du -h --max-depth=1 /home | sort -h  # 按大小排序
du -ah /home/user | sort -rh | head -20  # 最大的20个文件

6.2 磁盘分区

fdisk — MBR 分区工具

fdisk -l                     # 列出所有磁盘分区
fdisk /dev/sdb              # 对 /dev/sdb 进行分区操作(交互式)

parted — GPT 分区工具

parted /dev/sdb             # 交互式分区
parted /dev/sdb print       # 打印分区表

6.3 格式化与挂载

mkfs.ext4 /dev/sdb1          # 格式化为 ext4 文件系统
mkfs.xfs /dev/sdb1           # 格式化为 xfs 文件系统
mount /dev/sdb1 /data        # 挂载到 /data
umount /data                 # 卸载
mount                        # 查看当前挂载情况
df -h                        # 确认挂载成功

示例:

mkfs.ext4 /dev/sdb1
mkdir /data
mount /dev/sdb1 /data
echo '/dev/sdb1 /data ext4 defaults 0 0' >> /etc/fstab  # 永久挂载

6.4 磁盘 IO 监控

iostat -x 2                  # 每2秒显示一次 IO 统计
iostat -x 2 5                # 显示5次后退出
iotop                        # 交互式查看各进程 IO 占用(需安装)

7. 压缩与归档

7.1 tar — 归档打包

tar -cvf archive.tar dir/           # 创建归档(c=create, v=verbose, f=file)
tar -xvf archive.tar                # 解压归档(x=extract)
tar -xvf archive.tar -C /dest/     # 解压到指定目录
tar -cvzf archive.tar.gz dir/      # 打包并 gzip 压缩
tar -xvzf archive.tar.gz            # 解压 gzip 压缩包
tar -cvjf archive.tar.bz2 dir/      # 打包并 bzip2 压缩
tar -xvjf archive.tar.bz2          # 解压 bzip2 压缩包
tar -cvJf archive.tar.xz dir/      # 打包并 xz 压缩(压缩率最高)
tar -tvf archive.tar                # 列出归档内容(不解压)

示例:

# 打包项目目录
tar -cvzf project_backup.tar.gz /home/user/project

# 解压到当前目录
tar -xvzf project_backup.tar.gz

# 解压到指定目录
tar -xvzf project_backup.tar.gz -C /tmp/

# 只解压特定文件
tar -xvzf archive.tar.gz path/to/file

# 打包时排除特定文件
tar -cvzf app.tar.gz --exclude='*.log' --exclude='node_modules' ./app

7.2 zip / unzip

zip -r archive.zip dir/              # 递归压缩目录
zip archive.zip file1 file2          # 压缩多个文件
unzip archive.zip                    # 解压到当前目录
unzip archive.zip -d /dest/          # 解压到指定目录
unzip -l archive.zip                 # 列出压缩包内容
unzip -q archive.zip                # 静默解压

示例:

zip -r project.zip ./project --exclude="*.git*"
unzip archive.zip -d /var/www/html/

7.3 gzip / gunzip

gzip filename                  # 压缩文件(自动删除原文件)
gzip -k filename               # 压缩并保留原文件
gzip -d filename.gz           # 解压
gunzip filename.gz             # 解压
gzip -9 filename               # 最高压缩率

示例:

gzip -k largefile.dat
gunzip access.log.gz

8. 查找与搜索

8.1 find — 查找文件

find /path -name "filename"           # 按文件名查找
find /path -name "*.log"              # 按扩展名查找
find /path -type f                     # 只找文件
find /path -type d                     # 只找目录
find /path -size +100M                # 查找大于100MB的文件
find /path -size -10M                 # 查找小于10MB的文件
find /path -mtime -7                  # 查找7天内修改过的文件
find /path -mtime 7                   # 正好7天前修改的文件
find /path -mtime +30                 # 查找30天前修改的文件
find /path -atime -1                  # 查找1天内访问过的文件
find /path -user username             # 查找属于指定用户的文件
find /path -perm 755                  # 查找权限为755的文件
find /path -empty                     # 查找空文件或空目录
find /path -maxdepth 2 -name "*.conf" # 限制搜索深度
find /path -not -name "*.log"         # 反向条件
find /path \( -name "*.tmp" -o -name "*.bak" \)  # 或条件

示例:

# 查找所有 .log 文件
find /var/log -name "*.log"

# 查找7天前的日志并删除
find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;

# 查找大于100MB的文件
find / -type f -size +100M -exec ls -lh {} \;

# 查找 nginx 配置文件
find / -name "nginx.conf" 2>/dev/null

# 查找并移动
find /tmp -name "*.txt" -exec mv {} /data/ \;

# 查找权限为777的可疑文件
find /var/www -perm 777

# 查找所有空文件
find /tmp -empty

8.2 locate — 快速文件定位(基于索引库)

locate filename                 # 快速查找(需先运行 updatedb)
locate -i filename             # 忽略大小写
updatedb                      # 更新文件索引库

示例:

updatedb
locate nginx.conf
locate -i readme.md

8.3 which / whereis — 查找命令路径

which python                    # 查找命令的完整路径
which -a python                 # 查找所有同名命令
whereis python                  # 查找命令、源码、手册页位置
type command                    # 查看命令类型(内置/外部/别名)

示例:

which python3
# /usr/bin/python3
whereis java
# java: /usr/bin/java /usr/share/man/man1/java.1.gz

8.4 xargs — 将管道输入作为参数

find /var/log -name "*.log" -mtime +30 | xargs rm -f
find . -name "*.txt" | xargs grep "keyword"
find . -name "*.conf" | xargs -I {} cp {} {}.bak
echo "file1 file2 file3" | xargs -n1 rm

示例:

# 批量杀掉所有 python 进程
ps aux | grep python | grep -v grep | awk '{print $2}' | xargs kill -9

# 批量重命名
ls *.txt | xargs -I {} mv {} {}.bak

9. 系统信息与监控

9.1 系统基本信息

uname -a                        # 显示所有系统信息
uname -r                        # 显示内核版本
hostname                        # 显示主机名
hostname -I                     # 显示所有 IP 地址
uptime                          # 显示系统运行时间及负载
cat /etc/os-release             # 查看操作系统版本详情
lsb_release -a                  # 查看发行版信息

示例:

uname -a
# Linux dev-server 5.15.0-generic #1 SMP PREEMPT x86_64 GNU/Linux

cat /etc/os-release
# NAME="Ubuntu"
# VERSION="22.04.4 LTS (Jammy Jellyfish)"

9.2 内存使用

free                            # 显示内存使用概况
free -h                         # 人类可读格式
free -m                         # 以 MB 为单位
free -g                         # 以 GB 为单位
cat /proc/meminfo               # 详细的内存信息

示例:

free -h
#               total        used        free      shared  buff/cache   available
# Mem:          15Gi       4.2Gi       8.5Gi       200Mi       2.3Gi        10Gi
# Swap:        2.0Gi          0B       2.0Gi

9.3 CPU 信息

cat /proc/cpuinfo               # CPU 详细信息
nproc                           # CPU 核心数
lscpu                           # 简洁的 CPU 信息摘要

示例:

nproc
# 8
lscpu
# Architecture:        x86_64
# CPU(s):              8
# Thread(s) per core:  2
# Model name:          Intel(R) Core(TM) i7-10700 @ 2.90GHz

9.4 系统监控工具

top                             # 动态进程监控
htop                            # 增强版监控(需安装)
vmstat 2                        # 每2秒报告虚拟内存统计
vmstat -s                       # 详细统计
iostat -x 2                     # 每2秒报告 CPU 和磁盘 IO
dstat -cdngy                    # 综合统计(CPU/磁盘/网络/gpu/系统)

9.5 系统日志

journalctl                      # 查看 systemd 日志
journalctl -u nginx             # 查看 nginx 服务日志
journalctl -u nginx -f          # 实时追踪
journalctl --since "1 hour ago"
journalctl -p err               # 只显示错误级别
journalctl -xe                  # 显示详情并跳到末尾
tail -f /var/log/syslog        # Ubuntu/Debian 系统日志
tail -f /var/log/messages      # CentOS/RHEL 系统日志

9.6 环境变量

env                             # 显示所有环境变量
echo $PATH                      # 显示 PATH 变量
echo $HOME                      # 显示家目录
echo $SHELL                     # 显示默认 shell
export VAR_NAME=value           # 设置临时环境变量
echo "export VAR=value" >> ~/.bashrc  # 永久设置

示例:

export JAVA_HOME=/opt/java/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
echo $JAVA_HOME

10. 远程连接与文件传输

10.1 SSH — 远程连接

ssh user@hostname               # 连接远程主机
ssh -p 2222 user@hostname      # 指定端口
ssh -i ~/.ssh/key.pem user@host # 使用密钥登录
ssh -L 8080:localhost:80 user@host  # 本地端口转发
ssh -v user@hostname            # 详细模式(调试)
ssh -N -L 8080:localhost:80 user@host  # 只做端口转发,不执行命令

示例:

ssh root@192.168.1.100
ssh -p 2222 deploy@server.example.com
ssh -i ~/.ssh/id_rsa app@10.0.0.5

10.2 SSH 密钥管理

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"  # 生成 SSH 密钥
ssh-copy-id user@hostname       # 将公钥复制到远程主机
cat ~/.ssh/id_rsa.pub           # 查看公钥内容
ssh-keyscan hostname >> ~/.ssh/known_hosts  # 添加主机公钥
ssh-keygen -R hostname          # 删除主机的已知密钥

10.3 SCP — 远程文件复制

scp local_file user@host:/path  # 上传文件到远程
scp user@host:/remote/file /local/  # 从远程下载文件
scp -r local_dir user@host:/path    # 递归复制目录
scp -P 2222 local_file user@host:/path  # 指定端口
scp -i key.pem local_file user@host:/path  # 使用密钥

示例:

scp app.tar.gz root@192.168.1.100:/opt/
scp -r ./project root@192.168.1.100:/var/www/
scp root@192.168.1.100:/var/log/app.log ./

10.4 rsync — 高效文件同步

rsync -av source/ dest/         # 同步目录(-a=归档, -v=verbose)
rsync -av --delete source/ dest/  # 同步并删除目标中多余的文件
rsync -avz source/ user@host:/path  # 压缩传输
rsync -avz --exclude='*.log' source/ dest/  # 排除特定文件
rsync -av --dry-run source/ dest/  # 模拟运行(不实际复制)
rsync -avz -e "ssh -p 2222" source/ user@host:/path  # 指定 SSH 端口

示例:

rsync -avz --exclude='node_modules' --exclude='.git' \
  ./project/ deploy@192.168.1.100:/var/www/project/

# 定时同步备份
rsync -avz --delete /data/ /backup/data/

10.5 SFTP — 安全文件传输

sftp user@hostname              # 启动 SFTP 会话
sftp -i key.pem user@host       # 使用密钥登录

SFTP 交互命令:

put localfile                    # 上传文件
get remotefile                   # 下载文件
ls                               # 列出远程目录
cd /path                         # 切换远程目录
lcd /local/path                  # 切换本地目录
rm filename                      # 删除远程文件
mkdir dirname                    # 创建远程目录
bye                              # 退出

11. 服务与 systemd

11.1 systemctl — 服务管理(systemd 系统)

systemctl start nginx            # 启动服务
systemctl stop nginx             # 停止服务
systemctl restart nginx          # 重启服务
systemctl reload nginx           # 重载配置(不中断连接)
systemctl status nginx           # 查看服务状态
systemctl enable nginx           # 设置开机自启
systemctl disable nginx          # 取消开机自启
systemctl is-enabled nginx       # 检查是否开机自启
systemctl daemon-reload          # 重载 systemd 配置(修改 unit 文件后执行)
systemctl list-units --type=service  # 列出所有服务
systemctl list-unit-files        # 列出所有 unit 文件及其状态
systemctl cat nginx.service      # 查看 service 文件内容

示例:

systemctl status nginx
# ● nginx.service - A high performance web server
#    Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
#    Active: active (running) since Thu 2026-06-04 10:00:00 CST; 1 day ago

11.2 service — 旧版服务管理(SysV init)

service nginx start
service nginx stop
service nginx restart
service nginx status

11.3 查看系统日志(systemd)

journalctl                        # 全部日志
journalctl -u nginx               # 指定服务日志
journalctl -u nginx -f            # 实时追踪
journalctl -u nginx --since today # 今天以来的日志
journalctl -p err                 # 只显示错误
journalctl -k                     # 内核日志
journalctl --disk-usage           # 查看日志占用空间
journalctl --vacuum-time=7d       # 清理7天前的日志

12. 快捷键与 Shell 技巧

12.1 命令行快捷键

快捷键 作用
Ctrl + C 取消当前命令
Ctrl + Z 挂起当前任务(暂停)
Ctrl + D 退出当前 shell(相当于 exit
Ctrl + L 清屏(相当于 clear
Ctrl + A 光标移到行首
Ctrl + E 光标移到行尾
Ctrl + U 删除光标前的所有内容
Ctrl + K 删除光标后的所有内容
Ctrl + W 删除光标前的一个单词
Ctrl + R 搜索历史命令(反向)
Ctrl + G 退出搜索历史
Ctrl + S 暂停屏幕输出
Ctrl + Q 恢复屏幕输出
Tab 自动补全命令/路径/文件名
Tab + Tab 显示所有可能的补全

12.2 历史命令

history                           # 显示历史命令列表
history 10                        # 显示最近10条
!n                                # 执行第n条历史命令
!!                                # 执行上一条命令
!string                           # 执行最近以 string 开头的命令
!$                                # 引用上一条命令的最后一个参数
Ctrl + R                          # 搜索历史命令

示例:

!python                          # 执行上一条 python 命令
!!                               # 重新执行上一条命令
mkdir /tmp/important && cd !$    # 创建目录并 cd 进去(!$ = /tmp/important)

12.3 通配符与引号

ls *.log                         # * 匹配任意字符
ls file?.log                     # ? 匹配单个字符
ls [abc]*.log                    # [] 匹配括号内任意字符
ls [^abc]*.log                   # [^] 排除括号内字符

12.4 输出重定向

command > output.txt             # 标准输出重定向(覆盖)
command >> output.txt            # 标准输出重定向(追加)
command 2> error.txt             # 标准错误重定向(覆盖)
command > output.txt 2>&1         # 标准输出和错误都重定向
command &> output.txt            # 同上(简写)
command > /dev/null 2>&1        # 丢弃所有输出
command < input.txt              # 从文件读取输入

12.5 管道 |

command1 | command2             # 将 command1 的输出作为 command2 的输入
command | tee output.txt         # 同时输出到屏幕和文件
command | grep -v "exclude"     # 过滤输出

示例:

cat /var/log/nginx/access.log | grep "404" | wc -l
ps aux | grep nginx | grep -v grep
du -sh * | sort -h

附录:命令速查表

按功能分类

分类 命令
文件操作 ls, cd, pwd, mkdir, touch, cp, mv, rm, ln, file
文本查看 cat, less, more, head, tail, grep, sed, awk, wc
文本编辑 sed, awk, vi/vim, nano
用户管理 useradd, userdel, usermod, passwd, groupadd, whoami, id
权限管理 chmod, chown, chattr, lsattr
进程管理 ps, top, htop, kill, killall, pkill, nohup, bg, fg
网络诊断 ping, traceroute, nslookup, dig, curl, wget
网络查看 ip, ifconfig, netstat, ss, lsof
磁盘管理 df, du, fdisk, mount, mkfs
压缩归档 tar, zip, unzip, gzip, gunzip
文件搜索 find, locate, which, whereis, xargs
系统监控 top, htop, free, vmstat, iostat, dstat
服务管理 systemctl, service, journalctl
远程连接 ssh, scp, rsync, sftp

按字母排序常用命令

命令 说明
awk 文本分析
cat 查看文件内容
cd 切换目录
chmod 修改文件权限
chown 修改文件所有者
cp 复制文件/目录
curl HTTP 请求
df 磁盘使用情况
diff 比较文件差异
du 目录大小统计
echo 输出文本
find 查找文件
free 内存使用情况
grep 文本搜索
head 查看文件头部
history 历史命令
ifconfig 查看网络接口
kill 终止进程
ln 创建链接
ls 列出目录内容
lsof 查看打开的文件
mkdir 创建目录
mount 挂载文件系统
mv 移动/重命名
netstat 网络连接状态
nohup 后台运行
passwd 修改密码
ping 网络连通性测试
ps 查看进程
pwd 显示当前目录
rm 删除文件/目录
rsync 文件同步
scp 远程文件复制
sed 流编辑器
ssh 远程连接
systemctl 服务管理
tail 查看文件尾部
tar 归档压缩
top 进程监控
touch 创建/修改文件
uname 系统信息
vim 文本编辑器
wget 下载文件
who 查看登录用户
zip 压缩文件

本文档持续更新。如有遗漏或错误,欢迎反馈。