watch 命令
watch
是一个用来轻松地重复检测 Linux 系统中一系列数据命令,例如用户活动、正在运行进程、登录、内存使用等。这个命令实际上是重复地运行一个特定的命令,每次都会重写之前显示的输出,它提供了一个比较方便的方式用以监测在你的系统中发生的活动。
首先以一个基础且不是特别有用的命令开始,你可以运行 watch -n 5 date
,然后你可以看到在终端中显示了当前的日期和时间,这些数据会每五秒更新一次。你可能已经猜到了,-n 5
选项指定了运行接下来一次命令需要等待的秒数。默认是 2 秒。这个命令将会一直运行并按照指定的时间更新显示,直到你使用 ^C
停下它。
Every 5.0s: date butterfly: Wed Jan 23 15:59:14 2019Wed Jan 23 15:59:14 EST 2019
下面是一个更有趣的命令实例,你可以监控一个在服务器中登录用户的列表,该列表会按照指定的时间定时更新。就像下面写到的,这个命令会每 10 秒更新一次这个列表。登出的用户将会从当前显示的列表中消失,那些新登录的将会被添加到这个表格当中。如果没有用户再登录或者登出,这个表格跟之前显示的将不会有任何不同。
代码语言:javascript复制$ watch -n 10 whoEvery 10.0s: who butterfly: Tue Jan 23 16:02:03 2019shs :0 2019-01-23 09:45 (:0)dory pts/0 2019-01-23 15:50 (192.168.0.5)nemo pts/1 2019-01-23 16:01 (192.168.0.15)shark pts/3 2019-01-23 11:11 (192.168.0.27)
如果你只是想看有多少用户登录进来,可以通过 watch
调用 uptime
命令获取用户数和负载的平均水平,以及系统的工作状况。
$ watch uptimeEvery 2.0s: uptime butterfly: Tue Jan 23 16:25:48 2019 16:25:48 up 22 days, 4:38, 3 users, load average: 1.15, 0.89, 1.02
如果你想使用 watch
重复一个包含了管道的命令,就需要将该命令用引号括起来,就比如下面这个每五秒显示一次有多少进程正在运行的命令。
$ watch -n 5 'ps -ef | wc -l'Every 5.0s: ps -ef | wc -l butterfly: Tue Jan 23 16:11:54 2019245
要查看内存使用,你也许会想要试一下下面的这个命令组合:
代码语言:javascript复制$ watch -n 5 free -mEvery 5.0s: free -m butterfly: Tue Jan 23 16:34:09 2019Every 5.0s: free -m butterfly: Tue Jan 23 16:34:09 2019 total used free shared buff/cache availableMem: 5959 776 3276 12 1906 4878Swap: 2047 0 2047
你可以在 watch
后添加一些选项查看某个特定用户下运行的进程,不过 top
为此提供了更好的选择。
top 命令
如果你想查看某个特定用户下的进程,top
命令的 -u
选项可以很轻松地帮你达到这个目的。
$ top -u nemotop - 16:14:33 up 2 days, 4:27, 3 users, load average: 0.00, 0.01, 0.02Tasks: 199 total, 1 running, 198 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stMiB Mem : 5959.4 total, 3277.3 free, 776.4 used, 1905.8 buff/cacheMiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4878.4 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND23026 nemo 20 0 46340 7820 6504 S 0.0 0.1 0:00.05 systemd23033 nemo 20 0 149660 3140 72 S 0.0 0.1 0:00.00 (sd-pam)23125 nemo 20 0 63396 5100 4092 S 0.0 0.1 0:00.00 sshd23128 nemo 20 0 16836 5636 4284 S 0.0 0.1 0:00.03 zsh
你可能不仅可以看到某个用户下的进程,还可以查看每个进程所占用的资源,以及系统总的工作状况。
ac 命令
如果你想查看系统中每个用户登录的时长,可以使用 ac
命令。运行该命令之前首先需要安装 acct
(Debian 等)或者 psacct
(RHEL、Centos 等)包。
ac
命令有一系列的选项,该命令从 wtmp
文件中拉取数据。这个例子展示的是最近用户登录的总小时数。
$ ac total 1261.72
这个命令显示了用户登录的总的小时数:
代码语言:javascript复制$ ac -p shark 5.24 nemo 5.52 shs 1251.00 total 1261.76
这个命令显示了每天登录的用户小时数:
代码语言:javascript复制$ ac -d | tail -10Jan 11 total 0.05Jan 12 total 1.36Jan 13 total 16.39Jan 15 total 55.33Jan 16 total 38.02Jan 17 total 28.51Jan 19 total 48.66Jan 20 total 1.37Jan 22 total 23.48Today total 9.83