如何使用 psacct 或 acct 工具监视 Linux 用户活动
psacct或acct都是用于监控 Linux 系统上用户活动的开源实用程序。这些实用程序在后台运行,跟踪每个用户在系统上的活动以及所消耗的资源。
我个人在我们公司使用过这些工具,我们有一个开发团队,我们的开发人员一直在服务器上工作。所以,这些是值得关注的最佳实用程序。
这些程序提供了一种极好的方式来监控用户正在做什么、他们正在执行什么命令、他们消耗了多少资源以及用户在系统上活跃了多长时间。另一个有用的功能是,它提供 Apache、MySQL、FTP、SSH 等服务消耗的总资源。
[ 你可能还喜欢:如何实时监控系统用户执行的 Linux 命令]
我认为对于每个想要跟踪其服务器/系统上的用户活动的 Linux/Unix 系统管理员来说,这是最伟大且最需要的实用程序之一。
psacct或acct包提供了多种用于监控进程活动的功能。
- ac命令以小时为单位打印用户登录/注销(连接时间)的统计信息。
- lastcomm命令打印用户之前执行过的命令的信息。
- accton命令用于打开/关闭会计流程。
- sa命令总结了以前执行的命令的信息。
- last和lastb命令显示最后登录的用户列表。
在 Linux 中安装 psacct 或 acct 包
psacct和acct都是类似的软件包,它们之间没有太大区别,但是psacct包仅适用于基于 rpm 的发行版,例如RHEL、CentOS和Fedora,而acct包适用于Ubuntu、Debian和Linux Mint等发行版。
要在基于 rpm 的发行版下安装psacct包,请发出以下yum 命令。
# yum install psacct
在Ubuntu / Debian / Linux Mint下使用apt 命令安装acct包。
$ sudo apt install acct
在其他 Linux 发行版上,您可以按照所示进行安装。
$ sudo apk add psacct [On Alpine Linux] $ sudo pacman -S acct [On Arch Linux] $ sudo zypper install acct [On OpenSUSE]
启动 psacct 或 acct 服务
默认情况下,psacct服务处于禁用模式,您需要在基于 RHEL 的发行版下手动启动它。使用以下命令检查服务的状态。
$ sudo systemctl status psacct
您会看到状态显示为已禁用,因此让我们使用以下命令手动启动它,这将创建一个/var/account/pacct文件。
$ sudo systemctl start psacct $ sudo systemctl enable psacct $ sudo systemctl status psacct
在Ubuntu、Debian和Mint下,服务会自动启动,您无需再次启动它。
显示用户连接时间的统计信息
ac命令未指定任何参数,将根据当前wtmp文件的用户登录/注销显示以小时为单位的连接时间总统计信息。
# ac total 11299.15
按天显示 Linux 用户统计信息
使用命令“ ac -d ”将按天打印出按小时计算的总登录时间。
# ac -d Jun 25 total 0.19 Oct 13 total 14.45 Oct 27 total 672.00 Oct 28 total 15.82 Nov 3 total 4.29 Nov 5 total 10.13 Dec 7 total 14.04 Dec 10 total 23.60 Dec 27 total 808.93 Jan 3 total 12.31 Mar 3 total 1438.67 Jul 22 total 6767.81 Today total 1517.09
显示所有Linux用户的总登录时间
使用命令“ ac -p ”将以小时为单位打印每个 Linux 用户的总登录时间。
# ac -p rockylinux 425.61 example 702.29 root 10171.54 total 11299.44
显示Linux用户登录时间
要获取用户“ example ”的总登录统计时间(以小时为单位),请使用以下命令。
# ac example
total 702.29
显示用户按天登录的时间
以下命令将以小时为单位打印用户“ example ”每天的总登录时间。
# ac -d example
Oct 11 total 8.01 Oct 12 total 24.00 Oct 15 total 70.50 Oct 16 total 23.57 Oct 17 total 24.00 Oct 18 total 18.70 Nov 20 total 0.18
打印用户执行的所有 Linux 命令
“ sa ”命令用于打印用户执行的命令摘要。
# sa
2 9.86re 0.00cp 2466k sshd* 8 1.05re 0.00cp 1064k man 2 10.08re 0.00cp 2562k sshd 12 0.00re 0.00cp 1298k psacct 2 0.00re 0.00cp 1575k troff 14 0.00re 0.00cp 503k ac 10 0.00re 0.00cp 1264k psacct* 10 0.00re 0.00cp 466k consoletype 9 0.00re 0.00cp 509k sa 8 0.02re 0.00cp 769k udisks-helper-a 6 0.00re 0.00cp 1057k touch 6 0.00re 0.00cp 592k gzip 6 0.00re 0.00cp 465k accton 4 1.05re 0.00cp 1264k sh* 4 0.00re 0.00cp 1264k nroff* 2 1.05re 0.00cp 1264k sh 2 1.05re 0.00cp 1120k less 2 0.00re 0.00cp 1346k groff 2 0.00re 0.00cp 1383k grotty 2 0.00re 0.00cp 1053k mktemp 2 0.00re 0.00cp 1030k iconv 2 0.00re 0.00cp 1023k rm 2 0.00re 0.00cp 1020k cat 2 0.00re 0.00cp 1018k locale 2 0.00re 0.00cp 802k gtbl
上述命令输出的解释:
- 9.86re是“实时”的挂钟分钟
- 0.01cp是系统/用户时间(以 CPU 分钟为单位)的总和
- 2466k是 CPU 时间平均核心使用率,即1k 个单位
- sshd命令名称
打印Linux用户信息
要获取单个用户的信息,请使用选项-u。
# sa -u
root 0.00 cpu 465k mem accton root 0.00 cpu 1057k mem touch root 0.00 cpu 1298k mem psacct root 0.00 cpu 466k mem consoletype root 0.00 cpu 1264k mem psacct * root 0.00 cpu 1298k mem psacct root 0.00 cpu 466k mem consoletype root 0.00 cpu 1264k mem psacct * root 0.00 cpu 1298k mem psacct root 0.00 cpu 466k mem consoletype root 0.00 cpu 1264k mem psacct * root 0.00 cpu 465k mem accton root 0.00 cpu 1057k mem touch
打印 Linux 进程数
此命令打印进程总数和 CPU 分钟数。如果您看到这些数字持续增加,那么是时候查看系统发生了什么。
# sa -m
sshd 2 9.86re 0.00cp 2466k root 127 14.29re 0.00cp 909k
打印并按百分比对使用情况进行排序
命令“ sa -c ”显示最高百分比的用户。
# sa -c
132 100.00% 24.16re 100.00% 0.01cp 100.00% 923k 2 1.52% 9.86re 40.83% 0.00cp 53.33% 2466k sshd* 8 6.06% 1.05re 4.34% 0.00cp 20.00% 1064k man 2 1.52% 10.08re 41.73% 0.00cp 13.33% 2562k sshd 12 9.09% 0.00re 0.01% 0.00cp 6.67% 1298k psacct 2 1.52% 0.00re 0.00% 0.00cp 6.67% 1575k troff 18 13.64% 0.00re 0.00% 0.00cp 0.00% 509k sa 14 10.61% 0.00re 0.00% 0.00cp 0.00% 503k ac 10 7.58% 0.00re 0.00% 0.00cp 0.00% 1264k psacct* 10 7.58% 0.00re 0.00% 0.00cp 0.00% 466k consoletype 8 6.06% 0.02re 0.07% 0.00cp 0.00% 769k udisks-helper-a 6 4.55% 0.00re 0.00% 0.00cp 0.00% 1057k touch 6 4.55% 0.00re 0.00% 0.00cp 0.00% 592k gzip 6 4.55% 0.00re 0.00% 0.00cp 0.00% 465k accton 4 3.03% 1.05re 4.34% 0.00cp 0.00% 1264k sh* 4 3.03% 0.00re 0.00% 0.00cp 0.00% 1264k nroff* 2 1.52% 1.05re 4.34% 0.00cp 0.00% 1264k sh 2 1.52% 1.05re 4.34% 0.00cp 0.00% 1120k less 2 1.52% 0.00re 0.00% 0.00cp 0.00% 1346k groff 2 1.52% 0.00re 0.00% 0.00cp 0.00% 1383k grotty 2 1.52% 0.00re 0.00% 0.00cp 0.00% 1053k mktemp
列出用户最后执行的命令
' latcomm ' 命令用于搜索并显示之前执行的用户命令信息。您还可以搜索单个用户名的命令。例如,我们看到用户 ( example ) 的命令。
# lastcomm example
su example pts/0 0.00 secs Wed Feb 13 15:56 ls example pts/0 0.00 secs Wed Feb 13 15:56 ls example pts/0 0.00 secs Wed Feb 13 15:56 ls example pts/0 0.00 secs Wed Feb 13 15:56 bash F example pts/0 0.00 secs Wed Feb 13 15:56 id example pts/0 0.00 secs Wed Feb 13 15:56 grep example pts/0 0.00 secs Wed Feb 13 15:56 grep example pts/0 0.00 secs Wed Feb 13 15:56 bash F example pts/0 0.00 secs Wed Feb 13 15:56 dircolors example pts/0 0.00 secs Wed Feb 13 15:56 bash F example pts/0 0.00 secs Wed Feb 13 15:56 tput example pts/0 0.00 secs Wed Feb 13 15:56 tty example pts/0 0.00 secs Wed Feb 13 15:56 bash F example pts/0 0.00 secs Wed Feb 13 15:56 id example pts/0 0.00 secs Wed Feb 13 15:56 bash F example pts/0 0.00 secs Wed Feb 13 15:56 id example pts/0 0.00 secs Wed Feb 13 15:56
搜索命令日志
借助lastcomm命令,您将能够查看每个命令的单独用途。
# lastcomm ls
ls example pts/0 0.00 secs Wed Feb 13 15:56 ls example pts/0 0.00 secs Wed Feb 13 15:56 ls example pts/0 0.00 secs Wed Feb 13 15:56
有关更多信息和用法,请查看这些工具的手册页。