Bạn đã bao giờ tự hỏi liệu các trang tài liệu hướng dẫn (man page) trên hệ điều hành Linux hoặc macOS của mình lớn đến mức nào chưa? Một số man page dường như quá dài để đọc hết, trong khi những trang khác lại chỉ cung cấp rất ít thông tin chi tiết. Kích thước của chúng có thể nói lên điều gì về cấu trúc, các chương trình quan trọng hay thậm chí là triết lý phát triển của hệ thống mà chúng ta đang sử dụng? Với vai trò là một chuyên gia công nghệ, tôi đã khám phá câu hỏi này và nhận thấy những điều khá thú vị.
Cách Tìm Các Trang Man Page Lớn Nhất
Để tìm ra các trang man page “khổng lồ” nhất trên hệ thống Unix-like, tôi đã sử dụng một chuỗi lệnh dòng lệnh hiệu quả. Đây là cách thực hiện:
du -a /usr/share/man | fgrep '.' | sort -rn | head -n 20
Hãy cùng phân tích chi tiết từng phần của lệnh này để hiểu rõ hơn về cách nó hoạt động:
-
du -a /usr/share/man
: Lệnhdu
(disk usage) được dùng để hiển thị mức độ sử dụng không gian đĩa của các file và thư mục. Tùy chọn-a
cho phép liệt kê tất cả các file và thư mục trong hệ thống phân cấp, bao gồm cả các file con, cùng với kích thước khối của chúng. Mặc dù kích thước khối không hoàn toàn giống với kích thước file tuyệt đối, nhưng nó đủ chính xác cho mục đích so sánh này.- Các trang man page mặc định thường được lưu trữ trong một cấu trúc thư mục phân cấp bắt đầu từ
/usr/share/man
. Bên trong thư mục này là các thư mục con cho từng phần (section) của man page, ví dụ như/usr/share/man/man1/grep.1
hoặc/usr/share/man/man4/ip.4
. - Bạn có thể tìm thấy các vị trí lưu trữ man page khác bằng lệnh
manpath
. Tuy nhiên, để có trải nghiệm “stock” nhất, tôi đã giới hạn tìm kiếm trong/usr/share/man
vì đây là nơi chứa phần lớn các lệnh tiêu chuẩn.
- Các trang man page mặc định thường được lưu trữ trong một cấu trúc thư mục phân cấp bắt đầu từ
-
fgrep '.'
: Đầu ra của lệnhdu
thường bao gồm cả thư mục. Lệnhfgrep '.'
(hoặcgrep .
) được sử dụng để lọc bỏ các dòng chỉ chứa tên thư mục, chỉ giữ lại các dòng chứa tên file (có dấu chấm trong phần mở rộng, ví dụ.1
,.4
, v.v.). -
sort -rn
: Phần này của chuỗi lệnh chịu trách nhiệm sắp xếp kết quả.- Tùy chọn
-r
(reverse) đảo ngược thứ tự sắp xếp, đưa các giá trị lớn nhất lên đầu. - Tùy chọn
-n
(numeric) đảm bảo rằng việc sắp xếp được thực hiện dựa trên giá trị số học, thay vì sắp xếp theo chuỗi ký tự. Điều này hiệu quả vì đầu ra củadu
luôn hiển thị kích thước file ở trường đầu tiên.
- Tùy chọn
-
head -n 20
: Cuối cùng, lệnhhead -n 20
sẽ hiển thị 20 dòng đầu tiên của kết quả đã được sắp xếp, tức là 20 trang man page lớn nhất. Bạn có thể thay đổi số lượng này hoặc sử dụng một trình phân trang nhưless
để duyệt toàn bộ danh sách.
Kết Quả Đáng Ngạc Nhiên Trên macOS và Ubuntu
Tôi đã thử nghiệm lệnh này trên hai hệ điều hành Unix-like khá “nguyên bản”: macOS 15 và Ubuntu 22, và kết quả cho thấy sự khác biệt đáng kể.
Các Trang Man Page Lớn Nhất Trên macOS
Trên macOS, tôi đã ghi nhận được danh sách các trang man page lớn nhất như sau:
Danh sách các file man page lớn nhất trên macOS, bao gồm perltoc.1, perlapi.1, perlfunc.1, và bash.1.
Có thể thấy rõ, các trang man page lớn nhất trên macOS là perltoc
, perlapi
, perlfunc
, postconf
, và perldiag
. Một lượng lớn tài liệu liên quan đến Perl! Điều này cho thấy sự tập trung đáng kể vào ngôn ngữ Perl trên hệ thống Apple.
Các Trang Man Page Lớn Nhất Trên Ubuntu
Trong khi đó, trên Ubuntu, kết quả lại rất khác biệt:
Danh sách các file man page lớn nhất trên Ubuntu, bao gồm bash.1.gz, openvpn.8.gz, git-config.1.gz, và proc.5.gz.
Một điểm đáng chú ý là Ubuntu sử dụng định dạng nén .gz
cho các trang man page của mình. Các file văn bản thường có thể nén rất hiệu quả, giúp tiết kiệm đáng kể không gian lưu trữ. Các trang lớn nhất trên Ubuntu ít tập trung vào Perl hơn mà thay vào đó bao gồm các tiện ích mạng và quản trị hệ thống, như openvpn.8.gz
, git-config.1.gz
, và proc.5.gz
.
Những Bài Học Giá Trị Từ Kích Thước Man Page
Việc khám phá các trang man page lớn nhất không chỉ là một bài tập thú vị về dòng lệnh mà còn tiết lộ nhiều điều hữu ích về cách Linux và macOS được xây dựng, cũng như những chương trình nào được coi là quan trọng và phức tạp nhất.
Perl Được Tài Liệu Hóa Rất Toàn Diện
Trên macOS, 4 trong số 5 trang man page lớn nhất có liên quan đến Perl. Tôi đã kiểm tra tổng số trang man page liên quan đến Perl bằng lệnh find /usr/share/man -name 'perl*'
: con số đáng kinh ngạc là 214 trang! Gần một phần ba trong số này là các trang “delta”, chẳng hạn như trang bạn nhận được từ man perl583delta
:
Trang man page của perl583delta hiển thị các phần như Thay đổi không tương thích và Cải tiến cốt lõi.
Những trang này tương đương với ghi chú phát hành (release notes) và có mặt cho nhiều phiên bản nhỏ của ngôn ngữ. Đây là một trong những điều đầu tiên tôi học được qua quá trình này: một số trang man page không trực tiếp ánh xạ tới một lệnh hoặc chương trình đã cài đặt.
Ngược lại, trên hệ thống Ubuntu của tôi, chỉ có sáu trang man page có tên bắt đầu bằng perl*
. Điều này không thực sự liên quan đến phiên bản Perl được cài đặt, vì trên macOS tôi thấy phiên bản 5.34.1 và trên Ubuntu là 5.34.0, sự khác biệt không đáng kể để tạo ra một lượng tài liệu lớn như vậy. Có lẽ điều này phản ánh sự ưu tiên trong các gói được cài đặt mặc định và mức độ hỗ trợ tài liệu mà mỗi hệ điều hành cung cấp cho Perl.
zsh Quá Lớn Đến Mức Phải Chia Nhỏ Man Page
Trên macOS, tôi sử dụng zsh, và hóa ra shell này có sự hiện diện đáng kể trong danh sách các trang man page lớn nhất. Trong top 10 có một trang mang tên “zshcompsys”, và top 20 cũng bao gồm “zshcontrib” và “zshmodules”. Tương tự như Perl, zsh chia tài liệu hướng dẫn của mình thành các trang riêng biệt, dù “chỉ” có 16 trang.
Đáng chú ý nhất, trang zshcompsys
có dung lượng khổng lồ 5.000 dòng, chuyên giải thích cách hoạt động của hệ thống tự động hoàn thành (tab-complete) của zsh. Hệ thống này cực kỳ mạnh mẽ và có thể cấu hình cao, nên việc trang man page của nó lớn đến vậy là điều hoàn toàn dễ hiểu.
Điều này tạo ra sự tương phản với các shell khác. Trang man page chính của bash vẫn rất lớn, đứng thứ 8 trong danh sách với gần 5.000 trang. Nhưng chỉ có một trang tài liệu khác liên quan đến bash là bashbug
, và nó rất nhỏ, mặc dù nó tài liệu hóa một lệnh thú vị cho phép bạn báo cáo lỗi trực tiếp từ dòng lệnh. Các shell khác như tcsh
(thứ 9) và ksh
(thứ 20) cũng có mặt trong danh sách, nhưng mỗi shell này chỉ giới hạn ở một trang man page duy nhất.
Trong khi đó, trên Linux, tôi sử dụng bash và shell này có trang man page lớn nhất trên toàn hệ thống của tôi. Điều này hợp lý, vì tôi không cài đặt zsh, và tôi cũng kỳ vọng các trang man page của shell sẽ nằm trong số những trang lớn nhất.
Curl: Chương Trình “Bình Thường” Phức Tạp Nhất
Đây chính là nơi hành trình khám phá của tôi bắt đầu, với câu hỏi liệu có chương trình nào khác phức tạp và được tài liệu hóa kỹ lưỡng như curl
hay không. Lệnh curl
có rất nhiều tùy chọn để xử lý tất cả các tính năng khác nhau của HTTP, đến mức trang man page của nó kéo dài khoảng 4.500 dòng trên Linux và khoảng 6.500 dòng trên macOS. Sự khác biệt này có thể là do các phiên bản curl khác nhau (8.7.1 trên macOS, 7.81.0 trên Ubuntu), nhưng dù sao đi nữa, đây vẫn là một cuốn sổ tay khổng lồ.
Khi các trang man page đạt đến kích thước này, chúng bắt đầu trở nên khó sử dụng. Trong trường hợp của curl
, tôi nghĩ có hai lựa chọn thay thế tốt hơn. Đầu tiên, có tldr
, một giải pháp thay thế đơn giản hơn cho man
tập trung vào các ví dụ sử dụng. Dưới đây là cách tldr
trình bày về curl
:
Trang tldr cho curl hiển thị mô tả ngắn gọn, sau đó là các ví dụ sử dụng lệnh.
32 dòng đó hiệu quả hơn rất nhiều so với 6.000 dòng trong trang man page! Trang tldr
cũng đề cập đến lựa chọn thay thế tốt thứ hai: phiên bản trực tuyến của trang man page của curl
trên website chính thức.
macOS Tập Trung Vào Section 1 Hơn Ubuntu
Trang man page của chính lệnh man
mô tả Section 1 là “General Commands Manual” (Sổ tay Lệnh Chung). Trên macOS, 18 trong số 20 trang man page lớn nhất đều nằm trong Section 1. Ngược lại, các trang man page lớn nhất của Ubuntu đa dạng hơn nhiều, được phân bổ trong các Section 1, 3 (Library Functions – Hàm Thư viện), 5 (File Formats – Định dạng File), và 8 (System Manager’s Manual – Sổ tay Quản lý Hệ thống).
Trang man page Section 8 của openvpn
là trang lớn thứ hai trên hệ thống Ubuntu của tôi. Nó thậm chí còn cảnh báo người đọc về độ dài của chính nó!
Trang man page của openvpn giải thích rằng nó chứa rất nhiều tùy chọn vì công cụ này rất linh hoạt.
Điều này có lẽ phản ánh đối tượng người dùng chính của mỗi hệ thống. macOS hướng đến thị trường người dùng phổ thông rộng lớn hơn, vì vậy ngay cả các trang man page trong terminal của nó cũng được định hướng theo các lệnh dành cho người dùng cuối. Trong khi đó, Linux thu hút các lập trình viên, quản trị viên hệ thống và chuyên gia mạng, do đó các trang man page cấp thấp hơn của nó toàn diện hơn rất nhiều.
Kết Luận
Những gì bắt đầu chỉ là một câu hỏi ngẫu nhiên đã phát triển thành một cuộc khám phá các “hang thỏ” trong thế giới Unix mà tôi chưa từng dấn thân vào trước đây. Tôi chỉ biết những điều cơ bản nhất về man page, nhưng sự hiểu biết của tôi về các section còn hạn chế, và tôi hoàn toàn không biết về lệnh manpath
. Quan trọng hơn, tôi chưa bao giờ thực sự tìm hiểu về thành phần của các trang man page trên hệ thống của mình, và tôi chắc chắn không nhận ra chúng dành nhiều không gian đến vậy cho Perl hay git-config
.
Bài tập này đã gợi lại cho tôi sự hoài niệm về những ngày đầu với Linux, khi mọi thứ đều tươi mới để khám phá. Sau nhiều năm — thậm chí hàng thập kỷ — sử dụng, thật dễ dàng trở nên tự mãn và ngừng đặt câu hỏi về hệ thống cơ bản. Tôi đã được nhắc nhở rằng việc “hé nhìn phía sau bức màn” có thể là một cách học hỏi hiệu quả, và tôi sẽ cố gắng nuôi dưỡng bản tính tò mò đó nhiều hơn trong tương lai. Hãy thử áp dụng những kiến thức này để khám phá hệ điều hành của bạn và chia sẻ những phát hiện thú vị với chúng tôi trong phần bình luận!