如何通过 Shell 脚本分析你的“历史命令”?揭秘最常用的终端操作!
在终端中,history 命令是每位开发者或系统管理员的“时光机”——它记录了你在命令行中输入的每一条指令。但你是否好奇,自己最常用的命令是什么?哪些操作被反复执行却可以优化?当然可以!让我们一起通过一行简单的脚本,探索history背后隐藏的小秘密吧!同时,我们还会深入浅出地解析它的工作原理哦。
以下脚本可直接运行,统计并输出使用频率最高的前10个命令:
复制
#!/bin/bash
if [! -f ~/.bash_history ];then
echo "错误:未找到~/.bash_history文件"
exit 1
if
cat ~/.bash_history | sed -E s/^[[:space:]]*[0-9]+\*?[[:space:]]+([^[:space:]]+[[:space:]]+){0,2}// | sort | uniq -c | sort -nr | head -n 101.2.3.4.5.6.
运行效果示例:
复制
25 git status
18 ls -l
12 python main.py
10 docker ps
8 ssh user@server
...1.2.3.4.5.6.
(1) history
输出所有历史命令,默认格式为:
复制
1000 2024-01-01 10:00:00 git status
1001 2024-01-01 10:00:05 ls -l
...1.2.3.
包含编号、时间戳(若启用)和具体命令。
(2) sed -E s/...//
使用正则表达式清理数据:
删除行首的编号:匹配 ^[[:space:]]*[0-9]+\*?,如 1000 或 1001*。删除时间戳(若存在):匹配 ([^[:space:]]+[[:space:]]+){0,2},如 2024-01-01 10:00:00。最终保留的只有实际输入的命令。(3) sort | uniq -c
sort 将相同命令归类,为 uniq 统计做准备。uniq -c 计算每个命令的出现次数。(4) sort -nr | head -n 10
sort -nr 按次数倒序排列(数字从高到低)。head -n 10 仅显示前10个高频命令。进阶优化:应对不同场景(1) 忽略命令参数
若只需统计基础命令(如 git 而非 git status),可提取每行的第一个字段:
复制
history | sed -E s/^[[:space:]]*[0-9]+\*?[[:space:]]+([^[:space:]]+[[:space:]]+){0,2}// | awk {print $1} | sort | uniq -c | sort -nr | head -n 101.
(2) 处理 zsh 的历史记录
Zsh 默认历史文件为 ~/.zsh_history,格式与 Bash 不同。可改用:
复制
awk -F ; {print $2} ~/.zsh_history | sort | uniq -c | sort -nr | head -n 101.
(3) 持久化统计结果
将高频命令保存到文件,用于长期分析:
复制
./history_stats.sh >> command_usage.log1.
(1) 别名优化
若发现 git status 出现次数最多,可将其设为别名:
复制
echo "alias gs=git status" >> ~/.bashrc1.
(2) 安全监控
定期检查是否有危险命令(如 rm -rf /),可扩展脚本加入告警功能。
(3) 团队协作分析
统计多人共享服务器的历史记录(需权限),识别常用工具或潜在问题。
结语:让终端成为你的效率伙伴通过这脚本,我们不仅看到了自己的操作习惯,更能将数据转化为优化工作流的动力。尝试运行这个脚本,看看你的“命令行人格”是什么样的吧!或许你会发现,自己原来是个 git 的重度用户,或者是一个 docker 的狂热爱好者——而这,就是技术人的浪漫。
THE END