Lệnh man: cách dùng và tùy chọn, số mục và tìm kiếm bằng man -k

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8man-db 2.9Tài khoản rootDebian 12 · man-db 2.11 tài khoản thường
Lệnh shellman, whatis, aproposVị trí/usr/bin/man

Khi cần xem cách dùng một lệnh hay một tệp cấu hình trên máy chủ Linux, hãy mở trang hướng dẫn bằng lệnh man, còn khi không biết tên thì tìm trong phần mô tả ngắn bằng man -k. Khi tìm trang passwd trên máy chủ AlmaLinux 9 và Debian 12, Debian 12 có cả trang lệnh ở mục 1 lẫn trang định dạng tệp ở mục 5, còn AlmaLinux 9 không có trang ở mục 5.

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 máy chủ và địa chỉ kết nối trong trình mô phỏng là giá trị ví dụ.

1️⃣ Cách dùng cơ bản của lệnh man

  • ↪️ Mở trang, di chuyển màn hình, trang không tồn tại

Gõ tên lệnh sau man thì trang hướng dẫn của lệnh đó sẽ mở ra. man chuyển trang cho một chương trình phân trang (pager) để hiển thị từng màn hình, nên sau khi chạy sẽ không quay lại dấu nhắc ngay. Pager được chọn qua biến môi trường MANPAGER hoặc PAGER, và nếu cả hai đều trống thì dùng less.

Nếu chuyển kết quả qua pipe thì chỉ có văn bản được in ra, không có pager. Khi lấy 12 dòng đầu của [man ls] bằng head, dòng đầu tiên có LS(1), tiếp theo lần lượt là các phần NAME, SYNOPSIS và DESCRIPTION.

man ls | head -n 12
LS(1)                            User Commands                           LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci-
       fied.

Số 1 trong ngoặc của LS(1) ở dòng đầu tiên là số của mục chứa trang này.

Trong một trang, [Space] hiển thị màn hình tiếp theo, còn [/từ] rồi Enter dùng để tìm một từ. [n] chuyển đến vị trí tiếp theo có cùng từ đó, và [q] thoát man.

Nếu gõ một tên không tồn tại thì lỗi [No manual entry for] xuất hiện, và mã thoát là 16.

man no-such-cmd9
No manual entry for no-such-cmd9
echo $?
16

Phần EXIT STATUS của trang man mô tả 16 là giá trị khi không tìm thấy ít nhất một trong các trang, tệp hoặc từ khóa. Lỗi cách dùng là 1, nên script có thể xử lý riêng hai trường hợp.

2️⃣ Số mục của man

  • ↪️ 1 lệnh, 5 tệp cấu hình, 8 lệnh quản trị

Khi các trang cùng tên nằm ở nhiều mục, man tìm theo thứ tự mục đã định và chỉ mở trang đầu tiên tìm thấy. Các mục được đánh số từ 1 đến 9, và những mục hay mở nhất khi làm việc trên máy chủ là mục 1 về lệnh, mục 5 về định dạng tệp và mục 8 về lệnh quản trị.

MụcCác trang trong mụcVí dụ thấy trên máy chủ AlmaLinux 9.8
1Chương trình thực thi và lệnh shellls, passwd, crontab, man
2Lời gọi hệ thống (hàm do kernel cung cấp)
3Hàm thư viện
4Tệp đặc biệt (thường nằm dưới /dev)
5Định dạng tệp và quy ước, ví dụ: /etc/passwdcrontab
6Trò chơi
7Khác (gói macro và quy ước)
8Lệnh quản trị hệ thống, thường dành cho rootuseradd, mandb
9Thủ tục của kernel (không chuẩn)

crontab có trang ở hai mục vì lệnh và định dạng tệp cấu hình mang cùng một tên. Khi kiểm tra bằng [man -f crontab], dòng của mục 1 và mục 5 cùng xuất hiện.

man -f crontab
crontab (1)          - maintains crontab files for individual users
crontab (5)          - files used to schedule the execution of programs

Chạy [man crontab] không kèm số mục sẽ mở trang lệnh crontab ở mục 1. Để xem định dạng của tệp lịch tác vụ, hãy ghi 5 trước tên.

man 5 crontab | head -n 4
CRONTAB(5)                       File Formats                       CRONTAB(5)

NAME
       crontab - files used to schedule the execution of programs

Dòng đầu tiên đổi thành CRONTAB(5) và File Formats, và dòng NAME cũng hiện mô tả tệp lịch tác vụ thay cho mô tả lệnh.

