linux的history命令設置

history的歷史記錄,同一個用戶的各個會話,讀取到的內容也是不同的,緣由是它讀取的是shell會話緩存裏的內容。只有當用戶退出當前會話的時候,會話裏的緩存內容纔會寫入~/.bash_history裏。
猜想:用戶登陸後,首先把~/.bash_history裏的內容讀入緩存,而後當前會話的命令執行記錄,也寫入緩存中,這樣相同用戶不一樣會話,讀到的history內容是不同的。
linux默認配置是當打開一個shell終端後,執行的全部命令均不會寫入到~/.bash_history文件中,只有當前用戶退出後纔會寫入,這期間發生的全部命令其它終端是感知不到的。

export HISTTIMEFORMAT="`whoami` : |  %F  | %T: | "
網管還應該在"/etc/skel/.bash_logout" 文件中添加下面這行"rm -f $HOME/.bash_history" 。這樣,當用戶每次註銷時,「.bash_history」文件都會被刪除.
$HISTSIZE 設置bash會員期間歷史包含的命令數量
$HISTFILESIZE 設置歷史文件中實際存儲的命令數量
$HISTFILE bash啓動的時候會讀取~/.bash_history文件並載入到內存中,這個變量就用於設置.bash_history文件,bash退出時也會把內存中的歷史回寫到.bash_history文件
清空當前會話緩存裏歷史命令 history -c 要想完全清空歷史命令,須要先將 .bash_history的內容刪除,接着使用 history -c, 這樣纔會完全清空命令歷史。

HISTSIZE:shell進程的緩衝區保留的歷史命令的條數;
HISTFILESIZE:命令歷史文件可保存的歷史命令的條數;
HISTIGNORE="str1:str2:…"忽略string1,string2歷史;

history -w 讓bash將歷史命令當即從內存寫到.bash_history文件
history -a 將目前新增的 history 歷史命令寫入.bash_history文件

history 命令常見用法 ?
語法:

history [n | -c | -rnaw histfile]
參數:

n:數字,列出最近的 n 條歷史命令
-c:將當前shell 緩存中的 history 內容所有清除
-a:將當前shell緩存中的history 內容append附加到 histfile 中,若是沒有指定 histfile,則默認寫入 ~/.bash_histroy;-a:將bash 內存中歷史命令追加到 .bash_history 歷史命令文件中, 默認只有退出 shell 是纔會保存
-r:將 histfile 中的內容讀取到當前shell的緩存中;-r:讀取歷史文件到歷史列表(將 .bash_history從新讀取一遍,寫入到當前bash進程的內存中)
-w:將當前shell緩存的history歷史列表寫入到指定的文件;-w:保存歷史列表到指定的歷史文件(history -w /PATH/TO/SOMEFILE 將內存中命令執行的歷史列表保存到指定的 /PATH/TO/SOMEFILE中)
-a: 追加本次會話新執行的命令歷史列表至歷史文件,由於多終端因此若是想看當前都發生了什麼操做就能夠執行-a進行查看
-n: 讀歷史文件(本地數據)中未讀過的行到歷史列表(內存數據)
-r: 讀歷史文件(本地數據)附加到歷史列表(內存數據)
-w: 保存歷史列表(內存數據)到指定的歷史文件(本地數據)
-s: 展開歷史參數成一行,附加在歷史列表後。用於僞造命令歷史

