标签 记账 下的文章

作为一位 Linux 管理员,你需要跟踪所有用户的活动。当服务器发生故障时,你可以分析和查看用户活动,以便寻找问题的根源。监控 Linux 用户有多种方式。本指南将专门讨论 GNU 记账工具,这是一项用于监视 Linux 用户活动的实用工具。

什么是记账工具?

记账工具可以提供诸如 Linux 系统中的连接、已执行的程序以及系统资源的使用等有底系统使用信息。这些记账工具可以通过 psacctacct 软件包安装。

psacctacct 实际上是相同的。在基于 RPM 的系统中,它以 psacct 的形式存在;而在基于 DEB 的系统中,它作为 acct 提供。

你可能想知道 psacctacct 工具的作用。通常,用户在命令行的历史记录会保存在他们的 $HOME 目录下的 .bash_history 文件中。有些用户可能会尝试编辑、修改或删除这些历史记录。

然而,即使他们完全 清除了命令行历史,记账工具依然能够获取用户活动信息。这是因为,所有进程记账文件都由 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

接着启动 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

如上述输出所示,root 用户执行了 apt 命令三次。

更详细的信息,可参考手册页:

$ man lastcomm

3、sa 命令示例

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 分钟数,运行带 -m 标志的 sa 命令:

$ sa -m

示例输出:

1525    1598.63re       0.23cp         0avio     32651k
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 记账实用程序,以便注意所有用户的行为。在故障排除时,这些实用程序会非常有帮助。

资源

(题图:MJ/da3f7e79-2a53-4121-a2ed-d63a22c3d3f4)


via: https://ostechnix.com/monitor-user-activity-linux/

作者:sk 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 HomeBank 跟踪你的资金流向,这是我们开源工具系列中的第八个工具,它将在 2019 年提高你的工作效率。

每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然,“抛弃旧的,拥抱新的”的态度促成了这一切。通常这时的建议严重偏向闭源和专有软件,但事实上并不用这样。

这是我挑选出的 19 个新的(或者对你而言新的)开源项目来帮助你在 2019 年更有效率。

HomeBank

管理我的财务可能会很有压力。我不会每天查看我的银行余额,有时也很难跟踪我的钱流向哪里。我经常会花更多的时间来管理我的财务,挖掘账户和付款历史并找出我的钱去了哪里。了解我的财务状况可以帮助我保持冷静,并让我专注于其他事情。

HomeBank 是一款个人财务桌面应用,帮助你轻松跟踪你的财务状况,来帮助减少此类压力。它有很好的报告可以帮助你找出你花钱的地方,允许你设置导入交易的规则,并支持大多数现代格式。

HomeBank 默认可在大多数发行版上可用,因此安装它非常简单。当你第一次启动它时,它将引导你完成设置并让你创建一个帐户。之后,你可以导入任意一种支持的文件格式或开始输入交易。交易簿本身就是一个交易列表。与其他一些应用不同,你不必学习复式记账法来使用 HomeBank。

从银行导入文件将使用另一个分步向导进行处理,该向导提供了创建新帐户或填充现有帐户的选项。导入新帐户可节省一点时间,因为你无需在开始导入之前预先创建所有帐户。你还可以一次将多个文件导入帐户,因此不需要对每个帐户中的每个文件重复相同的步骤。

我在导入和管理帐户时遇到的一个痛点是指定类别。一般而言,类别可以让你分解你的支出,看看你花钱的方式。HomeBank 与一些商业服务(以及一些商业程序)不同,它要求你手动设置所有类别。但这通常是一次性的事情,它可以在添加/导入交易时自动添加类别。还有一个按钮来分析帐户并跳过已存在的内容,这样可以加快对大量导入的分类(就像我第一次做的那样)。HomeBank 提供了大量可用的类别,你也可以添加自己的类别。

HomeBank 还有预算功能,允许你计划未来几个月的开销。

对我来说,最棒的功能是 HomeBank 的报告。主页面上不仅有一个图表显示你花钱的地方,而且还有许多其他报告可供你查看。如果你使用预算功能,还会有一份报告会根据预算跟踪你的支出情况。你还可以以饼图和条形图的方式查看报告。它还有趋势报告和余额报告,因此你可以回顾并查看一段时间内的变化或模式。

总的来说,HomeBank 是一个非常友好,有用的程序,可以帮助你保持良好的财务状况。如果跟踪你的钱是你生活中的一件麻烦事,它使用起来很简单并且非常有用。


via: https://opensource.com/article/19/1/productivity-tools-homebank

作者:Kevin Sonney 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出