为什么要记录 Shell 命令?
在开始之前,先明确记录命令的目的,这能帮助你更有条理地整理:

- 备忘与复用:避免重复思考,快速执行复杂或常用的操作序列。
- 知识沉淀:将学到的命令和技巧系统化,形成自己的“命令百科”。
- 问题排查:当系统出现问题时,可以快速回顾之前的操作,定位问题根源。
- 团队协作:将标准操作流程记录下来,方便团队成员学习和执行。
- 自动化脚本:很多记录下来的命令序列,稍加修改就是自动化脚本的基础。
如何记录 Shell 命令?
这里介绍几种从简单到高级的记录方法。
方法1:最简单 - 手动记录到文本文件
这是最直接的方法,适合记录少量或重要的命令。
命令:
# 使用重定向 > 或 >> 追加到文件 echo "ls -l /home" >> my_commands.txt # 使用文本编辑器直接打开记录文件 vim my_commands.txt nano my_commands.txt
优点:简单、直观,不受任何限制。 缺点:需要手动复制粘贴,容易遗漏,无法记录命令的输出。

方法2:记录命令本身 - history
history 命令会列出当前 Shell 会话中执行过的所有命令。
基本用法:
# 查看最近的命令历史 history # 查看最近的10条命令 history 10 # 执行历史列表中的命令,例如执行第101条命令 !101
将历史记录保存到文件:
# 将当前会话的历史记录追加到文件 history >> my_command_history.txt # 清空当前会话的历史记录 history -c
缺点:history 只记录命令本身,不记录命令的输出结果,且会话关闭后默认只保留有限数量。

