Jacky's blog
首页
  • Android
  • Web
  • Server
  • Python
  • iOS
  • Java
  • Vue
  • 计算机基础
  • AI
  • 全部工具
  • CLI 工具
  • 编辑器
  • 开发工具
  • 构建工具
  • 版本控制
  • 调试工具
  • 网络工具
  • 个人成长
  • 博客
  • 分类
  • 标签
  • 归档
收藏
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • Android
  • Web
  • Server
  • Python
  • iOS
  • Java
  • Vue
  • 计算机基础
  • AI
  • 全部工具
  • CLI 工具
  • 编辑器
  • 开发工具
  • 构建工具
  • 版本控制
  • 调试工具
  • 网络工具
  • 个人成长
  • 博客
  • 分类
  • 标签
  • 归档
收藏
GitHub (opens new window)
  • 计算机基础
  • 计算机基础

  • 网络

  • 操作系统

  • Shell
    • Shell 学习与使用导航
    • shell 入门指南
    • Shell 执行模型与环境加载
    • Shell 错误处理、调试与资源清理
    • Shell 常用命令速查手册
      • 📖 文档说明
      • 📑 目录导航
      • 1. 系统信息
        • mac设备硬件信息
        • uname
        • top
        • scutil (macOS)
        • tmutil
      • 2. 包管理
        • brew
        • apt
      • 3. 服务管理
        • brew services (macOS)
        • launchctl (macOS)
        • systemctl (Linux)
        • service (Linux - 传统方式)
      • 4. 文件操作
        • diff - 文件比较工具
        • file
        • stat
        • exiftool
        • lsof
        • ls
        • find
        • fd
      • 5. 磁盘管理
        • df
        • du
      • 6. 文本处理
        • basename
        • sed
        • awk
        • tr
        • cut
        • cmp
        • sort / uniq / wc
        • head / tail
      • 7. 网络工具
      • 8. 压缩解压
        • gzip / gunzip
        • xz
        • tar
        • 7z
      • 9. 进程管理
        • kill
        • ps
      • 10. other
        • bindkey
        • 场景 A:快速删除光标前的单词(类似 Option + Backspace)
        • 场景 B:一键输入常用命令(快捷键变身“宏”)
        • 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. 后台任务
      • 🎯 总结
        • hexdump
    • Shell 代码片段集合
  • 安全

  • 设计模式

  • cs
  • 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、防火墙、macOS 网络状态
  • 8. 压缩解压 - gzip、xz、tar、7z
  • 9. 进程管理 - kill、ps、jobs
  • 10. 其他工具 - openssl、printf、shasum、clipboard
  • 11. 实战案例 - 词频统计、文件转置、网络诊断

# 1. 系统信息

# mac设备硬件信息

在 macOS 终端中,你可以使用以下命令来查看当前设备的硬件信息:

  1. 获取详细的硬件概览(最推荐): system_profiler SPHardwareDataType
  2. 查看处理器核心数: sysctl -n hw.ncpu
  3. 查看内存大小(以字节为单位): sysctl -n hw.memsize
  4. 查看机器型号标识符: sysctl -n hw.model
  5. 查看操作系统版本: sw_vers

# 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 按用户过滤

# scutil (macOS)

macOS 系统配置工具,用于查看网络、DNS、代理等系统级配置

命令 说明
scutil --nwi 查看当前活跃的网络接口、IP、路由等
scutil --dns 查看所有 DNS 解析器配置(含搜索域)
scutil --proxy 查看系统代理配置(HTTP/HTTPS/SOCKS/PAC)
scutil --get HostName 查看主机名
scutil -r hostname 检测到目标主机的网络可达性
scutil 进入交互式 Shell,直接查询配置字典

# tmutil

macOS Time Machine 管理工具,先查备份状态,不将删除/关闭备份作为默认操作。

命令 用途
tmutil status 当前备份任务状态
tmutil listbackups 列出备份;权限要求按本机提示处理
tmutil listlocalsnapshots / 列出指定卷的本地快照

