日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

【Linux】history用法

發(fā)布時(shí)間:2023/12/16 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux】history用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

通過(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。