• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Linux 列出所有使用者清單教學與範例

介紹如何在 Linux 中清查系統上所有的使用者帳號,列出一般使用者的帳號清單。

/etc/passwd 檔案

Linux 的 /etc/passwd 檔案中記錄了系統上所有的帳號,所以我們可以從其中查閱整個系統的所有帳號:

# 輸出 /etc/passwd 檔案內容
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
[略]

在 /etc/passwd 檔案的內容中,每一行就是一個帳號,第一個冒號之前的部分就是使用者帳號名稱。

亦可使用 more 或 less 來查閱 /etc/passwd 檔案內容:

# 查閱 /etc/passwd 檔案內容
less /etc/passwd

產生帳號清單

我們可以利用 cut 指令將 /etc/passwd 中的帳號名稱取出,產生一份帳號清單:

# 產生所有帳號的清單
cut -d: -f1 /etc/passwd
root
daemon
bin
sys
sync
games
man
lp
mail
[略]

以下 awk 指令亦可達到相同的效果:

# 產生所有帳號的清單
awk -F: '{print $1}' /etc/passwd

getent 指令

getent 指令也可以用來查詢系統上的帳號清單:

# 輸出 passwd 資料庫
getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
[略]

將 getent 指令的輸出導向至 cut 或 awk 產生帳號清單:

# 產生所有帳號的清單
getent passwd | cut -d: -f1

# 產生所有帳號的清單
getent passwd | awk -F: '{print $1}'
root
daemon
bin
sys
sync
games
man
lp
mail
[略]

檢查指定使用者帳號

若要檢查指定的使用者帳號資訊,可以執行:

# 查詢指定帳號資訊
getent passwd myuser
myuser:x:1001:1001:My User,123,02-12345678,03-1234567:/home/myuser:/bin/bash

如果指定的使用者帳號不存在,就不會有任何輸出訊息。

統計帳號數量

若要統計整個系統上有多少帳號,可以搭配 wc 指令:

# 統計帳號數量
getent passwd | wc -l
48

系統帳號與一般使用者帳號

系統帳號是用於系統服務或軟體,而一般使用者帳號則是給實際的使用者登入使用,在本質上兩者並沒有太大的差異。

在建立一般使用者帳號時,系統會自動根據 /etc/login.defs 中 UID_MIN 與 UID_MAX 的設定值,選擇使用者帳號的 UID,通常來說一般使用者帳號的 UID 都會選在這個區間之內。

# 檢查 UID_MIN 與 UID_MAX 設定值
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN                  1000
UID_MAX                 60000

透過這個規則,我們就可以列出系統上所有的一般使用者帳號(UID 介於 UID_MIN 與 UID_MAX 的使用者):

# 查詢一般使用者帳號資訊
getent passwd {1000..60000}
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
myuser:x:1001:1001:My User,123,02-12345678,03-1234567:/home/myuser:/bin/bash

我們可以將查詢 UID_MIN 與 UID_MAX 的動作一起放進來,變成單一指令:

# 查詢一般使用者帳號資訊
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
myuser:x:1001:1001:My User,123,02-12345678,03-1234567:/home/myuser:/bin/bash

再配合 cut 指令即可產生一般使用者的帳號清單:

# 產生一般使用者帳號清單
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
ubuntu
myuser

參考資料

  • Linuxize:How to List Users in Linux

分類:Linux

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide