Linux shell程式設計之shell命令歷史記錄

2021-08-28 06:59:10 字數 4326 閱讀 2098

目錄

shell的命令歷史記錄 需求

相關引數

實現步驟

>>>系統需要乙個目錄用來記錄所有使用者的命令歷史記錄,來做安全保護。

>>>建立乙個目錄/var/history,該目錄會建立檔案記錄所有登入使用者的歷史命令

檔案以 username-userid.log 格式命名;(預設用於記錄使用者歷史命令的檔案是當前使用者家目錄下的.bash_history)

>>>所有使用者執行過的命令都會被追加到對應的檔案中 ,並且不能刪除和修改 ——>特殊屬性a

>>>使用者輸入的命令要實時刷入硬碟 ——>特殊屬性s

目錄格式如下:

[bei@localhost ~]$ ls -al /var/history/

dr-xr-xrwx.  2 root      root       4096 aug  7 22:43 .

drwxr-xr-x. 22 root      root       4096 jul 22 00:05 ..

-rw-------.  1 bei       bei       76219 sep 18 20:18 bei-507.log

-r--------.  1 root      root      12815 sep 18 20:17 root-0.log

檔案格式如下:

[bei@localhost ~]$ cat -n /var/history/bei-507.log | tail -5

4363  ls -al

4364  #1537327334

4365  history

4366  #1537327341

4367  ifconfig

引數

描述

histfile

用於指定儲存命令歷史記錄的路徑及檔名稱(預設~/.bash_history

histfilesize

用於指定儲存命令記錄檔案中的最大行數(預設值500,建議設定為null

histsize

命令歷史記錄中的記錄的命令最大行數(預設值500,建議設定為100000

定義了history命令輸出的行數

histtimeformat

在歷史記錄檔案中,使用注釋符來區分時間戳和相關命令

可設定history命令顯示的歷史記錄條目關聯的時間戳輸出格式

例:readonlyhisttimeformat="%f %t `who -u am i 2>/dev/null| awk ''|sed -e 's/[{}]//g'     ` `whoami ` "

history命令輸出為:

[bei@localhost ~]$ history | tail -5

2188  2018-09-18 20:22:14 (192.168.20.***) bei history

2189  2018-09-18 20:22:21 (192.168.20.***) bei ifconfig

2190  2018-09-18 20:22:49 (192.168.20.***) bei cat -n /var/history/bei-507.log | tail -5

2191  2018-09-18 20:27:45 (192.168.20.***) bei history | tail -10

2192  2018-09-18 20:27:51 (192.168.20.***) bei history | tail -5

histcontrol

控制命令在歷史列表中記錄方式

ignorespace:以空格開頭的行不會記錄在歷史中

ignoredups:忽略重複的命令

ignoreboth:引數ignorespaceignoredups同時生效

關於readonly

變數前寫上readonly,非root使用者變數不可更改

>>>建立目錄/var/history——> mkdir /var/history

給目錄/var/history賦予所有人的寫許可權——> chmod a+w /var/history

給目錄/var/history賦予特殊屬性a——> chattr +a /var/history

>>>編輯/etc/profile修改shell命令記錄的引數

readonlyhistfile=/var/history/$user-$uid.log#設定儲存命令歷史記錄的路徑及檔名稱

readonlyhistsize=null

readonlyhistfilesize=500000

readonlyhisttimeformat="%f %t `who -u am i 2>/dev/null| awk ''|sed -e 's/[{}]//g'     ` `whoami ` "

乙個使用者可以同時開啟多個終端

readonlyprompt_command="history -a"#實時追加當前歷史命令到history檔案

if [ "$histcontrol" = "ignorespace" ] ; then

exporthistcontrol=ignoreboth

else

exporthistcontrol=ignoredups

fiexport histsize histcontrol

說明:

>>>以上內容是本人學習的總結

>>>亦可分享自己的想法,互相學習

linux shell程式設計之 if語句

一 語句格式 一行中的寫法 if test commands then consequent commands fi 多行的寫法 if 條件 then command else command fi 基本語法記住亮點 1 按照漢語的方式記憶 如果 if 那麼 then 就 否則 else 就 2 記...

Linux shell程式設計之awk sed用法詳解

awk的用法 1.awk的使用 呼叫方式 1.命令列方式 2.將所有awk命令插入乙個檔案,並使awk程式可執行,然後使awk命令直譯器作為指令碼的首行,以便通過鍵入指令碼名稱來呼叫它。3.將所有的awk命令插入乙個單獨檔案,然後呼叫。選項說明 f 域符號 預設為空格 f 指明awk指令碼 2.模式...

LINUX SHELL程式設計之遠端拷貝

使用expect,進行遠端拷貝 1.首先確認你的系統安裝有expect which expect 如果顯示如下,說明已經安裝完expect,如果沒有執行2 usr bin expect 2.yum install expect 3.遠端拷貝 usr bin expect f set password...