Nếu mục được chỉ định không có trang mang tên đó thì sẽ báo lỗi. Trên máy chủ AlmaLinux 9.8, khi chạy [man 5 passwd] để xem định dạng tệp /etc/passwd, lỗi báo rằng mục 5 không có trang đã xuất hiện.

man 5 passwd
No manual entry for passwd in section 5

Trên máy chủ Debian 12, [man -f passwd] in ra cả dòng passwd của mục 5. Mục nào có trang còn tùy vào các tài liệu hướng dẫn được cài trên máy chủ, vì vậy hãy kiểm tra bằng [man -f] trước khi thêm số mục.

man -f passwd
passwd (1)           - change user password
passwd (1ssl)        - OpenSSL application commands
passwd (5)           - the password file

Mục 8 chứa các lệnh quản trị chủ yếu do tài khoản root chạy, chẳng hạn useradd dùng để tạo tài khoản.

man -f useradd
useradd (8)          - create a new user or update default new user information

3️⃣ Tùy chọn của lệnh man và tìm kiếm bằng -k, -f

  • ↪️ whatis, apropos và vị trí tệp bằng man -w

[man -f] in mô tả một dòng của các trang cùng tên và hoạt động giống whatis. Trên máy chủ AlmaLinux 9.8, [man -f passwd] và [whatis passwd] in ra cùng hai dòng.

man -f passwd
passwd (1)           - update user's authentication tokens
passwd (1ossl)       - OpenSSL application commands

Dòng 1ossl là trang của một lệnh OpenSSL dùng chung tên passwd.

Khi không biết tên, hãy dùng [man -k] để tìm trong tên trang và mô tả ngắn. Lệnh này hoạt động giống apropos, và từ khóa được đọc như một biểu thức chính quy.

man -k '^passwd'
passwd (1)           - update user's authentication tokens
passwd (1ossl)       - OpenSSL application commands

^ nghĩa là đầu dòng nên chỉ những dòng bắt đầu bằng passwd được in ra. Cũng có thể tìm bằng một từ trong phần mô tả: [man -k 'directory contents'] tìm thấy các trang dir và vdir cùng với ls.

man -k 'directory contents'
dir (1)              - list directory contents
ls (1)               - list directory contents
vdir (1)             - list directory contents

[man -k] chỉ tìm trong mô tả ngắn của phần NAME nên không thể tìm trang theo tên tùy chọn hay một từ trong nội dung. [man -K], vốn tìm cả trong nội dung, đọc lần lượt mọi trang nên mất nhiều thời gian.

Nếu không có từ cần tìm thì [nothing appropriate] xuất hiện, và mã thoát là 16.

man -k no-such-word9
no-such-word9: nothing appropriate.
echo $?
16

[man -w] chỉ in vị trí của tệp nguồn mà không mở trang.

man -w ls
/usr/share/man/man1/ls.1.gz
man -w 5 crontab
/usr/share/man/man5/crontab.5.gz

Hai tệp nằm trong thư mục man1 và man5 dưới /usr/share/man, và con số trong tên thư mục trùng với số mục. Tệp trang 1ossl, tìm bằng [man -w 1ossl passwd], cũng nằm trong thư mục man1, giống mục 1.

Các tùy chọn được gom vào hai tab bên dưới.

Tùy chọnSao chépMô tả
-f, --whatisIn mô tả một dòng của các trang cùng tên. Giống whatis
-k, --aproposTìm trong tên trang và mô tả ngắn. Giống apropos
-w, --where, --path, --locationChỉ in vị trí của tệp nguồn mà không mở trang
-a, --allIn lần lượt mọi trang có tên khớp
Tùy chọnSao chépMô tả
-K, --global-aproposTìm một từ trong nội dung của mọi trang. Mất nhiều thời gian
-S, -s, --sectionsdanh sáchChỉ định các mục cần tìm và thứ tự của chúng bằng danh sách phân tách bởi dấu phẩy hoặc dấu hai chấm
-P, --pagerpagerChỉ định pager dùng để hiển thị trang. Mặc định là less
-M, --manpathđường dẫnChỉ định đường dẫn tài liệu hướng dẫn dùng để tìm trang
-L, --localelocaleChỉ định locale dùng cho lần chạy này
-l, --local-fileHiển thị tệp được chỉ định như một trang mà không tìm trong tài liệu hướng dẫn của hệ thống
-u, --updateCập nhật bộ đệm chỉ mục của các trang đã cài
-V, --versionIn thông tin phiên bản

