中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Linux系統的歷史記錄添(tian)加時間和(he)IP信息

1 為什么要優化系統歷史記錄

我(wo)們都知道,對(dui)于linux系(xi)統,默認情況下,系(xi)統記(ji)(ji)錄(lu)(lu)的(de)歷(li)(li)史命令比較(jiao)簡(jian)單。某些(xie)歷(li)(li)史記(ji)(ji)錄(lu)(lu)可能也無法正常(chang)保存,因(yin)此(ci)當服務器出現(xian)異常(chang),希望通過(guo)歷(li)(li)史命令來了(le)解曾(ceng)經做了(le)哪些(xie)操作時,往(wang)往(wang)非常(chang)被動,下面就給(gei)大家介(jie)紹如何(he)通過(guo)系(xi)統內置的(de)變量來優化歷(li)(li)史記(ji)(ji)錄(lu)(lu),使得(de)我(wo)我(wo)們查看歷(li)(li)史記(ji)(ji)錄(lu)(lu)更加方便。

 

 

2 HISTSIZE和HISTFILESIZE

  • 介紹

當我們在終端(duan)上執(zhi)行(xing)歷史(shi)命令時(shi),Bash 會(hui)讀取(qu)內存中的(de)(de)(de)副本顯示已(yi)執(zhi)行(xing)命令的(de)(de)(de)歷史(shi)記錄。最后,當 shell 退出時(shi),它(ta)會(hui)將內存中的(de)(de)(de)內容(rong)寫回(hui)到(dao)磁盤上HISTFILE指向的(de)(de)(de)文件中。

默認(ren)情況下(xia),內(nei)容存儲(chu)在位于用戶主(zhu)目(mu)錄的.bash_history文(wen)件中。

[root@k8s-master01 ~]# echo $HISTFILE
/root/.bash_history

HISTSIZE變量中設置的(de)值是(shi)我們可以(yi)在內存中存儲的(de)最(zui)大歷史(shi)行數。

HISTFILESIZE變量(liang)控制(zhi)我(wo)們(men)可以(yi)寫回到(dao)磁盤上(shang)的(de)歷史文件的(de)最大行數。

可(ke)以簡單理(li)解(jie)為HISTSIZE變量定義的是執行(xing)history命令時可(ke)以看到(dao)的命令數,HISTFILESIZE變量定義的是保存到(dao)磁盤中(zhong)的history記錄數。

[root@k8s-master01 ~]# echo $HISTSIZE
1000
[root@k8s-master01 ~]# 
[root@k8s-master01 ~]# echo $HISTFILESIZE
1000

 

3 HISTCONTROL

  • 介紹

使(shi)用(yong)HISTCONTROL變量,我們可以控制 bash 如何存(cun)儲已(yi)執行命令的(de)歷史記錄。

在工作(zuo)時,我們(men)經常會多(duo)次執行某些相同(tong)的(de)命令(ling)。默認歷(li)史(shi)記錄大(da)小(xiao)(xiao)為 500,相同(tong)命令(ling)的(de)重復次數(shu)太(tai)多(duo)會填滿(man)歷(li)史(shi)記錄,并使歷(li)史(shi)記錄變得無用(yong)。當然(ran)我們(men)可(ke)以使用(yong)上(shang)一(yi)小(xiao)(xiao)節提(ti)到的(de)HISTSIZE 或(huo)HISTFILESIZE增(zeng)加歷(li)史(shi)列表的(de)大(da)小(xiao)(xiao)。

另一種選擇是告訴 bash 不要存儲重復項。這是通過HISTCONTROL變量完成的。 HISTCONTROL控制 bash 如何存儲命令歷史記錄。目前有兩個可能的標志:ignorespace 和ignoredups。ignorespace標志(zhi)告訴(su)(su) bash 忽(hu)略以空格開頭的(de)命令。另一個標志(zhi)ignoredups告訴(su)(su) bash 忽(hu)略重復(fu)項(xiang)。如果您希(xi)望指定兩個值,則可以用冒(mao)號 ignorespace:ignoredups連(lian)接和分隔(ge)值,或(huo)者您可以只(zhi)指定ignoreboth。

  • 常用的HISTCONTROL變量有

ignoredups 默認,忽略重復命令

ignorespace 忽(hu)略所有一空格(ge)開頭的命令

ignoreboth ignoredups 和 ignorespace 的(de)組合(he)

erasedups 刪除歷(li)史記錄中重復命令,相(xiang)同的指令僅(jin)保留最近的一個(ge)

如果同時設(she)定(ding)多個選項,中間使用冒(mao)號。如:HISTCONTROL=ignorespace:erasedups

[root@k8s-master01 ~]# export |grep -i histc
declare -x HISTCONTROL="ignoredups"

4 HISTTIMEFORMAT

  • 介紹

