1. 程式人生 > >15個例子掌握Linux命令行歷史

15個例子掌握Linux命令行歷史

ase port 關鍵字 想要 arr lease form oot 開頭

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種不同的方法去重復執行上次執行的命令。

  1. 使用up arrow查看上以前的命令,然後按Enter鍵執行
  2. 鍵入!!並在命令中按Enter鍵執行
  3. 鍵入!-1並在命令中按Enter鍵執行
  4. 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命令行歷史