Bash

如何獲取另一個使用者的命令行歷史記錄?

  • February 6, 2020

我目前有一個伺服器設置為立即將每個使用者的 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。

引用自:https://unix.stackexchange.com/questions/566115