揭開Linux命令Bash history的神秘面紗
您可能知道如何使用上下箭頭鍵滾動(dòng)瀏覽Bash歷史記錄,但是你是否知道Bash history不僅僅是重復(fù)命令,而且還有很多其他的功能,或者還有更多?history命令是一個(gè)晦澀難懂的命令,但至少它是強(qiáng)大且方便的。本文將揭開Bash history的神秘面紗,使之成為一個(gè)更友好的系統(tǒng)管理工具。
背景
在Bash中,命令歷史記錄存儲(chǔ)在主目錄的(.bash_history)文件中。前綴點(diǎn)(.)表示該文件是隱藏文件。要查看它,請(qǐng)發(fā)出ls-a命令。
- linuxmi@linuxmi:~$ ls -a
你現(xiàn)在可以像對(duì)待其他文本文件一樣對(duì).bash_history文件進(jìn)行操作。
你需要了解的三個(gè)相關(guān)環(huán)境變量是HISTFILE,HISTFILESIZE和HISTSIZE。
HISTFILE—/home/linuxmi/.bash_history
HISTFILESIZE—2000
HISTSIZE—1000
HISTFILE變量保存Bash歷史記錄文件的名稱和位置。HISTFILESIZE是.bash_history文件中可以存儲(chǔ)多少個(gè)命令。HISTSIZE是緩存的命令數(shù)。一旦達(dá)到1000條命令,最舊的命令將被丟棄,而新的命令將被保存。
- linuxmi@linuxmi:~$ echo $HISTSIZE
- 1000
- linuxmi@linuxmi:~$ echo $HISTFILESIZE
- 2000
- linuxmi@linuxmi:~$ echo $HISTFILE
- /home/linuxmi/.bash_history
每個(gè)用戶(包括root用戶)都默認(rèn)分配了這些變量和大小。如果要更改這些變量,請(qǐng)?jiān)谥髂夸浿芯庉?bashrc文件。例如,如果要將大小變量更改為800個(gè)命令,請(qǐng)編輯.bashrc文件并使用以下條目:
export HISTSIZE=800
export HISTFILESIZE=800
要使用新值而不用注銷及重新登錄,執(zhí)行.bashrc文件命令即可。
- linuxmi@linuxmi:~$ . ~/.bashrc
現(xiàn)在,你的值現(xiàn)在對(duì)于當(dāng)前shell和任何子shell都是激活的。
如果你不想讓你的歷史記錄保留重復(fù)的命令,你可以通過添加以下內(nèi)容到你的.bashrc文件來指示你的歷史記錄忽略重復(fù)的條目:
一個(gè)問題
Bash history的問題在于,直到您注銷,它才被寫入.bash_history文件。這使得不可能使用history命令進(jìn)行腳本編寫。例如,假設(shè)您正在班級(jí)教學(xué)Linux,并且想檢查學(xué)生是否已運(yùn)行特定命令以將其文件復(fù)制到一個(gè)掛載的外部驅(qū)動(dòng)器。如果學(xué)生保持登錄狀態(tài),您將無法確定是否已執(zhí)行復(fù)制,因?yàn)槟哪_本使用其歷史文件(/home/linuxmi/.bash_history)來檢查命令是否已經(jīng)運(yùn)行。
解決方案
要變通解決此功能,請(qǐng)為history命令使用write選項(xiàng)。作為課堂教學(xué)的一部分,即使學(xué)生沒有注銷,您也要讓他們運(yùn)行該命令以保存其歷史記錄。
- linuxmi@linuxmi:~/www.linuxmi.com$ history -w
現(xiàn)在開始所有當(dāng)前會(huì)話命令歷史記錄都將寫入HISTFILE?,F(xiàn)在,您的檢查腳本可以輕松找到命令是否已運(yùn)行。您還必須相信學(xué)生會(huì)運(yùn)行歷史記錄命令。
另一個(gè)問題
由于HISTSIZE和HISTFILESIZE相對(duì)較大(1000個(gè)命令或者2000個(gè)命令),因此學(xué)生有可能在之前運(yùn)行過該命令。您可以將export HISTCONTROL=ignoredups條目添加到他們的.bashrc中,但是如果學(xué)生幾天前運(yùn)行了類似的命令,這將沒有用,因?yàn)槲募⒅伙@示一個(gè)命令。
這個(gè)問題的解決方案
要變通解決此問題,你應(yīng)該在登錄后清除學(xué)生的歷史記錄。再次編輯.bashrc文件,并向其中添加以下命令。
history -c
此命令在每次登錄時(shí)清除其歷史記錄,并消除了選擇以前運(yùn)行的命令的問題。您不必?fù)?dān)心會(huì)從以前的會(huì)話中拾取命令,因?yàn)槿绻?etc/profile中設(shè)置了空閑時(shí)間限制,則系統(tǒng)會(huì)在指定的時(shí)間段后注銷空閑用戶。編輯/etc/profile文件并添加以下條目。
TMOUT=180
TMOUT變量使用幾秒鐘的空閑時(shí)間。在這種情況下,180秒等于3分鐘。您可以將此值設(shè)置為任何秒數(shù)。該值將在所有用戶的下次登錄時(shí)生效。要設(shè)置單個(gè)超時(shí)值,請(qǐng)使用.bashrc,但要知道到用戶可以隨意更改此文件。
總結(jié)
Bash history是一個(gè)方便的工具,但是如果您不熟悉它的選項(xiàng)和怪癖,可能會(huì)令人沮喪。history中還有更多可用選項(xiàng)。你可以查看手冊(cè)頁以獲取更多信息。請(qǐng)記住,你輸入的每一個(gè)命令都是正在形成的歷史記錄。