Linux 命令行 – 終端 – 存儲用戶過去執行的命令的歷史記錄。 即使我們重新啟動系統,此歷史記錄也是持久的並保留在內存中。 我們可以檢索和重用這些存儲的命令,以充分利用 bash 殼。
Linux bash 有一個非常強大的命令叫做“history”。 這個命令是一個內置的 bash 命令用於提取有關 Linux 用戶在所有先前會話中執行過的命令的歷史信息。 在本教程中,我們將通過學習正確使用 history 命令使您能夠充分利用 shell 歷史記錄。 默認情況下,Linux 將特定用戶的命令歷史存儲在 ~/.bash_history 文件中。
我們將使用 Linux 終端應用程序來執行本教程中提到的命令。
查看整個 Bash 歷史記錄
用戶可以使用以下簡單命令從專為該用戶保存的歷史文件中查看他/她的 shell 命令的整個歷史記錄:
$歷史
歷史記錄將以以下默認格式打印在屏幕上:
在上圖中,您可以看到所有命令的列表,並為每個命令分配了一個編號。 編號為 1 的命令對應於您運行的第一個命令,最後編號的命令代表您執行的最新命令。
如果您在使用後運行了很多命令 bash,您會發現這裡會顯示成百上千的命令。 要訪問一些相關命令,您可以過濾歷史功能顯示的結果。 您還可以自定義歷史命令以顯示特定數量的命令。
過濾 Bash 歷史輸出
如果要根據之前命令中可能使用過的特定關鍵字過濾歷史輸出,可以按如下方式使用 history 命令:
$ 歷史 | 格雷普
例子: 在這 example, 我只想查看我曾經在 shell 中運行過的 ping 命令。 因此,我將使用以下命令:
$ 歷史 | 搜索
您可以看到我的輸出現在僅顯示包括我的搜索關鍵字“ping”在內的命令
查看最近執行的shell命令的數量
您還可以查看特定數量的命令,例如 example:
- N 最近的命令數
或者
- N 個最舊的命令
N 最近的 Bash 命令數
您可以通過以下命令查看特定數量的最近運行的命令:
$ 歷史 | 尾-n
例子:
在這 example,我想查看我運行的最後 3 個命令,使用關鍵字 ‘ping’ :
$ 歷史 | grep ping |tail -3
輸出僅顯示 3 個最近的 ping 命令而不是整個歷史記錄
N 最早的 Bash 命令的數量
您可以通過以下命令查看特定數量的最舊運行命令:
$ 歷史 | 頭-n
例子:
在這 example,我想查看我運行的最舊的 3 個命令,關鍵字是 ‘ping’ :
$ 歷史 | grep ping |head -3
輸出僅顯示 3 個最舊的 ping 命令而不是整個歷史記錄
列出所有帶有日期和時間戳的 Bash 命令
如果您想查看您的命令歷史以及日期和時間戳,請使用以下導出命令:
$出口HISTTIMEFORMAT=’%F, %T’
現在,當您希望查看歷史記錄時,只需運行 history 命令即可查看以下格式的輸出:
請注意,這種格式更改是暫時的,當您使用它時,它將恢復到以前的標準 close 會議。
瀏覽歷史命令
當您在命令行上時,您可以瀏覽以前運行的命令,還可以通過提供關鍵字來調用一些最近使用的命令。
滾動命令
您可以使用以下鍵盤控件來瀏覽歷史命令
向上箭頭/Ctrl+P | 使用這些控件,您可以顯示之前使用的命令。 您可以多次點擊這些控件以返回曆史記錄中的特定命令。 | |
向下箭頭/Ctrl+N | 使用這些控件,您可以顯示您使用的下一個命令。 您可以多次點擊這些控件以前進到歷史記錄中的特定命令。 | |
Alt + R | 如果在當前行上編輯從歷史記錄中提取的命令,則可以使用此控件將其恢復為原始命令。 |
調用命令
您可以使用以下控件調用、運行或選擇不運行歷史記錄中的特定命令:
Ctrl+R | 使用此控件,您可以通過指定搜索字符串從歷史記錄中調用命令。 |
Ctrl+O | 使用這個控件,你可以運行你通過 Ctrl+R 調用的命令 |
Ctrl+G | 使用此控件,您可以退出歷史記錄,而無需運行您通過 Ctrl+R 調用的命令 |
例子:
在這 example, 我按 ctrl+R 然後提供了搜索字符串“ar”。 歷史顯示命令’arch’。
當我按 ctrl+O 運行命令“arch”時,它顯示了我係統的 CPU 架構:
利用 Bash 歷史記錄
真正的魔法 bash 歷史是通過使用各種命令並自定義歷史命令本身來充分利用歷史功能:
從歷史運行命令
- 正如我們之前看到的,history 命令通過為每個命令關聯一個數字來顯示命令。 通過使用以下命令,您可以根據其編號運行歷史記錄中的某個命令:
$ !#
例子:
在這裡,我正在運行歷史記錄中的命令編號 95:
$ !95
輸出顯示“lscpu”的結果,它在我的命令中列為命令編號 95 bash 歷史。 此命令顯示我的 CPU 和操作系統規格。
- 您可以使用以下命令重新運行之前的命令:
$ !!
例子:
在這裡您可以看到我運行了命令“arch”。 通過運行上述命令,我可以重新運行’arch’命令來查看我的CPU架構,如下所示:
- 要從歷史記錄中搜索命令然後運行它,請使用以下命令:
$!
例子:
我將使用以下命令重新運行最後一個帶有關鍵字“dconf”的命令:
$ !dconf
您可以在下圖中重新確認這是我運行的最後一個 dconf 命令。
使用來自先前命令的參數
Linux bash 使您能夠使用來自上一個命令的參數來運行新命令。 當您想避免重新輸入冗長或複雜的參數時,它特別有用。 為此,您可以使用以下命令:
使用上一個命令的最後一個參數
$ [Command] !$
變量 !$ 具有存儲在其中的上一個命令的最後一個參數。
例子:
在這 example,我將創建一個長名稱的文件。
納米 [longnameOfaFile]
然後我將通過避免再次鍵入長名稱將其複製到另一個位置,如下所示:
cp !$ [destinationfolder]
您可以看到我能夠通過使用變量 !$ 複製文件而無需重新鍵入文件名
使用上一個命令的第一個參數
有時,只有前一個命令的第一個參數對當前命令有幫助。
在這種情況下,您可以使用以下命令:
$ [command] !^
例子:
在下面的 example, 我通過指定主機名和計數作為參數來運行 ping 命令。 現在我想在我的新命令中使用主機名(第一個參數)而不是 2(最後一個參數)。 為此,我將使用以下命令:
$平!^
使用上一個命令中的所有參數
您還可以通過使用以下命令來使用上一個命令中的所有參數:
$ !*
使用歷史命令中的一個參數
您還可以通過重用它們的參數來使用歷史記錄中的命令。 為此,請使用以下命令:
$ [command] !:#
例子:
$迴聲!cp:2
此命令將採用以下參數:
命令:迴聲
關鍵詞:cp
#:2(命令的第二個參數)
以下輸出顯示了我運行的最後一個 cp 命令的第二個參數:
使用歷史命令中的所有參數
以下命令將存儲來自搜索歷史命令的所有參數並在當前命令中使用它們:
$命令!:*
例子:
在下面的命令中,我將使用 echo 命令打印最後一個 cp 命令的所有參數,如下所示:
$迴聲![cp]:*
修改和運行以前的命令
如果您輸入錯誤的命令或者您想通過更改其中的某些文本來重新運行命令; 以下是這樣做的方法:
$^[previoustext]^[newtext]
例子:
我將命令 ‘grep’ 錯誤輸入為 ‘gep’,現在我想通過更正文本來運行該命令:
$ ^ gep ^ grep
現在您可以看到我更正後的命令將正常運行,如下所示:
清除歷史記錄
為了抹去你的歷史 bash,使用以下命令:
$歷史 -c
此命令清除您的歷史記錄並從 ~/.bash_history 文件中刪除所有內容。
在本教程中,我們了解到雖然打印出整個歷史內容並不是那麼有用,但使用我們學到的命令優化輸出才是真正的遊戲規則改變者。 通過本文的練習,您將能夠準確顯示您想要的命令,重新執行和重新使用這些命令,還可以使用以前執行的命令的參數來優化新命令。