方法2

还有两个其他命令可以用于相同的目的,即 lastcomm 和 sa,它们位于 psacct 包下。

因此,请确保机器安装了 psacct。

$rpm -q psacct
psacct-6.3.2-44.el5

如果软件包丢失,我们可以使用 yum 安装它

# yum install psacct

现在让我们看看安装在这个包下的文件

$rpm -ql psacct-6.3.2-44.el5
/etc/logrotate.d/psacct
/etc/rc.d/init.d/psacct
/sbin/accton
/usr/bin/ac
/usr/bin/lastcomm
/usr/sbin/accton
/usr/sbin/dump-acct
/usr/sbin/dump-utmp
/usr/sbin/sa
/usr/share/info/accounting.info.gz
/usr/share/man/man1/ac.1.gz
/usr/share/man/man1/lastcomm.1.gz
/usr/share/man/man8/accton.8.gz
/usr/share/man/man8/sa.8.gz
/var/account
/var/account/pacct

我们可以安装许多其他可执行文件,但我们将在本文中重点关注的两个命令是 sa 和 lastcomm

lastcomm 打印出有关先前执行的命令的信息。
如果未指定参数,lastcomm 将打印有关 acct(记录文件)中所有命令的信息。

# lastcomm --user jack
sshd              SF    jack __         0.00 secs Thu Jun 12 03:08
bash                    jack pts/11     0.01 secs Thu Jun 12 03:08
clear                   jack pts/11     0.00 secs Thu Jun 12 03:30
bash-prompt-xte         jack pts/11     0.00 secs Thu Jun 12 03:30
man                     jack pts/11     0.00 secs Thu Jun 12 03:14
sh                      jack pts/11     0.00 secs Thu Jun 12 03:14
less                    jack pts/11     0.00 secs Thu Jun 12 03:14
bzip2                   jack pts/11     0.00 secs Thu Jun 12 03:14
gunzip                  jack pts/11     0.00 secs Thu Jun 12 03:14
bash-prompt-xte         jack pts/11     0.00 secs Thu Jun 12 03:12
bash-prompt-xte         jack pts/11     0.00 secs Thu Jun 12 03:12
lastcomm                jack pts/11     0.00 secs Thu Jun 12 03:12
bash-prompt-xte         jack pts/11     0.00 secs Thu Jun 12 03:09
bash-prompt-xte         jack pts/11     0.00 secs Thu Jun 12 03:09
date                    jack pts/11     0.00 secs Thu Jun 12 03:09

对于每个条目,打印以下信息:
+ 进程的命令名称
+ 标志,由系统记帐例程记录:
超级用户执行的 S 命令
F - 命令在 fork 之后执行但没有后续的 exec
C 命令在 PDP-11 兼容模式下运行(仅限 VAX)
D 命令在生成核心文件时终止
X -command 以信号 SIGTERM 终止
+ 运行进程的用户名
+ 进程退出的时间

让我们使用由用户 jack 和 count 运行的独特命令来整理我们的输出

# lastcomm --user root | awk -F " " '{ print  }' | sort | uniq --count
      3 ac
      1 accton
   3537 awk
    650 basename
     17 bash
      4 bzip2
  11030 cat
      5 chmod
      1 clear
    325 consoletype
      1 cp
   1591 crond
    663 cut
      1 date
      4 egrep
   2754 ethtool
     42 find
      5 finger

列出运行 rm 命令的时间和用户详细信息

# lastcomm rm
rm                      jack pts/11     0.00 secs Thu Jun 12 03:35
rm                      jack pts/11     0.00 secs Thu Jun 12 03:35
rm                      root     pts/5      0.00 secs Thu Jun 12 02:59
rm                      root     pts/5      0.00 secs Thu Jun 12 02:59
rm                      root     __         0.00 secs Wed Jun 11 23:53
rm                      root     __         0.00 secs Wed Jun 11 23:53
rm                      root     pts/5      0.00 secs Wed Jun 11 05:59
rm                      root     pts/5      0.00 secs Wed Jun 11 05:59
rm                      root     pts/5      0.00 secs Wed Jun 11 05:59
rm                      root     pts/5      0.00 secs Wed Jun 11 05:59
rm                      root     pts/5      0.00 secs Wed Jun 11 05:58
rm                      root     pts/5      0.00 secs Wed Jun 11 05:58

方法3

sa 汇总了acct 文件中记录的有关先前执行的命令的信息。
此外,它将这些数据压缩到一个名为 savacct 的摘要文件中,该文件包含调用命令的次数和使用的系统资源。
这些信息也可以基于每个用户进行汇总; sa 会将此信息保存到名为 usracct 的文件中。

# sa -u | grep root |awk -F " " '{ print }' |sort | uniq --count
     1 accton
    423 awk
     78 basename
      9 bash-prompt-xte
   1306 cat
      5 chmod
     38 consoletype
    188 crond
     78 cut
    532 dhclient-script
    325 ethtool
     41 find
    336 free
      2 gconftool-2
    593 grep
如何跟踪 Linux 中任何用户运行的所有命令

如果您想知道任何用户在任何Linux服务器上执行的命令是什么,该怎么办?

方法1

检查用户home目录中的 .bash_history 文件。

注意:除非用户注销,否则您将无法看到当前登录会话中执行的命令。

# less /home/jack/.bash_history
man yum
yum deplist httpd
sud iptables -L
sudo iptables -L
sudo iptables --list
less /etc/sysconfig/iptables
sudo less /etc/sysconfig/iptables
sudo iptables --list WEBSHPHERE
sudo iptables --list INPUT
cd test
日期:2020-06-02 22:17:01 来源:oir作者:oir