Cách liệt kê tất cả người dùng trong Linux

Cách liệt kê tất cả người dùng trong Linux

Chia sẻ kiến thức 07/03/2022

Bạn muốn biết bạn có bao nhiêu người dùng Linux trên một máy tính hoặc mạng (network) của mình? Đây là cách liệt kê tất cả người dùng Linux.

Người dùng là thành phần quan trọng nhất trong hệ thống Linux. Linux cung cấp các lệnh cài sẵn cho quản trị viên để cho phép họ quản lý người dùng một cách hiệu quả. Có thể để tạo, xóa và thay đổi quyền của người dùng nhưng còn việc liệt kê tất cả những người hiện đang có mặt trên một hệ thống thì sao?

Trong bài viết này, FUNiX sẽ thảo luận về cách bạn có thể lấy danh sách tất cả người dùng trong Linux, cùng với hướng dẫn để kiểm tra xem họ có tồn tại trên hệ thống hay không.

1. Cách hiển thị danh sách tất cả người dùng trong Linux

Khi bạn tạo người dùng mới, tên của họ (username), mật khẩu và các chi tiết khác được lưu trữ trong một số tệp nhất định trên máy Linux. Linux cho phép bạn đọc và sửa đổi các tệp như vậy mà không có bất kỳ hạn chế nào. Bạn có thể sử dụng các tệp này để biết thông tin liên quan đến tên và số lượng người dùng,…

1.1 Sử dụng tệp passwd

Tệp passwd là một tệp văn bản chứa các bản ghi mật khẩu của tất cả người dùng hiện đang có mặt trong hệ thống. Tệp này nằm trong thư mục /etc trong bộ nhớ cục bộ của bạn và chứa các thông tin sau:

  1. username
  2. Mật khẩu được mã hóa
  3. ID người dùng
  4. ID nhóm của người dùng
  5. Tên đầy đủ
  6. Thư mục /home của người dùng
  7. Shell đăng nhập của người dùng

Nhập cat /etc/passwd hoặc less /etc/passwd vào terminal để đọc tệp văn bản. Mở tệp /etc/passwd sẽ tạo một đầu ra giống như sau:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh

Đầu ra nói trên chứa bảy trường chứa thông tin liên quan đến người dùng. Các trường này được phân tách bằng dấu phân cách — trong trường hợp này là dấu hai chấm. Mỗi hàng trong đầu ra biểu thị một người dùng duy nhất.

Để có được danh sách tất cả các username với sự trợ giúp của tệp passwd:

awk -F: '{ print $1}' /etc/passwd

Awk là một tiện ích dòng lệnh cho phép người dùng Linux tạo các chương trình “một dòng” đơn giản để thực hiện các thao tác nhanh chóng từ terminal. Trong đoạn mã nêu trên:

  1. -F là viết tắt của Field separator (phân cách trường). Vì ký tự dấu hai chấm là dấu phân cách trong tệp /etc/passwd, chúng tôi dùng dấu hai chấm làm dấu phân cách trong lệnh awk.
  2. {print $ 1} hướng dẫn hệ thống hiển thị trường đầu tiên. Trong trường hợp này, trường đầu tiên là username.
  3. Tệp /etc/passwd chứa dữ liệu liên quan đến người dùng.

Thực hiện lệnh trên sẽ xuất ra username của tất cả người dùng. Vì tệp /etc/passwd chứa cả người dùng hệ thống, đầu ra cũng sẽ bao gồm username của họ.

root
daemon
bin
sys
sync
games
man

Bạn có thể chỉnh sửa lệnh awk một chút để hiển thị tên đầy đủ của người sử dụng. Nhập lệnh sau để hiển thị tên đầy đủ của họ trong Linux:

awk -F: '{ print $5}' /etc/passwd

Vì người dùng hệ thống có cùng username và tên đầy đủ, bạn sẽ không nhận thấy bất kỳ sự khác biệt nào trong đầu ra. Chỉ những người dùng mà bạn đã thêm vào hệ thống của mình mới có username và tên đầy đủ khác nhau.

Ngoài ra, bạn cũng có thể sử dụng lệnh cut thay vì lệnh awk. Cú pháp của lệnh cut khá giống với lệnh awk.

Để xuất username trong Linux bằng cách sử dụng cut:

cut -d: f1 /etc/passwd

Ở đây,  -d là dấu phân cách, f1 biểu thị trường đầu tiên (username) và /etc/passwd là tệp văn bản chứa dữ liệu.

Để xuất tên của người dùng bằng cách sử dụng cut:

cut -d: f5 /etc/passwd

Tương tự, bạn có thể xuất các trường khác từ tệp /etc/passwd bằng cách thay thế f5 bằng f1-f7.

