Shell 常用命令速查手册
# 📖 文档说明
本文档系统性地整理了日常开发中最常用的 Shell 命令,涵盖系统管理、包管理、文件操作、文本处理、网络工具、压缩解压等多个方面。适合作为快速查询手册使用。
# 📑 目录导航
- 1. 系统信息 - 系统版本、进程监控、资源使用
- 2. 包管理 - brew、apt、apt-get
- 3. 服务管理 - brew services、launchctl、systemctl
- 4. 文件操作 - file、stat、exiftool、lsof、ls、find、fd
- 5. 磁盘管理 - du
- 6. 文本处理 - basename、sed、awk、tr、cut、cmp
- 7. 网络工具 - ping、dig、curl、wget、nc、防火墙
- 8. 压缩解压 - gzip、xz、tar、7z
- 9. 进程管理 - kill、ps、jobs
- 10. 其他工具 - openssl、printf、shasum、clipboard
- 11. 实战案例 - 词频统计、文件转置、网络诊断
# 1. 系统信息
# 查看系统版本
macOS:
# 查看系统版本
sw_vers
# 查看详细系统信息
system_profiler SPSoftwareDataType | grep "System Version"
# 读取系统版本
defaults read loginwindow SystemVersionStampAsString
2
3
4
5
6
7
8
Linux:
# 查看发行版信息
cat /etc/os-release
# 查看内核版本
uname -r
2
3
4
5
# uname
显示系统信息
常用选项:
| 选项 | 说明 |
|---|---|
-s | 显示操作系统名称 |
-n | 显示主机名 |
-r | 显示内核版本 |
-m | 显示机器架构 |
-a | 显示所有信息 |
示例:
# 查看架构
uname -m
# 输出:x86_64 或 arm64
# 查看所有系统信息
uname -a
# 输出:Darwin hostname 23.6.0 Darwin Kernel Version...
2
3
4
5
6
7
# top
实时显示系统进程和资源使用情况
基本用法:
top
输出信息:
- 系统信息:Load averages、CPU 使用率、内存使用、磁盘活动
- 进程列表:PID、USER、%CPU、%MEM、TIME、COMMAND
常用选项:
top -u username # 显示特定用户的进程
top -s 2 # 每 2 秒更新一次
top -n 5 # 更新 5 次后退出
top -o cpu # 按 CPU 使用率排序
top -i # 隐藏空闲进程
2
3
4
5
交互命令:
| 按键 | 功能 |
|---|---|
q | 退出 |
P | 按 CPU 排序 |
M | 按内存排序 |
R | 反转排序 |
u | 按用户过滤 |
# 2. 包管理
# brew
macOS 包管理工具
官方软件包搜索:Homebrew Formulae (opens new window)
安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
常用命令:
| 命令 | 说明 |
|---|---|
brew search <package> | 搜索软件包 |
brew install <package> | 安装软件包 |
brew uninstall <package> | 卸载软件包 |
brew update | 更新 Homebrew 本身 |
brew upgrade | 升级所有已安装软件 |
brew upgrade <package> | 升级特定软件 |
brew list | 列出已安装软件 |
brew list --versions | 显示版本号 |
brew info <package> | 查看软件详细信息 |
brew deps <package> | 查看依赖关系 |
brew deps --tree <package> | 树形显示依赖 |
brew outdated | 查看过期软件 |
brew cleanup | 清理旧版本 |
brew cleanup -n | 预览清理(不执行) |
brew doctor | 诊断系统问题 |
brew pin <package> | 锁定版本(不升级) |
brew unpin <package> | 解除锁定 |
示例:
# 搜索和安装
brew search python
brew install [email protected]
# 查看软件信息和依赖
brew info node
brew deps --tree node
# 管理多版本
brew install [email protected] [email protected]
brew link [email protected]
# 清理和诊断
brew cleanup -n # 预览清理
brew cleanup # 执行清理
brew doctor # 检查问题
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Cask(GUI 应用管理):
# 安装 GUI 应用
brew install --cask google-chrome
brew install --cask visual-studio-code
brew install --cask iterm2
# 查看和管理 Cask
brew list --cask
brew info --cask google-chrome
brew uninstall --cask google-chrome
2
3
4
5
6
7
8
9
高级用法:
# 切换软件源(国内加速)
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
# 查看安装位置
brew --prefix
brew --prefix python
# 强制重新安装
brew reinstall <package>
# 查看配置
brew config
2
3
4
5
6
7
8
9
10
11
12
13
# apt
Debian/Ubuntu 包管理工具
# 更新和升级
sudo apt update # 更新软件包列表
sudo apt upgrade # 升级已安装软件
sudo apt full-upgrade # 完全升级系统
# 安装和卸载
sudo apt install package # 安装
sudo apt remove package # 卸载
# 搜索和查看
apt search package # 搜索
apt show package # 查看信息
apt list --installed # 列出已安装
# 清理
sudo apt autoremove # 清理不需要的包
sudo apt clean # 清理缓存
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 3. 服务管理
# brew services (macOS)
Homebrew 提供的服务管理工具(推荐)
常用命令:
| 命令 | 说明 |
|---|---|
brew services list | 列出所有服务状态 |
brew services start <service> | 启动服务 |
brew services stop <service> | 停止服务 |
brew services restart <service> | 重启服务 |
brew services run <service> | 临时运行(不开机自启) |
brew services cleanup | 清理未使用的服务 |
示例:
# 查看所有服务
brew services list
# 启动 MySQL(开机自启)
brew services start mysql
# 临时运行 Redis(不开机自启)
brew services run redis
# 停止 Nginx
brew services stop nginx
# 重启 PostgreSQL
brew services restart postgresql
2
3
4
5
6
7
8
9
10
11
12
13
14
常用服务名称:
mysql # MySQL 数据库
postgresql # PostgreSQL 数据库
redis # Redis 缓存
nginx # Nginx 服务器
mongodb-community # MongoDB 数据库
rabbitmq # RabbitMQ 消息队列
2
3
4
5
6
# launchctl (macOS)
macOS 底层服务管理工具
常用命令:
| 命令 | 说明 |
|---|---|
launchctl list | 列出所有服务 |
launchctl load <plist> | 加载服务 |
launchctl unload <plist> | 卸载服务 |
launchctl start <service> | 启动服务 |
launchctl stop <service> | 停止服务 |
launchctl enable <service> | 启用服务 |
launchctl disable <service> | 禁用服务 |
示例:
# 查看所有服务
launchctl list
# 查看特定服务
launchctl list | grep mysql
# 加载服务(用户级别)
launchctl load ~/Library/LaunchAgents/com.example.service.plist
# 加载服务(系统级别)
sudo launchctl load /Library/LaunchDaemons/com.example.service.plist
# 启动/停止服务
launchctl start com.example.service
launchctl stop com.example.service
# 卸载服务
launchctl unload ~/Library/LaunchAgents/com.example.service.plist
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
plist 文件位置:
| 路径 | 权限 | 启动时机 |
|---|---|---|
~/Library/LaunchAgents/ | 用户级别 | 用户登录后 |
/Library/LaunchAgents/ | 系统级别 | 任意用户登录后 |
/Library/LaunchDaemons/ | 系统级别 | 系统启动时 |
参考:plist 配置
# systemctl (Linux)
Linux 服务管理工具(systemd)
常用命令:
| 命令 | 说明 |
|---|---|
systemctl list-units --type=service | 列出所有服务 |
systemctl start <service> | 启动服务 |
systemctl stop <service> | 停止服务 |
systemctl restart <service> | 重启服务 |
systemctl reload <service> | 重新加载配置 |
systemctl status <service> | 查看服务状态 |
systemctl enable <service> | 设置开机自启 |
systemctl disable <service> | 禁用开机自启 |
systemctl is-active <service> | 检查是否运行中 |
systemctl is-enabled <service> | 检查是否开机自启 |
示例:
# 查看所有服务
systemctl list-units --type=service
# 查看服务状态
systemctl status nginx
# 启动服务
sudo systemctl start nginx
# 停止服务
sudo systemctl stop nginx
# 重启服务
sudo systemctl restart nginx
# 设置开机自启
sudo systemctl enable nginx
# 禁用开机自启
sudo systemctl disable nginx
# 查看服务日志
journalctl -u nginx
journalctl -u nginx -f # 实时查看
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
服务配置文件位置:
/etc/systemd/system/ # 系统服务
/usr/lib/systemd/system/ # 软件包服务
~/.config/systemd/user/ # 用户服务
2
3
# service (Linux - 传统方式)
兼容旧版 Linux 的服务管理
# 启动/停止/重启
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
sudo service nginx status
# 列出所有服务
service --status-all
2
3
4
5
6
7
8
服务管理工具选择
- macOS + Homebrew 软件:优先使用
brew services - macOS 系统服务:使用
launchctl - 现代 Linux (systemd):使用
systemctl - 老版 Linux:使用
service
# 4. 文件操作
# diff - 文件比较工具
比较文件或目录的差异,是版本控制和配置管理的重要工具
# 基本语法
diff [选项] 文件1 文件2
diff [选项] 目录1 目录2
2
# 常用选项速查
| 选项 | 说明 | 使用场景 |
|---|---|---|
-u | 统一格式输出(推荐) | 代码审查、生成补丁 |
-c | 上下文格式输出 | 需要更多上下文信息 |
-q | 只显示是否不同 | 快速检查文件是否相同 |
-s | 显示相同文件 | 目录比较时查看相同文件 |
-r | 递归比较目录 | 比较项目目录 |
-N | 将缺失文件视为空 | 新增/删除文件的对比 |
-i | 忽略大小写 | 不区分大小写的比较 |
-w | 忽略空白字符 | 忽略缩进和空格差异 |
-B | 忽略空行 | 忽略空行变化 |
# 快速上手
1. 基本文件比较
# 最简单的比较
diff file1.txt file2.txt
# 推荐:统一格式输出(最易读)
diff -u file1.txt file2.txt
# 快速检查:只显示是否不同
diff -q file1.txt file2.txt
2
3
4
5
6
7
8
输出示例:
--- file1.txt 2025-01-19 10:00:00
+++ file2.txt 2025-01-19 11:00:00
@@ -1,3 +1,4 @@
line 1 # 未改变
-old line 2 # 删除的行
+new line 2 # 新增的行
+extra line # 新增的行
line 3 # 未改变
2
3
4
5
6
7
8
输出符号说明:
| 符号 | 含义 |
|---|---|
- | 从 file1 删除的行 |
+ | 在 file2 新增的行 |
(空格) | 未改变的行 |
--- | file1 的文件名和时间 |
+++ | file2 的文件名和时间 |
@@ | 行号范围标识 |
# 实战场景
场景 1:配置文件管理
# 修改配置前备份
cp nginx.conf nginx.conf.bak
# 修改配置后比较差异
diff -u nginx.conf.bak nginx.conf
# 查看具体改了什么
diff -u nginx.conf.bak nginx.conf | less
# 确认无误后删除备份
rm nginx.conf.bak
# 如果改错了,快速恢复
cp nginx.conf.bak nginx.conf
2
3
4
5
6
7
8
9
10
11
12
13
14
场景 2:代码审查
# 比较两个版本的代码
diff -u old_version.py new_version.py
# 生成补丁文件供审查
diff -u old_version.py new_version.py > code_review.patch
# 查看补丁内容
cat code_review.patch
# 应用补丁
patch old_version.py < code_review.patch
2
3
4
5
6
7
8
9
10
11
场景 3:目录对比
# 递归比较两个项目目录
diff -r project_v1/ project_v2/
# 显示相同和不同的文件
diff -rs project_v1/ project_v2/
# 忽略特定文件类型
diff -r --exclude="*.log" --exclude="node_modules" \
old_project/ new_project/
2
3
4
5
6
7
8
9
场景 4:系统文件监控
# 备份重要系统文件
cp /etc/hosts /etc/hosts.original
# 定期检查是否被修改
diff -q /etc/hosts /etc/hosts.original
# 查看具体修改内容
diff -u /etc/hosts.original /etc/hosts
# 脚本自动监控
if ! diff -q /etc/hosts /etc/hosts.backup > /dev/null 2>&1; then
echo "警告:hosts 文件已被修改!"
diff -u /etc/hosts.backup /etc/hosts
fi
2
3
4
5
6
7
8
9
10
11
12
13
14
场景 5:数据文件比较
# 比较 CSV 文件(忽略空格)
diff -w data_v1.csv data_v2.csv
# 比较日志文件(忽略空行)
diff -B log_yesterday.txt log_today.txt
# 比较并保存差异
diff -u data_old.csv data_new.csv > data_changes.diff
2
3
4
5
6
7
8
# 忽略差异选项
# 忽略大小写
diff -i file1.txt file2.txt
# 忽略所有空白字符(空格、Tab)
diff -w file1.txt file2.txt
# 忽略行尾空白
diff -Z file1.txt file2.txt
# 忽略空行
diff -B file1.txt file2.txt
# 组合使用:忽略大小写和空白
diff -iw file1.txt file2.txt
# 忽略匹配特定模式的行
diff -I '^#' file1.txt file2.txt # 忽略注释行
diff -I '^$' file1.txt file2.txt # 忽略空行
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 输出格式对比
1. 默认格式(简单但不直观)
diff file1.txt file2.txt
# 输出:
# 2c2
# < old line
# ---
# > new line
2
3
4
5
6
2. 统一格式 -u(推荐,最常用)
diff -u file1.txt file2.txt
# 输出:
# --- file1.txt
# +++ file2.txt
# @@ -1,3 +1,3 @@
# line1
# -old line
# +new line
# line3
2
3
4
5
6
7
8
9
3. 上下文格式 -c(详细)
diff -c file1.txt file2.txt
# 输出:
# *** file1.txt
# --- file2.txt
# *************** 1,3 ****
# line1
# ! old line
# line3
# --- 1,3 ----
# line1
# ! new line
# line3
2
3
4
5
6
7
8
9
10
11
12
4. 并排格式 -y(直观对比)
diff -y file1.txt file2.txt
# 输出:
# line1 line1
# old line | new line
# line3 line3
2
3
4
5
# 补丁文件操作
生成补丁:
# 生成单文件补丁
diff -u original.py modified.py > changes.patch
# 生成目录补丁
diff -Naur old_project/ new_project/ > project.patch
# 带描述信息的补丁
cat > feature.patch << 'EOF'
---
+++
修复:登录页面验证错误
详细说明:
1. 修复邮箱验证正则表达式
2. 添加密码强度检查
EOF
diff -u old.py new.py >> feature.patch
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
应用补丁:
# 查看补丁内容
cat changes.patch
# 预览补丁效果(不实际应用)
patch --dry-run < changes.patch
# 应用补丁
patch original.py < changes.patch
# 应用目录补丁
patch -p1 < project.patch
# 撤销补丁
patch -R original.py < changes.patch
2
3
4
5
6
7
8
9
10
11
12
13
14
# 实用脚本
配置文件监控脚本:
#!/bin/bash
# config_monitor.sh - 监控配置文件变化
CONFIG="/etc/nginx/nginx.conf"
BACKUP="${CONFIG}.backup"
# 检查备份是否存在
if [ ! -f "$BACKUP" ]; then
echo "创建初始备份..."
cp "$CONFIG" "$BACKUP"
exit 0
fi
# 比较差异
if ! diff -q "$BACKUP" "$CONFIG" > /dev/null; then
echo "⚠️ 配置文件已变化!"
echo ""
echo "差异详情:"
diff -u "$BACKUP" "$CONFIG" --color=auto
echo ""
read -p "是否接受更改?(y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
cp "$CONFIG" "$BACKUP"
echo "✅ 备份已更新"
else
cp "$BACKUP" "$CONFIG"
echo "↩️ 已恢复原配置"
fi
else
echo "✅ 配置文件未变化"
fi
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
批量文件对比脚本:
#!/bin/bash
# compare_dirs.sh - 比较两个目录并生成报告
DIR1="$1"
DIR2="$2"
REPORT="diff_report_$(date +%Y%m%d_%H%M%S).txt"
if [ $# -ne 2 ]; then
echo "用法: $0 <目录1> <目录2>"
exit 1
fi
echo "正在比较 $DIR1 和 $DIR2 ..."
echo "生成报告:$REPORT"
{
echo "====== 目录比较报告 ======"
echo "时间: $(date)"
echo "目录1: $DIR1"
echo "目录2: $DIR2"
echo ""
echo "=== 不同的文件 ==="
diff -rq "$DIR1" "$DIR2" | grep differ
echo ""
echo "=== 仅在目录1存在 ==="
diff -rq "$DIR1" "$DIR2" | grep "Only in $DIR1"
echo ""
echo "=== 仅在目录2存在 ==="
diff -rq "$DIR1" "$DIR2" | grep "Only in $DIR2"
echo ""
echo "=== 详细差异 ==="
diff -ru "$DIR1" "$DIR2"
} > "$REPORT"
echo "✅ 报告已生成:$REPORT"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 性能优化技巧
# 只检查是否相同(最快)
diff -q file1 file2
# 大文件比较(限制输出)
diff -u large1.log large2.log | head -100
# 二进制文件比较
diff -a binary1.bin binary2.bin
# 并行比较多个文件
for f in *.txt; do
diff -q "$f" "backup/$f" &
done
wait
2
3
4
5
6
7
8
9
10
11
12
13
14
# 与其他工具配合
# 与 git 配合
git diff # 查看工作区改动
git diff --cached # 查看暂存区改动
git diff HEAD~1 HEAD # 比较两个提交
# 与 vimdiff 配合
vimdiff file1.txt file2.txt # 可视化对比
# 与 colordiff 配合(彩色输出)
diff -u file1.txt file2.txt | colordiff
# 与 awk 配合统计
diff -u old new | grep '^+' | wc -l # 统计新增行数
diff -u old new | grep '^-' | wc -l # 统计删除行数
2
3
4
5
6
7
8
9
10
11
12
13
14
# 常见问题
Q: 为什么推荐使用 -u 选项?
A: 统一格式 (-u) 输出最易读,广泛用于代码审查和生成补丁,是 Git 的默认格式。
Q: 如何比较二进制文件?
A: 使用 diff -a 或专门的工具如 cmp、hexdump。
cmp file1.bin file2.bin # 二进制比较
hexdump -C file1.bin > hex1.txt # 转换为十六进制对比
hexdump -C file2.bin > hex2.txt
diff hex1.txt hex2.txt
2
3
4
Q: 如何忽略多种类型的差异?
A: 可以组合使用多个选项:
diff -iwB file1 file2 # 同时忽略大小写、空白、空行
# 最佳实践
- ✅ 总是使用
-u选项:输出格式最清晰 - ✅ 重要操作前先备份:
cp file file.bak - ✅ 使用
-q快速检查:批量比较时提高效率 - ✅ 保存差异为补丁:便于审查和应用
- ✅ 结合版本控制:Git 已内置强大的 diff 功能
- ✅ 编写脚本自动化:定期监控重要文件变化
# 替代工具推荐
| 工具 | 特点 | 使用场景 |
|---|---|---|
vimdiff | 可视化对比 | 交互式编辑 |
colordiff | 彩色输出 | 终端可视化 |
git diff | 版本控制集成 | Git 仓库 |
meld | GUI 工具 | 图形化对比 |
Beyond Compare | 专业工具 | 商业项目 |
# file
识别文件类型
常用选项:
| 选项 | 说明 |
|---|---|
-b | 简洁输出(不显示文件名) |
-i | 输出 MIME 类型 |
-I | 不执行文件内容检查 |
-z | 查看压缩文件内容 |
示例:
# 查看文件类型
file document.pdf
# 输出: document.pdf: PDF document, version 1.4
# 查看多个文件
file *
# 输出 MIME 类型
file -i image.jpg
# 输出: image.jpg: image/jpeg; charset=binary
# 简洁输出
file -b script.sh
# 输出: Bourne-Again shell script, ASCII text executable
# 查看压缩文件内容
file -z archive.tar.gz
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# stat
显示文件详细信息
常用选项:
| 选项 | 说明 |
|---|---|
-f | 显示文件系统信息 |
-L | 跟随符号链接 |
-t | 简洁输出 |
-x | 详细输出(Linux) |
示例:
# 查看文件详细信息
stat file.txt
# macOS 输出示例:
# File: "file.txt"
# Size: 1234 Blocks: 8 IO Block: 4096 regular file
# Device: 1,4 Inode: 12345678 Links: 1
# Access: 2025-01-19 12:00:00
# Modify: 2025-01-19 11:30:00
# Change: 2025-01-19 11:30:00
# 只显示文件大小(macOS)
stat -f %z file.txt
# 只显示修改时间(macOS)
stat -f %Sm file.txt
# Linux 格式化输出
stat --format='%n %s bytes' file.txt
stat --format='%y' file.txt # 修改时间
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
常用格式化选项(macOS):
| 格式 | 说明 |
|---|---|
%z | 文件大小(字节) |
%Sm | 修改时间 |
%Sa | 访问时间 |
%Sc | 创建时间 |
%u | 用户 ID |
%g | 组 ID |
%p | 权限(八进制) |
# exiftool
查看和编辑文件元数据(需安装)
安装:
brew install exiftool # macOS
sudo apt install libimage-exiftool-perl # Ubuntu
2
常用选项:
| 选项 | 说明 |
|---|---|
-a | 显示所有信息 |
-s | 简短标签名 |
-G | 显示组名 |
-n | 数值格式 |
-csv | CSV 格式输出 |
-r | 递归处理目录 |
示例:
# 查看图片元数据
exiftool image.jpg
# 查看特定字段
exiftool -ImageSize -DateTimeOriginal image.jpg
# 查看所有元数据
exiftool -a -G1 image.jpg
# 批量查看目录
exiftool -r /path/to/photos/
# 导出为 CSV
exiftool -csv -r /path/to/photos/ > metadata.csv
# 修改元数据
exiftool -Artist="John Doe" image.jpg
exiftool -Copyright="2025" image.jpg
# 删除所有元数据
exiftool -all= image.jpg
# 查看视频信息
exiftool video.mp4
# 查看 PDF 信息
exiftool document.pdf
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# lsof
列出打开的文件和网络连接
常用选项:
| 命令 | 说明 |
|---|---|
lsof | 显示所有打开的文件 |
lsof -p <PID> | 显示特定进程打开的文件 |
lsof -u <user> | 显示特定用户打开的文件 |
lsof -i :<port> | 显示特定端口的连接 |
lsof -i | 显示所有网络连接 |
实战示例:
# 查看端口占用
lsof -i :8080
# 查看 MySQL 连接
lsof -i | grep mysql
# 查看进程打开的文件
lsof -p 1234
2
3
4
5
6
7
8
# ls
列出目录内容
常用选项:
| 选项 | 说明 |
|---|---|
-l | 详细信息 |
-a | 显示隐藏文件 |
-h | 人类可读大小 |
-t | 按时间排序 |
-r | 逆序 |
-R | 递归显示 |
-d | 只显示目录 |
示例:
ls -lh # 详细信息 + 可读大小
ls -lt # 按时间排序
ls -d */ # 只显示目录
2
3
# find
强大的文件搜索工具
常用选项:
| 选项 | 说明 |
|---|---|
-type f/d | 文件/目录 |
-name | 按名称(支持通配符) |
-iname | 忽略大小写 |
-size | 按大小 |
-mtime | 按修改时间 |
-exec | 执行命令 |
示例:
# 查找文件
find ./ -type f -name "*.txt"
# 查找大文件
find ./ -size +10M -type f
# 查找并删除
find ./ -name "*.log" -exec rm {} \;
# 查找 7 天内修改的文件
find ./ -type f -mtime -7
2
3
4
5
6
7
8
9
10
11
# fd
find 的现代替代品(更快)
参考:fd 笔记
fd pattern # 基本搜索
fd -t f pattern # 只搜索文件
fd -H pattern # 包括隐藏文件
fd -E node_modules pattern # 排除目录
2
3
4
# 5. 磁盘管理
# du
查看磁盘使用情况
常用选项:
| 选项 | 说明 |
|---|---|
-s | 只显示总大小 |
-h | 人类可读格式 |
-a | 显示所有文件 |
-d N | 限制深度(macOS) |
--max-depth=N | 限制深度(Linux) |
--exclude | 排除目录 |
示例:
# 查看目录大小
du -sh /path/to/directory
# 查看前 10 大文件/目录
du -ah . | sort -rh | head -n 10
# 只显示一级子目录
du -h --max-depth=1 .
# 排除 node_modules
du -sh --exclude=node_modules .
2
3
4
5
6
7
8
9
10
11
# 6. 文本处理
# basename
提取文件名
# 提取文件名
basename /path/to/file.txt
# 输出:file.txt
# 去除后缀
basename /path/to/file.txt .txt
# 输出:file
# 从 Git URL 提取项目名
basename "[email protected]:user/repo.git" .git
# 输出:repo
2
3
4
5
6
7
8
9
10
11
# sed
流编辑器
参考:sed 笔记
sed 's/old/new/' file.txt # 替换
sed 's/old/new/g' file.txt # 全局替换
sed -i 's/old/new/g' file.txt # 直接修改文件
sed '/^$/d' file.txt # 删除空行
sed -n '10,20p' file.txt # 打印 10-20 行
2
3
4
5
# awk
文本分析工具
参考:awk 笔记
awk '{print $1}' file.txt # 打印第一列
awk 'NR==2{print $1}' file.txt # 打印第 2 行第 1 列
awk '$3 > 100 {print $1, $3}' file.txt # 条件过滤
awk 'END {print NR}' file.txt # 统计行数
awk -F: '{print $1}' /etc/passwd # 指定分隔符
2
3
4
5
# tr
字符替换和删除
| 用法 | 命令 | 作用 |
|---|---|---|
| 大小写转换 | tr 'a-z' 'A-Z' | 小写转大写 |
| 删除字符 | tr -d '0-9' | 删除数字 |
| 替换字符 | tr ' ' '\n' | 空格转换成换行 |
| 压缩重复 | tr -s ' ' | 合并连续空格 |
| 只保留数字 | tr -cd '0-9' | 删除非数字 |
# cut
按列切割文本
# 提取第 2 列(以 = 分隔)
echo "key=value" | cut -d '=' -f2
# 提取第 1-3 列
echo "a b c d e" | cut -d ' ' -f1-3
# 提取字符位置 1-5
echo "hello world" | cut -c1-5
2
3
4
5
6
7
8
# cmp
比较文件
# 比较文件
cmp file1.txt file2.txt
# 静默模式(只返回退出码)
if ! cmp -s "$file1" "$file2"; then
echo "文件不同"
fi
2
3
4
5
6
7
# sort / uniq / wc
# 排序
sort file.txt
sort -r file.txt # 逆序
sort -n file.txt # 数字排序
sort -u file.txt # 排序并去重
# 去重
sort file.txt | uniq
uniq -c file.txt # 统计重复次数
# 统计
wc -l file.txt # 行数
wc -w file.txt # 单词数
wc -c file.txt # 字节数
2
3
4
5
6
7
8
9
10
11
12
13
14
# head / tail
# 查看文件头部
head -n 20 file.txt
# 查看文件尾部
tail -n 20 file.txt
# 实时查看日志(最常用)
tail -f /var/log/app.log
# 从第 100 行开始显示
tail -n +100 file.txt
2
3
4
5
6
7
8
9
10
11
# 7. 网络工具
# 7.1 网络配置
# networksetup (macOS)
# 查询网络硬件端口
networksetup -listallhardwareports
# 查看网络服务
networksetup -listallnetworkservices
# 获取 Wi-Fi 信息
networksetup -getinfo Wi-Fi
# 设置 DNS
networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
2
3
4
5
6
7
8
9
10
11
# ifconfig
配置和显示网络接口(传统工具)
常用选项:
| 选项 | 说明 |
|---|---|
-a | 显示所有接口(包括未激活) |
-s | 简短输出 |
up | 激活接口 |
down | 停用接口 |
netmask | 设置子网掩码 |
broadcast | 设置广播地址 |
示例:
# 显示所有接口
ifconfig
# 显示特定接口
ifconfig en0 # macOS Wi-Fi
ifconfig en1 # macOS 以太网
ifconfig eth0 # Linux 以太网
ifconfig wlan0 # Linux Wi-Fi
# 显示简短信息
ifconfig -s
# 激活/停用接口
sudo ifconfig en0 up
sudo ifconfig en0 down
# 设置 IP 地址(临时)
sudo ifconfig en0 192.168.1.100 netmask 255.255.255.0
# 设置 MTU
sudo ifconfig en0 mtu 1500
# 查看 MAC 地址
ifconfig en0 | grep ether
# 查看 IP 地址
ifconfig en0 | grep inet
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
常见接口名称:
| 接口 | 系统 | 说明 |
|---|---|---|
en0 | macOS | Wi-Fi |
en1 | macOS | 以太网 |
lo0 | macOS | 回环接口 |
eth0 | Linux | 以太网 |
wlan0 | Linux | 无线网卡 |
lo | Linux | 回环接口 |
# ip (Linux)
现代网络配置工具(推荐)
常用子命令:
| 命令 | 说明 |
|---|---|
ip addr | 管理 IP 地址 |
ip link | 管理网络接口 |
ip route | 管理路由表 |
ip neigh | 管理 ARP 缓存 |
ip tunnel | 管理隧道 |
ip rule | 管理路由策略 |
地址管理(ip addr):
# 显示所有接口
ip addr show
ip a
# 显示特定接口
ip addr show eth0
ip a s eth0
# 添加 IP 地址
sudo ip addr add 192.168.1.100/24 dev eth0
# 删除 IP 地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 清空接口所有 IP
sudo ip addr flush dev eth0
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
接口管理(ip link):
# 显示所有接口
ip link show
ip link
# 显示接口统计
ip -s link
ip -s link show eth0
# 启用/禁用接口
sudo ip link set eth0 up
sudo ip link set eth0 down
# 修改 MTU
sudo ip link set eth0 mtu 1500
# 修改 MAC 地址
sudo ip link set eth0 address 00:11:22:33:44:55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
路由管理(ip route):
# 显示路由表
ip route show
ip r
# 显示特定网络的路由
ip route show 192.168.1.0/24
# 添加默认网关
sudo ip route add default via 192.168.1.1
# 添加静态路由
sudo ip route add 10.0.0.0/8 via 192.168.1.254
# 删除路由
sudo ip route del 10.0.0.0/8
# 查看到特定 IP 的路由
ip route get 8.8.8.8
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
邻居表管理(ip neigh):
# 显示 ARP 缓存
ip neigh show
ip n
# 添加静态 ARP 条目
sudo ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0
# 删除 ARP 条目
sudo ip neigh del 192.168.1.100 dev eth0
# 清空 ARP 缓存
sudo ip neigh flush dev eth0
2
3
4
5
6
7
8
9
10
11
12
实用技巧:
# 彩色输出
ip -c a
# JSON 格式输出
ip -j a
# 监控实时变化
ip monitor
# 查看接口统计(持续更新)
watch -n 1 'ip -s link show eth0'
# 快速查看本机 IP
ip -4 addr show scope global | grep inet
2
3
4
5
6
7
8
9
10
11
12
13
14
ifconfig vs ip
- ifconfig:传统工具,逐渐被淘汰
- ip:现代工具,功能更强大,推荐使用
- macOS 只有
ifconfig,Linux 两者都有
# 7.2 网络诊断
# ping
测试网络连通性
# 基本 ping
ping google.com
# 指定次数
ping -c 4 google.com
# 指定间隔
ping -i 2 google.com
# 只显示摘要
ping -c 10 -q google.com
2
3
4
5
6
7
8
9
10
11
ping vs dig
- ping:可能解析到 CDN IP
- dig:可能解析到源站 IP
# netstat
显示网络状态和统计信息
常用选项:
| 选项 | 说明 |
|---|---|
-a | 显示所有连接和监听端口 |
-n | 数字格式显示地址和端口 |
-t | 显示 TCP 连接 |
-u | 显示 UDP 连接 |
-l | 只显示监听端口 |
-p | 显示进程 ID 和程序名 |
-r | 显示路由表 |
-s | 显示统计信息 |
-i | 显示网络接口 |
-c | 持续输出 |
示例:
# 显示所有连接(数字格式)
netstat -an
# 显示所有 TCP 监听端口
netstat -tln
# 显示所有 TCP 连接(带进程)
sudo netstat -tanp
# 显示所有 UDP 连接
netstat -uln
# 查看路由表
netstat -r
netstat -rn # 数字格式
# 显示网络接口统计
netstat -i
# 显示协议统计
netstat -s
netstat -st # 只显示 TCP 统计
# 持续监控连接(每秒更新)
netstat -c
# 查找特定端口
netstat -an | grep :8080
# 统计各状态连接数
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
输出状态说明:
| 状态 | 说明 |
|---|---|
LISTEN | 监听中 |
ESTABLISHED | 已建立连接 |
TIME_WAIT | 等待关闭 |
CLOSE_WAIT | 等待关闭 |
SYN_SENT | 连接请求已发送 |
SYN_RECV | 收到连接请求 |
macOS 特定选项:
# 显示进程名(macOS)
netstat -anvp tcp
# 查看每个协议的统计
netstat -s -p tcp
netstat -s -p udp
2
3
4
5
6
现代替代工具
推荐使用 ss 命令(更快):
ss -tuln # 类似 netstat -tuln
ss -tanp # 类似 netstat -tanp
ss -s # 统计信息
2
3
# traceroute
追踪路由路径
常用选项:
| 选项 | 说明 |
|---|---|
-n | 不解析主机名(更快) |
-I | 使用 ICMP(需 root) |
-T | 使用 TCP SYN |
-U | 使用 UDP(默认) |
-p <port> | 指定端口 |
-m <hops> | 最大跳数 |
-q <queries> | 每跳查询次数 |
-w <timeout> | 等待超时时间(秒) |
示例:
# 基本追踪
traceroute google.com
# 不解析主机名(更快)
traceroute -n google.com
# 使用 ICMP(类似 Windows tracert)
sudo traceroute -I google.com
# 使用 TCP(适合防火墙环境)
sudo traceroute -T -p 443 google.com
# 设置最大跳数
traceroute -m 15 google.com
# 设置超时时间
traceroute -w 2 google.com
# 每跳只查询 1 次(更快)
traceroute -q 1 google.com
# 追踪到特定端口
traceroute -p 8080 example.com
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
输出解读:
traceroute to google.com (172.217.160.46), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.234 ms 1.123 ms 1.089 ms
2 10.0.0.1 (10.0.0.1) 5.678 ms 5.432 ms 5.321 ms
3 * * * # 超时或被防火墙阻止
2
3
4
- 第一列:跳数
- 第二列:主机名和 IP
- 后三列:三次探测的响应时间
* * *:超时或防火墙阻止
traceroute vs mtr
推荐使用 mtr(更强大):
brew install mtr # macOS
sudo apt install mtr # Ubuntu
sudo mtr google.com # 实时追踪
2
3
4
# 7.3 DNS 查询
# dig
DNS 查询工具(推荐)
# 基本查询
dig example.com
# 只显示答案
dig +short example.com
dig +noall +answer example.com
# 查询不同记录类型
dig A example.com # IPv4
dig AAAA example.com # IPv6
dig MX example.com # 邮件服务器
dig NS example.com # 域名服务器
dig TXT example.com # TXT 记录
# 指定 DNS 服务器
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com
# 反向查询
dig -x 8.8.8.8
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# nslookup
交互式 DNS 查询
# 基本查询
nslookup example.com
# 指定 DNS 服务器
nslookup example.com 8.8.8.8
# 查询特定类型
nslookup -type=MX example.com
2
3
4
5
6
7
8
# 7.4 文件下载
# curl
强大的数据传输工具
常用选项:
| 选项 | 说明 |
|---|---|
-O | 保存为远程文件名 |
-o <file> | 保存到指定文件 |
-L | 跟随重定向 |
-I | 只获取 HTTP 头 |
-v | 显示详细信息 |
-s | 静默模式 |
-x | 使用代理 |
-u | HTTP 认证 |
-H | 添加 HTTP 头 |
-d | POST 数据 |
基本下载:
# 下载文件
curl -O https://example.com/file.zip
# 下载并重命名
curl -o myfile.zip https://example.com/file.zip
# 跟随重定向
curl -LO https://example.com/file.zip
# 断点续传
curl -C - -O https://example.com/largefile.zip
2
3
4
5
6
7
8
9
10
11
HTTP 请求:
# GET 请求
curl https://api.example.com/users
# 只获取 HTTP 头
curl -I https://example.com
# POST 请求(表单)
curl -X POST -d "key1=value1&key2=value2" https://example.com/api
# POST 请求(JSON)
curl -X POST \
-H "Content-Type: application/json" \
-d '{"name":"John","age":30}' \
https://api.example.com/users
# 添加认证头
curl -H "Authorization: Bearer token" https://api.example.com/data
# 使用代理
curl -x http://127.0.0.1:7890 https://google.com
# 测试代理是否工作
curl https://ipinfo.io # 不用代理
curl -x http://127.0.0.1:7890 https://ipinfo.io # 用代理
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
实战案例:
# 下载并执行脚本
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
# 安装 Vim 插件管理器
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# 测试 API 响应时间
curl -w "time_total: %{time_total}s\n" -o /dev/null -s https://example.com
2
3
4
5
6
7
8
9
# wget
非交互式下载工具
常用选项:
| 选项 | 说明 |
|---|---|
-O <file> | 指定文件名 |
-P <dir> | 指定目录 |
-c | 断点续传 |
-b | 后台下载 |
-q | 静默模式 |
-r | 递归下载 |
--limit-rate | 限速 |
示例:
# 基本下载
wget https://example.com/file.zip
# 断点续传
wget -c https://example.com/largefile.zip
# 后台下载
wget -b https://example.com/file.zip
# 限速下载(200KB/s)
wget --limit-rate=200k https://example.com/file.zip
# 递归下载网站
wget -r -np -k -p http://example.com
2
3
4
5
6
7
8
9
10
11
12
13
14
curl vs wget
- API 测试、单文件下载:用
curl - 镜像网站、批量下载:用
wget
# 7.5 端口扫描
# nc (netcat)
网络瑞士军刀
# 测试端口
nc -zv example.com 80
# 扫描端口范围
nc -zv example.com 20-100
# 监听端口(服务端)
nc -l 5000
# 连接服务器(客户端)
nc example.com 5000
# 文件传输
nc -l 5000 > received.txt # 接收端
nc server_ip 5000 < file.txt # 发送端
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 7.6 代理工具
# proxychains-ng
强制程序通过代理
安装:
brew install proxychains-ng # macOS
sudo apt install proxychains4 # Ubuntu
2
配置 (/etc/proxychains.conf):
dynamic_chain
proxy_dns
[ProxyList]
socks5 127.0.0.1 1080
http 127.0.0.1 8080
2
3
4
5
6
使用:
proxychains4 curl https://ipinfo.io
proxychains4 git clone https://github.com/user/repo.git
2
# 7.7 防火墙
# ufw (Ubuntu/Debian)
# 启用/禁用
sudo ufw enable
sudo ufw disable
# 查看状态
sudo ufw status
sudo ufw status verbose
# 允许端口
sudo ufw allow 22/tcp
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# 拒绝端口
sudo ufw deny 23/tcp
# 删除规则
sudo ufw delete allow 80/tcp
# 允许特定 IP
sudo ufw allow from 192.168.1.100
# 限制连接速率(防暴力破解)
sudo ufw limit ssh
# 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# iptables (Linux)
# 查看规则
sudo iptables -L -v -n
# 允许端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 拒绝 IP
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# 清空规则
sudo iptables -F
# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
# 恢复规则
sudo iptables-restore < /etc/iptables/rules.v4
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
防火墙选择
- 新手:用
ufw(简单易用) - 高级:用
iptables(功能强大)
# 7.8 网络工具速查
# DNS 缓存刷新(macOS)
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# 查看 DNS 服务器
scutil --dns | grep 'nameserver' # macOS
cat /etc/resolv.conf # Linux
# 查看网络连接
netstat -an | grep ESTABLISHED
ss -tuln # 更快的替代品
2
3
4
5
6
7
8
9
10
11
# 8. 压缩解压
# gzip / gunzip
# 压缩
gzip file.txt
gzip -k file.txt # 保留原文件
# 解压
gunzip file.txt.gz
gunzip -k file.txt.gz # 保留压缩文件
# 查看内容(不解压)
zcat file.txt.gz
2
3
4
5
6
7
8
9
10
# xz
# 压缩(高压缩率)
xz file.txt
xz -k file.txt # 保留原文件
# 解压
xz -d file.txt.xz
xz -d -k file.txt.xz # 保留压缩文件
# 查看信息
xz -l file.txt.xz
2
3
4
5
6
7
8
9
10
# tar
打包和归档工具
常用选项:
| 选项 | 说明 |
|---|---|
-c | 创建归档 |
-x | 解压归档 |
-t | 列出内容 |
-f | 指定文件名 |
-v | 显示详细过程 |
-z | gzip 压缩 |
-j | bzip2 压缩 |
-J | xz 压缩 |
-C | 指定解压目录 |
示例:
# 压缩
tar -czvf archive.tar.gz directory/
tar -cJvf archive.tar.xz directory/ # 更高压缩率
# 解压
tar -xzvf archive.tar.gz
tar -xzvf archive.tar.gz -C /path/to/dir
# 查看内容
tar -tzvf archive.tar.gz
# 只解压特定文件
tar -xzvf archive.tar.gz file.txt
2
3
4
5
6
7
8
9
10
11
12
13
# 7z
# 安装
brew install p7zip # macOS
sudo apt install p7zip-full # Ubuntu
# 压缩
7z a compressed.7z file.txt
7z a -pPassword encrypted.7z file.txt # 加密
# 解压
7z x compressed.7z # 保留目录结构
7z e compressed.7z # 不保留目录结构
# 列出内容
7z l compressed.7z
2
3
4
5
6
7
8
9
10
11
12
13
14
# 9. 进程管理
# kill
终止进程
# 终止进程
kill <PID>
# 强制终止
kill -9 <PID>
kill -SIGKILL <PID>
# 终止所有匹配进程
killall process_name
pkill process_name
# 查看可用信号
kill -l
2
3
4
5
6
7
8
9
10
11
12
13
# ps
显示进程信息
# 显示所有进程
ps aux
# 显示特定用户进程
ps -u username
# 查找进程
ps aux | grep process_name
# 显示进程树
ps auxf
pstree # 更直观
2
3
4
5
6
7
8
9
10
11
12
# 10. 其他工具
# openssl
加密和安全工具
# 生成随机密码
openssl rand -base64 12 | tr -d '/+=' | cut -c1-8
# 计算哈希
openssl md5 file.txt
openssl sha256 file.txt
# Base64 编解码
echo "hello" | openssl base64
echo "aGVsbG8K" | openssl base64 -d
2
3
4
5
6
7
8
9
10
# printf
格式化输出
# 进制转换
printf "%x\n" 255 # 十进制 → 十六进制
printf "%o\n" 255 # 十进制 → 八进制
printf "%d\n" 0xff # 十六进制 → 十进制
printf "%d\n" $((8#077)) # 八进制 → 十进制
2
3
4
5
# shasum / md5
# SHA-256
shasum -a 256 file.txt
echo -n "string" | shasum -a 256
# MD5
md5 file.txt # macOS
md5sum file.txt # Linux
2
3
4
5
6
7
# tee
同时输出到文件和标准输出
command | tee output.txt
command | tee -a output.txt # 追加
./script.sh | tee script.log # 保存日志
2
3
# xargs
将标准输入转换为命令参数
参考:xargs 笔记
# 基本用法
find . -name "*.txt" | xargs rm
# 处理文件名中的空格
find . -name "*.txt" -print0 | xargs -0 rm
# 交互确认
find . -name "*.txt" | xargs -p rm
2
3
4
5
6
7
8
# clipboard
剪贴板操作
macOS:
cat file.txt | pbcopy # 复制
pbpaste # 粘贴
pbpaste > file.txt # 粘贴到文件
2
3
Linux:
cat file.txt | xclip -selection clipboard
xclip -selection clipboard -o
2
# 其他常用工具
# 查找命令路径
which curl
command -v curl
type curl
# 生成 UUID
uuidgen
# 查看主机名
hostname
# 查看当前用户
whoami
# 测量命令耗时
time command
# 显示环境变量
env
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 11. 实战案例
# 11.1 词频统计
LeetCode: https://leetcode-cn.com/problems/word-frequency/ (opens new window)
输入(words.txt):
the day is sunny the the
the sunny is is
2
解决方案:
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{print $2,$1}'
输出:
the 4
is 3
sunny 2
day 1
2
3
4
命令解析:
tr -s ' ' '\n'- 空格转换为换行(分词)sort- 排序(相同词相邻)uniq -c- 统计重复次数sort -r- 按数量倒序awk '{print $2,$1}'- 调换位置
# 11.2 转置文件
LeetCode: https://leetcode-cn.com/problems/transpose-file/ (opens new window)
输入(file.txt):
name age
alice 21
ryan 30
2
3
期望输出:
name alice ryan
age 21 30
2
解决方案:
#!/bin/bash
COLS=$(head -1 file.txt | wc -w)
for (( i = 1; i <= $COLS; i++ )); do
awk -v col=$i '{print $col}' file.txt | xargs
done
2
3
4
5
# 11.3 提取 Android 设备序列号
adb devices | awk 'NR==2{print $1}'
# 11.4 查找大文件并排序
# 查找并按大小排序
find . -type f -exec du -h {} + | sort -rh | head -n 10
# 使用 fd(更快)
fd -t f -x du -h | sort -rh | head -n 10
2
3
4
5
# 11.5 统计代码行数
# 统计所有 Python 文件行数
find . -name "*.py" | xargs wc -l
# 排除空行和注释
find . -name "*.py" | xargs grep -v "^#" | grep -v "^$" | wc -l
2
3
4
5
# 11.6 批量重命名文件
# 将所有 .txt 改为 .md
for file in *.txt; do
mv "$file" "${file%.txt}.md"
done
# 使用 rename 命令
rename 's/\.txt$/.md/' *.txt
2
3
4
5
6
7
# 11.7 查找并替换文本
# 查找包含 "TODO" 的文件
grep -r "TODO" .
# 批量替换
find . -name "*.txt" -exec sed -i 's/old/new/g' {} \;
# 使用 rg(更快)
rg -l "old" | xargs sed -i 's/old/new/g'
2
3
4
5
6
7
8
# 11.8 监控日志文件
# 实时查看日志
tail -f /var/log/app.log
# 查看并过滤错误
tail -f /var/log/app.log | grep ERROR
# 查看多个日志文件
tail -f /var/log/app.log /var/log/error.log
2
3
4
5
6
7
8
# 11.9 网络诊断流程
# 1. 测试网络连通性
ping -c 4 google.com
# 2. 查看 DNS 解析
dig google.com
# 3. 追踪路由
traceroute google.com
# 4. 查看端口
netstat -tuln
# 5. 测试端口连通性
nc -zv google.com 443
# 6. 查看防火墙规则
sudo ufw status # Ubuntu
sudo iptables -L # 其他 Linux
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 11.10 系统性能分析
# CPU 使用率 Top 10
ps aux | sort -nrk 3,3 | head -n 10
# 内存使用率 Top 10
ps aux | sort -nrk 4,4 | head -n 10
# 磁盘使用率 Top 10
du -ah / | sort -rh | head -n 10
# 查看系统负载
uptime
# 查看内存使用
free -h # Linux
vm_stat # macOS
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 📚 参考资源
# 官方文档
# 在线资源
- Linux 命令查询 (opens new window)
- Linux 命令大全 (opens new window)
- Bash 脚本教程 (opens new window)
- 小林 coding - 网络协议 (opens new window)
# 推荐工具
- ripgrep (opens new window) - 更快的 grep
- fd (opens new window) - 更快的 find
- bat (opens new window) - 更好的 cat
- exa (opens new window) - 更好的 ls
- htop (opens new window) - 更好的 top
# 💡 使用技巧
# 1. 管道组合
# 查找 + 排序 + 统计
find . -name "*.log" | wc -l
# 查找 + 过滤 + 删除
find . -name "*.tmp" | xargs rm
# 日志 + 过滤 + 统计
tail -f app.log | grep ERROR | wc -l
2
3
4
5
6
7
8
# 2. 命令别名
# 添加到 ~/.bashrc 或 ~/.zshrc
alias ll='ls -lh'
alias la='ls -lah'
alias grep='grep --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
2
3
4
5
6
# 3. 快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+C | 终止当前命令 |
Ctrl+Z | 暂停当前命令 |
Ctrl+D | 退出当前 Shell |
Ctrl+L | 清屏 |
Ctrl+R | 搜索历史命令 |
Ctrl+A | 光标移到行首 |
Ctrl+E | 光标移到行尾 |
Ctrl+U | 删除光标前内容 |
Ctrl+K | 删除光标后内容 |
# 4. 历史命令
history # 查看历史
!123 # 执行第 123 条命令
!! # 执行上一条命令
!$ # 上一条命令的最后一个参数
!* # 上一条命令的所有参数
2
3
4
5
# 5. 后台任务
command & # 后台运行
jobs # 查看后台任务
fg %1 # 将任务 1 调到前台
bg %1 # 将任务 1 继续在后台运行
nohup command & # 后台运行(不受终端关闭影响)
2
3
4
5
# 🎯 总结
本文档涵盖了 100+ 常用 Shell 命令,包括:
- ✅ 系统管理:系统信息、进程监控、服务管理
- ✅ 包管理:brew、apt、apt-get
- ✅ 文件操作:查找、搜索、统计、权限管理
- ✅ 文本处理:sed、awk、tr、cut 等强大工具
- ✅ 网络工具:DNS 查询、文件下载、端口扫描、防火墙
- ✅ 压缩解压:gzip、xz、tar、7z
- ✅ 实战案例:10+ 真实场景解决方案
掌握这些命令,能显著提升日常开发效率!🚀