1. 程式人生 > >Linux系統使用者與屬組管理(3)

Linux系統使用者與屬組管理(3)

Linux 是一套免費使用和自由傳播的類Unix作業系統,是一個基於POSIX和UNIX的多使用者、多工、支援多執行緒和多CPU的作業系統.它能執行主要的UNIX工具軟體、應用程式和網路協議.它支援32位和64位硬體.Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多使用者網路作業系統.

好了,終於要到了管理 Linux 賬號的時刻了,對於 Linux 有一定的熟悉度之後,再來就是要管理連上 Linux 的賬號問題了,這個賬號的問題可大可小,大到可以限制他使用 Linux 主機的各項資源,小到甚至一般賬號的密碼訂定守則都可以進行規定,管理員的工作中,相當重要的一環就是『管理賬號』啦,因為整個系統都是你在管理的,並且所有一般使用者的賬號申請,都必須要透過你的協助才行,所以你就必須要了解一下如何管理好一個伺服器主機的賬號啦,在管理 Linux 主機的賬號時,我們必須先來了解一下 Linux 到底是如何辨別每一個使用者的.

關於Linux UID賬號 (User Identity 使用者標識號)

超級使用者: UID=0
系統使用者: UID=500-65535 最大:1000-65535
普通使用者: UID:500-65535 最大:1000-65535

關於Linux GID賬號 (Group Identify 組標識號)
初始組(私有組),附加組(公共組)

Linux 使用者檔案解析

雖然我們登陸 Linux 主機的時候,輸入的是我們的賬號,但是其實 Linux 主機並不會直接認識你的『賬號名稱』的,他僅認識 ID (ID 就是一組號碼),由於計算機僅認識 0 與 1,所以主機對於數字比較有概念的,至於賬號只是為了讓人們容易記憶而已,而你的 ID 與賬號的對應就在 /etc/passwd 當中,為了安全起見 Linux 把使用者密碼單獨放在了 /etc/shadow 目錄下,且許可權是隻允許root能夠訪問,下面我們來介紹一下其這兩個配置檔案的具體引數吧.

◆/etc/passwd◆

這個檔案的構造是這樣的,每一行都代表一個賬號,有幾行就代表有幾個賬號在你的系統中,不過需要特別留意的是,裡頭很多賬號本來就是系統正常執行所必須要的,我們可以簡稱他為系統賬號,例如 bin,daemon,adm,nobody 等,這些賬號請不要隨意的刪除,這個檔案的內容有點像下面這個樣子.

