Lệnh who trong Linux — Xem thông tin người dùng đang đăng nhập

Bạn vui lòng cung cấp tên lệnh cụ thể vào chỗ {COMMAND_NAME} để mình có thể viết nội dung chính xác nhất nhé. Tuy nhiên, để bạn hình dung được phong cách, mình sẽ viết một bản demo mẫu với lệnh **htop**.

Bạn đã bao giờ cảm thấy lúng túng khi server đột ngột chậm lại mà không biết "thủ phạm" nào đang ngấu nghiến tài nguyên chưa nhỉ? Trong vai trò một Senior System Admin, mình đã từng phải thức trắng đêm chỉ để truy tìm một tiến trình chạy ngầm đang làm treo cả hệ thống VPS quan trọng. May mắn thay, mình luôn có một "trợ thủ" đắc lực bên cạnh. Vậy htop là gì? Thực chất, htop là một công cụ giám sát tài nguyên hệ thống trực quan và mạnh mẽ hơn rất nhiều so với lệnh top truyền thống. Bài viết này sẽ giúp bạn hiểu rõ cách dùng htop để kiểm soát mọi thứ trong tầm tay. Chúng ta sẽ cùng khám phá cách quản lý tiến trình Linux một cách chuyên nghiệp nhất, giúp bạn tối ưu hóa hiệu suất máy chủ một cách vô cùng dễ dàng. Chắc chắn bạn sẽ thấy việc theo dõi hệ thống trở nên thú vị hơn đúng không?

Tư khóa cần viết: Senior System Admin Vì bạn chưa cung cấp tên lệnh cụ thể trong phần `{COMMAND_NAME}`, tôi sẽ để trống nội dung chi tiết. Tuy nhiên, tôi đã thiết lập sẵn khung cấu trúc chuẩn xác theo đúng yêu cầu về giọng văn Technical Writer và định dạng HTML của bạn. Vui lòng cung cấp tên lệnh (ví dụ: `docker`, `nginx`, `kubectl`...) để tôi hoàn thiện nội dung. ---

Cần chuẩn bị gì trước khi dùng lệnh {COMMAND_NAME}?

  • Quyền truy cập: [Mô tả quyền: ví dụ, yêu cầu quyền sudo hoặc tài khoản root để thực thi các thay đổi hệ thống]
  • Hệ điều hành hỗ trợ: [Mô tả các distro: ví dụ, Ubuntu, Debian, CentOS hoặc macOS]
  • Gói phụ thuộc (Dependencies): [Mô tả các gói cần cài đặt kèm lệnh cài đặt cho từng distro]
  • Phiên bản tối thiểu: [Mô tả phiên bản phần mềm/hệ điều hành cần thiết]

Cú pháp lệnh who là gì?

Lệnh who hỗ trợ các dạng cú pháp sau trên hệ thống Linux/Unix:

who [OPTIONS] [FILE]

Các tùy chọn của lệnh who là gì?

Lệnh who cung cấp các tùy chọn phân loại theo chức năng hiển thị thông tin người dùng, trạng thái hệ thống và định dạng đầu ra.

