1.? 歷史命令不會無休止的保存下去,默認的最大保存量為1000

? ? 輸入:echo $HISTSIZE

1000條profile文件中定義的,可以在里面修改保存數量。

/etc/profile用于整個系統所有用戶,?~/.bash_profile,?~/.profile和~/.bashrc?用于各個用戶,這里的"~"符號就是各當前用戶的$HOME

?

2.有些歷史命令可能是前幾天的操作命令,前幾天的命令不可能保存在當前內存中,所以保存在文件.bash_history中,只有退出后,歷史命令才會從當前內存中保存到文件里.

? ? ? 輸入:ls -a


? ? ? 然后:?cat .bash_history可以看到歷史命令


3.隨機數:echo$RANDOM,但是隨機數比較大,所以取80%80,就會隨機80以內的數字了

? ? ? ? ?echo?$RANDOM

? ? ? ? ?echo $[$RANDOM%80]

?

?

?

4.? 保存你輸入的命令歷史。可以用它來重復執行命令。登錄shell時,會讀取命令歷史文件中記錄下的命令~/.bash_history?

登錄進shell后,新執行的命令只會記錄在緩存中;這些命令會用戶退出時“追加”至命令歷史文件中。

5.? 重復前一個命令,有4種方法:A.重復前一個命令使用上方向鍵,并回車執行。 B.!! 并回車執行。 C.輸入!-1 并回車執行。 D.Ctrl+p 并回車執行。

6.? 要重新調用前一個命令中最后一個參數:A? !$ 表示.? B? Esc+ .(點擊Esc鍵后松開,然后點擊. 鍵)? C? Alt+ .(按住Alt鍵的同時點擊. 鍵)

7.? !字符串:?? 重復前一個以“字符串”開頭的命令

8.? !?字符串:? 重復前一個包含”字符串“的命令

9.!num:???? 按照history命令輸出中的序號重復對應命令

10.!-n:?????? 重復n個命令之前的那個命令

11.? 使用up(向上)和down(向下)鍵來上下瀏覽從前輸入的命令

12.? ctrl+r可以在命令歷史中搜索命令,隨便輸入一個你印象中的幾個字母,就可以找到這個文件。

13.調用歷史參數:(cmd為命令)

? #cmd !^ ??????利用上一個命令的第一個參數做cmd的參數

#cmd !$ ??????利用上一個命令的最后一個參數做cmd的參數

#cmd !* ? ? ??利用上一個命令的全部參數做cmd的參數

#cmd !:n ? ? ?利用上一個命令的第n個參數做cmd的參數

?

? #cmd !n:^ ????調用第n條命令的第一個參數

#cmd !n:$ ????調用第n條命令的最后一個參數

#cmd !m:n ????調用第m條命令的第n個參數

#cmd !n:* ????調用第n條命令的所有參數

?

? #cmd !string:^ ?從命令歷史中搜索以string開頭的命令,并獲取它的第一個參數

#cmd !string:$ ?從命令歷史中搜索以string 開頭的命令,并獲取它的最后一個參數

#cmd !string:n ?從命令歷史中搜索以string 開頭的命令,并獲取它的第n個參數

#cmd !string:* ?從命令歷史中搜索以string 開頭的命令,并獲取它的所有參數

14. history命令有三種用法

history [-c][-d offset] [n]? or? history -anrw[filename]?? or?? history-psarg[arg...]


-c: 清空命令歷史 (清除的是內存中的歷史命令,文件里的命令不會刪除,如果想全部清除,首先刪文件rm -f .bash_history然后在刪命令?????????? history -c)? (history -c 相當于HISTSIZE=0? ,把歷史命令長度變為0,也是清內存,臨時性的長度。想要永久性不記錄歷史,則需要nano .bash_history 更改里面的HISTSIZE=0)

-d n : 刪除歷史中指定的第n條命令;

#: ???顯示最近的#條歷史

-a: ??追加本次會話新執行的命令歷史列表至歷史文件(從內存里轉到歷史文件中)

-w: ??保存歷史列表到指定的歷史文件

-a -w 的區別:

在保存到非默認文件夾時有區別,history -a a.log? 只是把緩存中的一些歷史命令存到a.log文件里,history -w a.log 是把所有的命令(包括默認文件中的歷史命令還有新的緩存命令)保存到a.log

-n: ??讀歷史文件中未讀過的行到歷史列表(讀未讀過的并不重復的文件到歷史文件中)

-r: ??讀所有歷史文件并附加到歷史列表

-n -r 的區別:

假如新用戶在同一臺電腦用同樣的賬戶開了個終端(比如說克隆會話B端),在B 里輸入會話,把B里新會話寫到文件里,可以在B里看見歷史命令,但是在A里卻看不見,這個時候,在A里輸入history -n,就會看見B里的新會話命令,但是這種命令刪掉了一些重復命令,當你在A里輸入history -r 的時候,就會看見A里的所有命令+B里的所有命令。

-p: ??展開歷史參數成多個行,但不存在歷史列表中。

-s: ??展開歷史參數成一行,附加在歷史列表后。(相當于偽造歷史命令,但是命令不執行,相當于nano .bash_history ,在歷史文件下面輸入rm-rf/etc/passwd ,存盤退出,輸入history -n? 最后輸入history?? 就會看到偽造的歷史命令了

?

?

?

?

?

?

?

15.命令歷史相關環境變量:

? HISTSIZE:命令歷史記錄的條數;

? ? ? ? ? ?[root@localhost ~]# echo $HISTSIZE

? ? ? ? ?1000

? ? ? ? ? ??其定義文件在/etc/profile,輸入

? ? ? ? ? ~]# nano /etc/profile

? ? ? ? ?在其加入HISTSIZE=XXX,即可定義歷史記錄的條數

HISTFILE:指定歷史文件,默認為~/.bash_history;可以更改文件,如下:

? ? ? ? ? ? nano .bash_profile

? ? ? ?輸入:

? ? ? ? ? ? HISTFILE=/root/history/.log

? ? ? ? ? ? 存盤退出,再exit退出系統,重新登錄,輸入echo$HISTFILE 后就顯示新的文件目錄

HISTFILESIZE:命令歷史文件記錄歷史的條數;可修改,同HISTSIZE

HISTTIMEFORMAT顯示歷史列表時間(初始值為空),加入HISTTIMEFORMAT=”%F%T “,其歷史列表中就會顯示時間。?HISTTIMEFORMAT=”`hostname` %F %T “,加顯主機名。存盤退出exit后,輸入 cat history.log? 時就會看到下面歷史命令,表示距離197011日有多少秒的時間(等于date +%s

HISTIGNORE=str1:str2 忽略string1,string2歷史,臨時生效(HISTIGNORE=”passwd:echo*”?? *代表后面跟任何東西都忽略了)

?

?

?

16.控制命令歷史的記錄方式:

環境變量:HISTCONTROL=

ignoredups? 忽略重復的命令;(連續且相同方為“重復”)

ignorespace 忽略所有以空白開頭的命令

ignoreboth? ignoredups, ignorespace

erasedups:??? 刪除重復命令(無論連續不連續,只要重復就刪除)

export 變量名="值“

存放在/etc/profile ~/.bash_profile

?