天天看點

shell——指令曆史history

作者:在水一方357159258

指令曆史

  bash提供了指令曆史功能,即系統為每個使用者維護一個指令曆史檔案(~/.bash_history),它在注冊使用者的主目錄(用~表示)之下。

該檔案由編号的表格構成。每當注冊後,使用者輸入指令并執行它時,該指令就自動地加到這個指令曆史表中。

使用指令曆史機制,使用者可以友善地調用或者修改以前的指令,可以把全部或部分先前指令作為新指令予以快捷執行。

這一功能稱為曆史替換(history substitution)。

history指令可以顯示指令曆史表中的指令。其文法格式是:

history [option][arg ?]

  (1)如果不帶任何參數,則history指令會顯示曆史指令的清單(包括剛輸入的history指令)。所有這些指令都被稱作事件,一個事件表示一個操作已經發生,即一個指令已被執行。

顯示的各行指令之前的數字表示相應指令行在指令曆史表中的序号,稱為曆史事件号。

曆史事件号從1開始順序向下排,最後執行的指令的事件号最大。

  (2)如果history 後給出一個正整數,例如:

[hadoop@localhost d4]$ history 10顯示曆史表中的最後10行指令
1024 ll
1025 cls
1026 who|wc -l
1027 set -x
1028 ls
1029 sh d9
1030 set +x
1031 ls
1032 history
1033 history 10           

◆執行曆史指令是指令替換之一,它以字元“!”開頭、後随1個或多個字元來定義使用者所需的某種類型的曆史指令。

它可以出現在輸入行的任何地方,除非已在進行曆史替換。如果在“!”之前加上反斜線“”,或者在其後跟着空格、制表符、換行符、等号“=”或開括号“(”,那麼“!”就作為普通字元對待,失去特殊意義。

曆史替換可以作為輸入的指令行的一部分或全體。當輸入行的正文中包含曆史替換時,将在完成相應的替換後,在終端上顯示輸入的指令行,進而使用者可以看到實際執行的指令(顯示指令後立即執行)。

[hadoop@localhost ~]$ history 10
1053 rm al
1054 cls
1055 cat .bash_history
1056 echo 63
1057 ll
1058 history 100
1059 cat .bash_history
1060 echo HISTFILE
1061 echo $HISTFILE
1062 history 10           
[hadoop@localhost ~]$ !1057
ll
total 529468
-rw-rw-r-- 1 hadoop hadoop 345 Jun 29 2018 1111
-rw-r--r-- 1 hadoop hadoop 2481 Nov 7 2020 11.jsp
-rw-r--r-- 1 hadoop hadoop 78 Sep 11 00:29 211.sh
-rw-rw-r-- 1 hadoop hadoop 21786 Jun 29 2018 cardeve100w.java
-rw-rw-r-- 1 hadoop hadoop 23899 Jun 29 2018 cardeve10w.java
-rw-rw-r-- 1 hadoop hadoop 23871 Jun 28 2018 cardeve11.java           
[hadoop@localhost ~]$ !!運作上一條指令
ll
total 529468
-rw-rw-r-- 1 hadoop hadoop 345 Jun 29 2018 1111
-rw-r--r-- 1 hadoop hadoop 2481 Nov 7 2020 11.jsp           

◆在預設方式下,bash使用使用者主目錄下面的檔案“.bash_history”來儲存指令曆史。但是,使用者也可以通過重新為環境變量HISTFILE指派來改變存放曆史指令的檔案。

例如:

HISTFILE="/home/mengqc/.myhistory"

[hadoop@localhost ~]$ echo $HISTFILE
/home/hadoop/.bash_history
[hadoop@localhost ~]$ pwd
/home/hadoop
[hadoop@localhost ~]$ more .bash_history
pwd
ll
rmdir d55
exit
date
pwd
cd dzztest/
ll
cd d4
ll
ls
vi d44.sh
ll
ls
ll
vi d1.sh
ll
chmod 777 d1.sh
ll
pwd           

  曆史檔案中能夠保留的指令個數有限,其預設值是500。如果使用者輸入的指令太多,超過限定值,那麼最早輸入的指令就會從曆史表中删除,而新輸入的指令會加到該表尾部。使用者可以利用HISTSIZE變量重新設定該值。例如:

$ HISTSIZE=600

  通常使用者不必對指令曆史表進行管理(如設定HISTSIZE的值等),由系統自動管理。

利用指令曆史功能,使用者可以對先前輸入的指令重新進行編輯、修改和執行,進而簡化使用者的操作。

2022-9-19