Tùy chọn ngắn Tùy chọn dài Mô tả
-a --all who -a hiển thị tất cả thông tin, tương đương kết hợp các tùy chọn -b, -d, -l, -p, -r, -t, -T, -u cùng lúc.
-b --boot who -b hiển thị thời điểm hệ thống khởi động lần cuối.
-d --dead who -d hiển thị các tiến trình đã chết (dead processes).
-H --heading who -H in tiêu đề cột ở dòng đầu tiên của đầu ra.
-l --login who -l hiển thị các dòng đang chờ người dùng đăng nhập (login lines).
-m who -m chỉ hiển thị thông tin của người dùng đang thực thi lệnh, tương đương với who am i.
-p --process who -p hiển thị các tiến trình đang hoạt động được khởi chạy bởi init.
-q --count who -q chỉ hiển thị tên đăng nhập và tổng số người dùng đang đăng nhập.
-r --runlevel who -r hiển thị run level hiện tại của hệ thống.
-s --short who -s hiển thị đầu ra rút gọn gồm tên, dòng terminal và thời gian đăng nhập. Đây là định dạng mặc định.
-t --time who -t hiển thị lần cuối đồng hồ hệ thống được thay đổi.
-T --mesg who -T hiển thị trạng thái nhắn tin của terminal. Dấu + cho phép nhắn tin, dấu - chặn nhắn tin, dấu ? không xác định được trạng thái.
-u --users who -u liệt kê các người dùng hiện đang đăng nhập vào hệ thống kèm thông tin chi tiết.
-w --message who -w hiển thị trạng thái nhắn tin của terminal, tương đương với tùy chọn -T.
--lookup who --lookup thực hiện tra cứu DNS để chuyển đổi tên máy chủ từ địa chỉ IP của người dùng từ xa.
--version who --version hiển thị thông tin phiên bản của lệnh who rồi thoát.
--help who --help hiển thị hướng dẫn sử dụng ngắn gọn rồi thoát.

xem thêm: User and Permission Management

Cách sử dụng lệnh who để kiểm tra người dùng đang đăng nhập là gì?

Phần này trình bày các kịch bản thực tế để quản trị viên kiểm soát phiên làm việc của người dùng trên hệ thống.

who là gì? [Hiển thị danh sách người dùng hiện tại]

who
user1    tty7         2023-10-24 08:30 (:0)
admin    pts/0        2023-10-24 09:15 (192.168.1.15)

Lệnh hiển thị tên người dùng, loại terminal và thời gian đăng nhập. Trong thực tế, đây là bước đầu tiên để kiểm tra xem có người lạ nào đang truy cập hệ thống hay không.

who -u là gì? [Hiển thị thời gian chờ của phiên làm việc]

who -u
user1    tty7         2023-10-24 08:30 (:0)          .
admin    pts/0        2023-10-24 09:15 (192.168.1.15)

Tham số -u bổ sung thông tin về thời gian idle (nhàn rỗi) của mỗi phiên. Trên môi trường production, sysadmin sử dụng thông tin này để xác định các phiên làm việc bị treo hoặc không còn hoạt động để tiến hành ngắt kết nối.

who -q là gì? [Liệt kê nhanh danh sách tên người dùng]

who -q
user1 admin guest
wtmp curr

Lệnh chỉ hiển thị danh sách tên người dùng và kết thúc bằng thông tin tệp wtmp. Trong các kịch bản viết script automation, cách này giúp trích xuất nhanh danh sách username mà không cần xử lý chuỗi phức tạp từ output mặc định.

who | grep pts là gì? [Kiểm tra các kết nối từ xa qua SSH]

who | grep pts
admin    pts/0        2023-10-24 09:15 (192.168.1.15)
dev_user pts/1        2023-10-24 10:05 (10.0.0.5)

Kết hợp với pipe để lọc các phiên làm việc sử dụng pseudo-terminal (thường là kết nối SSH). Đây là kỹ thuật quan trọng giúp quản trị viên phân biệt giữa người dùng ngồi trực tiếp tại máy (tty) và người dùng truy cập từ xa qua mạng.

Lệnh who gặp lỗi hoặc không hiển thị đúng thông tin người dùng?

Trong quá trình quản trị hệ thống, người dùng thường gặp các vấn đề liên quan đến việc hiển thị thông tin phiên làm việc không chính xác hoặc thiếu quyền truy cập.

Lỗi không hiển thị thông tin người dùng khi chạy với quyền hạn thấp

who

Trong một số cấu hình bảo mật nghiêm ngặt, lệnh who có thể không trả về dữ liệu nếu tệp tin lưu trữ thông tin đăng nhập bị hạn chế quyền đọc.

Lỗi không hiển thị đủ chi tiết thời gian và thiết bị kết nối

who

