在 Linux 下查看用戶的行為,不僅僅是網管要做的事,也是開發人員所應該具備的基本技能之一。為什么呢?因為有時其他同事在做一些很消耗資源的事情,比如在編譯大型程序,可能會導致服務器變得很慢,從而影響我們的正常操作。這個時候,我們就可以通過本文所介紹的方法,揪出那個同事,將他暴打一頓,就可以恢復服務器的正常使用了。
我是誰?
「我是誰?我從哪里來?我要去哪里?」哲學經典三大問題。同樣,在工作中,有時候我們會經常進行賬號切換,有時切着都忘了切到哪個用戶了。這時,需要知道當前登錄的用戶是啥。我們可以用 whoami
來進行查看。
[alvin@VM_0_16_centos ~]$ whoami
alvin
目前都有誰登錄到系統里?
一個公司里通常只有少數幾台服務器,程序猿們一般都在這幾台服務器里工作。我們可以用 who
命令來查看當前登錄到服務器的用戶有哪一些。
[alvin@VM_0_16_centos ~]$ who
alvin pts/0 2018-12-09 07:25 (116.199.***.***)
root pts/1 2018-12-09 11:05 (116.199.***.***)
alvin pts/2 2018-12-09 11:05 (116.199.***.***)
harry pts/3 2018-12-09 11:06 (116.199.***.***)
kate pts/4 2018-12-09 11:08 (116.199.***.***)
alvin pts/5 2018-12-09 11:53 (116.199.***.***)
在顯示結果里,第一列是用戶名;第二列是連接的終端,tty 表示顯示器,pts 表示遠程連接;第三列是登陸時間。
這里信息稍微多一些,但如果我們只想知道誰在線要怎么操作?只需用 users
命令來查看即可。
[alvin@VM_0_16_centos ~]$ users
alvin alvin alvin harry kate root
那些登錄到系統里的人都在干什么?
知道了誰登錄到系統里,我們就可以進一步調查他們在做什么。w
命令用於顯示已經登錄系統的用戶的名稱,以及他們正在做的事。該命令所使用的信息來源於/var/run/utmp文件。
[alvin@VM_0_16_centos ~]$ w
16:25:54 up 29 days, 6:05, 6 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alvin pts/0 116.199.***.** 07:25 2.00s 0.11s 0.00s w
root pts/1 116.199.***.** 11:05 5:20m 0.02s 0.02s -bash
alvin pts/2 116.199.***.** 11:05 5:20m 0.04s 0.05s sshd: alvin [priv]
harry pts/3 116.199.***.** 11:06 4:33m 18.08s 18.06s watch date
kate pts/4 116.199.***.** 11:08 4:33m 10.51s 10.48s top
alvin pts/5 116.199.***.** 11:53 4:32m 0.02s 0.02s -bash
第一行其實與 uptime
命令出來的結果一樣,依次表示:當前時間、系統運行時間、當前系統登錄用戶數、平均負載。
從第二行開始構成一個表格,共有8個欄目,分別顯示各個用戶正在做的事情及該用戶所占用的系統資源。
USER:顯示登陸用戶帳號名。用戶重復登陸,該帳號也會重復出現。
TTY:用戶登陸所用的終端。
FROM:顯示用戶在何處登陸系統。
LOGIN@:是LOGIN AT的意思,表示登陸進入系統的時間。
IDLE:用戶空閑時間,從用戶上一次任務結束后,開始記時。
JCPU:一終端代號來區分,表示在某段時間內,所有與該終端相關的進程任務所耗費的CPU時間。
PCPU:指WHAT域的任務執行后耗費的CPU時間。
WHAT:表示當前執行的任務
如果說我們只想查看某個用戶當前的行為,我們可以直接在 w
后跟上該用戶名:
[alvin@VM_0_16_centos ~]$ w alvin
16:34:21 up 29 days, 6:14, 6 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alvin pts/0 116.199.***.** 07:25 5.00s 0.12s 0.06s sshd: alvin [priv]
alvin pts/2 116.199.***.** 11:05 5:28m 0.04s 0.05s sshd: alvin [priv]
alvin pts/5 116.199.***.** 11:53 4:40m 0.02s 0.02s -bash
如何知道當前與過去登錄系統的用戶的信息?
有些人比較狡猾,做了壞事拒不承認。但是,在 Linux 里,每個用戶的登錄信息都會記錄起來,這樣查找相關人員的責任就有所依據。
last命令可用於顯示特定用戶登錄系統的歷史記錄。如果沒有指定任何參數,則顯示所有用戶的歷史信息。在默認情況下,這些信息(所顯示的信息)將來源於/var/log/wtmp文件。該命令的輸出結果包含以下幾列信息:
- 用戶名稱
- tty設備號
- 歷史登錄時間日期
- 登出時間日期
- 總工作時間
[alvin@VM_0_16_centos ~]$ last
alvin pts/5 116.199.***.** Sun Dec 9 11:53 still logged in
kate pts/4 116.199.***.** Sun Dec 9 11:08 still logged in
harry pts/3 116.199.***.** Sun Dec 9 11:06 still logged in
alvin pts/2 116.199.***.** Sun Dec 9 11:05 still logged in
root pts/1 116.199.***.** Sun Dec 9 11:05 still logged in
alvin pts/0 116.199.***.** Sun Dec 9 07:25 still logged in
alvin pts/0 116.199.***.** Sat Dec 8 20:42 - 23:10 (02:28)
alvin pts/0 119.33.***.** Mon Dec 3 20:50 - 23:51 (1+03:01)
alvin pts/0 119.33.***.** Thu Nov 29 20:20 - 22:45 (02:24)
alvin pts/0 223.104.***.** Thu Nov 29 06:46 - 07:00 (00:14)
alvin pts/0 223.104.***.** Wed Nov 28 20:45 - 22:27 (01:42)
alvin pts/1 14.25.***.*** Sun Nov 25 19:50 - 21:09 (01:18)
alvin pts/0 119.33.***.** Sun Nov 25 16:32 - 21:40 (05:07)
如果我們只想看某個人的歷史記錄,則在last后跟上對應的用戶名即可:
[alvin@VM_0_16_centos ~]$ last alvin
alvin pts/5 116.199.***.** Sun Dec 9 11:53 still logged in
alvin pts/2 116.199.***.** Sun Dec 9 11:05 still logged in
alvin pts/0 116.199.***.** Sun Dec 9 07:25 still logged in
alvin pts/0 116.199.***.** Sat Dec 8 20:42 - 23:10 (02:28)
alvin pts/0 119.33.***.** Mon Dec 3 20:50 - 23:51 (1+03:01)
alvin pts/0 119.33.***.** Thu Nov 29 20:20 - 22:45 (02:24)
alvin pts/0 223.104.***.** Thu Nov 29 06:46 - 07:00 (00:14)
alvin pts/0 223.104.***.** Wed Nov 28 20:45 - 22:27 (01:42)
踢除使壞人員
通過以上幾個命令,我們可以大概知道某些用戶的行為。如果我們想要踢除使壞的人員,可以使用 pkill -u
命令。
pkill -u alvin
但這個命令相當危險,有可能導致系統重啟,所以不推薦使用這個命令。比較安全的做法是使用 pkill
命令。
[alvin@VM_0_16_centos ~]$ sudo pkill -kill -t pts/3
#harry用戶已經被踢除了
[alvin@VM_0_16_centos ~]$ w
17:04:37 up 29 days, 6:44, 5 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alvin pts/0 116.199.102.65 07:25 5.00s 0.12s 0.00s w
root pts/1 116.199.102.65 11:05 5:59m 0.02s 0.02s -bash
alvin pts/2 116.199.102.65 11:05 5:59m 0.04s 0.05s sshd: alvin [priv]
kate pts/4 116.199.102.65 11:08 5:12m 11.94s 11.91s top
alvin pts/5 116.199.102.65 11:53 5:10m 0.02s 0.02s -bash
公眾號:良許Linux
