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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux】history用法

發布時間:2023/12/16 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)

按(按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

?

mkdir a b c cd !!:2 cd b

?

mkdir a b c cd !$ cd c

?

注意:

歷史擴展只能用在交互shell,不能用在shell腳本中

?

!$是引用上一個命令的最后一個參數

$_是引用前一個命令的最后一個參數

一個是前一個命令一個是上一個命令

例如

mkdir -p testdir && cp -r /opt "$_"

轉自:http://blog.51cto.com/zz6547/1830928

總結

以上是生活随笔為你收集整理的【Linux】history用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。