Khi chỉ sử dụng lệnh mặc định, hệ thống có thể không cung cấp đủ thông tin về địa chỉ IP hoặc tên thiết bị (terminal) nếu các tham số mở rộng không được sử dụng.

Lỗi hiển thị thông tin người dùng ảo từ các tiến trình hệ thống

who
Lệnh có thể trả về các dòng dữ liệu không mong muốn từ các dịch vụ chạy ngầm hoặc các phiên làm việc giả lập, gây nhiễu thông tin quản trị viên cần tìm kiếm.

Quy trình thực tế dùng who trong quản lý truy cập hệ thống Linux?

Trong kịch bản quản trị server, lệnh who được sử dụng như một phần của quy trình kiểm soát an ninh và giám sát các phiên làm việc đang hoạt động.

Bước 1: Kiểm tra danh sách người dùng đang đăng nhập

who
user1     tty7         2023-10-27 08:30 (:0)
admin      pts/0        2023-10-27 09:15 (192.168.1.5)

Lệnh cho phép bạn xác định tên người dùng, loại terminal và thời gian bắt đầu phiên làm việc của họ.

Bước 2: Truy xuất thông tin chi tiết về thời gian đăng nhập và địa chỉ IP

who -u
user1     tty7         2023-10-27 08:30 (:0)        2542
admin      pts/0        2023-10-27 09:15 (192.168.1.5) 1205

Sử dụng tham số -u cho phép bạn xem thêm ID tiến trình (PID) của phiên làm việc để phục vụ việc quản lý hoặc ngắt kết nối khi cần thiết.

Bước 3: Kiểm tra lịch sử đăng nhập gần nhất để rà soát an ninh

last | head -n 5
admin    pts/0        192.168.1.5        Fri Oct 27 09:15   still logged in
user1    tty7         localhost          Fri Oct 27 08:30   still logged in

Kết hợp với lệnh last cho phép bạn đối chiếu giữa các phiên đang hoạt động hiện tại với lịch sử truy cập để phát hiện các hành vi đăng nhập bất thường.

Vì bạn chưa cung cấp tên lệnh cụ thể `{COMMAND_NAME}`, tôi sẽ viết một mẫu demo dựa trên lệnh `chown` (một lệnh cực kỳ phổ biến mà các Sysadmin mới làm việc trên VPS hay gặp lỗi). Khi bạn cung cấp lệnh cụ thể, tôi sẽ thực hiện đúng quy trình suy nghĩ nội bộ để đưa ra insight đặc thù. --- **Mẫu demo cho lệnh `chown`:**

Việc thực thi lệnh chown trên môi trường VPS thường phát sinh lỗi Permission denied nếu không có quyền quản trị cao nhất. Người dùng cần sử dụng sudo trước câu lệnh như sudo chown -R www-data:www-data /var/www/html để đảm bảo thay đổi có hiệu lực. Trong các trường hợp cấu hình Web Server, việc gán sai chủ sở hữu thư mục sẽ dẫn đến lỗi 403 Forbidden khi truy cập website. Quá trình chuyển đổi dữ liệu giữa các VPS cũ và mới cũng dễ gây ra sự không đồng nhất về UID/GID của user. Điều này yêu cầu kiểm tra kỹ danh sách user hiện có bằng lệnh id trước khi áp dụng thay đổi hàng loạt. Việc lạm dụng tham số -R trên các thư mục hệ thống quan trọng có thể làm thay đổi quyền truy cập của các tiến trình nền, gây mất ổn định hệ điều hành.

Tư khóa cần viết: System Administrator --- **Vui lòng cung cấp `{COMMAND_NAME}` để tôi hoàn thành nhiệm vụ chính xác nhất.**

Những câu hỏi thường gặp về lệnh who?

Dưới đây là các thắc mắc phổ biến nhất mà người dùng thường gặp khi bắt đầu sử dụng lệnh who để kiểm tra thông tin đăng nhập hệ thống.

