如何通過 Shell 腳本分析你的“歷史命令”?揭秘最常用的終端操作!
在終端中,history 命令是每位開發者或系統管理員的“時光機”——它記錄了你在命令行中輸入的每一條指令。但你是否好奇,自己最常用的命令是什么?哪些操作被反復執行卻可以優化?當然可以!讓我們一起通過一行簡單的腳本,探索history背后隱藏的小秘密吧!同時,我們還會深入淺出地解析它的工作原理哦。
為什么需要統計歷史命令?
- 優化工作流:發現高頻命令后,可以為其設置別名(alias),提升效率。
- 排查重復操作:識別無意義的重復命令,減少冗余步驟。
- 安全審計:檢查是否有異常命令(如 rm 誤操作)。
- 學習習慣:了解自己的操作模式,幫助記憶復雜命令。
一鍵統計腳本:快速上手
以下腳本可直接運行,統計并輸出使用頻率最高的前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 10
運行效果示例:
25 git status
18 ls -l
12 python main.py
10 docker ps
8 ssh user@server
...
腳本逐行解析:從魔法到原理
(1) history
輸出所有歷史命令,默認格式為:
1000 2024-01-01 10:00:00 git status
1001 2024-01-01 10:00:05 ls -l
...
包含編號、時間戳(若啟用)和具體命令。
(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 10
(2) 處理 zsh 的歷史記錄
Zsh 默認歷史文件為 ~/.zsh_history,格式與 Bash 不同。可改用:
awk -F ';' '{print $2}' ~/.zsh_history | sort | uniq -c | sort -nr | head -n 10
(3) 持久化統計結果
將高頻命令保存到文件,用于長期分析:
./history_stats.sh >> command_usage.log
應用場景示例
(1) 別名優化
若發現 git status 出現次數最多,可將其設為別名:
echo "alias gs='git status'" >> ~/.bashrc
(2) 安全監控
定期檢查是否有危險命令(如 rm -rf /),可擴展腳本加入告警功能。
(3) 團隊協作分析
統計多人共享服務器的歷史記錄(需權限),識別常用工具或潛在問題。
結語:讓終端成為你的效率伙伴
通過這腳本,我們不僅看到了自己的操作習慣,更能將數據轉化為優化工作流的動力。嘗試運行這個腳本,看看你的“命令行人格”是什么樣的吧!或許你會發現,自己原來是個 git 的重度用戶,或者是一個 docker 的狂熱愛好者——而這,就是技術人的浪漫。