Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

    • shell 入门指南
    • linux 入门指南
    • Shell 常用命令速查手册
      • 📖 文档说明
      • 📑 目录导航
      • 1. 系统信息
        • 查看系统版本
        • uname
        • top
      • 2. 包管理
        • brew
        • apt
      • 3. 服务管理
        • brew services (macOS)
        • launchctl (macOS)
        • systemctl (Linux)
        • service (Linux - 传统方式)
      • 4. 文件操作
        • diff - 文件比较工具
        • 基本语法
        • 常用选项速查
        • 快速上手
        • 实战场景
        • 忽略差异选项
        • 输出格式对比
        • 补丁文件操作
        • 实用脚本
        • 性能优化技巧
        • 与其他工具配合
        • 常见问题
        • 最佳实践
        • 替代工具推荐
        • file
        • stat
        • exiftool
        • lsof
        • ls
        • find
        • fd
      • 5. 磁盘管理
        • du
      • 6. 文本处理
        • basename
        • sed
        • awk
        • tr
        • cut
        • cmp
        • sort / uniq / wc
        • head / tail
      • 7. 网络工具
        • 7.1 网络配置
        • networksetup (macOS)
        • ifconfig
        • ip (Linux)
        • 7.2 网络诊断
        • ping
        • netstat
        • traceroute
        • 7.3 DNS 查询
        • dig
        • nslookup
        • 7.4 文件下载
        • curl
        • wget
        • 7.5 端口扫描
        • nc (netcat)
        • 7.6 代理工具
        • proxychains-ng
        • 7.7 防火墙
        • ufw (Ubuntu/Debian)
        • iptables (Linux)
        • 7.8 网络工具速查
      • 8. 压缩解压
        • gzip / gunzip
        • xz
        • tar
        • 7z
      • 9. 进程管理
        • kill
        • ps
      • 10. 其他工具
        • openssl
        • printf
        • shasum / md5
        • tee
        • xargs
        • clipboard
        • 其他常用工具
      • 11. 实战案例
        • 11.1 词频统计
        • 11.2 转置文件
        • 11.3 提取 Android 设备序列号
        • 11.4 查找大文件并排序
        • 11.5 统计代码行数
        • 11.6 批量重命名文件
        • 11.7 查找并替换文本
        • 11.8 监控日志文件
        • 11.9 网络诊断流程
        • 11.10 系统性能分析
      • 📚 参考资源
        • 官方文档
        • 在线资源
        • 推荐工具
      • 💡 使用技巧
        • 1. 管道组合
        • 2. 命令别名
        • 3. 快捷键
        • 4. 历史命令
        • 5. 后台任务
      • 🎯 总结
    • Shell 代码片段集合
    • awk
    • fd
    • ftp
    • sftp
    • ifconfig
    • ssh
    • sed
    • xargs
  • tool

  • 网络

  • algo

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • shell
Jacky
2024-06-18
目录

Shell 常用命令速查手册

# 📖 文档说明

本文档系统性地整理了日常开发中最常用的 Shell 命令,涵盖系统管理、包管理、文件操作、文本处理、网络工具、压缩解压等多个方面。适合作为快速查询手册使用。

使用建议

  • 使用 Ctrl+F 快速搜索命令
  • 每个命令都包含常用选项和实战案例
  • 建议结合 man 命令查看详细文档
  • 相关专题文档:sed | awk | xargs | fd

# 📑 目录导航

  • 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
1
2
3
4
5
6
7
8

Linux:

# 查看发行版信息
cat /etc/os-release

# 查看内核版本
uname -r
1
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...
1
2
3
4
5
6
7

# top

实时显示系统进程和资源使用情况

基本用法:

top
1

输出信息:

  1. 系统信息:Load averages、CPU 使用率、内存使用、磁盘活动
  2. 进程列表:PID、USER、%CPU、%MEM、TIME、COMMAND

常用选项:

top -u username    # 显示特定用户的进程
top -s 2           # 每 2 秒更新一次
top -n 5           # 更新 5 次后退出
top -o cpu         # 按 CPU 使用率排序
top -i             # 隐藏空闲进程
1
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)"
1

常用命令:

命令 说明
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               # 检查问题
1
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
1
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
1
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                 # 清理缓存
1
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
1
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 消息队列
1
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
1
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  # 实时查看
1
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/     # 用户服务
1
2
3

# service (Linux - 传统方式)

兼容旧版 Linux 的服务管理

# 启动/停止/重启
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
sudo service nginx status

# 列出所有服务
service --status-all
1
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
1
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
1
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          # 未改变
1
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
1
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
1
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/
1
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
1
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
1
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  # 忽略空行
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
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"
1
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
1
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  # 统计删除行数
1
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
1
2
3
4

Q: 如何忽略多种类型的差异?

A: 可以组合使用多个选项:

diff -iwB file1 file2  # 同时忽略大小写、空白、空行
1

# 最佳实践

  1. ✅ 总是使用 -u 选项:输出格式最清晰
  2. ✅ 重要操作前先备份:cp file file.bak
  3. ✅ 使用 -q 快速检查:批量比较时提高效率
  4. ✅ 保存差异为补丁:便于审查和应用
  5. ✅ 结合版本控制:Git 已内置强大的 diff 功能
  6. ✅ 编写脚本自动化:定期监控重要文件变化

# 替代工具推荐

工具 特点 使用场景
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
1
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  # 修改时间
1
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
1
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
1
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
1
2
3
4
5
6
7
8

# ls

列出目录内容

常用选项:

选项 说明
-l 详细信息
-a 显示隐藏文件
-h 人类可读大小
-t 按时间排序
-r 逆序
-R 递归显示
-d 只显示目录

示例:

ls -lh          # 详细信息 + 可读大小
ls -lt          # 按时间排序
ls -d */        # 只显示目录
1
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
1
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 # 排除目录
1
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 .
1
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
1
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 行
1
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       # 指定分隔符
1
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
1
2
3
4
5
6
7
8

# cmp

比较文件

# 比较文件
cmp file1.txt file2.txt

# 静默模式(只返回退出码)
if ! cmp -s "$file1" "$file2"; then
    echo "文件不同"
fi
1
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        # 字节数
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
2
3
4
5
6

现代替代工具

推荐使用 ss 命令(更快):

ss -tuln          # 类似 netstat -tuln
ss -tanp          # 类似 netstat -tanp
ss -s             # 统计信息
1
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
1
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  * * *  # 超时或被防火墙阻止
1
2
3
4
  • 第一列:跳数
  • 第二列:主机名和 IP
  • 后三列:三次探测的响应时间
  • * * *:超时或防火墙阻止

traceroute vs mtr

推荐使用 mtr(更强大):

brew install mtr       # macOS
sudo apt install mtr   # Ubuntu

sudo mtr google.com    # 实时追踪
1
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
1
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
1
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
1
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 # 用代理
1
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
1
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
1
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 # 发送端
1
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
1
2

配置 (/etc/proxychains.conf):

dynamic_chain
proxy_dns

[ProxyList]
socks5  127.0.0.1 1080
http    127.0.0.1 8080
1
2
3
4
5
6

使用:

proxychains4 curl https://ipinfo.io
proxychains4 git clone https://github.com/user/repo.git
1
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
1
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
1
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  # 更快的替代品
1
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
1
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
1
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
1
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
1
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
1
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  # 更直观
1
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
1
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)) # 八进制 → 十进制
1
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
1
2
3
4
5
6
7

# tee

同时输出到文件和标准输出

command | tee output.txt
command | tee -a output.txt      # 追加
./script.sh | tee script.log     # 保存日志
1
2
3

# xargs

将标准输入转换为命令参数

参考:xargs 笔记

# 基本用法
find . -name "*.txt" | xargs rm

# 处理文件名中的空格
find . -name "*.txt" -print0 | xargs -0 rm

# 交互确认
find . -name "*.txt" | xargs -p rm
1
2
3
4
5
6
7
8

# clipboard

剪贴板操作

macOS:

cat file.txt | pbcopy    # 复制
pbpaste                  # 粘贴
pbpaste > file.txt       # 粘贴到文件
1
2
3

Linux:

cat file.txt | xclip -selection clipboard
xclip -selection clipboard -o
1
2

# 其他常用工具

# 查找命令路径
which curl
command -v curl
type curl

# 生成 UUID
uuidgen

# 查看主机名
hostname

# 查看当前用户
whoami

# 测量命令耗时
time command

# 显示环境变量
env
1
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
1
2

解决方案:

cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{print $2,$1}'
1

输出:

the 4
is 3
sunny 2
day 1
1
2
3
4

命令解析:

  1. tr -s ' ' '\n' - 空格转换为换行(分词)
  2. sort - 排序(相同词相邻)
  3. uniq -c - 统计重复次数
  4. sort -r - 按数量倒序
  5. 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
1
2
3

期望输出:

name alice ryan
age 21 30
1
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
1
2
3
4
5

# 11.3 提取 Android 设备序列号

adb devices | awk 'NR==2{print $1}'
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
1
2
3
4
5

# 11.5 统计代码行数

# 统计所有 Python 文件行数
find . -name "*.py" | xargs wc -l

# 排除空行和注释
find . -name "*.py" | xargs grep -v "^#" | grep -v "^$" | wc -l
1
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
1
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'
1
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
1
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
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 📚 参考资源

# 官方文档

  • GNU Coreutils (opens new window)
  • Bash 参考手册 (opens new window)
  • curl 官方文档 (opens new window)

# 在线资源

  • 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
1
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 ../..'
1
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 条命令
!!                   # 执行上一条命令
!$                   # 上一条命令的最后一个参数
!*                   # 上一条命令的所有参数
1
2
3
4
5

# 5. 后台任务

command &            # 后台运行
jobs                 # 查看后台任务
fg %1                # 将任务 1 调到前台
bg %1                # 将任务 1 继续在后台运行
nohup command &      # 后台运行(不受终端关闭影响)
1
2
3
4
5

# 🎯 总结

本文档涵盖了 100+ 常用 Shell 命令,包括:

  • ✅ 系统管理:系统信息、进程监控、服务管理
  • ✅ 包管理:brew、apt、apt-get
  • ✅ 文件操作:查找、搜索、统计、权限管理
  • ✅ 文本处理:sed、awk、tr、cut 等强大工具
  • ✅ 网络工具:DNS 查询、文件下载、端口扫描、防火墙
  • ✅ 压缩解压:gzip、xz、tar、7z
  • ✅ 实战案例:10+ 真实场景解决方案

掌握这些命令,能显著提升日常开发效率!🚀

#shell#linux#command
上次更新: 2025/10/21, 14:23:30
linux 入门指南
Shell 代码片段集合

← linux 入门指南 Shell 代码片段集合→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式