>>> Đọc ngay: Cách bắt đầu sử dụng Linux

1.2 Liệt kê bằng lệnh getent

Lệnh getent xuất nội dung của các tệp văn bản quan trọng đóng vai trò là cơ sở dữ liệu cho hệ thống. Các tệp như /etc/passwd và /etc/nsswitch.conf  lần lượt chứa thông tin liên quan đến người dùng và mạng và có thể được đọc bằng lệnh getent.

Để hiển thị nội dung của tệp /etc/passwd bằng getent:

getent passwd

Đầu ra sẽ chứa bảy trường khác nhau được phân tách bằng ký tự dấu hai chấm. Mỗi trường được dành riêng cho thông tin cụ thể bao gồm username và đường dẫn thư mục chính của người dùng.

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh

Bạn có thể chain* (kết hợp) lệnh getent với awk hoặc cut để chỉ lấy danh sách username.

getent passwd | awk -F: '{print $1}'
getent passwd | cut -d: -f1

*Chain các lệnh trong Linux: kết hợp một số lệnh và làm cho chúng thực thi dựa trên hành vi của toán tử được sử dụng giữa chúng. 

Để xuất tên đầy đủ của người sử dụng:

getent passwd | awk -F: '{print $5}'
getent passwd | cut -d: -f5

1.3 Kiểm tra xem người dùng có tồn tại hay không

Trong một số tình huống, bạn có thể muốn kiểm tra xem người dùng có tồn tại trên hệ thống Linux của bạn hay không. Lệnh grep rất hữu ích khi bạn muốn lấy một mẫu văn bản cụ thể từ một tệp.

Bạn có thể sử dụng bất kỳ lệnh nào sau đây để kiểm tra sự tồn tại của người dùng.

compgen -u | grep username
getent passwd | grep username

Nếu người dùng tồn tại, thông tin đăng nhập được liên kết với họ sẽ được hiển thị trên màn hình. Ngược lại, nếu họ không có mặt trong hệ thống thì sẽ xảy ra lỗi.

Để kiểm tra xem người dùng có tồn tại trên hệ thống hay không mà không sử dụng grep:

getent passwd username

Bạn cũng có thể nhập lệnh getent hoặc compgen với grep và echo để hiển thị đầu ra tùy chỉnh.

getent passwd | grep -q username && echo "User found" || echo "User not found"
compgen -u | grep -q username && echo "User found" || echo "User not found"

Lệnh trên sẽ trả về “Đã tìm thấy ” (User found) nếu người dùng tồn tại trên hệ thống và “Không tìm thấy ” (User not found) trong trường hợp ngược lại.

1.4 Đếm số lượng người dùng trên một hệ thống

Để đếm số lượng người sử dụng tồn tại trên hệ thống Linux:

compgen -u | wc -l
getent passwd | wc -l

Trong các lệnh trên, compgen và getent có nhiệm vụ hiển thị danh sách chứa tất cả người dùng và các thông tin khác liên quan đến họ. Wc là viết tắt của word count (đếm từ) và được sử dụng để đếm số từ hoặc dòng trong đầu ra. Cờ -l biểu thị Lines (dòng).

>>> Đọc ngay: 6 yếu tố cần xem xét khi lựa chọn một bản phân phối Linux

2. Xác minh tài khoản người dùng trong Linux

Mọi quản trị viên Linux nên biết cách quản lý và điều hành những người dùng khác trên hệ thống. Thành thạo các lệnh Linux cho phép bạn tạo, xóa, kiểm soát và liệt kê những người khác là một cách tuyệt vời để bắt đầu với nhiệm vụ quản lý.

Làm quen với môi trường Linux nên là mục tiêu đầu tiên của bạn nếu bạn chỉ là người mới bắt đầu. Có một số điều bạn phải làm ngay sau khi cài đặt bản phân phối Linux đầu tiên của mình. Học một số lệnh cơ bản là một trong số đó và là điều cần thiết để thực hiện các tác vụ đơn giản trên Linux.

>>> Nếu bạn đang có nhu cầu tìm hiểu về khóa học lập trình đi làm ngay. Hãy liên hệ với FUNiX ngay tại đây:

>>> Xem thêm chuỗi bài viết liên quan:

FUNiX – Học lấy bằng đại học trực tuyến giá trị ngang bằng đại học chính quy

Cách tạo ảnh Mosaic trên Linux với Polyfoto

Cách ghi chú trong Terminal Linux với ứng dụng ghi chú tnote

Cách sử dụng lệnh wc trong Linux

Hướng dẫn cách sử dụng lsof để theo dõi file đang mở trên Linux

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/linux-list-users/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
Chat với FUNiX GPT ×

yêu cầu gọi lại

error: Content is protected !!