🔲 Trình mô phỏng lệnh man

Trong trình mô phỏng bên dưới, có thể mở trang bằng [man ls] và chuyển màn hình bằng các chip [Space], [/list], [n], [q]. Trên cùng máy chủ ảo đó, có thể thêm số mục như [man 5 crontab] hoặc gõ [man -f], [man -k], [man -w].

Trình mô phỏng lệnh manman-db 2.9 · Tài khoản root
[root@server work]#
Chỉ chạy trong trình duyệt. Ở màn hình trang, hãy nhấn các chip Space, /từ, n, q, và dùng ↑↓ trên bàn phím để gọi lại các lệnh đã gõ trước đó.

4️⃣ Cấu trúc của trang man

  • ↪️ Đọc NAME, SYNOPSIS, DESCRIPTION, OPTIONS

Trang man được chia thành các phần có tiêu đề viết hoa. Khi chỉ lấy tiêu đề bằng grep rồi so sánh, trang ls đặt mô tả tùy chọn bên trong DESCRIPTION, còn trang crontab có phần OPTIONS riêng.

man ls | grep -E '^[A-Z]+( [A-Z]+)*$'
NAME
SYNOPSIS
DESCRIPTION
AUTHOR
REPORTING BUGS
COPYRIGHT
SEE ALSO
man crontab | grep -E '^[A-Z]+( [A-Z]+)*$'
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
CAVEATS
SEE ALSO
FILES
STANDARDS
DIAGNOSTICS
AUTHOR

Tên các phần hơi khác nhau giữa các trang, và những phần hay gặp như sau.

PhầnNội dung
NAMETên và mô tả một dòng (dòng mà man -f và man -k in ra)
SYNOPSISDạng viết của lệnh
DESCRIPTIONMô tả hoạt động (trang ls đặt cả mô tả tùy chọn trong phần này)
OPTIONSMỗi tùy chọn một đoạn
EXIT STATUSÝ nghĩa của mã thoát
FILESCác tệp mà lệnh đọc hoặc ghi
SEE ALSOCác trang nên xem thêm

Các ký hiệu trong SYNOPSIS tuân theo quy tắc do trang man đặt ra. Phần trong ngoặc vuông có thể bỏ qua. Các tùy chọn ngăn cách bằng dấu gạch đứng (|) không thể dùng cùng nhau, và đối số có ba dấu chấm (...) có thể ghi nhiều lần.

SYNOPSIS của ls là ls [OPTION]... [FILE]..., nên cả tùy chọn lệnh lẫn đối số dòng lệnh như tên tệp đều có thể bỏ hết hoặc ghi nhiều lần.

[--help] là bản tóm tắt cách dùng do chính chương trình in ra, nên hiện thẳng trên terminal mà không qua pager. Usage ở dòng đầu của [ls --help] có cùng dạng với SYNOPSIS, và toàn bộ dài 121 dòng, ngắn hơn 245 dòng của [man ls].

ls --help | head -n 3
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Trang man còn có những phần mà [--help] không có, như AUTHOR và SEE ALSO. Khi cần xem nhanh một tùy chọn thì dùng [--help], còn khi cần phần giải thích chia theo từng phần, như định dạng tệp cấu hình hay mã thoát, thì mở man.

🔢 FAQ & nội dung đề xuất

cd là lệnh tích hợp sẵn trong bash, nên [man cd] dẫn đến trang gom toàn bộ các lệnh tích hợp. Trên máy chủ AlmaLinux 9.8, [type cd] in ra [cd is a shell builtin], còn [man -w cd] in ra vị trí của tệp builtins.1.gz. Cách dùng của từng lệnh tích hợp có thể xem ngay bằng [help cd].

Chạy [man -a tên] sẽ mở lần lượt các trang có tên khớp. Khi chỉ cần xem vị trí tệp thì ghi thêm [-w]. Trên máy chủ AlmaLinux 9.8, chạy [man -w -a crontab] in ra hai dòng là các tệp crontab trong thư mục man1 và man5.

Chỉ mục mà [man -k] và [man -f] tìm kiếm do mandb tạo và cập nhật. Vì vậy trang chưa được đưa vào chỉ mục sẽ không xuất hiện trong kết quả tìm kiếm, và chỉ mục được tạo lại bằng cách chạy [mandb] với tài khoản root.

ℹ️ 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á.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 8   +   5   =