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