2008-12-07 152 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