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
利用history命令,可以使每個登錄會話只看到自己的命令歷史記錄,這樣即保證安全,又方便使用。即使是同一個用戶的不同會話,也要保證同一個用戶的各個會話只能看到自己的歷史記錄。不方便的是,你每次登錄進去,都是一個新的會話,就看不到任何的history記錄。
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=523
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/
http://blog.51cto.com/chenchao40322/411855
參考shell十三問:http://wiki.jikexueyuan.com/project/13-questions-of-shell/double-single.html
參考:
1、https://blog.csdn.net/m0_38020436/article/details/78730631
2、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/
3、https://askubuntu.com/questions/80371/bash-history-handling-with-multiple-terminals 如何保存多個終端會話的歷史命令
總結
以上是生活随笔為你收集整理的linux的history命令设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见CNN网络结构
- 下一篇: 在TortoiseSVN使用clean