http://blog.51cto.com/skypegnu1/1941153  html

 

  利用history命令,可使每一個登陸會話只看到本身的命令歷史記錄,這樣即保證安全,又方便使用。即便是同一個用戶的不一樣會話,也要保證同一個用戶的各個會話只能看到本身的歷史記錄。不方便的是,你每次登陸進去,都是一個新的會話,就看不到任何的history記錄。node

 

  • HISTCONTROL:若是設置爲 ignorespace, 以 space 開頭的行將不會插入到歷史列表中。若是設置爲 ignoredups, 匹配上一次歷史記錄的行將不會插入。設置爲 ignoreboth 會結合這兩種選項。若是沒有定義,或者設置爲其餘值,全部解釋器讀取的行都將存入歷史列表,但還要通過 HISTIGNORE 處理。這個變量的做用能夠被 HISTIGNORE 替代。多行的組合命令的第二和其他行都不會被檢測,無論 HISTCONTROL 是什麼,都會加入到歷史中。
  • HISTFILE:保存命令歷史的文件名 (參見下面的 HISTORY 歷史章節)。默認值是 ~/.bash_history。若是取消定義,在交互式 shell 退出時命令歷史將不會保存。
  • HISTFILESIZE:歷史文件中包含的最大行數。當爲這個變量賦值時,若是須要的話,歷史文件將被截斷來容納不超過這個值的行。默認值是 500。歷史文件在交互式 shell 退出時也會被截斷到這個值。
  • HISTIGNORE:一個冒號分隔的模式列表,用來判斷那個命令行應當保存在歷史列表中。每一個模式都定位於行首,必須匹配整行 (沒有假定添加 ‘*’)。在 HISTCONTROL 指定的測試結束後,這裏的每一個模式都要被測試。除了日常的 shell 模式匹配字符, ‘&’ 匹配上一個歷史行。‘&’ 可使用反斜槓來轉義;反斜槓在嘗試匹配以前將被刪除。多行的組合命令的第二行以及後續行都不會被測試,無論 HISTIGNORE 是什麼,都將加入到歷史中。
  • HISTSIZE:命令歷史中保存的歷史數量 (參見下面的 HISTORY 歷史章節)。默認值是 500。

  

實例來自https://blog.csdn.net/m0_38020436/article/details/78730631
設置uid大於等於500的用戶的history安全性
需求:
記錄統一轉移到/var/history目錄下;
用戶沒法刪除本身的history文件,沒法清空history;
多個終端共享history,實時追加;
限制history文件大小和保存的條數;
舉例用戶,lionel;uid=523linux

1)配置全局環境變量文件/etc/profile # vi /etc/profile //添加如下內容 # add by coolnull
if [ $UID -ge 500 ];then readonly HISTFILE=/var/history/$USER-$UID.log readonly HISTFILESIZE=50000 readonly HISTSIZE=10000 readonly HISTTIMEFORMAT='%F %T ' readonly HISTCONTROL=ignoredups shopt -s histappend # 這條配置,就可使一個終端的用戶監控到另外一個終端用戶輸入的命令內容 readonly PROMPT_COMMAND="history -a" fi 建立目錄結構 # mkdir /var/history
 配置目錄權限,使得用戶有權限建立本身的history文件 # chmod 777 /var/history # chmod a+t /var/history

2)限制用戶刪除本身的history文件 # chattr +a /var/history/lionel-522.log

3)限制用戶修改本身主目錄的環境變量配置文件 # chattr +a /home/lionel/.bash*

# lsattr /home/lionel/.bash*
-----a------- /home/lionel/.bash_logout -----a------- /home/lionel/.bash_profile -----a------- /home/lionel/.bashrc 4)禁止普通用戶切換到系統中其餘shell環境(通常包括csh,tcsh,ksh) # chmod 750 tcsh(csh是tcsh的軟鏈接,設置tcsh就能夠了) # chmod 750 /bin/ksh
 普通賬號測試 [zhangfei@node1 ~]$ tcsh -bash: /bin/tcsh: Permission denied [zhangfei@node1 ~]$ ksh -bash: /bin/ksh: Permission denied

 

Bash Shell 中的 PROMPT_COMMAND的含義:天天命令執行前,先執行Bash Shell 中的 PROMPT_COMMAND命令。

https://jaminzhang.github.io/shell/PROMPT-COMMAND-in-bash-shell/git

http://blog.51cto.com/chenchao40322/411855github

參考shell十三問:http://wiki.jikexueyuan.com/project/13-questions-of-shell/double-single.htmlshell

參考:ubuntu

一、https://blog.csdn.net/m0_38020436/article/details/78730631緩存

二、http://xiaqunfeng.cc/2017/01/11/Linux%E5%91%BD%E4%BB%A4%E2%80%94%E2%80%94history%E5%8F%8A%E5%85%B6%E4%BC%98%E5%8C%96/安全

三、https://askubuntu.com/questions/80371/bash-history-handling-with-multiple-terminals  如何保存多個終端會話的歷史命令bash

相關文章
相關標籤/搜索