# Linux/命令行常用命令速查卡

> 贴在手边的快速参考。按场景分组，每条命令给用途、最常用例子。

---

## 1. 文件与目录

| 命令 | 用途 | 常用例子 |
|------|------|--------|
| `ls` | 列出目录内容 | `ls -lah` 详细显示所有文件含隐藏 |
| `ls -lR` | 递归列出所有子目录 | `ls -lR /path` 树形显示所有文件 |
| `cd` | 切换目录 | `cd ~` 回家目录；`cd -` 回上次目录 |
| `pwd` | 显示当前目录完整路径 | `pwd` |
| `mkdir` | 创建目录 | `mkdir -p a/b/c` 递归创建多层目录 |
| `cp` | 复制文件或目录 | `cp -r src/ dest/` 递归复制整个目录 |
| `mv` | 移动或重命名 | `mv old.txt new.txt` 重命名；`mv file /path` 移动 |
| `rm` | 删除文件或目录 | `rm -rf dir/` 递归删除目录及内容（谨慎！） |
| `rmdir` | 删除空目录 | `rmdir empty_dir` |
| `touch` | 创建空文件或更新时间戳 | `touch file.txt` |
| `find` | 按条件查找文件 | `find . -name "*.log" -type f` 找所有log文件 |
| `find` 按修改时间 | 查找指定天数内修改过的文件 | `find . -mtime -7` 找7天内修改过的文件 |
| `find` 按大小 | 查找指定大小的文件 | `find . -size +100M` 找超过100MB的文件 |
| `tree` | 树形显示目录结构 | `tree -L 2` 显示2层深度；`tree -I 'node_modules'` 忽略某目录 |
| `ln -s` | 创建软链接（快捷方式） | `ln -s /path/to/file link_name` |
| `ln` | 创建硬链接（实际副本） | `ln /path/to/file link_name` |

---

## 2. 查看与编辑

| 命令 | 用途 | 常用例子 |
|------|------|--------|
| `cat` | 显示文件全部内容 | `cat file.txt` |
| `cat file1 file2` | 合并多个文件输出 | `cat a.txt b.txt > c.txt` |
| `less` | 分页查看大文件 | `less large_file.log`；按 `q` 退出，`/` 搜索 |
| `more` | 分页查看（比 less 功能少） | `more file.txt` |
| `head` | 显示文件前10行 | `head -n 20 file.txt` 显示前20行 |
| `tail` | 显示文件最后10行 | `tail -f app.log` 实时跟踪日志 |
| `tail -n +N` | 从第N行开始显示 | `tail -n +50 file.txt` 显示从第50行开始的内容 |
| `wc` | 统计行数、单词数、字节数 | `wc -l file.txt` 统计行数 |
| `grep` | 按模式搜索文本 | `grep "error" app.log` 找包含error的行 |
| `grep -r` | 递归搜索目录 | `grep -r "TODO" src/` 在整个src目录找TODO |
| `grep -v` | 反向匹配（排除） | `grep -v "^#" config.sh` 排除注释行 |
| `grep -i` | 不区分大小写 | `grep -i "error" log` |
| `sed` | 流编辑（替换、删除等） | `sed 's/old/new/g' file.txt` 替换所有old为new |
| `sed` 删除行 | 删除匹配的行 | `sed '/pattern/d' file.txt` 删除包含pattern的行 |
| `sed -i` | 直接修改文件 | `sed -i 's/foo/bar/g' file.txt` 修改文件本身 |
| `awk` 打印列 | 提取指定列 | `awk '{print $1, $3}' file.txt` 打印第1、3列 |
| `awk` 按分隔符 | 用不同分隔符分割 | `awk -F: '{print $1}' /etc/passwd` 用冒号分割打印第1列 |
| `awk` 条件输出 | 输出符合条件的行 | `awk '$1 > 100' file.txt` 第1列大于100的行 |
| `awk` 统计 | 计数、求和 | `awk '{sum+=$1} END {print sum}' nums.txt` 求和 |

---

## 3. 权限与用户

| 命令 | 用途 | 常用例子 |
|------|------|--------|
| `chmod` | 修改文件权限 | `chmod 755 script.sh` rwxr-xr-x |
| `chmod +x` | 添加执行权限 | `chmod +x install.sh` |
| `chmod -r+X` | 递归给目录和脚本加执行权 | `chmod -R +x ./scripts/` |
| `chown` | 修改文件所有者 | `chown user:group file.txt` |
| `chown -R` | 递归修改所有者 | `chown -R www-data:www-data /var/www/` |
| `sudo` | 以超级用户权限运行 | `sudo apt update` |
| `whoami` | 显示当前用户名 | `whoami` |
| `id` | 显示用户ID和所属组 | `id` |
| `groups` | 显示用户所属的组 | `groups username` |
| `useradd` | 添加用户 | `sudo useradd -m -s /bin/bash newuser` |
| `userdel` | 删除用户 | `sudo userdel -r username` 连同home删除 |
| `passwd` | 修改用户密码 | `passwd` 修改当前用户密码 |

---

## 4. 进程与资源

| 命令 | 用途 | 常用例子 |
|------|------|--------|
| `ps` | 显示进程列表 | `ps aux` 显示所有进程详情 |
| `ps -ef` | 显示完整格式的进程 | `ps -ef \| grep python` 找python进程 |
| `pgrep` | 按名称查找进程PID | `pgrep -f "node app.js"` |
| `top` | 动态监控进程（按CPU使用率排序） | `top` 按 `q` 退出 |
| `htop` | 比top更友好的进程监控 | `htop` 彩色、可交互 |
| `kill` | 终止进程 | `kill 1234` 优雅关闭；`kill -9 1234` 强制杀死 |
| `killall` | 按进程名杀死所有进程 | `killall python` |
| `lsof` | 查看进程打开的文件 | `lsof -p 1234` 显示进程1234打开的文件 |
| `lsof -i` | 查看网络连接 | `lsof -i :8080` 查看占用8080端口的进程 |
| `netstat` | 显示网络统计信息 | `netstat -tuln` 显示所有监听端口 |
| `ss` | netstat的更快替代品 | `ss -tuln` 显示所有TCP/UDP监听 |
| `df` | 显示磁盘使用情况 | `df -h` 人类可读格式 |
| `du` | 显示目录大小 | `du -sh /var/log/` 显示目录总大小 |
| `du -sh *` | 显示当前目录各项大小 | `du -sh ~/.*` 显示隐藏目录 |
| `free` | 显示内存使用情况 | `free -h` 人类可读格式 |
| `vmstat` | 虚拟内存统计 | `vmstat 1 5` 每秒采集5次 |
| `iostat` | 磁盘I/O统计 | `iostat -x 1` 显示详细I/O信息 |

---

## 5. 网络

| 命令 | 用途 | 常用例子 |
|------|------|--------|
| `curl` | 发送HTTP请求 | `curl https://api.example.com/users` |
| `curl -X POST` | 发送POST请求 | `curl -X POST -d '{"key":"value"}' https://api.com/data` |
| `curl -H` | 添加请求头 | `curl -H "Authorization: Bearer token" https://api.com` |
| `curl -o` | 下载文件 | `curl -o myfile.zip https://example.com/file.zip` |
| `curl -L` | 跟随重定向 | `curl -L https://short.url` |
| `wget` | 下载文件（支持续传） | `wget https://example.com/large_file.tar.gz` |
| `wget -c` | 断点续传 | `wget -c https://example.com/file.iso` |
| `ping` | 测试网络连接 | `ping -c 5 google.com` 发送5个包 |
| `traceroute` | 跟踪网络路由 | `traceroute google.com` |
| `ifconfig` 或 `ip` | 显示网络接口信息 | `ip addr show` 或 `ifconfig` |
| `netstat -tuln` | 显示监听的端口 | `netstat -tuln \| grep LISTEN` |
| `ss -tuln` | 快速显示监听端口 | `ss -tuln \| grep LISTEN` |
| `ssh` | 远程连接 | `ssh user@host` 或 `ssh -i key.pem user@host` |
| `scp` | 远程复制文件 | `scp file.txt user@host:/path/` 上传 |
| `scp` 下载 | 从远程下载 | `scp user@host:/path/file.txt ./` |
| `dig` | 查询DNS记录 | `dig example.com` |
| `nslookup` | DNS查询工具 | `nslookup example.com` |
| `whois` | 查询域名信息 | `whois example.com` |

---

## 6. 压缩打包

