Lệnh id: kiểm tra UID và nhóm, whoami, groups và nhóm phụ
Trên máy chủ Linux, để kiểm tra UID và nhóm của tài khoản hiện tại thì dùng lệnh id; nếu chỉ cần tên tài khoản thì dùng whoami, còn nếu chỉ cần tên nhóm thì dùng groups. Khi chạy lần lượt ba lệnh trên máy chủ AlmaLinux 9 và Debian 12 rồi so sánh kết quả, id -un và whoami in ra cùng một tên tài khoản, còn groups in ra danh sách nhóm của id chỉ giữ lại tên.
Kết quả bên dưới được lấy trên máy chủ AlmaLinux 9.8 bằng tài khoản root và trên máy chủ Debian 12 bằng tài khoản thường. Tên và số của tài khoản đăng nhập cùng các nhóm phụ đã được đổi thành giá trị ví dụ (user1, 1000, adm, systemd-journal).
1️⃣ Cách dùng cơ bản của lệnh id
Chạy id không có tùy chọn thì thông tin của tài khoản đã chạy shell hiện tại hiện ra trên một dòng. Khi chạy bằng tài khoản root, cả ba trường đều là 0(root).
iduid=0(root) gid=0(root) groups=0(root)Trường uid là số và tên của tài khoản, trường gid là số và tên của nhóm chính (primary group). Trường groups là toàn bộ các nhóm mà tài khoản thuộc về, với nhóm chính đứng đầu.
Ghi tên tài khoản sau id thì thông tin của tài khoản đó được in ra. Khi kiểm tra tài khoản thường user1 có nhóm phụ, trong trường groups sau nhóm chính user1 là adm và systemd-journal. Những nhóm mà tài khoản thuộc thêm ngoài nhóm chính này là nhóm phụ (supplementary group).
id user1uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)Nhiều tài khoản có số UID và gid giống nhau nên dễ coi hai con số là cùng một giá trị, nhưng tài khoản adm có sẵn trên máy chủ có UID là 3 và số nhóm chính là 4. Tài khoản operator có nhóm chính là root.
id admuid=3(adm) gid=4(adm) groups=4(adm)id operatoruid=11(operator) gid=0(root) groups=0(root)Ghi nhiều tài khoản thì mỗi tài khoản được in trên một dòng.
id root binuid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)Ghi một tài khoản không tồn tại thì lỗi [no such user] xuất hiện, và mã thoát là 1.
id no-such-user9id: 'no-such-user9': no such userecho $?1Mã thoát khi ghi một tài khoản có tồn tại là 0, nên có thể dùng trong script làm điều kiện kiểm tra tài khoản có tồn tại hay không.
2️⃣ Các tùy chọn của lệnh id
Khi chỉ cần chuyển một con số trong toàn bộ kết quả cho script, chọn riêng một trường bằng tùy chọn. -u in ra UID, -g in ra số nhóm chính, còn -G in ra số của tất cả các nhóm mà tài khoản thuộc về.
id -u0id -u daemon2id -G user11000 4 190Dùng kèm -n thì tên hiện ra thay cho số. Khi kiểm tra nhóm của user1 bằng [id -Gn], ba con số đổi thành ba cái tên.
id -Gn user1user1 adm systemd-journalid -gn user1user1-n và -r được dùng cùng với một trong các tùy chọn -u, -g, -G. Khi chỉ ghi riêng -n, lỗi bên dưới xuất hiện.
id -nid: cannot print only names or real IDs in default format-r in ra ID thực (real) thay cho ID hiệu dụng (effective). Khi chạy [id -ur] trong shell của tài khoản root, kết quả là 0. Nếu ghi cùng lúc từ hai tùy chọn chọn số trở lên, như -u và -g, thì lỗi [cannot print "only" of more than one choice] xuất hiện. Các tùy chọn được tổng hợp bên dưới.
| Tùy chọn | Sao chép | Mô tả |
|---|---|---|
| -u--user | In ra số UID | |
| -g--group | In ra số nhóm chính | |
| -G--groups | In ra số của tất cả các nhóm mà tài khoản thuộc về | |
| -n--name | Dùng cùng -u, -g, -G để in ra tên thay cho số | |
| -r--real | Dùng cùng -u, -g, -G để in ra ID thực (real) thay cho ID hiệu dụng |
| Tùy chọn | Sao chép | Mô tả |
|---|---|---|
| -Z--context | Chỉ in ra ngữ cảnh bảo mật của tiến trình | |
| -z--zero | Ngăn cách các mục kết quả bằng ký tự NUL thay cho khoảng trắng; không dùng được ở định dạng mặc định | |
| -a | Chỉ được nhận để tương thích với các phiên bản id khác rồi bị bỏ qua | |
| --help | In ra trợ giúp | |
| --version | In phiên bản |
🔲 Trình mô phỏng lệnh id
Trình mô phỏng bên dưới bắt đầu bằng tài khoản user1 có nhóm phụ. Sau khi thêm nhóm wheel bằng chip [🖊 Other window], có thể so sánh [id] với [id user1] và kiểm tra nhóm của shell mới bằng chip [🔁 Log in again].
3️⃣ Lệnh whoami và id -un
Nếu chỉ cần tên tài khoản của shell hiện tại thì chạy whoami. Trang man mô tả whoami là lệnh giống với [id -un]. Khi chạy hai lệnh bằng tài khoản root, cả hai đều in ra root.
whoamirootid -unrootVới tài khoản thường trên máy chủ Debian 12, hai lệnh cũng in ra cùng một tên tài khoản.
whoamiuser1id -unuser1whoami in ra tên tài khoản ứng với UID hiệu dụng (effective) hiện tại. Đây là lệnh chỉ kiểm tra tài khoản hiện tại, nên thêm tên tài khoản vào sau thì báo lỗi.
whoami user1whoami: extra operand 'user1'
Try 'whoami --help' for more information.Tên hoặc số của tài khoản khác được kiểm tra bằng cách ghi tài khoản đó sau id.
id -un user1user1Ghi -u thay cho -un thì ở cùng vị trí, số UID hiện ra thay cho tên tài khoản.
4️⃣ Lệnh groups và nhóm phụ
groups chỉ in ra tên nhóm trên một dòng. Không ghi tên tài khoản thì nhóm của shell hiện tại hiện ra, và với tài khoản root chỉ có một nhóm root.
groupsrootGhi tên tài khoản thì tên tài khoản và các nhóm sau dấu hai chấm hiện ra. Khi ghi nhiều tài khoản, mỗi tài khoản được in trên một dòng.
groups user1 daemonuser1 : user1 adm systemd-journal
daemon : daemonNhóm chính và nhóm phụ được ghi ở những chỗ khác nhau. Nhóm phụ được ghi dưới dạng thành viên ở trường thứ tư của cơ sở dữ liệu nhóm (/etc/group), còn nhóm chính được ghi bằng số ở trường thứ tư của thông tin tài khoản (/etc/passwd).
getent group admadm:x:4:user1getent group user1user1:x:1000:getent passwd daemondaemon:x:2:2:daemon:/sbin:/sbin/nologinNhóm user1, nhóm chính của user1, có trường thứ tư để trống, còn ở nhóm phụ adm thì user1 được ghi là thành viên. Số 2 ở trường thứ tư trên dòng của tài khoản daemon là số nhóm chính.
Để thêm tài khoản vào nhóm phụ thì dùng lệnh usermod ở dạng [usermod -aG nhóm tài khoản]. Nếu chỉ dùng -G mà không có -a, tài khoản sẽ bị loại khỏi những nhóm phụ đang có mà không được ghi trong danh sách, nên ghi kèm -a.
groups chạy không kèm tên tài khoản in ra nhóm của tiến trình shell hiện tại. Trang man giải thích rằng khi cơ sở dữ liệu nhóm thay đổi, giá trị này có thể khác với cơ sở dữ liệu.
Vì vậy ngay sau khi đổi nhóm, kiểm tra nhóm trong cơ sở dữ liệu bằng [groups tài khoản] hoặc [id tài khoản], và đăng nhập lại để áp dụng cho shell. Lệnh đổi ID nhóm hiện tại trong khi vẫn đăng nhập là newgrp.
🔢 FAQ & nội dung đề xuất
Tạo tài khoản
Linux: lệnh useradd & lệnh passwd
Các lệnh tạo tài khoản người dùng mới và đặt mật khẩu cho tài khoản đó.
Xóa tài khoản
[Linux] Lệnh userdel: lệnh xóa tài khoản người dùng
Lệnh xóa tài khoản người dùng không còn dùng và dọn luôn thư mục home.
Thời hạn mật khẩu
Lệnh chage trên Linux
Lệnh kiểm tra và thay đổi thời hạn sử dụng và ngày hết hạn mật khẩu của tài khoản người dùng.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.