方法3:记录命令和输出 - script
script 命令是录制终端会话的利器,它会将你在终端中输入的所有命令以及所有输出(包括错误信息)都记录到一个文件中。
基本用法:
# 开始录制,所有内容会保存到 typescript 文件中 script # 指定输出文件名 script my_session.log # 录制完成后,输入 exit 或按 Ctrl+D 结束 exit
查看录制文件:
# 使用 cat, less, vim 等命令查看 less my_session.log
优点:功能强大,完整记录“所见即所得”的交互过程。 缺点:文件会变得非常大,包含大量控制字符,直接阅读体验不佳,适合用于录制演示或排查复杂问题。
方法4:高级记录 - 结合 script 和工具
为了改善 script 的输出文件,可以结合一些工具进行过滤和美化。
使用 script 和 cat -v:
cat -v 可以将文件中的控制字符(如 \r, \n)显示为可见字符,方便查看。
script my_session.log # ... 执行一些命令 ... exit # 查看时用 cat -v 过滤 cat -v my_session.log | less
使用 script 和 col:
col 可以更好地处理控制字符,生成更干净的纯文本文件。
script my_session.log # ... 执行一些命令 ... exit # 使用 col -b 删除所有反斜杠和控制字符,生成干净的文本 col -b < my_session.log > my_session_clean.txt
常用 Shell 命令分类记录
这里是一个按功能分类的常用命令清单,你可以直接复制到你的记录文件中,并随时补充。
文件和目录操作
| 命令 | 全称 | 描述 | 示例 |
|---|---|---|---|
ls |
list | 列出目录内容 | ls -l (长格式), ls -a (包含隐藏文件), ls -h (人性化显示文件大小) |
cd |
change directory | 切换目录 | cd /var/log, cd .. (返回上级), cd ~ (进入家目录) |
pwd |
print working directory | 显示当前所在目录 | pwd |
mkdir |
make directory | 创建新目录 | mkdir new_folder, mkdir -p a/b/c (创建多级目录) |
touch |
touch | 创建空文件或更新文件时间戳 | touch file.txt |
cp |
copy | 复制文件或目录 | cp source.txt dest.txt, cp -r source_dir/ dest_dir/ (递归复制目录) |
mv |
move | 移动/重命名文件或目录 | mv old_name.txt new_name.txt, mv file.txt /tmp/ |
rm |
remove | 删除文件或目录 | rm file.txt, rm -r folder/ (递归删除目录), rm -f file.txt (强制删除) |
ln |
link | 创建链接 | ln -s target.txt link_to_target.txt (创建软链接/符号链接) |
查看
| 命令 | 全称 | 描述 | 示例 |
|---|---|---|---|
cat |
concatenate | 查看小文件全部内容 | cat /etc/hosts |
less / more |
less / more | 分页查看大文件 (推荐 less) |
less /var/log/syslog (q 退出) |
head |
head | 查看文件开头几行 | head -n 20 file.txt (查看前20行) |
tail |
tail | 查看文件结尾几行 | tail -n 20 file.txt (查看后20行), tail -f /var/log/nginx/access.log (实时跟踪文件变化) |
grep |
global regular expression print | 在文本中搜索匹配的行 | grep "error" /var/log/syslog |
文本处理三剑客
| 命令 | 描述 | 示例 |
|---|---|---|
grep |
过滤:从文本中查找包含特定模式的行。 | ps aux \| grep "nginx" |
sed |
编辑:流编辑器,用于对文本进行替换、删除、插入等修改。 | sed 's/old/new/g' file.txt (全局替换) |
awk |
报告/提取:强大的文本分析工具,按列处理文本。 | awk '{print $1, $NF}' file.txt (打印每行的第1列和最后一列) |
常用组合: cat file.txt \| grep "error" \| awk '{print $5}' (先过滤出包含error的行,然后提取第5列)
查找命令
| 命令 | 描述 | 示例 |
|---|---|---|
find |
在整个文件系统中按名称、类型、时间等条件查找文件。 | find /home -name "*.log" (在/home下查找所有.log文件) |
locate |
快速查找文件 (基于数据库,比find快,但可能不是最新的)。 |
locate my_config_file |
压缩与打包
| 命令 | 描述 | 示例 |
|---|---|---|
tar |
tape archive | 打包/解包文件,常与压缩工具结合。 |
zip / unzip |
.zip 格式压缩/解压 | zip -r archive.zip /path/to/dirunzip archive.zip |
gzip / gunzip |
.gz 格式压缩/解压 | gzip file.txt (压缩为 file.txt.gz)gunzip file.txt.gz |
系统信息与监控
| 命令 | 描述 | 示例 |
|---|---|---|
top / htop |
动态显示进程和系统资源 (推荐 htop) |
htop |
ps |
process status | ps aux (查看所有进程), ps -ef |
df |
disk free | 查看磁盘空间使用情况 |
du |
disk usage | 查看目录或文件所占空间 |
free |
查看内存使用情况 | free -h (人性化显示) |
uname |
unix name | 显示系统信息 |
uptime |
显示系统运行时间和负载 |
网络相关
| 命令 | 描述 | 示例 |
|---|---|---|
ping |
测试网络连通性 | ping google.com |
ifconfig / ip |
查看和配置网络接口 | ip addr show (查看IP地址), ip link set eth0 up |
ss / netstat |
显示网络连接、路由表等 | ss -tuln (查看所有监听的TCP/UDP端口), netstat -an |
curl / wget |
从网络下载文件或获取网页内容 | curl -I https://www.google.com (获取HTTP头), wget https://example.com/file.zip |
ssh |
secure shell | 安全远程登录 |
用户与权限
| 命令 | 描述 | 示例 |
|---|---|---|
chmod |
change mode | 修改文件/目录权限 |
chown |
change owner | 修改文件/目录所有者 |
chgrp |
change group | 修改文件/目录所属组 |
sudo |
superuser do | 以超级用户或另一个用户身份执行命令 |
su / su - |
switch user | 切换用户 |
建立你自己的命令记录模板
你可以创建一个 Markdown 文件(如 COMMANDS.md),用以下模板来结构化地记录你的命令。
# 我的 Shell 命令备忘录 ## 1. 系统管理 ### 1.1 服务管理 - **查看所有服务状态**: `systemctl list-units --type=service --state=running` - **重启 Nginx 服务**: `sudo systemctl restart nginx` - **设置 Nginx 开机自启**: `sudo systemctl enable nginx` ### 1.2 日志查看 - **查看系统日志**: `journalctl -xe` - **查看 Nginx 错误日志**: `tail -f /var/log/nginx/error.log` ## 2. 开发环境 ### 2.1 Docker - **启动一个 Nginx 容器**: `docker run -d -p 8080:80 --name my-webserver nginx` - **进入容器内部**: `docker exec -it my-webserver /bin/bash` ### 2.2 Git - **强制覆盖本地分支与远程分支一致**: `git fetch --all && git reset --hard origin/main` - **删除远程分支**: `git push origin --delete feature-branch` ## 3. 自动化脚本 ### 3.1 备份脚本 ```bash #!/bin/bash # backup.sh SOURCE_DIR="/home/user/documents" BACKUP_DIR="/mnt/backup" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") tar -czf "$BACKUP_DIR/docs_backup_$TIMESTAMP.tar.gz" "$SOURCE_DIR" echo "Backup completed: $BACKUP_DIR/docs_backup_$TIMESTAMP.tar.gz"
使用方法: chmod +x backup.sh && ./backup.sh
常用“一行”命令
- 查找并删除所有 .swp 文件:
find . -type f -name "*.swp" -delete - 查找并批量替换文件内容:
find . -type f -name "*.html" -exec sed -i 's/old_text/new_text/g' {} \;
最佳实践
- 使用有意义的文件名:如
2025-10-27_project_setup.md或docker_commands_cheatsheet.md。 - 添加注释:在命令旁边用 注释说明其作用,尤其是在复杂命令或脚本中。
- 定期整理:将零散的记录整合到分类清晰的文件中,删除过时或重复的条目。
- 善用 Git:将你的命令记录库(比如一个 Git 仓库)进行版本控制,方便追踪修改历史和跨设备同步。
- 分享与协作:使用 Markdown 格式,可以轻松地分享给同事或发布到团队 Wiki 上。
希望这份详细的指南能帮助你高效地记录和管理你的 Linux Shell 命令!
