Bash
如何獲取另一個使用者的命令行歷史記錄?
我目前有一個伺服器設置為立即將每個使用者的 Bash 歷史記錄保存在各自的主文件夾中,我想創建一個腳本,該腳本以設定的時間間隔執行,切換目前使用者並執行“歷史”命令。
我已經在命令行中嘗試了 su 和 sudo 的所有變體,但是每當我在腳本中為另一個使用者執行命令“歷史”或使用 su/do 時,我都沒有得到任何輸出。
在腳本中,我嘗試了 su 和 sudo 的所有變體,以及:
su <user> history
但它所做的只是用該使用者打開一個外殼,並且不返回“歷史”的輸出。
我目前正在使用 RHEL6.9 和 Bash 4.1.2。
編輯:
我有一個目前監視所有 .bash_history 文件的日誌收集器,但我將 /etc/bashrc 配置為附加時間戳和使用者,以便我可以分配欄位並記錄每個命令的確切執行時間。因為 Bash 在 .bash_history 中儲存命令行歷史的內部格式只是添加紀元時間,所以我需要能夠對每個單獨的使用者執行“歷史”。
我已經從命令行以及腳本中(分別)嘗試了以下內容:
su -c "history" <user> sudo -i -u <user> history sudo -S -u <user> -i /bin/bash -l -c 'history'
我試圖在腳本中做到這一點:
su -i <user> history
但他們從不返回任何結果。
創建一個腳本並將其保存在 PATH 中可供所有使用者使用的某個位置。例如
/bin
或/usr/bin
劇本
#!/usr/bin/env bash HISTFILE=$HOME/.bash_history history -r unset HISTFILE history
將其保存為類似的名稱
print_history
現在試試
su - user_name -c 'print_history'
你說你有時間格式,
/etc/bashrc
所以我沒有HISTTIMEFORMAT
在那個腳本中取消設置。該腳本的想法不是我的,我個人使用該PROMPT_COMMAND
變數來擷取在互動式會話期間輸入/執行命令的每個命令(以及我係統中的每個使用者),所以我不使用該腳本,所以我只能說那個腳本。當然,所有使用者都必須使用 bash 作為登錄 shell。