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? 時就會看到下面歷史命令,表示距離1970年1月1日有多少秒的時間(等于date +%s)
HISTIGNORE=“str1:str2“ 忽略string1,string2歷史,臨時生效(HISTIGNORE=”passwd:echo*”?? *代表后面跟任何東西都忽略了)
?
?
?
16.控制命令歷史的記錄方式:
環境變量:HISTCONTROL=
ignoredups:? 忽略重復的命令;(連續且相同方為“重復”)
ignorespace: 忽略所有以空白開頭的命令
ignoreboth:? ignoredups, ignorespace
erasedups:??? 刪除重復命令(無論連續不連續,只要重復就刪除)
export 變量名="值“
存放在/etc/profile 或~/.bash_profile
?
轉載于:https://blog.51cto.com/jaggerzhang/1831923