在 linux 下查看用戶的行為,不僅僅是網(wǎng)管要做的事,也是開發(fā)人員所應(yīng)該具備的基本技能之一。為什么呢?因?yàn)橛袝r(shí)其他同事在做一些很消耗資源的事情,比如在編譯大型程序,可能會(huì)導(dǎo)致服務(wù)器變得很慢,從而影響我們的正常操作。這個(gè)時(shí)候,我們就可以通過本文所介紹的方法,揪出那個(gè)同事,將他暴打一頓,就可以恢復(fù)服務(wù)器的正常使用了。
我是誰?
「我是誰?我從哪里來?我要去哪里?」哲學(xué)經(jīng)典三大問題。同樣,在工作中,有時(shí)候我們會(huì)經(jīng)常進(jìn)行賬號(hào)切換,有時(shí)切著都忘了切到哪個(gè)用戶了。這時(shí),需要知道當(dāng)前登錄的用戶是啥。我們可以用 whoami 來進(jìn)行查看。
[alvin@VM_0_16_centos ~]$ whoami
alvin
目前都有誰登錄到系統(tǒng)里?
一個(gè)公司里通常只有少數(shù)幾臺(tái)服務(wù)器,程序猿們一般都在這幾臺(tái)服務(wù)器里工作。我們可以用 who 命令來查看當(dāng)前登錄到服務(wù)器的用戶有哪一些。
[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.***.***)
在顯示結(jié)果里,第一列是用戶名;第二列是連接的終端,tty 表示顯示器,pts 表示遠(yuǎn)程連接;第三列是登陸時(shí)間。
這里信息稍微多一些,但如果我們只想知道誰在線要怎么操作?只需用 users 命令來查看即可。
[alvin@VM_0_16_centos ~]$ users
alvin alvin alvin harry kate root
那些登錄到系統(tǒng)里的人都在干什么?
知道了誰登錄到系統(tǒng)里,我們就可以進(jìn)一步調(diào)查他們?cè)谧鍪裁?。w 命令用于顯示已經(jīng)登錄系統(tǒng)的用戶的名稱,以及他們正在做的事。該命令所使用的信息來源于/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
第一行其實(shí)與 uptime 命令出來的結(jié)果一樣,依次表示:當(dāng)前時(shí)間、系統(tǒng)運(yùn)行時(shí)間、當(dāng)前系統(tǒng)登錄用戶數(shù)、平均負(fù)載。
從第二行開始構(gòu)成一個(gè)表格,共有8個(gè)欄目,分別顯示各個(gè)用戶正在做的事情及該用戶所占用的系統(tǒng)資源。
USER:顯示登陸用戶帳號(hào)名。用戶重復(fù)登陸,該帳號(hào)也會(huì)重復(fù)出現(xiàn)。
TTY:用戶登陸所用的終端。FROM:顯示用戶在何處登陸系統(tǒng)。LOGIN@:是LOGIN AT的意思,表示登陸進(jìn)入系統(tǒng)的時(shí)間。
IDLE:用戶空閑時(shí)間,從用戶上一次任務(wù)結(jié)束后,開始記時(shí)。JCPU:一終端代號(hào)來區(qū)分,表示在某段時(shí)間內(nèi),所有與該終端相關(guān)的進(jìn)程任務(wù)所耗費(fèi)的CPU時(shí)間。PCPU:指WHAT域的任務(wù)執(zhí)行后耗費(fèi)的CPU時(shí)間。WHAT:表示當(dāng)前執(zhí)行的任務(wù)
如果說我們只想查看某個(gè)用戶當(dāng)前的行為,我們可以直接在 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
如何知道當(dāng)前與過去登錄系統(tǒng)的用戶的信息?
有些人比較狡猾,做了壞事拒不承認(rèn)。但是,在 Linux 里,每個(gè)用戶的登錄信息都會(huì)記錄起來,這樣查找相關(guān)人員的責(zé)任就有所依據(jù)。
last命令可用于顯示特定用戶登錄系統(tǒng)的歷史記錄。如果沒有指定任何參數(shù),則顯示所有用戶的歷史信息。在默認(rèn)情況下,這些信息(所顯示的信息)將來源于/var/log/wtmp文件。該命令的輸出結(jié)果包含以下幾列信息:
- 用戶名稱
- tty設(shè)備號(hào)
- 歷史登錄時(shí)間日期
- 登出時(shí)間日期
- 總工作時(shí)間
[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)
如果我們只想看某個(gè)人的歷史記錄,則在last后跟上對(duì)應(yīng)的用戶名即可:
[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)
踢除使壞人員
通過以上幾個(gè)命令,我們可以大概知道某些用戶的行為。如果我們想要踢除使壞的人員,可以使用 pkill -u 命令。
pkill -u alvin
但這個(gè)命令相當(dāng)危險(xiǎn),有可能導(dǎo)致系統(tǒng)重啟,所以不推薦使用這個(gè)命令。比較安全的做法是使用 pkill 命令。
[alvin@VM_0_16_centos ~]$ sudo pkill -kill -t pts/3
#harry用戶已經(jīng)被踢除了
[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