| 命令 | 用途 | 常用例子 |
|------|------|--------|
| `tar -cvf` | 打包（不压缩） | `tar -cvf archive.tar dir/` |
| `tar -czf` | 打包+gzip压缩 | `tar -czf archive.tar.gz dir/` |
| `tar -cjf` | 打包+bzip2压缩 | `tar -cjf archive.tar.bz2 dir/` |
| `tar -xvf` | 解包（自动识别） | `tar -xvf archive.tar` |
| `tar -xzf` | 解包gzip | `tar -xzf archive.tar.gz` |
| `tar -xjf` | 解包bzip2 | `tar -xjf archive.tar.bz2` |
| `tar -tzf` | 查看tar.gz内容 | `tar -tzf archive.tar.gz \| head` |
| `gzip` | 压缩单个文件 | `gzip file.txt` 生成file.txt.gz |
| `gunzip` | 解压gzip文件 | `gunzip file.txt.gz` |
| `zip` | 打包并压缩（Windows兼容） | `zip -r archive.zip dir/` |
| `unzip` | 解压zip文件 | `unzip archive.zip` |
| `unzip -l` | 查看zip内容 | `unzip -l archive.zip` |
| `bzip2` | bzip2压缩 | `bzip2 file.txt` |
| `bunzip2` | 解压bzip2 | `bunzip2 file.txt.bz2` |

**常用组合速查**：
- 压缩整个目录：`tar -czf backup.tar.gz /path/to/dir`
- 解压到指定目录：`tar -xzf archive.tar.gz -C /target/path`
- 增量打包（只打包修改过的）：`tar -czf backup.tar.gz --newer-mtime-than=ref.txt dir/`

---

## 7. 管道与重定向

| 概念 | 用途 | 常用例子 |
|------|------|--------|
| `\|` | 管道（前一命令输出作为后一命令输入） | `cat log.txt \| grep "error"` |
| `>` | 重定向输出到文件（覆盖） | `echo "hello" > file.txt` |
| `>>` | 重定向输出到文件（追加） | `echo "world" >> file.txt` |
| `2>` | 重定向错误输出 | `command 2> error.log` |
| `2>&1` | 将错误输出合并到标准输出 | `command 2>&1 \| tee output.log` |
| `<` | 重定向输入 | `mysql < dump.sql` |
| `xargs` | 将前一命令输出作为参数 | `find . -name "*.log" \| xargs rm` 删除所有log |
| `xargs -0` | 处理含空格的文件名 | `find . -print0 \| xargs -0 rm` |
| `tee` | 既输出到屏幕也保存到文件 | `command \| tee output.txt` |

**常用管道套路**：
```bash
# 查找最大的文件
find . -type f -exec ls -lh {} \; | sort -k5 -rh | head -5

# 统计出现最多的词
cat file.txt | tr ' ' '\n' | sort | uniq -c | sort -rn | head

# 查找占用磁盘最多的目录
du -sh */ | sort -rh | head -10

# 提取日志中的错误并计数
grep "ERROR" app.log | awk '{print $NF}' | sort | uniq -c | sort -rn

# 在所有PHP文件中查找并替换
find . -name "*.php" -type f | xargs sed -i 's/old/new/g'
```

---

## 8. 快捷键与技巧

### 命令行快捷键

| 快捷键 | 功能 |
|--------|------|
| `Ctrl+R` | 反向搜索历史命令（再按继续搜索）；按 `Ctrl+G` 取消搜索 |
| `Ctrl+A` | 光标移到行首 |
| `Ctrl+E` | 光标移到行尾 |
| `Ctrl+L` | 清屏（等同 `clear`） |
| `Ctrl+U` | 删除光标前的所有字符 |
| `Ctrl+K` | 删除光标后的所有字符 |
| `Ctrl+W` | 删除光标前一个单词 |
| `Alt+D` | 删除光标后一个单词 |
| `Ctrl+Y` | 恢复刚才删除的内容 |
| `Tab` | 自动补全文件名或命令 |
| `Tab` `Tab` | 显示所有可能的补全 |
| `!!` | 重新运行上一条命令 |
| `!$` | 使用上一条命令的最后一个参数 | 例：`ls /path/to/file; cat !$` |

### 逻辑操作符

| 操作符 | 用途 | 例子 |
|--------|------|-----|
| `&&` | 逻辑与（前一条成功才运行后一条） | `npm test && npm build` |
| `\|\|` | 逻辑或（前一条失败才运行后一条） | `npm test \|\| echo "Test failed"` |
| `;` | 顺序执行（不管前一条成功否） | `cd dir; ls; pwd` |

