Linux基礎:history命令

1、爲何要學習 history 命令 ?

    history命令是bash shell 內置命令,history命令有助於咱們縮短輸入命令的時間,達到節省命令快捷操做的要求。咱們也能夠經過查詢history命令,從而審計操做日誌。同時,咱們能夠隱藏一些含有敏感信息的命令輸入,使系統更加安全。linux


2、history 命令常見用法 ?

語法:web

history [n | -c | -rnaw histfile]

參數:shell

n:數字,列出最近的 n 條歷史命令緩存

-c:將當前shell 緩存中的 history 內容所有清除安全

-a:將當前shell緩存中的history 內容append附加到 histfile 中,若是沒有指定 histfile,則默認寫入 ~/.bash_histroybash

-r:將 histfile 中的內容讀取到當前shell的緩存中服務器

-w:將當前shell緩存的history歷史列表寫入到指定的文件
app


-a: 追加本次會話新執行的命令歷史列表至歷史文件,由於多終端因此若是想看當前都發生了什麼操做就能夠執行-a進行查看
-n: 讀歷史文件(本地數據)中未讀過的行到歷史列表(內存數據)
-r: 讀歷史文件(本地數據)附加到歷史列表(內存數據)
-w: 保存歷史列表(內存數據)到指定的歷史文件(本地數據)
-s: 展開歷史參數成一行,附加在歷史列表後。用於僞造命令歷史
ide


n:數字,列出【最近】的 n 條歷史命令,默認爲10學習

[root@web ~]# history 5
  997  ls
  998  exit
  999  history
 1000  exit
 1001  history

-c : 清空命令歷史(使用該命令以後,僅對當前shell進程生效, exit 退出後從新進入,原來 .bash_history的內容會從新入讀內存中)

要想完全清空歷史命令,須要先將 .bash_history的內容刪除,接着使用 history -c, 這樣纔會完全清空命令歷史。

[root@web ~]# history
  ...
  996  pstree
  997  exit
  998  tail -f /var/log/ldap.log 
  999  ls
 1000  exit
 1001  history
[root@web ~]# history -c
[root@web ~]# history
    3  history
[root@web ~]# > .bash_history
[root@web ~]# exit
logout

-d:刪除歷史命令中指定的的記錄; 好比咱們想刪除命令歷史中的999行命令記錄,直接使用 history -d 999 便可,而後用 history 查看命令的最後幾行,發現原來999行的歷史命令被下一行的命令所取代

[root@web ~]# history 10
  997  ls
  998  exit
  999  history
 1000  exit
 1001  history
 1002  vi .bash_history

 [root@web ~]# history -d 999
[root@web ~]# history 10
  998  exit
  999  exit
 1000  history
 1001  vi .bash_history 
 1002  ls
 1003  history
 1004  history 5
 1005  history 10
 1006  history -d 999
 1007  history 10

-r:讀取歷史文件到歷史列表(將 .bash_history從新讀取一遍,寫入到當前bash進程的內存中)

(若是當前兩個終端同時登陸Linux系統, root(tty1)輸入 n 條命令, root(tty2)也輸入 m 條命令而且將內存中的命令歷史經過 histroy -a 刷新到 .bash_history文件中, 那麼 root(tty1)能夠直接執行 history -r ,將root(tty2)寫入到 .bashr_history文件中記錄直接讀取到 當前bash進程的histoty命令歷史內存中)


-a:將bash 內存中歷史命令追加到 .bash_history 歷史命令文件中, 默認只有退出 shell 是纔會保存


-w:保存歷史列表到指定的歷史文件(history -w /PATH/TO/SOMEFILE 將內存中命令執行的歷史列表保存到指定的 /PATH/TO/SOMEFILE中)

[root@web ~]# history -w /tmp/history.log
[root@web ~]# cat /tmp/history.log
ps -ef
ls
ls -l
cat /etc/issue
history -w /tmp/history.log


3、history 工做機制

