Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux history 指令歷史紀錄管理進階實戰

編輯:Linux 教學

前言

history 不只是列出曾執行過的指令,更是命令列生產力倍增器:快速重複、參數復用、搜尋過濾、審計追蹤、多終端同步。本文系統整理 15 大進階用法、環境變數調教、多 Shell 同步策略與審計最佳實踐。

一、核心環境變數調教

變數預設建議值作用
HISTSIZE500/10005000-10000記憶體中保留命令條數
HISTFILESIZE同 HISTSIZE10000-20000歷史檔案最大行數
HISTFILE~/.bash_history~/.bash_history歷史檔案路徑
HISTTIMEFORMAT無'%F %T '顯示時間戳(需 Bash 3.0+)
HISTCONTROL無ignoredups:erasedups忽略連續重複/全域去重
HISTIGNORE無"ls:ll:pwd:exit:history*"不記錄指定指令
HISTCMD—只讀當前命令歷史編號

永久生效寫入 ~/.bashrc


export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT='%F %T '
export HISTCONTROL=ignoredups:erasedups
export HISTIGNORE="ls:ll:pwd:exit:history*:clear"
# 多終端即時同步(可選)
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

二、15 大進階用法實戰

1. 顯示時間戳


history | tail -20
# 輸出:  1001 2024-03-05 14:30:00 systemctl restart nginx

2. 反向搜尋 Ctrl+R(互動式)

  • 按 Ctrl+R → 輸入關鍵字 → 顯示匹配歷史 → Enter 執行 / 左右鍵 編輯 / Ctrl+R 繼續往上找。

3. 快速重複上一條指令(4 種方式)

  • ↑ + Enter
  • !! + Enter
  • !-1 + Enter
  • Ctrl+P + Enter

4. 依編號執行歷史指令


!1001    # 執行第 1001 條
!-5      # 執行倒數第 5 條

5. 依關鍵字執行最近匹配指令


!ssh     # 執行最近以 ssh 開頭的指令
!?conf   # 執行最近包含 conf 的指令

6. 控制歷史記錄總量

見 HISTSIZE/HISTFILESIZE 設定。

7. 自訂歷史檔案位置


export HISTFILE=~/.my_history
# 方便備份/同步/審計

8. 忽略連續重複指令


export HISTCONTROL=ignoredups
# 連續三次 pwd 只記錄一條

9. 全域去重(非連續也去重)


export HISTCONTROL=erasedups
# 歷史中只保留每條指令最新一次

10. 強制不記錄特定指令(空格前綴)


export HISTCONTROL=ignorespace
# 執行時:secret_command  → 不進歷史

11. 清除所有歷史


history -c          # 清除記憶體歷史
history -w          # 寫入檔案(覆蓋)
# 組合:history -c && history -w

12. 命令替換:復用上一條指令參數


ls /very/long/path/to/file.txt
vi !!:$          # vi /very/long/path/to/file.txt
vi !^            # vi /very/long/path/to/file.txt (第一個參數)
cp !!:1 !!:2     # 複製第1、2參數

13. 歷史展開修飾詞


echo /path/to/file.txt
vi !$:h          # vi /path/to/ (目錄部分)
vi !$:t          # vi file.txt (檔名部分)
vi !$:r          # vi /path/to/file (去副檔名)
vi !$:e          # vi txt (副檔名)

14. 禁用歷史記錄


export HISTSIZE=0
# 或
set +o history    # 當前 Shell 暫停記錄
set -o history    # 恢復記錄

15. 忽略特定指令模式


export HISTIGNORE="ls:ll:pwd:exit:history*:clear:cd:cd -"
# 這些指令不進歷史,保持歷史乾淨

三、多終端/多 Shell 歷史同步策略


# ~/.bashrc 末尾加入
shopt -s histappend          # 追加而非覆蓋
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
# -a 追加當前 session 新增歷史到檔案
# -c 清除記憶體歷史
# -r 從檔案重讀歷史到記憶體
# 效果:開新終端即可看到舊終端剛執行的指令

四、審計與安全最佳實踐

  • 集中收集:將所有伺服器 HISTFILE 導向共享儲存或透過 syslog/auditd 記錄。
  • 防竄改:chattr +a ~/.bash_history(僅允許追加)、定期備份異地存檔。
  • 敏感指令過濾:HISTIGNORE 排除含密碼/Token 的指令,或改用環境變數/密碼管理器傳遞秘鑰。
  • 時間戳強制:HISTTIMEFORMAT 確保審計時間線完整。

五、總結

history 的核心價值在於「以最小認知負荷復用過往操作」。配置 HISTTIMEFORMAT、HISTCONTROL=ignoredups:erasedups、HISTIGNORE、PROMPT_COMMAND 同步四大鐵律,善用 Ctrl+R、!!:$、!^、!$:h 等展開語法,即可將命令列效率提升 50% 以上。

Copyright © Windows教程網 All Rights Reserved