### 后台运行

| 用法 | 说明 | 例子 |
|------|------|-----|
| `command &` | 在后台运行命令 | `python train.py &` |
| `nohup` | 后台运行且不被hangup中断 | `nohup python train.py > train.log 2>&1 &` |
| `Ctrl+Z` | 挂起当前前台进程 | 运行中按Ctrl+Z |
| `bg` | 将挂起的进程转为后台 | 先Ctrl+Z，再输入 `bg` |
| `fg` | 将后台进程转为前台 | `fg %1` 或 `fg` |
| `jobs` | 显示后台任务列表 | `jobs` |
| `disown %1` | 从shell中脱离进程（不会被关闭） | `disown %1` |

### 常用技巧

```bash
# 查看命令历史并运行第N条
history
!100  # 运行第100条命令

# 查看上次命令的执行时间和返回码
time command
echo $?  # 显示上一条命令的返回码

# 在多个命令间编辑并运行
^old^new  # 替换上一条命令中的old为new并运行

# 查看上一条命令的完整信息
history 1

# 快速切换目录
cd -  # 回到上一次的目录
pushd /path  # 将当前目录压入栈
popd  # 返回栈顶目录

# 查找并运行历史命令
Ctrl+R  # 进入搜索模式，输入关键字搜索

# 显示执行时间较长的命令
history | awk '{cmd=$2; count[cmd]++} END {for (c in count) print c, count[c]}' | sort -k2 -rn | head
```

---

## 9. 文件查找与替换速查

| 场景 | 命令 |
|------|------|
| 找文件名包含 "test" 的所有文件 | `find . -name "*test*"` |
| 找超过100MB的文件 | `find . -size +100M` |
| 找7天内修改过的文件 | `find . -mtime -7` |
| 找所有权限为777的文件 | `find . -perm 777` |
| 在所有文件中查找 "error" 字符串 | `grep -r "error" .` |
| 在特定文件类型中查找 | `find . -name "*.js" -type f -exec grep "TODO" {} \;` |
| 替换所有 "old" 为 "new" | `find . -type f -name "*.txt" \| xargs sed -i 's/old/new/g'` |
| 删除所有临时文件 | `find . -name "*.tmp" -delete` |
| 找重复的文件（按内容） | `find . -type f -exec md5sum {} \; \| sort \| uniq -d -w 32` |

---

## 10. 系统信息与监控

| 命令 | 用途 | 例子 |
|------|------|-----|
| `uname -a` | 显示系统信息 | `uname -a` |
| `lsb_release -a` | 显示Linux发行版信息 | `lsb_release -a` |
| `cat /proc/cpuinfo` | 显示CPU信息 | `cat /proc/cpuinfo \| grep processor \| wc -l` 显示CPU核数 |
| `uptime` | 显示系统运行时间 | `uptime` |
| `dmesg` | 显示系统启动日志 | `dmesg \| tail -20` |
| `systemctl` | 管理系统服务 | `systemctl status nginx` |
| `journalctl` | 查看系统日志 | `journalctl -u nginx -n 20` 查看nginx最后20条日志 |
| `crontab -e` | 编辑定时任务 | `crontab -e` |
| `crontab -l` | 查看定时任务 | `crontab -l` |

---

## 快速参考：最常用的20条

```bash
ls -lah                    # 详细列表含隐藏
cd ~; pwd                  # 回家目录、显示路径
find . -name "*.txt"       # 查找文件
grep -r "pattern" .        # 递归查找内容
cat file.txt               # 显示文件
sed 's/old/new/g' file     # 替换内容
chmod +x script.sh         # 加执行权
ps aux | grep process      # 查找进程
kill -9 PID                # 杀死进程
top                        # 监控CPU/内存
df -h; du -sh /path        # 磁盘使用
ssh user@host              # 远程连接
scp file user@host:/path   # 远程复制
curl https://api.url       # 发送HTTP请求
tar -czf backup.tar.gz dir # 打包压缩
history | grep command     # 查找历史
Ctrl+R                     # 搜索历史命令
cmd1 && cmd2               # 条件执行
nohup cmd > log.txt 2>&1 & # 后台运行
echo $?                    # 查看返回码
```

---

**更新时间**: 2025年2月
**适用范围**: Linux, macOS, WSL, 其他兼容POSIX的系统