# !n :調用第n條命令 
# !-n:調用倒數第n條命令 
# !!:執行上一條命令 
# !$:引用前一個命令的最後一個參數同組合鍵Esc,. 
# !n:^ 調用第n條命令的第一個參數 
# !n:$ 調用第n條命令的最後一個參數 
# !m:n 調用第m條命令的第n個參數 
# !n:* 調用第n條命令的全部參數 
# !string:執行命令歷史中最近一個以指定string開頭的命令 
# !string:^ 從命令歷史中搜索以string 開頭的命令,並獲取它的第一個參數 
# !string:$ 從命令歷史中搜索以string 開頭的命令,並獲取它的最後一個參數 
# !string:n 從命令歷史中搜索以string 開頭的命令,並獲取它的第n個參數 
# !string:* 從命令歷史中搜索以string 開頭的命令,並獲取它的全部參數


經常使用的快捷鍵

執行上一次命令

!!

搜索歷史命令:

Ctrl + R


從新調用前一個命令中最後一個參數:
  !$ 
  Esc + .(點擊Esc鍵後鬆開,而後點擊. 鍵)
這兩個很經常使用,特別是Esc + .
咱們在建立文件後,一般會對其進行修改或其餘的讀操做,這時候鍵入命令後利用上述快捷鍵便可快速補全所需命令。


4、history 工做機制

    history工做機制:當用戶登陸系統並啓動bash時,會讀取 histfile 變量指定文件中的歷史記錄到當前shell進程的內存中,咱們在此bash中的全部操做,也會緩存在內存裏面, 只有在bash退出後,纔會把內存中的歷史記錄 flush 到  histfile 變量指定的文件中。


因此會出現這種狀況:

我和同事用不一樣的機器登陸到同一臺linux服務器上, 我用history命令只能查看本身終端所操做的命令,若是我也想看到全部鏈接到此服務器的終端所操做的命令,應該如何操做呢?

回答是: 看不到, 在用戶退出登陸以前,命令歷史記錄所有在內存中,沒有寫入到文件。

一般 .bash_history 在每一個用戶的 $HOME 目錄下,但這是查看上次用戶所操做的歷史記錄。


5、history 相關環境變量

HISTFILESIZE:命令歷史文件記錄的條數

HISTSIZE:命令歷史記錄的條數

[root@web ~]# echo $HISTSIZE
1000

HISTFILE:指定歷史文件,默認爲每一個用戶家目錄下:  ~/.bash_history

HISTTIMEFORMAT="%F %T ":顯示時間,能夠記錄命令執行的時間

[root@web ~]# HISTTIMEFORMAT="%F %T "
[root@web ~]# history 
   10  2017-06-23 07:05:15 ps -ef
   11  2017-06-23 07:05:16 ls
   12  2017-06-23 07:05:18 ls -l
   13  2017-06-23 07:05:29 cat /etc/issue

HISTTIMEFORMAT="$(hostname) %F %T ":顯示更加詳細的主機名和命令執行時間

[root@web ~]# HISTTIMEFORMAT="$(hostname) %F %T "
[root@web ~]# history 
   10  web 2017-06-23 07:05:15 ps -ef
   11  web 2017-06-23 07:05:16 ls

HISTTIMEFORMAT="$(tty) %F %T ":顯示用戶登陸終端和命令執行時間

[root@web ~]# HISTTIMEFORMAT="$(tty) %F %T "
[root@web ~]# history 
   10  /dev/pts/2 2017-06-23 07:05:15 ps -ef
   11  /dev/pts/2 2017-06-23 07:05:16 ls

HISTIGNORE="str1:str2:...": 忽略以冒號分隔的 str1, str2 歷史記錄

會忽略接下來輸入凡有 str1:str2 的命令


控制命令歷史的記錄方式

HISTCONTROL=

    ignoredups:忽略重複的命令, 「連續且相同」方爲【重複】

    ignorespace:忽略全部以空白開頭的命令

    ignoreboth:ignoredups && ignorespace

    erasedups:刪除重複命令,減少 history 的大小



注意:命令直接在命令行進行環境變量的設置,執行時間段僅限於該腳本,設置完變量會當即生效,可是exit退出當前腳本以後,環境變量就會失效;將環境變量寫入配置文件中,/etc/profile(全局變量,對全部用戶有效)或 ~/.bash_profile(單用戶模式,僅對該用戶有效),寫入配置文件中不會當即生效,可是須要從新登陸以後生效。



參考:

http://www.tuicool.com/articles/B7FFVrm

相關文章
相關標籤/搜索