history and its relevant variables in Linux/GNU and Mac OS history命令以及相關環境變數

來源:互聯網
上載者:User

標籤:

對於Terminalor們,history命令並不陌生,什麼!n, !!更是很常用的,而且您在命令列敲的cmds是預設儲存在/home/$USER/.bash_history(linux)

/Users/$USER/.bash_history(Mac)下的。

但是history不只是這個樣子:存了命令然後可以查看調用。

先介紹幾個與history相關的變數,控制history的行為和size

HISTIGNORE (hist-ignore) 告訴history哪些命令不需要儲存,直接把它們忽略掉。

例如我的是:

HISTIGNORE="ls *:ll:ls:l:ll *:freq*:cd *:*.log:dl:dc:des:bi:pic:sublime:brackets:open*"

就是把常用的ls命令們忽略掉,這些都是很常用但是很少被再利用的“廢料“,cd到哪哪哪也沒用,還有就是查看log檔案的也沒用,freq*是我把常用的目錄alias的

例如 alias freq1="cd ~/Edge/dl/GSE38600/NEW"

還有 dl dc des pic bi都對應一個alias, alias dl="cd ~/Downloads"這樣的

還有 sublime brackets是我常用的editor,在Mac中是alias sublime="open -a sublime\ text",linux下直接用subl就好了

open*也是Mac下的

對於在Debian類的Linux系統的,常用的apt-get類命令可以alias

alias update="sudo apt-get update"

alias upgrade="sudo apt-get upgrade  | tee ~/Documents/`date +%F_%H:%M:%S`-upgrade.log"

alias dist-upgrade="sudo apt-get dist-upgrade  | tee ~/Documents/`date +%F_%H:%M:%S`-dupgrade.log"

alias remove="sudo apt-get remove"

alias install="sudo apt-get install"

alias purge="sudo apt-get purge"

...

然後把update,upgrade,dist-upgrade等添加到HISTIGNORE中

HISTSIZE 表示最多可以存多少條命令,預設的你可以看.bashrc或者.bash_profile裡面一般把這個變數定義為1000

超過這個數字會自動把原來的命令擠出去,相當於一個隧道一樣的。

但是真的很不夠用的,我把HISTSIZE定義為1,000,000反正暫時也達不到這個要求,一般100,000也要很久才能達到

一般可以檔案到了一定的大小把它備份了,再重新開始一個檔案存,備份的可以寫個bash函數並結合history來一起查看新舊檔案

HISTFILESIZE 表示檔案的最大大小,預設也是1000,自己按照自己的實際cmd量,DIY

HISTTIMEFORMAT (hist-time-format)當然是記錄你敲的這條命令的時間,格式和·date·是一樣的

我的是定義為:

HISTTIMEFORMAT="%F#%H:%M:%S " >>>>> 2015-04-08#04:27:32

HISTTIMEFORMAT="%F#%T " >>>>> 2015-04-08#04:27:32

[注意這個時間不會存到.bash_history中的,只是你用history查看的時候顯示]

HISTCONTROL 相當於是.bash_history的品質(品質)控制,有ignoredups,erasedups (就是ignore duplicates,和 erase duplicates)

假如選擇ignoreredups,就是忽略連續的重複,不連續的沒作用。

假如你在調試一個程式,不停地 perl bowtie2_all.pl,假如嘗試20次後最終成功的,但是history中就有了20條命令,

當然你可以應HISTIGNORE把這條命令忽略掉,但是很不明智,HISTCONTROL就可以啦,它會在存入時檢查要存的命令是否合上一條一樣

重複的話就忽略,也就是不存入

假如選擇erasedups,當然會在存入時把要存入的命令和以後的所有命令比對一次,如果有重複的話,就會把這條命令不存入

還有一個trick:可以選擇 ignorespace,意思就是,你在輸入命令的時候如果最開始有一個空格,那麼就會不存入這條命令,所以

你就可以把不想存入的命令前面加一個或者多個空格來忽略它。

HISTFILE當然就是自訂你要把命令存到哪裡,預設是~/.bash_history,當然如果你不想存這兒,就指定要存的地方,OK。

例如 HISTFILE="/home/$USER/Backup/bash_2015_history"

[注意最好用絕對路徑]

注意,這些變數的定義存入.bashrc,然後再命令列 source ~/.bashrc,意思就是把我修改過的.bashrc中的設定覆蓋已經讀到記憶體中的設定(以後開啟的terminal都會用這個設定,在source之間開啟的,除了這個視窗,都保持原來的設定)

很討厭用export來匯入,因為在你關掉這個Terminal或者重啟之後這個設定就沒有了,因為每次開啟Terminal都會重讀.bashrc

當然我直接把export VARIABLE=CONTENT寫入.bashrc不就好了,但是直接用VARIABLE=CONTENT就好了,何必再多敲7個字元呢

還有就是,所有的你在這個視窗中敲的命令會在這個視窗exit或者close後才寫入.bash_history中,(緩衝機制),如果想敲一條寫一條的話,呵呵,來一個trick

PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

PROMPT_COMMAND就是.bash_rc中定義的PS1啦,也就是每次的[email protected] : ~ $,上面的trick就是在每次Prompt前將命令存入,-a可以指定其他檔案名稱,

但預設是.bash_profile

由於bash的history檔案預設是覆蓋,如果存在多個終端,最後退出的會覆蓋以前記錄,改為追加形式:shopt -s histappend,不過預設在.bashrc中是有的,無需再填

history N 查看最新存入的N條命令: 相當於 history | tail -n N

!N 查看並運行存入的第N條命令: history | sed -n ‘Np‘(只查看的話)

!! 查看並運行上一條命令

!STR 查看以STR打頭的命令

但是我更喜歡 : alias hist="history | grep "

-w / -r/ -c 分別是 write to / read from / clear

 Ctrl + R 也是常用的history搜尋

 

Reference:

1. http://www.jb51.net/LINUXjishu/157030.html

2. http://blog.csdn.net/dyllove98/article/details/9412805

history and its relevant variables in Linux/GNU and Mac OS history命令以及相關環境變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.