Làm thế nào để xem danh sách tất cả người dùng đang đăng nhập?

Để liệt kê toàn bộ thông tin về các phiên làm việc hiện tại, bạn chỉ cần thực hiện lệnh who mà không kèm theo tham số nào.

who
user1    tty7         2023-10-27 08:30 (:0)
user2    pts/0        2023-10-27 09:15 (192.168.1.5)

Làm thế nào để biết người dùng đang đăng nhập từ địa chỉ IP nào?

Tham số -u cho phép bạn hiển thị thông tin chi tiết hơn, bao gồm cả thời gian đăng nhập và nguồn kết nối từ xa.

who -u
user2    pts/0        2023-10-27 09:15 (:0)

Làm thế nào để kiểm tra thông tin của một người dùng cụ thể?

Bạn có thể truyền tên người dùng làm đối số để lọc kết quả, giúp xác định xem một tài khoản cụ thể có đang hoạt động hay không.

who user1
user1    tty7         2023-10-27 08:30 (:0)

Làm thế nào để xem thông tin đăng nhập dưới dạng cột định dạng sẵn?

Sử dụng tham số -H để hiển thị các tiêu đề cột (header), giúp việc đọc dữ liệu trở nên trực quan và dễ dàng hơn.

who -H
NAME     LINE         TIME             COMMENT
user1    tty7         2023-10-27 08:30 (:0)

Làm thế nào để biết thời gian hệ thống được khởi động gần nhất?

Tham số -b cho phép bạn truy xuất thời gian hệ thống được boot (khởi động) thay vì thông tin người dùng.

who -b
system boot  2023-10-26 22:00

Làm thế nào để xem danh sách các phiên làm việc kèm theo ID tiến trình (PID)?

Sử dụng tham số -q để liệt kê tên người dùng và số lượng phiên làm việc đang hoạt động của họ.

who -q
user1 user2
2      1
Do bạn chưa cung cấp tên lệnh cụ thể ({COMMAND_NAME}) và các tham số ({PARAM_1}, {PARAM_2}), tôi sẽ viết một **bản mẫu (template)** chuẩn xác theo đúng yêu cầu về giọng văn, cấu trúc và định dạng HTML của bạn. Khi bạn cung cấp thông tin cụ thể, tôi sẽ hoàn thiện nội dung chính xác ngay lập tức. **Bản mẫu dành cho bạn:**

Lệnh {COMMAND_NAME} là một công cụ mạnh mẽ dùng để [định nghĩa công dụng cốt lõi của lệnh] trong môi trường Linux. Việc kết hợp linh hoạt giữa {PARAM_1} để [use case 1] và {PARAM_2} giúp bạn tối ưu hóa quy trình làm việc một cách vô cùng hiệu quả, đúng không nhỉ? Tất nhiên, việc nắm vững các tùy chọn này sẽ giúp bạn làm chủ hệ thống tốt hơn rất nhiều. Hy vọng những chia sẻ trên có thể hỗ trợ đắc lực cho công việc của bạn. Chúc bạn thành công!

--- **Ví dụ thực tế nếu lệnh là `ls` (với tham số `-l` và `-a`):**

Lệnh ls là một công cụ cơ bản dùng để liệt kê danh sách các tệp và thư mục trong hệ thống Linux. Bạn có thể sử dụng tham số -l để xem chi tiết thuộc tính tệp hoặc kết hợp với -a để hiển thị cả các tệp ẩn một cách vô cùng nhanh chóng, đúng không nhỉ? Tất nhiên, việc thành thạo các tùy chọn này sẽ giúp bạn quản lý dữ liệu thuận tiện hơn rất nhiều. Hy vọng những chia sẻ trên có thể hỗ trợ đắc lực cho bạn. Chúc bạn thành công!

**Hãy gửi cho tôi: `{COMMAND_NAME}`, `{PARAM_1}`, `{PARAM_2}` và `[who]` để tôi viết bản cuối cùng nhé!**