參考:
https://blog.csdn.net/imliuqun123/article/details/82978379
基本認識
linux默認配置是當打開一個shell終端后,執行的所有命令均不會寫入到~/.bash_history文件中,只有當前用戶退出后才會寫入,這期間發生的所有命令其它終端是感知不到的。
問題場景
那么問題來了,假若之前history命令記錄為c0,用戶先打開了shell終端a,執行了一部分命令c1,又打開了一個shell終端b,又執行了一部分命令c2.
問題1.終端a執行的這部分命令終端b上看不到。
問題2.終端a正常退出,相關命令會寫入到~/.bash_history文件中(c1命令也會寫入,即c0+c1),等到終端b正常退出后,相關命令也會寫入到~/.bash_history文件中,注意這個時候終端b寫入的內容為c0+c2,也即c1記錄會丟失!!!
解決方案
將下面這段內容添加到~/.bashrc 並執行 . ~/.bashrc即可
-
# format history
-
# save in ~/.bashrc
-
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
-
-
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S `whoami`@${USER_IP}: "
-
export HISTFILESIZE=1000000
-
export PROMPT_COMMAND="history -a; history -r; $PROMPT_COMMAND"
-
shopt -s histappend
-
#bind '"\e[A": history-search-backward'
-
#bind '"\e[B": history-search-forward'
第一行是獲取USER_IP也就是會話的ip
第二行是設置history的時間格式,這里設置的格式為:history序號 2018-09-29 19:33:59 root@192.168.25.1: history
第三行設置的是history可以存放的歷史命令最多可以存放1000000行
第四行 history -a 追加本次會話新執行的命令到.bash_history中也就是內存中的命令寫入到歷史文件中,history -r 讀取歷史文件中的所有歷史命令到內存中的歷史列表,即使內存中的列表中已經存在這條歷史
第五行 打開histappend選項,將其修改為on 意為,推出這個回話后,回想shell中發送一個sighup的信號,告訴他我退出了