更多选项以本机 man tmutil 为准。

Time Machine Utility

# 2. 包管理

# brew

macOS 包管理工具。详细参考:brew 参考手册

官方软件包搜索:Homebrew Formulae (opens new window)

安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
1

常用命令速查:

命令 说明
brew search/install/uninstall <package> 搜索/安装/卸载
brew update / brew upgrade 更新索引 / 升级软件
brew list / brew info <pkg> 列出已安装 / 查看详情
brew outdated / brew cleanup 查看可升级 / 清理旧版本
brew doctor / brew config 诊断问题 / 查看配置
brew install --cask <app> 安装 GUI 应用(Chrome、VS Code 等)
brew services start/stop <name> 管理后台服务(MySQL、Redis 等,见下方)

更多内容(多版本切换、国内镜像、常见问题排查等)见 brew 参考手册

# 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 底层服务管理工具. 参考 notify.sh

常用命令:

命令 说明
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 配置
  • macOS 定时任务实现:Git 仓库状态自动同步方案

# 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 与 patch 指南。

# file

识别文件类型

常用选项:

选项 说明
-b 简洁输出(不显示文件名)
-i(GNU)/ -I(macOS) 输出 MIME 类型
-i(macOS) 不检查文件内容,只识别文件系统类型,可能输出 regular file
-z 查看压缩文件内容

示例:

# 查看文件类型
file document.pdf
# 输出: document.pdf: PDF document, version 1.4

# 查看多个文件
file *

# 输出 MIME 类型
file -I image.jpg  # macOS;GNU/Linux 用 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 FORMAT(macOS) 指定输出格式;GNU stat 的 -f 是文件系统信息
-L 跟随符号链接
-t FORMAT(macOS) 时间格式;GNU stat 的 -t 才是简洁输出
-x(macOS) 详细输出;GNU stat 默认已输出详细信息

示例:

# 查看文件详细信息
stat file.txt
stat -x file.txt  # macOS 需要下述易读格式时

# macOS stat -x 输出示例(节选):
# 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
21

常用格式化选项(macOS):

格式 说明
%z 文件大小(字节)
%Sm 修改时间
%Sa 访问时间
%Sc inode 状态变更时间(ctime,不是创建时间)
%SB 创建/出生时间(birth time,取决于文件系统)
%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 (list open files) 列出打开的文件和网络连接

常用选项:

选项 说明
-p <pid> 指定进程 ID,查看该进程打开的所有文件
-u <user> 显示特定用户打开的文件
-i 显示所有网络连接(包括 TCP/UDP)
-i :<port> 显示指定端口的连接
-iTCP 只显示 TCP 连接
-iUDP 只显示 UDP 连接
-sTCP:LISTEN 只显示处于 LISTEN 状态的 TCP 连接
-P 不将端口号转换为服务名(显示数字端口如 80 而非 http)
-n 不将 IP 地址转换为主机名(加快显示速度)
-c <name> 显示指定命令名的进程打开的文件
+D <dir> 递归显示目录下被打开的文件

实战示例:

# 查看指定端口占用情况
lsof -i :8080

# 查看指定进程的所有网络连接(推荐组合)
lsof -nP -a -p 35169 -i

# 查看所有 TCP 监听端口
lsof -nP -iTCP -sTCP:LISTEN

# 查看指定进程的 TCP 监听端口
lsof -nP -a -p 35169 -iTCP -sTCP:LISTEN

# 查看 MySQL 相关连接
lsof -i | grep mysql

# 查看进程打开的所有文件
lsof -p 1234

# 查看某个目录下被打开的文件
lsof +D /var/log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

选择项默认通常按 OR 组合;-p PID -i 不等于“该 PID 的网络连接”,需加 -a 求交集。见 lsof 选项说明 (opens new window)。

# 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. 磁盘管理

# df

display free disk space

# 查看磁盘整体使用情况. -h = human readable,显示 GB/MB 而不是字节数
df -h
1
2

# du

