理 理悟万池
`⌘K`

全部工具

CHEATSHEET · LINUX

# Linux 命令行 Cheatsheet

实战命令组合 + 语义搜索：用中文意图（"删除 30 天前日志"、"看占用 8080 端口"）就能找到对应命令。

命令 | 说明 | 分类 |
--- | --- | --- | ---
ls -lah | 列出当前目录（含隐藏 + 人类可读尺寸） | 文件目录 |
ls -lt | head | 按修改时间倒序看最近修改的文件 | 文件目录 |
tree -L 2 -a | 看目录结构 2 层（含隐藏） | 文件目录 |
cd - | 回到上一个工作目录 | 文件目录 |
mkdir -p a/b/c | 一次创建多级目录 | 文件目录 |
touch file.txt | 新建空文件 / 更新 mtime | 文件目录 |
cp -av src/ dst/ | 保留属性 + 详细输出地复制目录 | 文件目录 |
cp -r --parents path/to/file dst/ | 保留中间路径地复制 | 文件目录 |
mv old new | 重命名/移动 | 文件目录 |
rm -rf -- *.tmp ⚠ rm -rf 不可恢复，先 echo 验证 | 强制删除匹配的临时文件 | 文件目录 |
ln -sfn /opt/app/v2 /opt/app/current | 原子地切换 symlink | 文件目录 |
realpath ./x | 解析为绝对路径 | 文件目录 |
basename /a/b/c.txt .txt | 取文件名（去后缀） | 文件目录 |
dirname /a/b/c.txt | 取所在目录 | 文件目录 |
stat -c "%n %s %y" file | 看尺寸+修改时间 | 文件目录 |
cp file{,.bak} | shell 扩展备份一份 | 文件目录 |
cat -n file | 带行号显示文件 | 文本处理 |
less +F file.log | 类 tail -f 但可滚动搜索 | 文本处理 |
tail -n 200 -f /var/log/syslog | 实时跟踪日志最后 200 行 | 文本处理 |
head -c 200 file | 看前 200 字节 | 文本处理 |
grep -RIn --color=auto 'TODO' . | 递归在文本文件中搜索（带行号、忽略二进制） | 文本处理 |
grep -E -e 'pat1' -e 'pat2' file | 多模式 OR 搜索 | 文本处理 |
grep -v '^#' nginx.conf | grep -v '^$' | 去掉注释和空行后再看配置 | 文本处理 |
sed -i.bak 's/foo/bar/g' file | 原地替换并备份原文件 | 文本处理 |
sed -n '10,20p' file | 打印第 10–20 行 | 文本处理 |
awk '{print $1, $NF}' file | 打印每行第 1 列与最后一列 | 文本处理 |
awk -F, 'NR>1 {sum+=$3} END{print sum}' data.csv | CSV 跳过表头求和第三列 | 文本处理 |
cut -d':' -f1 /etc/passwd | 按分隔符取列 | 文本处理 |
sort -u file | 排序去重 | 文本处理 |
sort | uniq -c | sort -rn | head | TopN 频率统计经典三件套 | 文本处理 |
tr -d '\r' < win.txt > unix.txt | 去掉 CRLF | 文本处理 |
wc -l file | 统计行数 | 文本处理 |
diff -u a b | less | unified diff 比较 | 文本处理 |
paste -d, a.txt b.txt | 按行合并两个文件为 CSV | 文本处理 |
iconv -f GBK -t UTF-8 in.txt -o out.txt | 编码转换 | 文本处理 |
find . -type f -name "*.log" -mtime -7 | 7 天内修改的 .log 文件 | 查找 |
find . -type f -size +100M | 大于 100M 的文件 | 查找 |
find . -name '*.tmp' -delete | 查找并删除 | 查找 |
find . -type f -name '*.js' -exec wc -l {} + | 对匹配文件批量执行命令 | 查找 |
find . -type f -print0 | xargs -0 grep -l 'pat' | 安全处理含空格文件名的批量搜索 | 查找 |
locate filename | 基于 mlocate 数据库的快速查找（需 updatedb） | 查找 |
which -a node | 查看 PATH 中所有 node 位置 | 查找 |
fd -e ts pattern | fd（rust 实现的 find）按扩展名查找 | 查找 |
rg -n -t ts "useEffect" | ripgrep 在 ts 文件中搜索 | 查找 |
tar czf out.tgz dir/ | 打包并 gzip 压缩 | 归档压缩 |
tar xzf in.tgz -C /target | 解包到指定目录 | 归档压缩 |
tar tf in.tgz | head | 不解压看内容清单 | 归档压缩 |
tar cJf out.txz dir/ | xz 压缩（最高压缩比之一） | 归档压缩 |
zip -r out.zip dir/ | 打 zip 包 | 归档压缩 |
unzip -l in.zip | 查看 zip 内容 | 归档压缩 |
gzip -k file | 保留原文件压缩 | 归档压缩 |
gzip -d file.gz | 解压 .gz | 归档压缩 |
chmod 755 script.sh | 常用脚本权限：所有人读/执行，所有者写 | 权限 |
chmod -R u+rwX,go+rX dir/ | 递归赋读 + 目录可进入（X 大写：仅目录加 x） | 权限 |
chmod 600 ~/.ssh/id_ed25519 | SSH 私钥必须 600 | 权限 |
chown -R user:group dir/ | 改属主与属组 | 权限 |
umask 022 | 默认创建文件 644 / 目录 755 | 权限 |
getfacl file / setfacl -m u:alice:rw file | 细粒度 ACL 查看 / 赋权 | 权限 |
sudo -i | 切到 root 交互 shell | 权限 |
sudo !! | 用 sudo 重跑上一条命令 | 权限 |
ps -ef | grep [n]ginx | 看 nginx 进程（[n] 技巧避免匹配自身 grep） | 进程 |
ps -eo pid,pcpu,pmem,cmd --sort=-pcpu | head | CPU 占用 Top 进程 | 进程 |
top / htop | 交互式监控（htop 更直观） | 进程 |
kill -TERM <pid> | 优雅终止进程 | 进程 |
kill -9 <pid> ⚠ 可能丢数据，仅在 TERM 失败时使用 | 强制结束 | 进程 |
pkill -f "node server.js" | 按命令行模式批量结束 | 进程 |
pgrep -af pattern | 按模式查找进程并显示命令 | 进程 |
nohup ./run.sh > out.log 2>&1 & | 后台启动并解除终端依赖 | 进程 |
jobs / fg %1 / bg %1 / disown -h %1 | Shell 作业控制 | 进程 |
lsof -p <pid> | 看进程打开的所有文件描述符 | 进程 |
lsof -i :8080 | 看哪个进程占用 8080 端口 | 进程 |
fuser -k 8080/tcp | 直接杀掉占用 8080 的进程 | 进程 |
strace -p <pid> | 附着到进程跟踪 syscall | 进程 |
systemctl status nginx | 看服务状态 | 服务/Systemd |
systemctl restart nginx | 重启服务 | 服务/Systemd |
systemctl enable --now nginx | 开机自启 + 立即启动 | 服务/Systemd |
systemctl daemon-reload | 改完 unit 文件后重载 | 服务/Systemd |
systemctl list-units --failed | 看所有失败的服务 | 服务/Systemd |
journalctl -u nginx -f | 跟踪某服务日志 | 服务/Systemd |
journalctl --since "1 hour ago" -p err | 最近 1 小时 error 级别日志 | 服务/Systemd |
systemctl edit nginx | 安全地新增 override 配置 | 服务/Systemd |
ip a | 看所有网络接口与 IP | 网络 |
ip route | 看路由表 | 网络 |
ss -tlnp | 看本机所有监听 TCP 端口及进程 | 网络 |
ss -tnp state established | 看已建立的 TCP 连接 | 网络 |
curl -fsSL https://example.com | 静默地下载或获取，失败时退出非 0 | 网络 |
curl -i -X POST -H "Content-Type: application/json" -d '{"a":1}' https://x | POST JSON 并打印响应头 | 网络 |
curl -O -L --remote-header-name <url> | 保留服务端建议的文件名下载 | 网络 |
wget -c <url> | 断点续传下载 | 网络 |
dig +short example.com | DNS 查询，仅看结果 | 网络 |
dig @8.8.8.8 example.com AAAA | 指定 DNS 服务器查 IPv6 | 网络 |
nslookup example.com | 兼容性 DNS 查询 | 网络 |
ping -c 4 host | ping 4 次 | 网络 |
mtr host | 组合 ping+traceroute 的实时探测 | 网络 |
nc -zv host 1-1024 | 扫端口 | 网络 |
nc -lk 9000 | 简易 TCP 监听（调试用） | 网络 |
tcpdump -i any -nn -s0 -w cap.pcap port 80 | 抓 80 端口流量到 pcap | 网络 |
iptables -L -n -v | 看 netfilter 规则 | 网络 |
firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload | firewalld 永久放行端口 | 网络 |
df -hT | 看挂载点剩余空间与文件系统类型 | 磁盘 |
du -sh * | 当前目录下每个项目的占用 | 磁盘 |
du -h --max-depth=1 / | sort -h | 从根目录按大小排序 | 磁盘 |
lsblk -f | 看块设备 + 文件系统 | 磁盘 |
blkid | 看设备 UUID/LABEL | 磁盘 |
mount /dev/sdb1 /mnt | 挂载 | 磁盘 |
umount /mnt | 卸载 | 磁盘 |
mkfs.ext4 /dev/sdb1 ⚠ 会清空分区数据 | 格式化为 ext4 | 磁盘 |
dd if=/dev/zero of=test bs=1M count=100 status=progress ⚠ of= 写错会毁数据 | 生成 100MB 测试文件 / 测写入速度 | 磁盘 |
fsck -y /dev/sdb1 | 修复文件系统 | 磁盘 |
iostat -x 1 5 | I/O 利用率采样 | 磁盘 |
id | 看当前用户 uid/gid/组 | 用户 |
whoami | 当前用户名 | 用户 |
sudo useradd -m -s /bin/bash alice | 创建用户带 home 与 bash | 用户 |
sudo passwd alice | 设置/重置密码 | 用户 |
sudo usermod -aG docker alice | 把用户加入 docker 组 | 用户 |
sudo userdel -r alice | 删除用户及 home | 用户 |
last -n 20 | 看最近登录记录 | 用户 |
w | 看当前在线用户 | 用户 |
dmesg -T | tail -n 100 | 看内核日志（带时间） | 日志 |
journalctl -k | systemd 风格的内核日志 | 日志 |
journalctl --vacuum-size=200M | 把 journald 日志压缩到 200M 内 | 日志 |
logger -t myapp "hello" | 向 syslog 写一条日志 | 日志 |
top -o %MEM | 按内存排序 | 性能监控 |
free -h | 看内存使用 | 性能监控 |
vmstat 1 5 | CPU/IO/内存采样 5 次 | 性能监控 |
mpstat -P ALL 1 | 每核 CPU 利用率 | 性能监控 |
pidstat -p <pid> 1 | 某进程的资源采样 | 性能监控 |
sar -u 1 5 | 系统活动报表（来自 sysstat） | 性能监控 |
time <cmd> | 测某命令耗时 | 性能监控 |
watch -n 1 "ls -lah /tmp" | 每秒刷新执行 | 性能监控 |
ssh-keygen -t ed25519 -C "you@host" | 生成 ed25519 密钥 | SSH/远程 |
ssh-copy-id user@host | 把公钥安装到对端 | SSH/远程 |
ssh -L 8080:localhost:80 user@host | 本地端口转发 | SSH/远程 |
ssh -R 9000:localhost:9000 user@host | 反向端口转发 | SSH/远程 |
ssh -D 1080 user@host | 动态 SOCKS5 代理 | SSH/远程 |
scp -r dir user@host:/path | 上传整个目录 | SSH/远程 |
rsync -avzP --delete src/ user@host:dst/ | 高效增量同步并删除多余文件 | SSH/远程 |
rsync -avh --exclude node_modules src/ dst/ | 本地同步并排除目录 | SSH/远程 |
ssh-add -l | 看 ssh-agent 已加载密钥 | SSH/远程 |
~/.ssh/config Host alias | 常用别名配置（HostName / User / IdentityFile / Port） | SSH/远程 |
env | sort | 看所有环境变量 | 环境变量 |
export PATH="$HOME/bin:$PATH" | 把目录加到 PATH 前面 | 环境变量 |
echo $SHELL | 看当前 shell | 环境变量 |
set -a; source .env; set +a | 把 .env 全部 export 到当前 shell | 环境变量 |
unset VAR | 清除变量 | 环境变量 |
ps -ef | grep -v grep | grep node | awk '{print $2}' | xargs -r kill -9 | 杀掉所有 node 进程（pattern 不匹配自身） | 管道组合 |
find . -name '*.log' -mtime +30 | xargs -r rm -v | 删除 30 天前的日志 | 管道组合 |
du -ah . | sort -rh | head -n 20 | 当前目录下最大 20 个文件/目录 | 管道组合 |
history | awk '{print $2}' | sort | uniq -c | sort -rn | head | 最常用命令 Top10 | 管道组合 |
tail -F access.log | grep -v 'health' | tee filtered.log | 过滤健康检查并旁路落盘 | 管道组合 |
date +%Y%m%d_%H%M%S | 时间戳后缀（备份命名常用） | 管道组合 |
curl -s ip.sb | 一行查看公网 IP | 管道组合 |
openssl rand -base64 32 | 生成 32 字节随机串 | 管道组合 |
openssl s_client -connect host:443 -servername host </dev/null | 查看远端 TLS 证书与握手 | 管道组合 |
openssl x509 -in cert.pem -noout -dates -subject -issuer | 看证书有效期与签发者 | 管道组合 |
docker ps -a | 看所有容器（含已停止） | 容器 |
docker logs -f --tail 200 <c> | 跟踪容器日志 | 容器 |
docker exec -it <c> bash | 进入容器交互 shell | 容器 |
docker run --rm -it -v $PWD:/work -w /work alpine sh | 一次性容器，挂载当前目录 | 容器 |
docker system df | 看 Docker 各类对象占用 | 容器 |
docker system prune -af --volumes ⚠ 会删卷，确保无业务数据 | 清理未用容器/镜像/卷 | 容器 |
docker stats | 实时容器资源 | 容器 |
docker compose up -d --build | 后台启动并强制重建 | 容器 |
docker inspect -f '{{.NetworkSettings.IPAddress}}' <c> | 取容器 IP | 容器 |

共164 / 164 条 · 语义搜索：中文意图自动扩展为英文命令 token，例：「删除」匹配 rm/unlink，「端口」匹配 ss/lsof。