讓 history command 顯示時間記錄 on LINUX

有時候在機器上查詢曾經下過的指令記錄時,多半大家看到的都是如下面的格式吧:
[root@KHXPROVS1 ~]# history
1 ifconfig -a;
2 service ntpd status; ntpq -p;
3 df -h;
4 service vsftpd status;
5 history
[root@KHXPROVS1 ~]#
可是如果這台機器有很多人都會進來用的話呢?那我怎麼知道某個特別的指令是在什麼時間下的呢?能不能在 history 秀出的紀錄裡加上時間戳記呢?當然可以,在 bash 的變數裡面有一個叫 HISTTIMEFORMAT 就可以達到這麼需求,我們就來實作一下吧:

首先,這個變數必須在 BASH 3.0 以上才有提供喔,如果以 RedHat Enterprise 的版本來看 , 要 RHEL 4 ES/AS 以後的版本才行!

先確認一下目前 BASH 的版本吧:
[root@KHXPROVS1 ~]# rpm -q bash
bash-3.0-19.3
看來版本是 OK 的,接著編輯一下 /etc/profile 或者直接用下面的指令把變數宣告進去:
echo "HISTTIMEFORMAT='<%F %T>:'" >> /etc/profile
echo "export HISTTIMEFORMAT" >> /etc/profile
當然,編輯完的話,存檔離開,接著用:
[root@KHXPROVS1 ~]# source /etc/profile
或者離開目前的 shell 再登入一次,然後再敲一次 history 指令看一下結果:
[root@KHXPROVS1 ~]# history
1 <2008-10-08 18:02:22>ifconfig -a;
2 <2008-10-08 18:02:22>service ntpd status; ntpq -p;
3 <2008-10-08 18:02:22>df -h;
4 <2008-10-08 18:02:22>service vsftpd status;
5 <2008-10-08 18:02:22>history
6 <2008-10-08 18:02:22>rpm -q bash
7 <2008-10-08 18:02:22>echo "HISTTIMEFORMAT='<%F %T>:'" >> /etc/profile
8 <2008-10-08 18:02:22>echo "export HISTTIMEFORMAT" >> /etc/profile
9 <2008-10-08 18:02:22>source /etc/profile
10 <2008-10-08 18:03:15>history
[root@KHXPROVS1 ~]#
果然,每個歷史指令的前面都多了時間戳記囉~

參考資料:GNU 官網的 5.2 Bash Variables
0 Responses