Linux 中(zhong)的(de) bash shell 允許我們(men)訪問命(ming)(ming)(ming)令(ling)(ling)歷(li)史記(ji)錄,即(ji)使用(yong) history 命(ming)(ming)(ming)令(ling)(ling)按順(shun)序執(zhi)行(xing)的(de)命(ming)(ming)(ming)令(ling)(ling)列(lie)表。history 命(ming)(ming)(ming)令(ling)(ling)用(yong)于跟蹤(zong)所有已執(zhi)行(xing)的(de)命(ming)(ming)(ming)令(ling)(ling)。這在故障排(pai)除或審計期間非常重要(yao)。沒有設(she)置(zhi) HISTTIMEFORMAT 的(de)歷(li)史命(ming)(ming)(ming)令(ling)(ling)只顯示(shi) command# 和(he) command 但不(bu)顯示(shi)命(ming)(ming)(ming)令(ling)(ling)執(zhi)行(xing)的(de)時間。因此,要(yao)顯示(shi)與每(mei)個歷(li)史條目關(guan)聯的(de)信息,必須設(she)置(zhi) HISTTIMEFORMAT。

[root@k8s-master01 ~]# HISTTIMEFORMAT="%F %T "  #歷史記錄中加上年月日及時間
[root@k8s-master01 ~]# history |head -10
    1  2023-07-16 23:03:51 df
    2  2023-07-16 23:03:51 yum install vim wget git strace
    3  2023-07-16 23:03:51 yum install net-tools
    4  2023-07-16 23:03:51 df
    5  2023-07-16 23:03:51 top
    6  2023-07-16 23:03:51 history
    7  2023-07-16 23:03:51 ls
    8  2023-07-16 23:03:51 vim 
    9  2023-07-16 23:03:51 df
   10  2023-07-16 23:03:51 vim /etc/selinux/config

可以看到(dao)時(shi)間(jian)都是(shi)一樣的,是(shi)定義變量后的時(shi)間(jian),這(zhe)屬于正常現象,因為之前的記錄(lu)并沒(mei)有記錄(lu)時(shi)間(jian)。后續(xu)的歷(li)史命令將(jiang)會記錄(lu)上執行時(shi)間(jian)。

 

 

 

5 PROMPT_COMMAND

  • 介紹

在出現 shell 命令輸入(ru)提示符之前,作為命令來(lai)執行(xing)這個變(bian)量。

[root@k8s-master01 ~]# export PROMPT_COMMAND="date '+%F %T'"
2022-11-21 13:11:43 # 在出現下面的提示符之前執行了 date 命令
[root@k8s-master01 ~]# ls
anaconda-ks.cfg  hosts  k8s-ha-install  kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm  kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm  kubeadm-config.yaml  new.yaml  rook
2022-11-21 13:11:48 # 再次出現
[root@k8s-master01 ~]# a
-bash: a: command not found
2022-11-21 13:11:51 # 每次命令行提示符出現之前它都會出現
[root@k8s-master01 ~]# 

通過上面介紹的這些變量,我們可以實(shi)現將歷史命(ming)令(ling)收集到文件中,實(shi)現方式(shi)如(ru)下。

[root@k8s-master01 ~]# mkdir -p /var/log/history.d
[root@k8s-master01 ~]# echo 'export PROMPT_COMMAND="(umask 000; msg=\$(history 1 | { read x y; echo \$y; }); echo [\$(who am i | awk \"{print \\\$(NF-2),\\\$(NF-1),\\\$NF}\")] [\$(whoami)@\`pwd\`]\" \$msg\" >>/var/log/history.d/history)"' >> /etc/profile
[root@k8s-master01 ~]# source /etc/profile
[root@k8s-master01 ~]# tailf /var/log/history.d/history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] source /etc/profile
[2023-07-16 23:03 (172.20.15.57)] [root@/root] history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] tailf /var/log/history.d/history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] docker ps
[2023-07-16 23:03 (172.20.15.57)] [root@/root] hsit
[2023-07-16 23:03 (172.20.15.57)] [root@/root] history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] ssh 172.31.250.110
[2023-07-16 23:03 (172.20.15.57)] [root@/root] 2023-07-16 23:05:30 HISTTIMEFORMAT="%F %T "
[2023-07-16 23:03 (172.20.15.57)] [root@/root] 2023-07-16 23:05:41 history |head -10

可以(yi)看到,導(dao)入(ru)變(bian)量后(hou),記(ji)錄了歷史命(ming)令的(de)(de)執行時間,登錄ip、執行用(yong)戶,以(yi)及具體命(ming)令等信息。這樣(yang)完備的(de)(de)歷史命(ming)令記(ji)錄對于(yu)后(hou)期(qi)的(de)(de)問(wen)題排(pai)查是非(fei)常有益的(de)(de)。

 

posted @ 2025-10-29 14:34  singless233  閱讀(10)  評論(0)    收藏  舉報