bashshell是大多數Linux發行版附帶的標準終端環境,macOS附帶,可在windows10上安裝。它會記住您鍵入的命令並將其儲存在歷史檔案中。您可能知道bash歷史的一些基本知識,但它比您可能意識到的強大得多。
相關:Bash的最佳鍵盤快捷鍵(又稱Linux和macOS終端)
要滾動瀏覽bash歷史,可以使用bash的許多有用的鍵盤快捷鍵中的一些。按這些快捷鍵,您以前使用過的命令將出現在提示處。
Bash還有一種特殊的“回憶”模式,可以用來搜尋以前執行過的命令,而不是逐個滾動。
您可以透過執行一個命令將整個bash歷史記錄列印到螢幕上:
history您將看到bash歷史中所有命令的列表,每個命令的左邊都有一個數字。旁邊帶有“1”的命令是bash歷史上最早的命令,而數字最大的命令是最近的命令。
相關:使用以下8個技巧成為Linux終端超級使用者
你可以用輸出做任何你喜歡的事情。例如,您可以透過管道將其傳送到grepcommand來搜尋您的命令歷史記錄。
history | grep your_search您還可以透過管道將其傳送到tail命令,以便僅檢視最近執行的少量命令。例如,下面的命令將顯示歷史記錄中的最後5個條目。
history | tail -5Bash可以快速“擴充套件”以前的命令,或者擴充套件並修改它們。此功能稱為“歷史擴充套件”,並使用感嘆號,稱為“bang”。只需在提示符處鍵入它們,然後按Enter鍵執行它們,就像執行任何其他命令一樣。
要從歷史記錄中按編號執行特定命令,請使用以下命令:
!#例如,假設您想執行bash歷史記錄中的第12個命令。當您執行history命令時,該命令的左邊有一個“12”。您可以鍵入以下命令。
!12要重新執行上次執行的命令,請鍵入以下命令。這與按一次向上箭頭檢視上一個命令,然後按Enter鍵的效果相同。
!!您也可以將某個命令引用回一定數量的行。例如!-2將執行您執行的倒數第二個命令!!意思和…一樣!-1 .
這個擴充套件線上路的任何地方都有效。你可以在之前或之後新增任何你喜歡的內容!!或本節中的任何其他表示式。例如,您可以鍵入以下命令來重新執行透過sudo執行的最後一個命令,並賦予它root許可權。如果在執行命令之前忘記新增sudo,這將特別有用。
sudo !!或者,例如,您可以重新執行上一個命令並將其輸出傳輸到grep以搜尋某些文字。
!! | grep text要在歷史記錄中搜索命令並執行它,請鍵入以下命令。這將執行與指定文字匹配的最後一個命令:
!text因此,如果您最近運行了一個以ping開頭的命令,您可以執行以下命令來搜尋它。這將向後搜尋歷史記錄,找到以“pi”開頭的最新命令,並立即執行它:
!pi您可以將:p附加到上述任何擴充套件中,bash將在不執行命令的情況下將命令列印到終端。如果要在執行命令之前確認選擇了正確的命令,這將非常有用。
!12:p !!:p !text:pBash還允許您執行新命令,但使用歷史記錄中以前命令的引數。這可以幫助您快速重用長引數或複雜引數,而無需重新鍵入它們。
command !$例如,假設您運行了touch/home/chris/some\u long\u file\u name\u命令,您不想再次鍵入\u。你現在想執行命令nano/home/chris/some\u long\u file\u name\u你不想再輸入一次。您可以執行以下命令,而不是從頭開始鍵入整個內容:
nano !$這個!$將使bash自動填充上一個命令的最後一個引數。
這隻會填充最後一個引數。所以,如果你跑平谷歌網站-C4然後跑平!$,這隻會擴充套件到“ping 4”。
要解決此問題,可以使用以下技巧展開行中的第一個引數,而不是最後一個引數:
command !^所以,如果你跑平谷歌網站-C4然後冉平!^,bash將其擴充套件為“ping”谷歌網站".
要填充上一個命令中使用的所有引數,而不是一個引數,可以使用以下命令:
command !*所以,如果你跑平了!*相反,bash會自動填充上一個命令中使用的所有引數。
您可以使用與從歷史記錄中執行命令以獲取引數相同的技巧。請用下面的表格。
command !abc:#例如,我們在前面運行了sudo hostname命令。如果我們執行以下命令,bash將在歷史記錄中向後搜尋,找到以我們鍵入的字母開頭的最後一個命令,並填寫我們指定的引數。所以,如果我們執行echo!su:2,bash將返回搜尋以“su”開頭的最後一個命令,並填寫第二個引數,即“ubuntu”。
其他的小把戲也會如你所料發揮作用。例如,將數字替換為星號(萬用字元),會導致bash填充命令中的所有引數:
command !abc:*Bash還允許您重新執行前面的命令並指定應該更改的內容。這對於糾正命令中的拼寫錯誤非常有用。例如,以下命令將重新執行上一個命令,將其中的文字“abc”替換為文字“xyz”。
^abc^xyz例如,如果你不小心跑了平gogle.com,然後可以執行^gog^goog,bash將執行命令ping谷歌網站相反。
預設情況下,bashshell將您在使用者帳戶的歷史檔案~/.bash\u history中執行的命令的歷史記錄儲存在~/.bash\u history中。例如,如果您的使用者名稱是bob,您將在/home/bob/.bash\u history中找到此檔案。
因為您的歷史記錄儲存在一個檔案中,所以它在會話之間保持不變。您可以執行一些命令,登出,第二天返回,這些命令仍將在歷史檔案中,隨時可以檢視和使用。每個使用者帳戶都有自己的歷史檔案和單獨的命令歷史記錄。
要清除bash歷史記錄,可以執行以下命令。這將刪除使用者帳戶的.bash\u歷史檔案的內容:
history -cBash在預設情況下只記住有限數量的命令,以防止歷史檔案變得太大。bash記住的歷史條目數由HISTSIZEvariable控制。預設值通常為500或1000個條目。您可以執行以下命令來檢視系統上bash歷史記錄的大小。
echo $HISTSIZE要將歷史記錄設定為零,請執行以下命令。
HISTSIZE=0對於當前會話,bash不會儲存任何歷史記錄條目,除非執行HISTSIZE=1000這樣的命令將其設定回一定數量的條目。
如果將HISTCONTROLvariable設定為ignorespace,Bash允許您忽略以空格開頭的歷史記錄條目。
HISTCONTROL=ignorespace在bashshell中執行命令之前,在命令前面鍵入空格,命令將正常執行,但如果啟用此變數,則不會出現在歷史記錄中。這允許您保持您的歷史有點乾淨,選擇執行命令,而不讓它們出現在您的歷史中。
Bash還允許您忽略重複的命令,這些命令會使歷史變得混亂。為此,請將HISTCONTROL設定為ignoredups。
HISTCONTROL=ignoredups要同時使用ignorespace和ignoredups功能,請將HISTCONTROL變數設定為ignoreboth。
HISTCONTROL=ignoreboth請注意,您設定的bash變數將僅在當前會話中保持。如果願意的話,您需要將這些值新增到使用者帳戶的.bashrc檔案中,以便在啟動的每個bash會話中自動設定這些值。
bashshell是一個複雜的工具,有比這些更多的選項。請參考官方Bash手冊中的Bash歷史內建和歷史擴充套件部分,瞭解更多詳細資訊和其他可以使用的高階技巧。
...從頭開始要好得多。讓我們看看這些恢復方法,看看它是如何做到的! ...
...進行修飾,使其最小化並充分利用空間。我們將向您展示如何定製終端應用程式中的zsh提示符,使其在您選擇的任何背景中都脫穎而出。 ...
Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...
Linux上有多種型別的環境變數。瞭解如何檢視它們,為本地和遠端登入建立它們,並使它們在重新啟動後仍然有效。 環境變數的工作原理 啟動終端視窗及其內部的shell時,會引用一組變數,以確保shell配置正確。這些變數還確...
...複您過去執行的命令。一旦您瞭解了Linux history命令以及如何使用它,它就可以顯著地提高您的生產效率。 操縱歷史 正如喬治桑塔亞納(georgestantayana)的一句名言:“那些記不住過去的人註定要重蹈覆轍。”不幸的是,在Linux...