linux系統history記錄不全的原因


參考:

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即可

  1. # format history
  2. # save in ~/.bashrc
  3. USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
  4.  
  5. export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S `whoami`@${USER_IP}: "
  6. export HISTFILESIZE=1000000
  7. export PROMPT_COMMAND="history -a; history -r; $PROMPT_COMMAND"
  8. shopt -s histappend
  9. #bind '"\e[A": history-search-backward'
  10. #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的信號,告訴他我退出了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM