Đôi khi ta có thể cần xem danh sách các user trong Linux để kiểm tra thông tin hoặc xem số lượng user có trên hệ thống. Bài viết này sẽ hướng dẫn các cách để xem danh sách user trong Linux nhanh chóng nhất.
Xem danh sách user trong Linux bằng file /etc/passwd
Những user cục bộ được lưu trữ trong file /etc/passwd. Mỗi dòng trong file đều là thông tin đăng nhập cho một user tương ứng. Để mở file, ta có thể dùng lệnh cat hoặc less như sau:
less /etc/passwd
Mỗi dòng thường chứa những trường thông tin như dưới đây, ngăn cách bởi dấu hai chấm:
- Usename
- Mật khẩu được mã hóa (ký tự x cho biết mật khẩu được lưu trong file /etc/shadow)
- User ID (UID)
- Group ID của user (GID)
- Tên đầy đủ của user
- Home directory của user
- Login shell (mặc định là /bin/bash)
Nếu muốn chỉ hiển thị username thì ta có thể dùng lệnh awk hoặc cut để in ra trường đầu tiên của username:
awk -F: '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
Output:
root
daemon
bin
sys
sync
...
...
sshd
vagrant
jack
anne
Xem thêm: Tổng hợp 37 câu lệnh cơ bản trong Linux
Xem danh sách user trong Linux bằng lệnh getent
Lệnh getent dùng để hiển thị các entry từ cơ sở dữ liệu (CSDL) được cấu hình trong file /etc/nsswitch.conf, trong đó bao gồm cả CSDL passwd dùng để truy vấn danh sách những người dùng có trên hệ thống.
Dùng lệnh sau để xem danh sách các user trên Linux:
getent passwd
Có thể thấy rằng output cũng tương tự như khi ta mở file /etc/passwd. Nếu đang sử dụng LDAP để xác thực người dùng thì lệnh getent cũng sẽ hiển thị mọi người dùng Linux có trên CSDL của LDAP.
Tương tự, ta cũng có thể dùng lệnh awk hoặc cut để xem username của những user có trên Linux:
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
Cách kiểm tra xem user có tồn tại trong Linux không
Sau khi biết cách xem danh sách user trong Linux, ta hoàn toàn có thể kiểm tra xem một user có tồn tại trên Linux không bằng cách lọc danh sách qua lệnh grep.
Giả sử ta cần tìm xem user có tên jack có ở trên Linux hay không:
getent passwd | grep jack
Nếu người dùng này có tồn tại, câu lệnh trên sẽ in ra thông tin đăng nhập của người dùng đó.
Bên cạnh đó, ta cũng có thể kiểm tra mà không cần dùng lệnh grep
:
getent passwd jack
Tương tự, nếu người dùng tồn tại thì lệnh sẽ hiển thị thông tin đăng nhập của user đó.
Tiếp theo, giả sử ta cần kiểm tra xem có tổng cộng bao nhiêu user trên hệ thống thì có thể pipe với lệnh wc như sau:
getent passwd | wc -l
Output sẽ cho biết số lượng tài khoản user có trên hệ thống.
Sự khác nhau giữa user thường và user hệ thống
Về mặt kỹ thuật thì không có sự khác biệt nào đáng kể giữa user hệ thống và user thường (normal user). Thường thì user hệ thống được tạo khi cài đặt hệ điều hành và những package mới. Mặt khác, normal user sẽ được tạo bởi root hoặc một user khác có quyền sudo. Những normal user này sẽ có login shell và home directory riêng.
Mỗi user đều có một ID (UID) riêng. Nếu không chỉ định ID khi tạo user bằng lệnh useradd thì UID sẽ được tự động chọn trong file /etc/login.defs tùy vào các giá trị UID_MIN và UID_MAX. Để kiểm tra các giá trị này, ta có thể sử dụng lệnh dưới đây:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
Output:
UID_MIN 1000
UID_MAX 60000
Dựa vào output ở trên, có thể thấy rằng các normal user có giá trị UID nằm trong khoảng 1000 đến 60000. Việc xác định được các giá trị min và max cho phép cho truy vấn danh sách những normal user có trên hệ thống.
Lệnh dưới đây cho phép liệt kê những normal user có trên hệ thống Linux:
getent passwd {1000..60000}
Output:
vagrant:x:1000:1000:vagrant,,,:/home/vagrant:/bin/bash
jack:x:1001:1001:,,,:/home/jack:/bin/bash
anne:x:1002:1002:Anne Stone,,,:/home/anne:/bin/bash
patrick:x:1003:1003:Patrick Star,,,:/home/patrick:/usr/sbin/nologin
Các giá trị UID_MIN và UID_MAX có thể sẽ khác nhau, do đó ta có thể sử dụng lệnh sau để có tính khái quát tốt hơn:
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}
Tương tự ta cũng có thể pipe kết quả qua lệnh cut để hiển thị username:
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
Lời kết
Qua bài viết này, bạn đọc đã biết được cách liệt kê và lọc danh sách user trên Linux. Các lệnh được sử dụng trong bài này có thể áp dụng cho mọi bản phân phối Linux: Ubuntu, CentOS, RHEL, Debian hay Linux Mint.