查看磁盘使用情况

常用选项:

选项 说明
-s 只显示总大小
-h 人类可读格式
-a 显示所有文件
-d N 限制深度(macOS)
--max-depth=N 限制深度(Linux)
--exclude(GNU) 排除目录;macOS BSD du 不支持

示例:

# 查看目录大小
du -sh /path/to/directory

# 查看前 10 大文件/目录
du -ah . | sort -rh | head -n 10

# 只显示一级子目录
du -h -d 1 .

# 排除 node_modules
du -sh --exclude=node_modules .  # GNU du
# macOS BSD du 用 -I 模式,先用 man du 确认本机选项
du -sh -I node_modules .
1
2
3
4
5
6
7
8
9
10
11
12
13

# 6. 文本处理

# basename

提取文件名

# 提取文件名
basename /path/to/file.txt
# 输出:file.txt

# 去除后缀
basename /path/to/file.txt .txt
# 输出:file

# 从 Git URL 提取项目名
basename "git@github.com: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    # GNU sed,无备份
sed -i '' 's/old/new/g' file.txt # macOS BSD sed,无备份
sed -i.bak 's/old/new/g' file.txt # 两者均可,保留 .bak(防止覆盖已有备份)
sed '/^$/d' file.txt             # 删除空行
sed -n '10,20p' file.txt         # 打印 10-20 行
1
2
3
4
5
6
7

# 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
cut -c 1-5
# 从第 3 个索引位开始,直到该行的末尾
cut -c 3-
1
2
3
4
5
6
7
8
9
10

# cmp

比较文件

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

# 静默模式(只返回退出码)
if cmp -s "$file1" "$file2"; then
    echo "文件相同"
else
    status=$?
    case "$status" in
        1) echo "文件不同" ;;
        *) printf '比较失败: %s\n' "$status" >&2; exit "$status" ;;
    esac
fi
1
2
3
4
5
6
7
8
9
10
11
12
13

# 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. 网络工具

完整的网络配置、诊断、DNS、下载、代理、防火墙与 macOS 网络状态内容已迁至 网络工具与诊断。

# 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

显示进程信息

# 显示所有进程
#   a: all users    显示所有用户的进程(不仅是当前用户)
#   u: user-oriented    以用户友好格式显示(包含用户名、CPU、内存等)
#   x: no tty   显示没有控制终端的进程(后台进程、守护进程等)
ps aux

# 显示特定用户进程
ps -u username

# 按内存使用排序。 GNU ps 允许这样混用,所以在 Linux 上没问题
ps aux --sort=-%mem
# macOS 替代:按内存排序
ps aux | sort -nrk 4

# 查找进程
#   注:当执行 ps aux | grep process_name 时,grep process_name 本身也是一个正在运行的进程,所以 ps aux 的输出中会包含 grep process_name 这一行
ps aux | grep process_name | grep -v grep

# 显示进程树(GNU ps;macOS 可另装 pstree 或按 ppid 查看)
ps auxf
pstree  # 更直观
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 10. other

# bindkey

在 macOS 的终端(通常使用 Zsh 作为默认 Shell)中,bindkey 命令的作用是将键盘快捷键(Key Bindings)映射到特定的 Shell 命令或编辑操作上。

简单来说,如果你觉得某些操作(比如删掉一整行、跳到行首)默认快捷键不好用,或者你想给某个复杂指令设个“一键触发”,就用 bindkey。

  • bindkey "快捷键" 功能插件或指令: 基础用法
  • bindkey: 看到一张长长的表,左边是键位码,右边是它触发的功能
  • bindkey | grep "\^B": 查看当前这个窗口里 Ctrl-B 到底被谁“劫持”了
  • bindkey -r "^G": 解绑 "^G"

# 场景 A:快速删除光标前的单词(类似 Option + Backspace)

有时候你输错了一个长路径,想一下删掉一个单词,可以绑定 Ctrl + W:

# 将 Ctrl + W 绑定到 backward-kill-word(向后删除单词)
bindkey '^W' backward-kill-word
1
2

# 场景 B:一键输入常用命令(快捷键变身“宏”)

假设你经常需要输入 git status,但不想每次都打字,你可以利用 -s 参数绑定一个字符串:

# 将 Ctrl + G 绑定为执行 "git status" 并在末尾自动回车 (\n)
bindkey -s '^G' 'git status\n'
1
2

设置后,你在终端按下 Ctrl + G,它会自动帮你打出命令并运行。

# 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 . -type f -name "*.txt" -print0 | xargs -0 rm -f

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

# 交互确认
find . -type f -name "*.txt" -print0 | xargs -0 -p rm -f
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 . -type f -name "*.py" -exec wc -l {} +

# 排除空行和注释
find . -type f -name "*.py" -exec cat {} + | grep -v "^[[:space:]]*#" | grep -v "^[[:space:]]*$" | wc -l
1
2
3
4
5

# 11.6 批量重命名文件

# 将所有 .txt 改为 .md
# 先预览;可执行且检查全部冲突的版本见代码片段 batch_rename
for file in *.txt; do
    [ -f "$file" ] || continue
    printf '%s -> %s\n' "$file" "${file%.txt}.md"
done

# 使用 rename 命令
rename -n 's/\.txt$/.md/' *.txt  # Perl rename 预览;同名 util-linux 工具语法不同
1
2
3
4
5
6
7
8
9

# 11.7 查找并替换文本

# 查找包含 "TODO" 的文件
grep -r "TODO" .

# 批量替换
find . -type f -name "*.txt" -exec sed -i.bak 's/old/new/g' {} +

# 使用 rg(更快)
rg -l -0 "old" | xargs -0 sed -i.bak '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  # Linux net-tools;macOS 用 lsof -nP -iTCP -sTCP:LISTEN

# 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 . -type f -name "*.tmp" -exec rm -f {} +

# 日志 + 过滤 + 统计
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+ 真实场景解决方案

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

路径与修改操作:默认 find … | xargs rm 会重新分词,空格/换行文件名可能导致删错;上文改用 NUL 或 -exec。先将删除替换为 -print 核对范围,再执行。xargs 在无输入时的行为有平台差异,GNU -r 非 macOS 通用参数;若命令不能空调用,优先 find -exec … {} +。

代码行数过滤仅粗略排除整行注释,不解析 Python 多行字符串/行内注释。批量 sed 使用正则和固定替换表达式,.bak 可能覆盖旧备份;含任意用户文本、需要预览和备份冲突检查时,改用 批量替换。

# hexdump

命令 用途
hexdump -C file.bin 十六进制偏移、字节和 ASCII 对照,适合核对编码/二进制内容
xxd file.bin 同类工具;不保证系统预装

外部命令以本机 man file、man stat、man du、man sed 为准。网络诊断分层说明见 网络专题。

迁移前的章节入口

保留旧文章的章节锚点,旧书签可从这里继续前往专题正文。

  • 基本语法

  • 常用选项速查

  • 快速上手

  • 实战场景

  • 忽略差异选项

  • 输出格式对比

  • 补丁文件操作

  • 实用脚本

  • 性能优化技巧

  • 与其他工具配合

  • 常见问题

  • 最佳实践

  • 替代工具推荐

  • 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 网络工具速查

  • 7.9 macOS 网络状态查看

  • IP 地址

  • Wi-Fi 信息

  • 网络服务与接口

  • DNS 与代理

  • 连接与流量监控

  • 网络质量测试

  • 防火墙状态

  • 一键网络诊断脚本
#Shell#Linux#cli#guide#cs-fundamentals
上次更新: 2026/10/26, 22:32:55
Shell 错误处理、调试与资源清理
Shell 代码片段集合

← Shell 错误处理、调试与资源清理 Shell 代码片段集合→

最近更新
01
Wrangler 使用指引
11-06
02
ADB 图形化与手机端调试工具选型
10-29
03
Shell 执行模型与环境加载
10-26
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式