老板对我说,你要是能找出公司里摸鱼的人,我就给你涨薪!于是我写了两个脚本……

简介: 老板对我说,你要是能找出公司里摸鱼的人,我就给你涨薪!于是我写了两个脚本……

最近老板沉迷于抖音,时不时在那边呵呵傻笑,于是我偷偷凑过去一看,好家伙,他正在看朱一旦~

微信图片_20220419153929.gif

这天,老板幽幽地走到我身边,淡淡地跟我说,良许,你要是能找到公司里混水摸鱼的人,我就给你涨薪!我回过头,望着他朱一旦似的枯燥笑脸,自信说道,放心,有我在,公司里就没有摸鱼的人!

作为一名资深摸鱼专家,熟知 108 种摸鱼手段,精通 18 般躲避领导突击检查方法,所以,谁想摸鱼都逃不出我的火眼精睛。

微信图片_20220419153934.jpg

作为一名 Linux 程序员,每天都要跟服务器打交道,那么想要找到谁在摸鱼,只要关注他的两个指标就行:

  • 登录系统次数
  • 登录系统时长

Linux 系统给我们提供了大量非常实用的命令,当然有一些命令可以用来查看系统各用户在系统上登录的次数,以及使用系统总时间。用户的这些信息是保存在 /var/log/wtmp 文件里,所以我们就可以通过一些简单的命令把我们想要的信息提取出来。

这些信息就是摸鱼的证据!

使用 last 命令获取用户登录信息

一个可以实现这个目的的命令就是 last 命令。这个命令可以列出用户登录的详细信息,可供我们进行追溯。它的典型输出如下:

$ last | head -5 | tr -s " "
liangxu pts/0 192.168.0.14 Wed Jan 14 09:44 still logged in
liangxu pts/0 192.168.0.14 Wed Jan 14 09:41 - 09:41 (00:00)
liangxu pts/0 192.168.0.14 Wed Jan 14 09:40 - 09:41 (00:00)
alex pts/1 192.168.0.18 Wed Jan 14 09:38 still logged in
liangxu pts/0 192.168.0.14 Tue Jan 13 06:15 - 18:18 (00:24)

在上面这行命令中,tr -s " " 表示将多个空格合并为一个,这样可以节约篇幅。如果没有加上 tr 命令的话,它的输出会类似下面这样:

$ last | head -5
liangxu      pts/0        192.168.0.14     Wed Jan 14 09:44   still logged in
liangxu      pts/0        192.168.0.14     Wed Jan 14 09:41 - 09:41  (00:00)
liangxu      pts/0        192.168.0.14     Wed Jan 14 09:40 - 09:41  (00:00)
alex         pts/1        192.168.0.18     Wed Jan 14 09:38   still logged in
liangxu      pts/0        192.168.0.14     Wed Jan 14 09:15 - 09:40  (00:24)

像上面那样 last 命令没有跟任何参数的话,它会列出所有用户的登录信息。如果你只想看某个用户登录情况,那么只需在 last 后面跟上具体的用户名即可,即:

$ last username

这里还加了 head -5 命令,它的作用是只列出 last 命令结果的前 5 条信息。如果不加这个命令的话,那么出来的结果将很长,我们可以用 wc 命令稍微瞧一眼:

$ last | wc -l

所以,通过 last 命令可以看到每个人的登录情况,摸鱼的小伙伴们,请接招!

微信图片_20220419153937.jpg

第一招:统计每个用户登录次数

在 last 命令的结果里,用户每登录一次,就会产生一条记录,所以这里我们就可以使用这些记录来统计每个用户登录的次数。

$ for user in `ls /home`; do echo -ne "$user\t"; last $user | wc -l; done
dorothy 21
dory    13
eel     29
jadep   124
jdoe    27
jimp    42
alex    9
shark   17
liangxu     423
test    2
waynek  201

在上面的命令里,我们先获取 home 目录下所有用户,然后依次使用 last 命令获取他们的登录情况,再使用 wc 命令统计他们的登录次数。

当然,为了查看大家的登录次数,每次都要敲这么长的一条命令,那真的很让人抓狂。所以一个比较好的办法就是将这条命令直接写成 shell 脚本,下次我们想用的时候就可以直接运行它了。

我们可以新建一个 show_user_logins.sh 脚本,然后使用 vim 写入以下内容:

#!/bin/bash
echo -n "Logins since "
who /var/log/wtmp | head -1 | awk '{print $3}'
echo "======================="
for user in `ls /home`
do
  echo -ne "$user\t"
  last $user | wc -l
done

写完之后按 :wq 保存退出。再之后使用命令 chmod +x show_user_logins.sh 使这个脚本具有可执行属性。

一切准备就绪后我们就可以运行这个脚本,可以看到得到的结果跟我们在命令行里手动敲的命令结果一致。

$ ./show_user_logins
Logins since 2019-12-05
=======================
dorothy 21
dory    13
eel     29
jadep   124
jdoe    27
jimp    42
alex    9
shark   17
liangxu     423
test    2
waynek  201

通过第一招,摸鱼的小伙伴已经浮出水面,并受到重重一击:

微信图片_20220419153941.jpg

但作为资深摸鱼专家,我肯定知道,用户每登录一次就会有一次记录,那么多登几次就会显得自己很勤快,所以使用这种方法很容易躲避追击。

不急,我还有第二招,想在我眼皮底下摸鱼没那么容易!

第二招:统计每个用户登录时长

last 命令只能统计用户的登录记录,但不能统计用户的登录时长。如果想统计每个用户的登录时长,那么就要使用另一个命令了:ac 命令。

ac 命令使用方法很简单,只需在 ac 后面跟上你想统计的用户即可,如下:

$ ac alex
        total       31.61

这个结果表示用户 alex 在这台电脑上的总登录时长是 31.61 小时(ac 命令统计出来的结果默认单位是 小时 )。

我们可以仿照上面写出统计每个用户登录时长的命令:

$ for user in `ls /home`; do ac $user | sed "s/total/$user\t/" ; done
        dorothy         9.12
        dory            1.67
        eel             4.32

同样地,这里先获取 home 目录下所有用户名,然后再将这些用户名作为参数传给 ac 命令,就可以统计出来所有每个用户的登录时长了。

我们可以从上面的 ac 命令结果看到,它的执行结果都是 total + 时长 ,如果所有用户的结果都这样,那么我们就无法区别谁是谁了。所以我们在这里再使用 sed 命令,将 total 替换为具体的用户名,以作区分。

这里还有个小小的瑕疵,就是每个用户名之前会空出几个空格,虽然不影响结果,但看起来有点别扭,我们可以再使用一个 sed 命令将其去掉。

$ for user in `ls /home`; do ac $user | sed "s/^\t//" | sed "s/total/$user\t/" ; done
dorothy         9.12
dory            1.67
eel             4.32
...

同样地,我们可以将以上命令写成脚本,后面就可以更方便使用。这里我们所使用的脚本名称是 show_user_hours.sh ,当然你可以自定义。

#!/bin/bash
echo -n "hours online since "
who /var/log/wtmp | head -1 | awk '{print $3}'
echo "============================="
for user in `ls /home`
do
  ac $user | sed "s/^\t//" | sed "s/total/$user\t/"
done

脚本的执行结果如下,同样与手敲命令结果一致:

$ ./show_user_hours
hours online since 2019-12-05
=============================
dorothy        70.34
dory            4.67
eel            17.05
jadep         186.04
jdoe           28.20
jimp           11.49
alex           11.61
shark          13.04
liangxu        3563.60
test            1.00
waynek        312.00

通过第二招,摸鱼的小伙伴已经无处遁形,并受到了 100 点伤害:

微信图片_20220419153944.gif

后续

写完这两个脚本,我十分开心,于是跑过去找老板领功。看着自己两个都是排名第一,我估计升职加薪,迎娶白富美的日子不远了!

老板看了我的脚本和结果,依然一副朱一旦式的枯燥笑容,默默地给我看一眼朱一旦开除十佳员工的视频,意味深长地看着我……

微信图片_20220419153947.jpg

完了……


目录
相关文章
|
编解码 前端开发 程序员
刚入职的程序员做不好哪些事情容易被开除?
刚入职的程序员做不好哪些事情容易被开除?
835 0
|
机器学习/深度学习 人工智能 安全
我新入职的“同事”们,既能干脏活累活,又不内卷,真香!
疫情让那些由 AI、ML 和 RPA 驱动的数字员工走向生产线
171 0
我新入职的“同事”们,既能干脏活累活,又不内卷,真香!
|
SQL 安全 前端开发
来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
面试官,您好我叫(XXX),今天来公司面试 JAVA开发工程师,之前在(XXX 公司)任职,从事这一行已经有(几)个年头了。这几年开发,主要接触的项目包括(你做过的项目!)等。在开发过程中,也用过好些框架,比如∶ springboot、springcloud、springmvc、spring、Mybatis等技术框架。熟练掌握框架之间的整合技术。有时候因为项目需求或是为了开发的高效性,自己我会研究一些技术,使用一些常用的主流 Java技术,例如∶(吹!用没用过不重要,主要是就是英文的!)。前端的技术也研究过一些。如(原生的、框架啊都往上整!)
203 0
来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
|
监控 安全
你们要的摸鱼神器,今天它来了,千万不要让你的老板看到
你们要的摸鱼神器,今天它来了,千万不要让你的老板看到
177 0
你们要的摸鱼神器,今天它来了,千万不要让你的老板看到
|
运维 监控 算法
外包干了三年,废了...
先说一下自己的个人情况,大专生,18年通过校招进入湖南某软件公司,干了接近3年的CRUD,
312 0
外包干了三年,废了...
|
新零售 程序员
工作五年“攒”够100万,程序猿们,我可没开玩笑!8条建议抱走不谢
对于一个刚刚工作几年的程序员来说,拥有100万人民币存款却是一个看似难以实现的目标,然而只要作为程序员合的你们做好合理的规划,这个目标是不难实现的,而且当五年过去之后,你可能发现你不止拥有了这100万存款,还提升了自己的“财商”。程序员如何实现工作五年“攒”够100万,本文就给你细细道来。
7099 0
在IT界,应聘企业去上班如果老板一点不懂技术那绝对是作茧自缚
如标题所述为何如此评价一个一点都不懂技术的老板的公司呢
|
Java 应用服务中间件 程序员
程序员工作三年晒出9月工资条,直言加班太累了,网友评论吵炸锅
其实程序员这个职业的门槛还是挺高的,首先必须懂最基础的计算机语言,而就这个要求,已经把大部人人挡在外面了。而他们的具体工作,简单来说,就是我们在手机上所用的任何软件,都是程序员在背后辛苦编程而来的,就是我们所说的软件开发和维护之类的工作。
1897 0
|
程序员
程序员离职带走源码竟获利800万,网友:我一般都是删库跑路
程序员辞职带走自己写的源码算违法吗? 程序员属于特殊职业,正常来说,公司会与程序员签订保密或所有权协议的。如果没有签订,按照法理来推论,在工作期间所有制作或参与的代码都属于公司财产,属于工作内容范围内的职责,未经公司许可带走或拷贝是违法的,这种行为可有公司自诉也可由司法部分公诉,具体要看给公司造成的损害程度。
1627 0