Linux history
命令詳解
history
是 Linux 系統中一個非常實用的命令,用于查看、管理和操作當前 Shell 會話中執行過的命令歷史記錄。它可以幫助用戶快速重復執行命令、搜索歷史記錄、清除敏感命令等,極大地提高了命令行操作的效率。
一、基本用法
-
顯示歷史記錄
-
直接輸入
history
命令,會列出當前 Shell 會話中執行過的所有命令及其對應的序號。$ history
示例輸出:
1 ls -l2 cd /var/log3 cat syslog
-
-
限制顯示條數
-
顯示最近
n
條歷史記錄:$ history 10
-
二、常用選項
選項 | 描述 | 示例 |
---|---|---|
-c | 清空當前會話的歷史記錄 | history -c |
-d offset | 刪除指定偏移量處的命令(按序號) | history -d 5 (刪除第5條命令) |
-a | 將當前會話的新命令追加到歷史文件(~/.bash_history )中 | history -a |
-r | 從歷史文件中讀取命令并加載到當前會話中 | history -r |
-w | 將當前會話的歷史記錄寫入歷史文件 | history -w |
-n | 從歷史文件中讀取尚未讀取的新記錄 | history -n |
組合命令 history -c && history -w 的作用
-
完整流程:
-
history -c:清空當前會話的內存歷史記錄。
-
history -w:將空的歷史記錄寫入歷史文件,覆蓋原有內容。
-
-
最終效果:
- 當前會話的歷史記錄被清空。
- 歷史文件(如 ~/.bash_history)也被清空,原有命令記錄被刪除。
-
典型應用場景:
- 防止敏感命令(如包含密碼的命令)被記錄到歷史文件中。
- 在腳本中需要臨時清理歷史記錄時使用。
三、環境變量配置
通過修改環境變量,可以更靈活地管理歷史記錄:
-
設置歷史記錄數量
HISTSIZE
:控制當前會話中保存在內存中的命令數。HISTFILESIZE
:控制歷史文件中保存的命令行數。
export HISTSIZE=1000 # 內存中最多保存1000條命令 export HISTFILESIZE=2000 # 歷史文件中最多保存2000條命令
-
忽略重復命令或特定命令
HISTCONTROL
:定義如何處理重復命令或以空格開頭的命令。ignoredups
:忽略重復的連續命令。ignorespace
:忽略以空格開頭的命令。ignoreboth
:合并以上兩者。
export HISTCONTROL=ignoreboth
-
排除特定命令
HISTIGNORE
:指定不保存到歷史記錄中的命令(用冒號分隔)。
export HISTIGNORE="ls:pwd:exit" # 不保存 ls、pwd、exit 命令
-
顯示時間戳
HISTTIMEFORMAT
:為每條歷史記錄添加時間戳。
export HISTTIMEFORMAT="%F %T " # 格式:YYYY-MM-DD HH:MM:SS
示例輸出:
1 2025-06-16 11:37:45 ls -l2 2025-06-16 11:38:00 cd /var/log
-
實時記錄命令
PROMPT_COMMAND
:每次執行命令后立即追加到歷史文件。
export PROMPT_COMMAND='history -a'
四、高級功能
-
搜索歷史記錄
-
使用
Ctrl + R
反向搜索歷史命令(輸入關鍵字后按↑↓
鍵選擇)。 -
使用
grep
過濾歷史記錄:history | grep "ls" # 搜索包含 "ls" 的命令
-
-
快速執行歷史命令
!!
:執行上一條命令。!n
:執行第n
條命令(如!3
執行第3條命令)。!string
:執行以string
開頭的最新命令(如!cat
執行最近的cat
命令)。!-n
:執行倒數第n
條命令(如!-2
執行倒數第2條命令)。
-
命令參數替換
-
!!:$
:獲取上一條命令的最后一個參數。$ ls anaconda-ks.cfg $ vi !!:$ # 等價于 vi anaconda-ks.cfg
-
!^
:獲取上一條命令的第一個參數。$ cp file1 file2 $ rm !^ # 等價于 rm file1
-
!cmd:arg
:從歷史中提取特定命令的參數(如!cp:2
獲取cp
命令的第二個參數)。
-
-
禁用歷史記錄
-
將
HISTSIZE
設置為 0,禁用歷史記錄功能:export HISTSIZE=0
-
五、歷史文件操作
-
歷史文件位置
- Bash:
~/.bash_history
- Zsh:
~/.zsh_history
- Fish:
~/.local/share/fish/fish_history
- Bash:
-
手動清空歷史文件
-
清空當前用戶的
.bash_history
文件:> ~/.bash_history
-
或者:
cat /dev/null > ~/.bash_history
-
-
保護隱私
-
修改歷史文件權限,防止其他用戶讀取:
chmod 600 ~/.bash_history
-
六、不同 Shell 的差異
Shell | 歷史命令 | 歷史文件位置 |
---|---|---|
Bash | history | ~/.bash_history |
Zsh | history | ~/.zsh_history |
Fish | history | ~/.local/share/fish/fish_history |
七、總結
history
命令是 Linux 命令行用戶不可或缺的工具,通過合理配置和使用,可以顯著提升工作效率。以下是關鍵點總結:
- 基礎用法:
history
顯示所有記錄,history n
顯示最近n
條。 - 管理記錄:使用
-c
清空、-d
刪除、-a
追加等選項。 - 環境變量:通過
HISTSIZE
、HISTCONTROL
等控制記錄行為。 - 高級技巧:
Ctrl + R
搜索、!!
重復命令、參數替換。 - 隱私保護:清空歷史文件、設置權限、禁用記錄。
通過靈活運用這些功能,你可以更高效地管理 Linux 命令行操作!