15個例子掌握Linux命令行歷史
15個例子掌握Linux命令行歷史
當你經常使用Linux命令行時,有效地使用歷史可以提高生產力。事實上,一旦你掌握以下15個例子,你會發現使用命令行更有意思更有趣。
1.使用HISTTIMEFORMAT顯示時間戳
通常,當你從命令行鍵入歷史記錄時,它會顯示#和命令。出於審計目的,將timestamp與命令一起顯示是很有幫助的,如下所示。
# export HISTTIMEFORMAT=‘%F %T ‘ # history | more 1 2018-08-05 19:02:39 service network restart 2 2018-08-05 19:02:39 exit 3 2018-08-05 19:02:39 id 4 2018-08-05 19:02:39 cat /etc/redhat-release
2.使用Ctrl+R搜索歷史記錄
這可能是最常用的歷史特征。當你執行了很長的命令,你只需使用關鍵詞搜索歷史記錄並重新執行相同命令即可,而無需完全鍵入命令。按Ctrl+R並鍵入關鍵字。在下面的示例中,我搜索了“red”,命令歷史會顯示前一個包含“red”的命令“cat /etc/redhat-release ”
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt] (reverse-i-search)`red‘: cat /etc/redhat-release [Note: Press enter when you see your command, which will execute the command from the history] # cat /etc/redhat-release CentOS release 6.5 (Final)
有時希望在執行命令之前能夠從命令歷史中編輯命令。例如,你可以搜索httpd,它顯示命令歷史中的service httpd stop ,選擇此命令將stop改為start,如下所示。
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt] (reverse-i-search)`httpd‘: service httpd stop [Note: Press either left arrow or right arrow key when you see your command, which will display the command for you to edit, before executing it] # service httpd start
3.使用4種不同的方法快速執行上一條命令。
有時你會因為各種原因重復執行以前的命令。以下是4種不同的方法去重復執行上次執行的命令。
- 使用up arrow查看上以前的命令,然後按Enter鍵執行
- 鍵入!!並在命令中按Enter鍵執行
- 鍵入!-1並在命令中按Enter鍵執行
- 按Control + P將顯示以前的命令,然後按enter鍵執行
4.從命令歷史中執行特定的命令
如下所示,如果你想重復執行命令#4,你可以鍵入!4執行。
# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release
CentOS release 6.5 (Final)
5.執行上一條以特定關鍵字開頭的命令
輸入! 然後是您想要重新執行的命令的起始幾個字母。在下面的示例中,鍵入 !ps 並輸入,執行上一個以ps開頭的命令,即‘ps aux | grep yp‘。
# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
6.使用HISTSIZE控制歷史記錄的總數
將以下兩行附加到.bash_profile並再次重新登錄到bash shell以查看更改。在此示例中,只有450個命令將存儲在bash歷史記錄中。
# vi~ / .bash_profile
HISTSIZE = 450
HISTFILESIZE = 450
7.使用HISTFILE更改歷史文件名
默認情況下,歷史記錄存儲在~/.bash_history文件中。將以下行添加到.bash_profile並重新登錄到bash shell,以將歷史命令存儲在.commandline_warrior文件中,而不是.bash_history文件中。我還沒有找到實際用途。當您想要使用不同的歷史文件名跟蹤從不同終端執行的命令時,這時候就派上用場了。
# vi~ / .bash_profile
HISTFILE = / root / .commandline_warrior
8.使用HISTCONTROL消除歷史記錄的連續重復輸入
在下面的示例中,pwd被鍵入三次,當您執行歷史記錄時,您可以看到它的全部記錄連續3次出現。要消除重復,請將HISTCONTROL設置為ignoredups,如下所示。
# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after
executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after
executing pwd 3 times as shown above]
58 history | tail -4
註意:相同的命令必須是滿足連續這個條件
9.使用HISTCONTROL擦除整個歷史記錄中的重復項
上面顯示的ignoredups只有在它們是連續命令時才會刪除重復項。要消除整個歷史記錄中的重復項,請將HISTCONTROL設置為erasedups,如下所示。
# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# service httpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6
10.使用HISTCONTROL強制歷史記錄不要記住特定命令
執行命令時,可以通過將HISTCONTROL設置為忽略空間並在命令前面鍵入空格來指示歷史記錄忽略該命令,如下所示。我可以看到許多初級系統管理員對此感到興奮,因為他們可以隱藏歷史命令。很好理解ignorespace是如何工作的。但是,作為一種最佳實踐,不要有目的地隱藏歷史中的任何東西。
# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
# service httpd stop [Note that there is a space at the beginning of service,
to ignore this command from history]
# history | tail -3
67 ls -ltr
68 pwd
69 history | tail -3
11.使用選項-c清除以前所有歷史命令記錄
# history -c
12.從歷史命令中獲取參數
在搜索歷史記錄時,您可能希望執行不同的命令,但使用您剛剛搜索過的命令中的相同參數。
在下面的示例中,vi命令旁邊的!!:$獲取上一個命令的參數到當前命令。
# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg
在下面的示例中,vi命令旁邊的!^從前一個命令(即cp命令)獲取第一個參數到當前命令(即vi命令)。
# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi !^
vi anaconda-ks.cfg
13.替換特定命令的特定參數。
在下面的示例中,!cp:2搜索歷史記錄中以cp開頭的上一個命令,並獲取cp的第二個參數,並將其替換到ls -l命令,如下所示。
# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt
在下面的示例中,!cp:$搜索以cp開頭的歷史記錄中的上一個命令,並獲取cp的最後一個參數(在這種情況下,也是上面顯示的第二個參數)並將其替換為ls -l命令如下圖所示。
# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt
14.使用HISTSIZE禁用歷史記錄
如果想要禁用歷史記錄並且不希望bash shell記住您鍵入的命令,請將HISTSIZE設置為0,如下所示。
# export HISTSIZE=0
# history
# [Note that history did not display anything]
15.使用HISTIGNORE忽略歷史記錄中的特定命令
有時你可能不希望使用pwd和ls等基本命令來混淆您的歷史記錄。使用HISTIGNORE指定要從歷史記錄中忽略的所有命令。請註意,向HISTIGNORE添加ls僅忽略ls而不是ls -l。因此,您必須提供您希望從歷史記錄中忽略的確切命令。
# export HISTIGNORE="pwd:ls:ls -ltr:"
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE="pwd:ls:ls -ltr:"
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]
15個例子掌握Linux命令行歷史