1. 程式人生 > >Linux效能優化之定期清理和保留 history 記錄

Linux效能優化之定期清理和保留 history 記錄

有經驗的 Linux 系統工程師都喜歡把 Bash 的 HISTSIZE/HISTFILESIZE 設定的很大,這樣可以記錄更多的歷史命令以便以後查閱,這是個好習慣,但有個小問題就是 history 記錄了的大量資訊在系統啟動後就被 load 到記憶體裡,並且一直儲存在記憶體裡,這樣浪費了不少記憶體,據統計100000條歷史記錄大概佔用 10MB 左右的記憶體。要知道,現在的IT運維繫統已經趨向於雲端計算和虛擬化,其特別就是根據你對硬體資源的需求為你定製的分配。因此,history所佔用的記憶體完全是沒必要的,10MB的可用記憶體可以幹很多事情,比如啟用一個 MySQL 服務,開個 syslogd等。

那麼如何儲存儘量多的歷史記錄而又不浪費記憶體呢?一個辦法就是把歷史記錄定期儲存到硬碟上,bash 的當前歷史記錄儲存在 .bash_history 裡,只要定期清理這個檔案的記錄就可以了:

[code language=”bash”]
#!/bin/bash
# archive linux command history files

umask 077
maxlines=2000

lines=$(wc -l < ~/.bash_history)

if (($lines > $maxlines)); then
cut=$(($lines – $maxlines))
head -$cut ~/.bash_history >> ~/.bash_history.sav
sed -e "1,${cut}d" ~/.bash_history > ~/.bash_history.tmp
mv ~/.bash_history.tmp ~/.bash_history
fi
[/code]

上面指令碼所做的事情很簡單,檢查 .bash_history 檔案,如果行數超過2000行就剪裁2000行記錄(這個值可以自定義,修改maxlines引數即可)並新增到 .bash_history.sav 這個檔案裡,這樣我們就可以儲存所有的歷史記錄,而且當前的歷史記錄不超過2000行,只佔用少量資源。