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、防火墙、macOS 网络状态
- 8. 压缩解压 - gzip、xz、tar、7z
- 9. 进程管理 - kill、ps、jobs
- 10. 其他工具 - openssl、printf、shasum、clipboard
- 11. 实战案例 - 词频统计、文件转置、网络诊断
# 1. 系统信息
# mac设备硬件信息
在 macOS 终端中,你可以使用以下命令来查看当前设备的硬件信息:
- 获取详细的硬件概览(最推荐): system_profiler SPHardwareDataType
- 查看处理器核心数: sysctl -n hw.ncpu
- 查看内存大小(以字节为单位): sysctl -n hw.memsize
- 查看机器型号标识符: sysctl -n hw.model
- 查看操作系统版本: sw_vers
# 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 | 按用户过滤 |
# 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)"
常用命令速查:
| 命令 | 说明 |
|---|---|
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 # 清理缓存
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 底层服务管理工具. 参考 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
plist 文件位置:
| 路径 | 权限 | 启动时机 |
|---|---|---|
~/Library/LaunchAgents/ | 用户级别 | 用户登录后 |
/Library/LaunchAgents/ | 系统级别 | 任意用户登录后 |
/Library/LaunchDaemons/ | 系统级别 | 系统启动时 |
关联快传
# 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 与 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
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 # 修改时间
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
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 (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
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 */ # 只显示目录
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. 磁盘管理
# df
display free disk space
# 查看磁盘整体使用情况. -h = human readable,显示 GB/MB 而不是字节数
df -h
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 .
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
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 行
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 # 指定分隔符
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-
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
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 # 字节数
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. 网络工具
完整的网络配置、诊断、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
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
显示进程信息
# 显示所有进程
# 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 # 更直观
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
2
# 场景 B:一键输入常用命令(快捷键变身“宏”)
假设你经常需要输入 git status,但不想每次都打字,你可以利用 -s 参数绑定一个字符串:
# 将 Ctrl + G 绑定为执行 "git status" 并在末尾自动回车 (\n)
bindkey -s '^G' 'git status\n'
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
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 . -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
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 . -type f -name "*.py" -exec wc -l {} +
# 排除空行和注释
find . -type f -name "*.py" -exec cat {} + | grep -v "^[[:space:]]*#" | grep -v "^[[:space:]]*$" | wc -l
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 工具语法不同
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'
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 # Linux net-tools;macOS 用 lsof -nP -iTCP -sTCP:LISTEN
# 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 . -type f -name "*.tmp" -exec rm -f {} +
# 日志 + 过滤 + 统计
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+ 真实场景解决方案
掌握这些命令,能显著提升日常开发效率!🚀
路径与修改操作:默认 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 为准。网络诊断分层说明见 网络专题。
迁移前的章节入口
保留旧文章的章节锚点,旧书签可从这里继续前往专题正文。