作为 Linux 管理员,您需要跟踪所有用户的活动。当服务器出现问题时,您可以分析和调查用户的活动,并尝试找出问题的根本原因。在 Linux中有很多方法可以监视用户。在本指南中,我们将讨论可用于监控 Linux 中用户活动的GNU 会计实用程序。
什么是会计实用程序?
记帐实用程序提供有关系统使用情况的有用信息,例如 Linux 中的连接、执行的程序和系统资源的使用情况。可以使用psacct或acct包安装这些记帐实用程序。
psacct 或 acct 相同。在基于 RPM 的系统中,它以 psacct 的形式提供,而在基于 DEB 的系统中,它以 acct 的形式提供。
psacct 或 acct 实用程序有什么用?你可能想知道。通常,用户的命令行历史详细信息将存储.bash_history
在其 $HOME 目录中的文件中。一些用户可能会尝试编辑、修改或删除历史记录。
但是,会计实用程序仍然能够检索用户活动,即使他们完全清除了命令行历史记录。因为,所有的进程记帐文件都归root用户所有,普通用户不能编辑它们。
在 Linux 中安装 psacct 或 acct
psacct/acct 实用程序是为流行的 Linux 发行版打包的。
要在 Alpine Linux 中安装 psacct,请运行:
$ sudo apk add psacct
要在 Arch Linux 及其变体(如 EndeavourOS 和 Manjaro Linux)中安装 acct,请运行:
$ sudo pacman -S acct
在 Fedora、RHEL 及其克隆版本(如 CentOS、AlmaLinux 和 Rocky Linux)上,运行以下命令来安装 psacct:
$ sudo dnf install psacct
在 RHEL 6 和更早的版本中,您应该使用yum
而不是dnf
安装 psacct。
$ sudo yum install psacct
在 Debian、Ubuntu、Linux Mint 上,使用以下命令安装 acct:
$ sudo apt install acct
要在 openSUSE 上安装 acct,请运行:
$ sudo zypper install acct
启动 psacct/acct 服务
要启用和启动 psacct 服务,请运行:
$ sudo systemctl enable psacct
$ sudo systemctl start psacct
要检查 psacct 服务是否已加载并处于活动状态,请运行:
$ sudo systemctl status psacct
在基于 DEB 的系统上,安装后会自动启动 acct 服务。
您可以使用以下命令验证 acct 服务是否已启动:
$ sudo systemctl status acct
输出:
● acct.service - Kernel process accounting Loaded: loaded (/lib/systemd/system/acct.service; enabled; vendor preset: enabled) Active: active (exited) since Thu 2022-10-13 16:06:35 IST; 28s ago Docs: man:accton(8) Process: 3241 ExecStart=/usr/sbin/accton /var/log/account/pacct (code=exited, status=0/SUCCESS) Main PID: 3241 (code=exited, status=0/SUCCESS) CPU: 879us Oct 13 16:06:35 ubuntu2204 systemd[1]: Starting Kernel process accounting... Oct 13 16:06:35 ubuntu2204 accton[3241]: Turning on process accounting, file set to '/var/log/account/pacct'. Oct 13 16:06:35 ubuntu2204 systemd[1]: Finished Kernel process accounting.
使用 psacct 或 acct 监控 Linux 中的用户活动
psacct(进程记帐)包包含以下有用的实用程序来监视用户和进程活动。
- ac – 显示有关用户登录时间的统计信息。
- lastcomm – 显示有关先前执行的命令的信息。
- accton – 打开或关闭进程记帐。
- dump-acct – 将输出文件从 accton 格式转换为人类可读的格式。
- dump-utmp – 以人类可读的格式打印 utmp 文件。
- sa – 总结有关先前执行的命令的信息。
让我们通过示例使用每个实用程序来学习如何监控 Linux 用户的活动。
1. ac 命令示例
ac实用程序将以小时为单位显示连接时间报告。它可以告诉您一个用户或一组用户连接到系统的时间。
1.1。显示所有用户的总连接时间
$ ac
此命令以小时为单位显示所有用户的总连接时间。
total 52.91
1.2. 按天显示所有用户的总连接数
您可以使用-d标志按天对结果进行排序,如下所示。
$ ac -d
输出:
May 11 total 4.29 May 13 total 3.23 May 14 total 7.66 May 15 total 8.97 May 16 total 0.52 May 20 total 4.09 May 24 total 1.32 Jun 9 total 15.18 Jun 10 total 2.97 Jun 22 total 2.61 Jul 19 total 1.95 Today total 0.29
1.3. 按用户获取总连接时间
此外,您可以使用-p标志显示每个用户与系统连接的时间。
$ ac -p
输出:
ostechnix 52.85 root 0.51 total 53.36
1.4. 打印特定用户的总连接时间
此外,您还可以显示单个用户的总登录时间。
$ ac ostechnix
输出:
total 52.95
1.5。按天查看某个用户的总连接时间
要按天显示单个用户的登录时间,请运行:
$ ac -d ostechnix
输出:
May 11 total 4.29 May 13 total 3.23 May 14 total 7.66 May 15 total 8.97 May 16 total 0.01 May 20 total 4.09 May 24 total 1.32 Jun 9 total 15.18 Jun 10 total 2.97 Jun 22 total 2.61 Jul 19 total 1.95 Today total 0.68
有关更多详细信息,请参阅手册页。
$ man ac
2. lastcomm 命令示例
lastcomm实用程序显示以前执行的命令的列表。最近执行的命令将首先列出。
2.1。显示以前执行的命令
$ lastcomm
输出:
systemd-hostnam S root __ 0.06 secs Thu Oct 13 17:21 systemd-localed S root __ 0.06 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 awk ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 uname ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 sed ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 grep ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 grep ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22 [...]
2.2. 打印特定用户最后执行的命令
上面的命令显示所有用户的命令。您可以使用以下命令显示特定用户先前执行的命令:
$ lastcomm ostechnix
输出:
less ostechni pts/1 0.00 secs Thu Oct 13 17:26 lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:26 lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:26 lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:26 gdbus X ostechni __ 0.00 secs Thu Oct 13 17:24 lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:24 ac ostechni pts/1 0.00 secs Thu Oct 13 17:24 update-notifier F ostechni __ 0.00 secs Thu Oct 13 17:23 apport-checkrep ostechni __ 0.06 secs Thu Oct 13 17:23 apport-checkrep ostechni __ 0.05 secs Thu Oct 13 17:23 systemctl ostechni __ 0.00 secs Thu Oct 13 17:23 apt-check ostechni __ 0.81 secs Thu Oct 13 17:23 dpkg ostechni __ 0.00 secs Thu Oct 13 17:23 ischroot ostechni __ 0.00 secs Thu Oct 13 17:23 dpkg ostechni __ 0.00 secs Thu Oct 13 17:23 [...]
2.3. 打印命令执行的总数
此外,您可以查看特定命令已执行了多少次。
$ lastcomm apt
输出:
apt S root pts/2 0.70 secs Thu Oct 13 16:06 apt F root pts/2 0.00 secs Thu Oct 13 16:06 apt F root pts/2 0.00 secs Thu Oct 13 16:06
正如您在上面的输出中看到的,该apt
命令已被root
用户执行了 3 次。
有关更多详细信息,请参阅手册页。
$ man lastcomm
3. 命令示例
sa 实用程序将汇总有关先前执行的命令的信息。
3.1。打印所有命令的摘要
$ sa
输出:
1522 1598.63re 0.23cp 0avio 32712k 139 570.90re 0.05cp 0avio 36877k ***other* 38 163.63re 0.05cp 0avio 111445k gdbus 3 0.05re 0.04cp 0avio 12015k apt-check 27 264.27re 0.02cp 0avio 0k kworker/dying* 2 51.87re 0.01cp 0avio 5310464k Docker Desktop 5 0.03re 0.01cp 0avio 785k snap-confine 8 59.48re 0.01cp 0avio 85838k gmain 5 103.94re 0.01cp 0avio 112720k dconf worker 24 3.38re 0.00cp 0avio 2937k systemd-udevd* 7 0.01re 0.00cp 0avio 36208k 5 3 1.51re 0.00cp 0avio 3672k systemd-timedat 2 0.00re 0.00cp 0avio 10236k apport-checkrep 2 0.01re 0.00cp 0avio 4316160k ThreadPoolForeg* 2 0.00re 0.00cp 0avio 8550k package-data-do 3 0.79re 0.00cp 0avio 2156k dbus-daemon 12 0.00re 0.00cp 0avio 39631k ffmpeg [...]
3.2. 查看进程数和 CPU 分钟数
要打印每个用户的进程数和 CPU 分钟数,请运行sa
带有-m
标志的命令:
$ sa -m
输出:
root 561 647.23re 0.09cp 0avio 3847k ostechnix 825 780.79re 0.08cp 0avio 47788k gdm 117 13.43re 0.06cp 0avio 63715k colord 2 52.01re 0.00cp 0avio 89720k geoclue 1 1.01re 0.00cp 0avio 70608k jellyfin 12 0.00re 0.00cp 0avio 39631k man 1 0.00re 0.00cp 0avio 3124k kernoops 4 104.12re 0.00cp 0avio 3270k sshd 1 0.05re 0.00cp 0avio 3856k whoopsie 1 0.00re 0.00cp 0avio 8552k
3.3. 打印用户 ID 和命令名称
对于记帐文件中的每个命令,使用-u
标志打印用户 ID 和命令名称。
$ sa -u
输出:
root 0.00 cpu 693k mem 0 io accton root 0.00 cpu 3668k mem 0 io systemd-tty-ask root 0.00 cpu 3260k mem 0 io systemctl root 0.01 cpu 3764k mem 0 io deb-systemd-inv root 0.00 cpu 722k mem 0 io acct.postinst root 0.00 cpu 704k mem 0 io rm root 0.00 cpu 939k mem 0 io cp root 0.00 cpu 704k mem 0 io rm root 0.00 cpu 951k mem 0 io find root 0.00 cpu 911k mem 0 io gzip root 0.00 cpu 722k mem 0 io sh root 0.00 cpu 748k mem 0 io install-info root 0.00 cpu 911k mem 0 io gzip [...]
有关更多详细信息,请参阅手册页。
$ man sa
4. dump-acct和dump-utmp 命令示例
dump-acct实用程序将输出文件从 accton 格式显示为人类可读的格式。
$ dump-acct /var/account/pacct
dump-utmp 以人类可读的格式显示 utmp 文件。
$ dump-utmp /var/run/utmp
有关更多详细信息,请参阅手册页。
$ man dump-acct
$ man dump-utmp
5. accton 命令示例
accton 命令将允许您打开或关闭记帐。
要打开进程记帐,请运行:
$ accton on
要关闭它,请运行:
$ accton off
有关更多详细信息,请参阅手册页。
$ man accton
结论
每个 Linux 管理员都应该了解 GNU 会计实用程序以密切关注所有用户。这些实用程序在故障排除时间将非常有帮助。
资源:

获取更多建站运营运维新知!互联网创业、前沿技术......
最新评论
想要aarch64_generic架构的,用的是Rockchip RK3308 ARMv8 Cortex-A35
水淀粉vdfv
有其他下载方式么,网站上的点击下载后没有任何反应,或者直接发给我一下?83835079@qq.com
你好,我的型号ELECOM WRC-X3200GST3,ARMv8 Processor rev 4构架,CPU mediatek/mt7622,找了很久没有找到
我的也是这样。一直无法确认ARCH架构,或是不支持。一直没办法用。不知道怎么办了