Linux 常用命令速查手册
Linux 常用命令速查手册
本文档面向实际开发、运维工作中的高频 Linux 命令,按功能分类整理,配有翔实示例,适合日常查阅。
目录
- 1. 文件与目录操作
- 2. 文本处理
- 3. 用户与权限
- 4. 进程管理
- 5. 网络命令
- 6. 磁盘与文件系统
- 7. 压缩与归档
- 8. 查找与搜索
- 9. 系统信息与监控
- 10. 远程连接与文件传输
- 11. 服务与 systemd
- 12. 快捷键与 Shell 技巧
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 |
压缩文件 |
本文档持续更新。如有遗漏或错误,欢迎反馈。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 奇点智库 SingularityMind!
评论







