菜鸟科技网

Linux shell 命令记录,如何高效管理与快速查找?

为什么要记录 Shell 命令?

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

Linux shell 命令记录,如何高效管理与快速查找?-图1
(图片来源网络,侵删)
  1. 备忘与复用:避免重复思考,快速执行复杂或常用的操作序列。
  2. 知识沉淀:将学到的命令和技巧系统化,形成自己的“命令百科”。
  3. 问题排查:当系统出现问题时,可以快速回顾之前的操作,定位问题根源。
  4. 团队协作:将标准操作流程记录下来,方便团队成员学习和执行。
  5. 自动化脚本:很多记录下来的命令序列,稍加修改就是自动化脚本的基础。

如何记录 Shell 命令?

这里介绍几种从简单到高级的记录方法。

方法1:最简单 - 手动记录到文本文件

这是最直接的方法,适合记录少量或重要的命令。

命令:

# 使用重定向 > 或 >> 追加到文件
echo "ls -l /home" >> my_commands.txt
# 使用文本编辑器直接打开记录文件
vim my_commands.txt
nano my_commands.txt

优点:简单、直观,不受任何限制。 缺点:需要手动复制粘贴,容易遗漏,无法记录命令的输出。

Linux shell 命令记录,如何高效管理与快速查找?-图2
(图片来源网络,侵删)

方法2:记录命令本身 - history

history 命令会列出当前 Shell 会话中执行过的所有命令。

基本用法:

# 查看最近的命令历史
history
# 查看最近的10条命令
history 10
# 执行历史列表中的命令,例如执行第101条命令
!101

将历史记录保存到文件:

# 将当前会话的历史记录追加到文件
history >> my_command_history.txt
# 清空当前会话的历史记录
history -c

缺点history 只记录命令本身,不记录命令的输出结果,且会话关闭后默认只保留有限数量。

Linux shell 命令记录,如何高效管理与快速查找?-图3
(图片来源网络,侵删)

方法3:记录命令和输出 - script

script 命令是录制终端会话的利器,它会将你在终端中输入的所有命令以及所有输出(包括错误信息)都记录到一个文件中。

基本用法:

# 开始录制,所有内容会保存到 typescript 文件中
script
# 指定输出文件名
script my_session.log
# 录制完成后,输入 exit 或按 Ctrl+D 结束
exit

查看录制文件:

# 使用 cat, less, vim 等命令查看
less my_session.log

优点:功能强大,完整记录“所见即所得”的交互过程。 缺点:文件会变得非常大,包含大量控制字符,直接阅读体验不佳,适合用于录制演示或排查复杂问题。

方法4:高级记录 - 结合 script 和工具

为了改善 script 的输出文件,可以结合一些工具进行过滤和美化。

使用 scriptcat -v cat -v 可以将文件中的控制字符(如 \r, \n)显示为可见字符,方便查看。

script my_session.log
# ... 执行一些命令 ...
exit
# 查看时用 cat -v 过滤
cat -v my_session.log | less

使用 scriptcol 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/dir
unzip 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' {} \;

最佳实践

  1. 使用有意义的文件名:如 2025-10-27_project_setup.mddocker_commands_cheatsheet.md
  2. 添加注释:在命令旁边用 注释说明其作用,尤其是在复杂命令或脚本中。
  3. 定期整理:将零散的记录整合到分类清晰的文件中,删除过时或重复的条目。
  4. 善用 Git:将你的命令记录库(比如一个 Git 仓库)进行版本控制,方便追踪修改历史和跨设备同步。
  5. 分享与协作:使用 Markdown 格式,可以轻松地分享给同事或发布到团队 Wiki 上。

希望这份详细的指南能帮助你高效地记录和管理你的 Linux Shell 命令!

分享:
扫描分享到社交APP
上一篇
下一篇