2008-12-07 230 views
2

有沒有辦法記錄(/ var/log)用戶在* nix終端執行的命令?記錄終端命令* nix

+1

@dmckee:什麼是* nix?一種指向Unix的方式?別的東西? – Lazer 2010-05-24 08:48:04

回答

4

儘管會佔用大量的磁盤空間,但進程記帳仍是一種方法。除非你有一個非常難以理解的盒子,否則它不是我可以運行的東西,但它對於解決問題非常有用,因爲它基本上跟蹤每一個過程,一個簡單的「ps快照」工具無法比擬的說法。

你基本上與accton /var/account/pacct打開它和內核然後寫入進程退出,其中的細節:

  • 進程名(不指定參數時,不幸)。
  • 開始時間。
  • 經過的時間。
  • 用戶和系統CPU時間。
  • 退出代碼。
  • 內存,I/O,故障和交換統計。
  • 進程ID。
  • 父進程ID。

和其他一些事情。

你把它關閉了一個裸體accton所以你笑所有在Windows上使用Start按鈕關閉的人,呵呵! :-)

有兩種可記錄的變種記錄v1和v3 - 確保您使用最新的進程記帳軟件和v3記錄,因爲它們擁有更多有用的信息。 /usr/include/linux/acct.h文件顯示你可以從那裏獲得什麼。

記錄都是固定大小(不管版本),並且易於處理。

我們剛剛爲我們的性能監控軟件完成了一個Linux代理 - 我以爲在記憶中仍然記憶猶新的時候我會記下它。

有一點需要注意的是comp_t領域 - 它們其實是抱着一個大範圍的值在16位的怪異指數/尾數類型 - 算法是把它變成一個長的很簡單:

comp_t ct = ?; 
long val = (ct & 0x1fff) << (((ct >> 13) & 0x7) * 3); 

另一件事是,有些值是在時鐘刻度,而不是秒,所以你必須除以sysconf (_SC_CLK_TCK)返回的值。

0

愚蠢的想法從我的頭頂:

script將在會議複製到文件中。你可以將它發送到一個正在被日誌記錄過程讀取的命名管道---唯一的事情是,你會得到輸出以及命令。

6

假設您爲了安全目的而執行此操作,請查看流程記帳。您沒有說明您使用的是哪種UNIX版本,但對於Linux,請看http://www.gnu.org/software/acct/請注意,當進程記帳寫入有關係統範圍內每個命令(其內核功能)的數據時,您將生成大量數據。你的發行版可能已經有公用事業了;在Debian中檢查'acct'包。

如果你只是想記錄你所做的事情,你可以稍後再回頭看看,腳本(如在其他答案中)或屏幕(使用-L)將提供更好的解決方案。但是,它們不適用於安全審計,因爲它可以繞過它們:僅運行一個shell腳本。此外,行編輯使文件變得非常混亂。詛咒應用程序(如文本編輯器)更糟糕。另外,如果您通過例如腳本強制用戶,您可能會收集信息(例如,電子郵件),這可能對您來說非法截取。

+0

啊。有人知道他們在說什麼。給予好評。 – dmckee 2008-12-07 05:24:34