Linux中的history命令
通過history命令可以查看我們在系統中輸入過的命令
history命令的一些常用參數
-c ?清空內存中命令歷史
-d # ?刪除指定的歷史命令,比如 history -d 100 ,就是刪除第100個命令歷史
# : 顯示最近的#條歷史,例如:history 20 ,表示顯示最近的20條命令歷史
-a: 追加本次會話新執行的命令歷史列表至歷史文件
-n: 將歷史文件中未讀過的行加載到內存中的歷史列表,方便多個終端同步內存中的命令歷史。
-r: 讀取歷史文件中的所有歷史命令到內存中的歷史列表,即使內存中的列表中已經存在這條歷史。
-w: 保存內存中歷史列表到指定的歷史文件,history -w ./test 把歷史寫入到當前目錄的test文件中
-p: 官方解釋沒看懂,我覺得此命令相當于echo的作用,但是使用history -p string輸出的信息不被記錄到歷史中,
??就是“不被記錄的echo,隱形echo,你可以嘗試使用history -p $變量名,這樣會不會覺得很像echo?
??但是如果你使用history -p string1 string2,會發現它并不像echo打印到一行,會打印成多行。
-s: 偽造命令歷史,比如history -s rm -rf /opt,這樣寫并不會執行刪除opt目錄的操作,只是把這條沒有執行的"命令"加入到了歷史中。
history命令的相關文件
當我們輸入history命令,history會將命令歷史返回給我們,當我們重啟機器后,再次執行history命令,還是會返回歷史命令,證明歷史命令是存在于某個文件中的,這個文件就是
~/.bash_history
每個用戶家目錄中都有一個隱藏文件,.bash_history ?,歷史命令最終都存放在此文件中。
我們先使用history命令查看,可以看到當前登錄后的一些命令歷史,但是我們查看.bash_history卻沒有發現當前登錄后的歷史命令,這是因為本次登錄后執行的命令歷史存放在內存中,當我們退出本次會話,本次會話的命令歷史才會從內存寫入到.bash_history文件中,使用-a參數可以不退出當前會話,即可將內存中的歷史命令追加到歷史文件中。
由此也可見,命令歷史會在登陸后從歷史文件中被加載到內存中,可以理解為有兩個地方存放。
/etc/profile ?
此文件中配置了history命令的相關變量,在此文件中配置的history命令的變量全局生效。
~/.bash_profile
如果在此文件中重復配置/etc/profile中配置過的history的相關變量,那么以此文件中的配置為準,此文件中的命令歷史相關配置只對當對應用戶有效。
history命令的相關變量
HISTSIZE變量,用于history命令最多顯示多少條命令歷史。
HISTSIZE=1000,表示內存中最多緩存加載1000條命令歷史,也就是說history命令返回最多1000條命令,可是我們使用history命令查看的時候,卻可能發現命令已經記錄到了1041條,這并不是我們的設置沒有生效或者發生錯誤,而是“最開始的1到41條”已經被擠出了命令歷史,序號是從“41”開始的,所以記錄到1041條正好是1000條,如果設置 HISTSIZE=0 代表永遠不記錄歷史。
HISTFILESIZE變量,用于配置~/.bash_history中最多保存多少條歷史。
centos6中 ,HISTSIZE 和?HISTFILESIZE默認都是1000,但是?HISTFILESIZE 我們可以稍微設置大一點,這樣能保存更多的歷史,而且~/.bash_history是存放在硬盤中的,所以即使設置的條目數量很大,對于現在的硬盤容量來說,也是比較小的,當然,太大的話讀取也會很慢,但是HISTSIZE就不要設置的太大,因為個人覺得HISTSIZE設置過大沒有必要,還占用內存資源。
HISTTIMEFORMAT變量,用于配置命令歷史的時間格式。
HISTTIMEFORMAT="%F ?%T ?" ?這樣設置HISTTIMEFORMAT變量是設置歷史命令的時間格式的,當然,我們也可以靈活運用,加入一些自己想要顯示的信息,比如:HISTTIMEFORMAT="`hostname` %F ?%T ?",可以理解為格式化歷史命令的顯示方式,此例中的格式表示在命令歷史前加入 主機名 、日期、時間等信息。
HISTIGNORE變量,指定不記錄到歷史中的命令。
HISTIGNORE="cmd1:cmd2:…" ? ?表示忽略cmd1,cmd2這些命令,cmd1和cmd2將不被記錄在命令歷史中,但是如果你對cmd1加選項和參數的話,還是會被記錄到歷史中,除非你只使用cmd1,不加任何選項和參數。
HISTFILE變量,指定存放歷史的文件。
HISTFILE=/root/his.log ?指定記錄歷史的文件,默認存儲命令歷史的文件為用戶家目錄下的.bash_history
HISTCONTROL ?變量 ,控制歷史記錄的方式的變量。
通過設置 環境變量:HISTCONTROL ?可以控制歷史的記錄方式,HISTCONTROL ?變量可以設置成如下值。
?ignoredups 不記錄“重復”的命令;連續且相同 方為“重復”?
?ignorespace 不記錄所有以空格開頭的命令,此變量值非常實用,我們可以通過臨時更改HISTCONTROL 的變量值為ignorespace ,
? ? ? ? ? ?以便當前會話中的以空格開頭不被記錄到歷史中。
?ignoreboth 表示ignoredups:ignorespace ,效果相當于以上兩種的組合。
?erasedups ?刪除重復命令
怎樣快速執行上一條命令
有 4 種方法可以重復執行上一條命令:
1、使用上方向鍵,并回車執行。
2、按 !! 并回車執行。
3、輸入 !-1 并回車執行。
4、按 Ctrl+P 并回車執行。
調用特定的歷史命令的方法
!!重復前一個命令
! 字符重復前一個以“字符”開頭的命令
!num按照歷史記錄的序號執行命令
!?abc重復之前包含abc的命令
!-n執行命令歷史列表中的倒數第n條命令,!-1代表上一條命令
調用歷史命令的參數的方法
#cmd !^ 或者#cmd !!^ ? ? ? : 利用上一個命令的第一個參數做cmd的參數
#cmd !$ 或者#cmd !!$ ? ? ? : 利用上一個命令的最后一個參數做cmd的參數
#cmd !* 或者#cmd !!* ? ? ? : 利用上一個命令的全部參數做cmd的參數
#cmd !:n或者#cmd !!:n ? ? ?: 利用上一個命令的第n個參數做cmd的參數
#cmd !n:^ 調用第n條命令的第一個參數做cmd的參數
#cmd !n:$ 調用第n條命令的最后一個參數做cmd的參數
#cmd !m:n 調用第m條命令的第n個參數做cmd的參數
#cmd !n:* 調用第n條命令的所有參數做cmd的參數
#cmd !string:^ 從命令歷史中搜索以 string 開頭的命令,并獲取 它的第一個參數,當做cmd的參數
#cmd !string:$ 從命令歷史中搜索以 string 開頭的命令,并獲取它 的最后一個參數,當做cmd的參數
#cmd !string:n 從命令歷史中搜索以 string 開頭的命令,并獲取 它的第n個參數,當做cmd的參數
#cmd !string:* 從命令歷史中搜索以 string 開頭的命令,并獲取 它的所有參數,當做cmd的參數
從上述語法可以看出
調用歷史命令的方法 ?和 調用歷史命令參數的方法 是可以互相組合的
一些相關的快捷鍵
ctrl鍵 + r ? ?快捷鍵可以從命令歷史中查找(reverse-i-search)
按(Alt+.)或者(按esc后松手,再按.)可以調用上一個命令的最后一個參數。
注意:
歷史擴展只能用在交互shell,不能用在shell腳本中
一些小例子
history命令應用的小例子
我們通常會打開多個遠程命令行窗口連接到一臺主機進行操作,這樣更方便,假設我通過ssh遠程工具,打開了兩個遠程窗口,窗A、窗B
加入我們一開始在窗A執行了一些命令,然后切換到窗B,在窗B中又執行了一些不同的命令。
那么這時候我們在窗B中使用history命令查看歷史命令,會發現窗A中執行過的命令并沒有在窗B中的history中顯示。
我們可以通過如下方法,將窗A中的命令歷史同步到窗B中
1、在窗A中執行history -a將內存中的命令寫入到歷史文件中
2、在窗B中執行history -n ,從歷史文件中將新增歷史命令加載到窗B的內存歷史列表中
3、在窗B中執行history命令,已經可以看到窗A中執行過的命令
調用歷史命令參數的小例子
mkdir?a?b?c cd?!!:1 cd?a注意:
歷史擴展只能用在交互shell,不能用在shell腳本中
!$是引用上一個命令的最后一個參數
$_是引用前一個命令的最后一個參數
一個是前一個命令一個是上一個命令
例如
?
馬哥教育Linux學習筆記
http://www.magedu.com/
http://mageedu.blog.51cto.com
.
轉載于:https://blog.51cto.com/zz6547/1830928
總結
以上是生活随笔為你收集整理的Linux中的history命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]html中offsetTop、cl
- 下一篇: 将RHEL7/centos7系统网卡名称