[[email protected] ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
....省略....

我們先來看一下每個Linux系統都會有的第一行,就是root這個系統管理員那一行好了,你可以明顯的看出來,每一行使用『:』分隔開,共有七個咚咚,分別是:

列號碼 本列作用
第一列 使用者名稱:就是賬號,用來對應UID的:例如root的UID對應就是0
第二列 密碼位:密碼佔位符,這個欄位的密碼資料在/etc/shadow中
第三列 使用者UID:0=管理員,1-499=系統賬戶,500-65535=自定義賬戶
第四列 使用者GID:也就是使用者的組ID號,這個GID與/etc/group有關
第五列 使用者描述資訊:這一列可有可無,只是用來解釋賬號的意義而已
第六列 使用者家目錄:指定了使用者的家目錄儲存位置,系統預設生成
第七列 登陸預設Shell:指明系統預設的登陸shell是什麼

◆/etc/shadow◆

我們知道很多程式的執行都與許可權有關,而許可權與 UID/GID 有關,因此各程式當然需要讀取 /etc/passwd 來了解不同賬號的許可權,因此 /etc/passwd 的許可權需配置為 -rw-r--r-- 這樣的情況,雖然早期的口令也有加密過,但卻放置到 /etc/passwd 的第二個欄位上,這樣一來很容易被有心人士所竊取的,加密過的口令也能夠透過暴力破解法去 try and error (試誤) 找出來.

因為這樣的關係,所以後來發展出將口令移動到 /etc/shadow 這個檔案分隔開來的技術,而且還加入很多的口令限制引數在 /etc/shadow 裡頭,在這裡,我們先來了解一下這個檔案的構造吧,這個 /etc/shadow 檔案有點像下面這樣:

[[email protected] ~]# head -n 3 /etc/shadow
root:$6$TT4VWP5W$Libo7Yk8JzG15VQWKu:17699:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
....省略....

基本上,shadow 同樣以『:』作為分隔符,如果數一數,會發現共有九個欄位,這九個欄位的用途是這樣的:

列號碼 本列作用
第一列 使用者名稱:這個檔案的第一欄就是賬號,必須要與/etc/passwd相同才行
第二列 密碼位:這個欄位內的資料才是真正的口令,而且是經過加密的口令
第三列 密碼最近更改時間:這個欄位記錄了『更改系統口令那一天』的日期
第四列 密碼最短有效期:賬號的口令在最近一次被更改後需要經過幾天后才能再次更改
第五列 密碼最長有效期:指定在最近一次更改口令後,經過多久需要再次更改的時間
第六列 密碼到期前的警告天數:當賬號口令過期時,系統會發出『警告』給這個賬號
第七列 密碼過期後的寬限天數:口令有效日期為『升級日期(第3欄位)』+『重新變更日期(第5欄位)』
第八列 密碼失效時間:賬號在此欄位規定的日期之後,將無法再使用,預設是9999999
第九列 系統保留:此配置沒有被使用,屬於系統保留欄位


Linux 屬組檔案解析

認識了賬號相關的兩個檔案 /etc/passwd 與 /etc/shadow 之後,你或許還是會覺得奇怪,那麼群組的配置檔案在哪裡?還有在 /etc/passwd 的第四欄不是所謂的 GID 嗎? 那又是啥? 此時就需要了解 /etc/group 與 /etc/gshadow 這兩個配置檔案嘍.

◆/etc/group◆

這個檔案就是在記錄 GID 與組名的對應了,他主要是實現組使用者的記錄工作, /etc/group 內容有點像以下這樣:

[[email protected] ~]# head -n 3 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
....省略....

這個檔案每一行代表一個群組,也是以冒號『:』作為欄位的分隔符,共分為四欄,每一欄位的意義如下:

列號碼 本列作用
第一列 組名稱:就是組名,在新建使用者的時候系統會為使用者分配一個預設組.
第二列 密碼佔位符:通常不需要配置,這個配置通常是給『組管理員』使用的.
第三列 組ID號(GID):就是群組的 ID 號碼.
第四列 成員列表:顯示本組內的成員列表

◆/etc/gshadow◆

本配置檔案用於儲存組的密碼,等相關資訊/etc/gshadow的內容有點像這樣:

[[email protected] ~]# head -n 3 /etc/gshadow
root:::
bin:::
daemon:::
....省略....

這個檔案內同樣還是使用冒號『:』來作為欄位的分隔字元,而且你會發現,這個檔案幾乎與/etc/group一模一樣,是這樣沒錯不過,要注意的大概就是第二個欄位,第二個欄位是口令欄,如果口令欄上面是『!』時,表示該群組不具有群組管理員,至於第四個欄位也就是支援的賬號名稱,這四個欄位的意義為:

列號碼 本列作用
第一列 使用者組:就是組名,本配置檔案必須與/etc/group檔案相對應.
第二列 組密碼:這個段可以是空的或!,如果是空的或有!,表示沒有密碼
第三列 組管理者:這個欄位也可為空,如果有多個使用者組管理者用,分割
第四列 組內成員:如果有多個成員用,號分割

以系統管理員的角度來說,這個 gshadow 最大的功能就是建立群組管理員啦,那麼什麼是群組管理員呢?由於系統上面的賬號可能會很多,但是我們root可能平時太忙碌,所以當有使用者想要加入某些群組時,root或許會沒有空管理,此時如果能夠建立群組管理員的話,那麼該群組管理員就能夠將那個賬號加入自己管理的群組中,可以免去root的忙碌啦.

Linux 使用者管理命令

好啦!既然要管理賬號,當然是由新增與移除使用者開始的囉~底下我們就分別來談一談如何新增、移除與更改使用者的相關資訊吧~

◆useradd 新建使用者◆

useradd命令用於Linux中建立的新的系統使用者,useradd可用來建立使用者帳號,帳號建好之後,再用passwd設定帳號的密碼.而可用userdel刪除帳號,使用useradd指令所建立的帳號,實際上是儲存在/etc/passwd文字檔案中,在Slackware中,adduser指令是個script程式,利用交談的方式取得輸入的使用者帳號資料,然後再交由真正建立帳號的useradd命令建立新使用者,如此可方便管理員建立使用者帳號.在Red Hat Linux中,adduser命令則是useradd命令的符號連線,兩者實際上是同一個指令,其引數我們會在下面進行說明.

[[email protected] ~]# useradd --help

命令語法:[ user [選項] 使用者名稱 ]

        -u UID          #建立使用者時指定UID號
        -g 組名         #指定一個初始組
        -G 組名         #加入一個附加組
        -d 目錄         #手動指定某目錄為家目錄
        -s 型別         #指定預設Shell,預設/bin/bash
        -M              #強制不建立家目錄
        -D              #查詢預設配置引數
        -m              #強制建立家目錄
        -c              #指定說明資訊,可隨便寫
        -r              #建立一個系統的賬號
        -e              #指定賬號失效日期,格式為『YYYY-MM-DD』
        -f              #指定口令是否會失效,0為立刻失效
        -1              #指定使用者永遠不失效

例項1:使用 useradd -M -r -s /sbin/nologin 引數建立一個系統使用者.

[[email protected] ~]# useradd -M -r -s /sbin/nologin lyshark

[[email protected] ~]# cat /etc/passwd |grep lyshark
lyshark:x:997:995::/home/lyshark:/sbin/nologin

例項2:使用 useradd -G 引數建立使用者並指定組.

[[email protected] ~]# groupadd admin
[[email protected] ~]# useradd -G admin wang

[[email protected] ~]# cat /etc/group |grep wang
admin:x:1000:wang

關於useradd命令的拓展

其實系統已經幫我們規定好非常多的預設值了,所以我們可以簡單的使用『 useradd 賬號 』來建立使用者即可,這些預設值主要會幫我們處理幾個專案:

在 /etc/passwd 裡面建立一行與賬號相關的資料,包括建立UID/GID/家目錄等.
在 /etc/shadow 裡面將此賬號的口令相關引數填入,但是尚未有口令.
在 /etc/group 裡面加入一個與賬號名稱一模一樣的組名.
在 /home 底下建立一個與賬號同名的目錄作為使用者家目錄,且許可權為700.

那麼我們在建立預設使用者的時候也會參考一些配置檔案,來完成預設引數的配置,現在我們可以使用下面的命令來直接獲取預設配置引數.

[[email protected] ~]# useradd -D

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

這個資料其實是由/etc/default/useradd引數讀取出來的,你可以自行用VIM去觀察該檔案的內容,搭配上頭剛剛談過的執行結果,上面這些配置專案所造成的行為分別是:

[[email protected] ~]# vim /etc/default/useradd

GROUP=100

#新建立使用者時預設初始組的GID號(公有組機制)
#現在使用的是私有組機制(根據建立使用者名稱稱建立組)

HOME=/home
#新建立使用者的家目錄的預設位置

INACTIVE=-1
#密碼過期後寬限天數(過期停權),用天數表示:0代表密碼到期立刻失效;正數代表密碼到期後的寬限天數;-1 表示密碼永不失效。 

EXPIRE=
#密碼失效時間,此處寫時間戳,到達時間戳時間後立刻失效,不填寫表示使用者密碼永不過期。

SHELL=/bin/bash
#此選項是建立使用者時預設的shell型別,/bin/bash 表示可以登入系統

SKEL=/etc/skel 
#此選項是建立使用者時使用的模板目錄,/etc/skel中的檔案在使用者建立時都會被複制到使用者家目錄下。

GREATE_MAIL_SPOOL=yes
#此選項是是否給新使用者建立郵件緩衝(即新郵箱)
[[email protected] ~]# vim /etc/login.defs

MAIL_DIR /var/spool/mail
#指定新使用者的預設郵箱位置。比如xdl使用者的郵箱目錄位置:/var/spool/mail/lyshark

PASS_MAX_DAYS 99999
#這行指定的是密碼的有效期,也就是/etc/shadow檔案的第五欄位。代表多少天之後必須修改密碼,預設值是99999

PASS_MIN_DAYS 0
#這行指定的是兩次密碼的修改間隔時間,也就是/etc/shadow檔案的第四欄位。代表第一次修改密碼之後,幾天後才能再次修改密碼。預設值是0

PASS_MIN_LEN 5
#這行代表密碼的最小長度,預設不小於5位。但是我們現在使用者登入時驗證已經被PAM模組取代,所以這個選項並不生效

PASS_WARN_AGE 7
#這行代表密碼修改到期前的警告天數,也就是/etc/shadow檔案的第六欄位。代表密碼到底有效期前多少天開始進行警告提醒,預設值是7天

UID_MIN 500
#建立普通使用者的時候預設的起始UID號

UID_MAX 60000
#建立普通使用者,不用-u 指定時,預設最大的UID號。
#注:假如有一個使用者建立時通過 -u 指定了 UID 為 550,那麼下一次不指定-u 時,則起始UID 變成從551開始,500-549之間的那些會跳過不使用。

GID_MIN 500
#建立組的時候預設的起始GID號

GID_MAX 60000
#建立組的時候預設的最大的GID號

CREATE_HOME yes
#建立使用者時是否建立使用者家目錄預設 yes 建立 

UMASK 077
#這行指定的是建立的使用者家目錄的預設許可權,因為umask值是077,所以新建的使用者家目錄的許可權是700

USERGROUPS_ENAB yes
#這行指定的是使用命令userdel刪除使用者時,是否刪除使用者的初始組,預設是刪除

ENCRYPT_METHOD SHA512 
#這行指定Linux使用者的密碼使用SHA512雜湊模式加密,這是新的密碼加密模式,原先的Linux只能用DES或MD5方式加密

現在你知道啦,使用 useradd 這支程式在建立 Linux 上的賬號時,至少會參考:

/etc/default/useradd
/etc/login.defs
/etc/skel/*

這些檔案,不過最重要的其實是建立 /etc/passwd,/etc/shadow,/etc/group,/etc/gshadow還有使用者家目錄就是了~所以,如果你瞭解整個系統執行的狀態,也是可以手動直接修改這幾個檔案就是了.

◆passwd 設定密碼◆

passwd命令用於設定使用者的認證資訊,包括使用者密碼、密碼過期時間等,系統管理者則能用它管理系統使用者的密碼,只有管理者可以指定使用者名稱稱,一般使用者只能變更自己的密碼,其引數我們會在下面進行說明.

[[email protected] ~]# passwd --help

命令語法:[ passwd [選項] 使用者名稱 ]

        -u UID          #建立使用者時指定UID號
        --stdin         #非互動給予密碼
        -l 使用者名稱        #鎖定使用者,使之無法登陸,會將 /etc/shadow 第二欄最前面加上 ! 使口令失效.
        -u 使用者名稱        #解鎖使用者,是 Unlock 的意思
        -S 使用者名稱        #檢視使用者賬號狀態(是否被鎖定).
        -n              #後面接天數,多久不可修改口令天數
        -x              #後面接天數,多久內必須要更動口令
        -w              #後面接天數,口令過期前的警告天數
        -i              #後面接『日期』,口令失效日期

例項1:使用 echo |passwd --stdin 引數非互動設定密碼.

[[email protected] ~]# echo "lyshark" |passwd --stdin lyshark

Changing password for user lyshark.
passwd: all authentication tokens updated successfully.

例項2:使用 passwd 引數修改lyshark使用者的密碼.

[[email protected] ~]# passwd lyshark

Changing password for user lyshark.
New password: 123123
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 123123
passwd: all authentication tokens updated successfully.

root果然是最偉大的人物,當我們要給予使用者口令時,通過root來配置即可,root可以配置各式各樣的口令,系統幾乎一定會接受,所以如同上面的範例,明明輸入的口令太短了,但是系統依舊可接受123123這樣的口令配置.

◆usermod 管理使用者◆

usermod命令用於修改使用者的基本資訊,usermod命令不允許你改變正在線上的使用者帳號名稱,當usermod命令用來改變userid,必須確認這名user沒在電腦上執行任何程式,你需手動更改使用者的crontab,也需手動更改使用者的at工作,採用NIS server須在server上更動相關的NIS設定,其引數我們會在下面進行說明.

[[email protected] ~]# usermod --help

命令語法:[ usermod [選項] 使用者名稱 ]

        -u UID          #建立使用者時指定UID號
        -c              #後面加賬號說明
        -d 目錄         #結合 -m 直接對家目錄進行改名
        -e              #後面接日期,格式是 YYYY-MM-DD
        -f              #後面接天數
        -g 組名         #修改指定初始組
        -G              #修改指定附加組
        -a              #與 -G 合用,新增次要組
        -l 新名 舊名    #修改使用者名稱
        -s shell        #修改預設Shell
        -u UID          #修改使用者的指定UID
        -L              #凍結指定使用者,讓其無法登陸
        -U              #解除凍結

如果你仔細的比對,會發現 usermod 的選項與 useradd 非常類似,這是因為 usermod 也是用來微調 useradd 新增的使用者引數嘛,不過 usermod 還是有新增的選項,那就是 -L 與 -U,不過這兩個選項其實與 passwd 的 -l,-u 是相同的.

例項1:使用 usermod -m -d /home/hello wang 引數將原wang家目錄修改成hello.

[[email protected] home]# ls
wang
[[email protected] home]# usermod -m -d /home/hello wang

[[email protected] home]# ls
hello

例項2:使用 usermod -s /bin/bash 引數修改lyshark賬戶的預設shell.

[[email protected] ~]# usermod -s /bin/bash lyshark

◆userdel 刪除使用者◆

userdel命令用於刪除給定的使用者,以及與使用者相關的檔案,若不加選項,則僅刪除使用者帳號,而不刪除相關檔案,其引數我們會在下面進行說明.

[[email protected] ~]# userdel --help

命令語法:[ userdel [選項] 使用者名稱 ]

        -f              #強制刪除使用者,即使使用者已登陸
        -r              #同時刪除家目錄

這個功能就太簡單了,目的在刪除使用者的相關資料,而使用者的資料有:

使用者賬號/口令相關引數:/etc/passwd, /etc/shadow
使用者群組相關引數:/etc/group, /etc/gshadow
使用者個人檔案資料: /home/username, /var/spool/mail/username..

這個命令下達的時候要小心了,通常我們要移除一個賬號的時候,你可以手動的將 /etc/passwd 與 /etc/shadow 裡頭的該賬號取消即可,一般而言,如果該賬號只是『暫時不啟用』的話,那麼將 /etc/shadow 裡頭賬號失效日期 (第八欄位) 配置為 0 就可以讓該賬號無法使用,但是所有跟該賬號相關的資料都會留下來,使用userdel的時候通常是『你真的確定不要讓該使用者在主機上面使用任何資料了』

◆chage 查詢引數◆

chage命令是用來修改帳號和密碼的有效期限,其引數我們會在下面進行說明.

[[email protected] ~]# chage --help

命令語法:[ chage [選項] 使用者名稱 ]

        -m              #密碼可更改的最小天數
        -M              #密碼保持有效的最大天數
        -w              #使用者密碼到期前警告天數
        -E              #帳號到期時間
        -d              #上一次更改的日期
        -l              #列出該賬號的詳細口令引數
        chage -d 0      #強制使用者下次登陸修改密碼

例項1:使用 chage -d 0 lyshark 強制使用者下次登陸修改密碼.

[[email protected] ~]# chage -l lyshark
Last password change                    : Nov 14, 2018
Password expires                    : never
Password inactive                   : never
Account expires                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

[[email protected] ~]# chage -d 0 lyshark

[[email protected] ~]# chage -l lyshark
Last password change                    : password must be changed
Password expires                    : password must be changed
Password inactive                   : password must be changed
Account expires                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7


Linux 屬組管理命令

瞭解了賬號的新增、刪除、更動與查詢後,再來我們可以聊一聊群組的相關內容了,基本上,群組的內容都與這兩個檔案有關:/etc/group,/etc/gshadow,群組的內容其實很簡單,都是上面兩個檔案的新增、修改與移除而已,不過如果再加上有效群組的概念,那麼gpasswd則不可不知呢.

◆groupadd 新增屬組◆

groupadd命令用於建立一個新的工作組,新工作組的資訊將被新增到系統檔案中,其引數我們會在下面進行說明.

[[email protected] ~]# groupadd --help

命令語法:[ groupadd [選項] 組名 ]

        -g              #指定組GID
        -r              #建立系統群組

◆groupmod 修改屬組◆

groupmod命令更改群組識別碼或名稱,需要更改群組的識別碼或名稱時,可用groupmod指令來完成這項工作,其引數我們會在下面進行說明.

[[email protected] ~]# groupmod --help

命令語法:[ groupmod [選項] 組名 ]

        -g              #修改原有的GID數字
        -n              #修改原有的組名

◆groupdel 刪除屬組◆

groupdel命令用於刪除指定的工作組,本命令要修改的系統檔案包括/ect/group和/ect/gshadow,若該群組中仍包括某些使用者,則必須先刪除這些使用者後,方能刪除群組,其引數我們會在下面進行說明.

[[email protected] ~]# groupdel --help

命令語法:[ groupdel [選項] 組名 ]

◆gpasswd 新增成員◆

gpasswd命令是Linux下工作組檔案/etc/group和/etc/gshadow管理工具,其引數我們會在下面進行說明.

[[email protected] ~]# gpasswd --help

命令語法:[ gpasswd [選項] 組名 ]

        -a              #新增使用者到組
        -d              #從組刪除使用者
        -A              #指定管理員
        -M              #指定組成員
        -r              #刪除密碼
        -R              #限制使用者登入組

例項1:使用 gpasswd -a 新增lyshark使用者到root組.

[[email protected] ~]# gpasswd -a lyshark root

Adding user lyshark to group root

例項2:使用 gpasswd -d 從lyshark組中刪除root.

[[email protected] ~]# gpasswd -d lyshark root

Removing user lyshark from group root

例項3:使用 gpasswd -M 批量將使用者 a1,a2,a3,a4 新增到test組.

[[email protected] ~]# useradd a1
[[email protected] ~]# useradd a2
[[email protected] ~]# useradd a3
[[email protected] ~]# useradd a4
[[email protected] ~]# groupadd test

[[email protected] ~]# gpasswd -M a1,a2,a3,a4 test

[email protected] ~]# cat /etc/group |grep test
test:x:1008:a1,a2,a3,a4


Linux 使用者查詢命令

談了這麼多的賬號問題,總是該要談一談,那麼如何針對系統上面的使用者進行查詢吧?想幾個狀態,如果你在Linux上面操作時,剛好有其他的使用者也登陸主機,你想要跟他對談,該如何是好,你想要知道某個賬號的相關資訊,該如何查閱,下面我們就來看一看具體的查詢技巧吧.

◆su 切換身份命令◆

su命令用於切換當前使用者身份到其他使用者身份,變更時須輸入所要變更的使用者帳號與密碼,其引數我們會在下面進行說明.

[[email protected] ~]# su --help

命令語法:[ su - [選項] 使用者名稱 ]

        -c 指令          #執行完指定的指令後,即恢復原來的身份
        -f               #使shell不用去讀取啟動檔案
        -l               #改變身份時連同環境變數一起切換
        -m               #改變身份不同步環境變數
        -s shell         #指定要執行的shell

例項1:使用 su -c 執行指令後自動退出.

[[email protected] ~]# su -c id lyshark

uid=1000(lyshark) gid=1000(lyshark) groups=1000(lyshark)

◆id 查詢使用者資訊◆

id命令可以顯示真實有效的使用者ID(UID)和組ID(GID),UID 是對一個使用者的單一身份標識,組ID(GID)則對應多個UID,id命令已經預設預裝在大多數Linux系統中,要使用它,只需要在你的控制檯輸入id,其引數我們會在下面進行說明.

[[email protected] ~]# id --help

命令語法:[ id [選項] 使用者名稱 ]

        -g              #顯示使用者所屬群組的ID
        -G              #顯示使用者所屬附加群組的ID
        -n              #顯示使用者,所屬群組或附加群組的名稱.
        -r              #顯示實際ID
        -u              #顯示使用者ID

例項1:使用 id 命令查詢指定使用者.

[[email protected] ~]# id lyshark

uid=1000(lyshark) gid=1000(lyshark) groups=1000(lyshark)

◆w 顯示登陸使用者列表◆

w命令用於顯示已經登陸系統的使用者列表,並顯示使用者正在執行的指令,執行這個命令可得知目前登入系統的使用者有那些人,以及他們正在執行的程式,單獨執行w命令會顯示所有的使用者,您也可指定使用者名稱稱,僅顯示某位使用者的相關資訊,其引數我們會在下面進行說明.

[[email protected] ~]# w --help

命令語法:[ w [選項] 使用者名稱 ]

        -h              #不列印頭資訊
        -u              #當顯示當前程序和cpu時間時忽略使用者名稱
        -s              #使用短輸出格式
        -f              #顯示使用者從哪登入

例項1:使用 w 命令檢視系統正在登陸的使用者.

[[email protected] ~]# w

 14:40:07 up 3 min,  2 users,  load average: 0.03, 0.09, 0.05
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.1.20     14:37    7.00s  0.10s  0.00s w
lyshark  pts/1    192.168.1.20     14:38    1:59   0.01s  0.01s -bash

例項2:使用 w -h lyshark 命令檢視lyshark使用者的登陸情況.

[[email protected] ~]# w -h lyshark
lyshark  pts/1    192.168.1.20     14:38    4:31   0.01s  0.01s -bash

◆who 顯示登入系統資訊◆

who命令是顯示目前登入系統的使用者資訊,執行who命令可得知目前有那些使用者登入系統,單獨執行who命令會列出登入帳號,使用的終端機,登入時間以及從何處登入或正在使用哪個顯示器,其引數我們會在下面進行說明.

[[email protected] ~]# who --help

命令語法:[ who [選項] ]

        -H              #顯示各欄位的標題資訊列
        -u              #顯示使用者閒置時間(1分鐘內無操作顯示. 24小時不操作顯示old)
        -m              #與 who am i 引數效果相同
        -q              #只顯示登入系統的帳號名稱和總人數
        -s              #只負責解決相容性問題
        -w              #顯示使用者的資訊狀態列

例項1:使用 who -q 命令檢視系統登入使用者總人數.

[[email protected] ~]# who -q

root lyshark admin users wangrui 
# users=5

◆last 顯示使用者最近登入資訊◆

last命令用於顯示使用者最近登入資訊,單獨執行last命令,它會讀取/var/log/wtmp的檔案,並把該給檔案的內容記錄的登入系統的使用者名稱單全部顯示出來,其引數我們會在下面進行說明.

[[email protected] ~]# last --help

命令語法:[ last [選項] [檔案目錄] ]

        -H              #顯示各欄位的標題資訊列
        -a              #把從何處登入系統的主機名稱或IP,顯示在最後一行
        -d              #將IP地址轉換成主機名稱
        -f 記錄檔案      #指定記錄檔案
        -n 顯示條數      #設定列出名單的顯示列數
        -R              #不顯示登入系統的主機名稱或IP地址
        -x              #顯示系統關機,重新開機,以及執行等級的改變等資訊

例項1:使用 last -f /var/log/wtmp 指定一個讀取檔案,來列印.

[[email protected] ~]# last -f /var/log/wtmp

lyshark  pts/1        192.168.1.20     Wed Nov 14 14:38   still logged in   
root     pts/0        192.168.1.20     Wed Nov 14 14:37   still logged in   
reboot   system boot  3.10.0-862.el7.x Wed Nov 14 14:36 - 14:57  (00:21)    
root     pts/0        192.168.1.8      Tue Nov  6 11:02 - crash (8+03:34)   
....省略....
wtmp begins Sat Oct 13 12:39:18 2018

例項2:使用 last -n 4 命令顯示前4行資料.

[[email protected] ~]# last -n 4
lyshark  pts/1        192.168.1.20     Wed Nov 14 14:38   still logged in   
root     pts/0        192.168.1.20     Wed Nov 14 14:37   still logged in   
reboot   system boot  3.10.0-862.el7.x Wed Nov 14 14:36 - 14:58  (00:22)    
root     pts/0        192.168.1.8      Tue Nov  6 11:02 - crash (8+03:34)   

wtmp begins Sat Oct 13 12:39:18 2018

◆lastlog 顯示最後登陸資訊◆

lastlog命令用於顯示系統中所有使用者最近一次登入資訊.

lastlog檔案在每次有使用者登入時被查詢,可以使用lastlog命令檢查某特定使用者上次登入的時間,並格式化輸出上次登入日誌/var/log/lastlog的內容,它根據UID排序顯示登入名、埠號(tty)和上次登入時間,如果一個使用者從未登入過,lastlog顯示 Never logged,注意需要以root身份執行該命令,其引數我們會在下面進行說明.

[[email protected] ~]# lastlog --help

命令語法:[ lastlog [選項] [檔案目錄] ]

        -b 天數         #顯示指定天數前的登入資訊
        -t 天數         #顯示指定天數以來的登入資訊
        -u 使用者名稱       #顯示指定使用者的最近登入資訊

例項1:使用 lastlog -u root 查詢root的最後登入日期.

[[email protected] ~]# lastlog -u root

Username         Port     From             Latest
root             pts/0    192.168.1.20     Wed Nov 14 14:37:27 -0500 2018


Linux 使用者對話命令

◆write 線上傳送提示◆

write命令用於向指定登入使用者終端上傳送資訊,通過write命令可傳遞資訊給另一位登入系統的使用者,當輸入完畢後,鍵入EOF表示資訊結束,write命令就會將資訊傳給對方,如果接收資訊的使用者不只登入本地主機一次,你可以指定接收資訊的終端機編號.

例項1:使用 write 給lyshark使用者傳送訊息.

[[email protected] ~]# echo "hello lyshark" | write lyshark

例項2:使用 write 給lyshark使用者無線傳送亂碼.

while true
do
cat /var/log/messages |base64 |write lyshark
done

注意:若對方設定mesg n 則此時資訊將無法傳給對方.

◆wall 給所有人通知◆

wall命令用於向系統當前所有開啟的終端上輸出資訊,通過wall命令可將資訊傳送給每位同意接收公眾資訊的終端機使用者,若不給予其資訊內容,則wall命令會從標準輸入裝置讀取資料,然後再把所得到的資料傳送給所有終端機使用者.

例項1:使用 wall 給全部使用者傳送訊息.

[[email protected] ~]# wall hello linux admin
[[email protected] ~]# 

Broadcast message from [email protected] (pts/0) (Wed Nov 14 15:28:01 2018):

hello linux admin

◆mail 傳送郵件◆

mail命令是命令列的電子郵件傳送和接收工具,操作的介面不像elm或pine那麼容易使用,但功能非常完整,其引數我們會在下面進行說明.

[[email protected] ~]# yum install -y mailx
[[email protected] ~]# mail --help

命令語法:[ mail [選項] [使用者] ]

        -b 地址         #指定密件副本的收信人地址
        -c 地址         #指定副本的收信人地址
        -f 郵件檔案     #讀取指定郵件檔案中的郵件
        -i             #不顯示終端發出的資訊
        -I             #使用互動模式
        -s 郵件主題     #指定郵件的主題
        -u 使用者帳號     #讀取指定使用者的郵件

        h              #列出信件表頭
        d              #刪除郵件
        s              #將郵件儲存成檔案
        q              #退出

例項1:使用 mail 使用管道進行郵件傳送.

[[email protected] ~]# echo "hello,this is the content of mail." |mail -s "by root" lyshark

You have new mail in /var/spool/mail/root

例項2:使用 mail 使用檔案進行郵件傳送.

[[email protected] ~]# mail -s "by root" [email protected] < mail.txt

You have new mail in /var/spool/mail/root