Trong hành trình khám phá các hệ điều hành Unix-like như Linux và macOS, đôi khi chúng ta bắt gặp những tài liệu hướng dẫn (man pages) dường như dài vô tận, trong khi số khác lại cực kỳ ngắn gọn. Sự khác biệt về kích thước này không chỉ đơn thuần là thông tin, mà còn có thể tiết lộ nhiều điều thú vị về cấu trúc, triết lý thiết kế của hệ thống và mức độ phức tạp của các công cụ. Bài viết này sẽ hướng dẫn bạn cách xác định những man pages “khổng lồ” nhất và cùng nhau phân tích ý nghĩa đằng sau chúng, giúp bạn hiểu sâu hơn về thế giới dòng lệnh đầy quyền năng.
Cách tìm các Man Pages lớn nhất trên hệ thống của bạn
Để bắt đầu cuộc săn lùng những man pages đồ sộ này, chúng ta sẽ sử dụng một chuỗi lệnh dòng lệnh đơn giản nhưng hiệu quả. Đây là câu lệnh đã được sử dụng để tổng hợp dữ liệu cho bài viết này:
du -a /usr/share/man | fgrep '.' | sort -rn | head -n 20
Hãy cùng phân tích từng phần của câu lệnh này để hiểu rõ cách nó hoạt động:
- 
du -a /usr/share/man:du(disk usage) là lệnh hiển thị dung lượng đĩa mà các tệp và thư mục đang chiếm dụng.-alà tùy chọn cho phépduliệt kê tất cả các tệp và thư mục trong hệ thống phân cấp, cùng với kích thước khối (block size) của chúng. Mặc dù kích thước khối không hoàn toàn giống kích thước tệp, nhưng nó đủ chính xác cho mục đích so sánh này./usr/share/manlà thư mục mặc định chứa phần lớn các man pages “gốc” trên các hệ thống Unix-like. Các man pages được tổ chức theo cấu trúc phân cấp, với các thư mục con cho từng phần (section) của tài liệu (ví dụ:man1cho các lệnh chung,man4cho các giao diện hạt nhân). Bạn có thể dùng lệnhmanpathđể liệt kê tất cả các vị trí lưu trữ man pages khác trên hệ thống của mình.
 - 
| fgrep '.':|(pipe) dùng để chuyển đầu ra của lệnh trước đó làm đầu vào cho lệnh tiếp theo.fgrep '.'là một cách đơn giản để lọc bỏ các thư mục mà lệnhducũng báo cáo. Bằng cách tìm kiếm ký tự.(thường có trong tên tệp của man page nhưgrep.1,ip.4), chúng ta có thể tập trung vào các tệp man page riêng lẻ.
 - 
| sort -rn:sortlà lệnh sắp xếp các dòng văn bản.-r(reverse) sắp xếp theo thứ tự ngược lại, tức là từ lớn nhất đến nhỏ nhất.-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 của trường đầu tiên (kích thước tệp dodubáo cáo).
 - 
| head -n 20:headlà lệnh hiển thị phần đầu của tệp.-n 20chỉ định rằng chúng ta muốn xem 20 dòng đầu tiên, tức là 20 man pages lớn nhất. Bạn có thể thay đổi số này hoặc sử dụng một trình xem nhưlessđể khám phá toàn bộ danh sách.
 
Những Man Pages lớn nhất là gì?
Để có cái nhìn đa chiều, chúng ta sẽ xem xét kết quả trên hai hệ điều hành Unix-like phổ biến: macOS 15 và Ubuntu 22.
Trên macOS:
Đây là danh sách các man pages lớn nhất mà tôi tìm thấy trên macOS:
Danh sách các trang man page lớn nhất trên macOS, bao gồm perltoc.1, perlapi.1, perlfunc.1 và bash.1, hiển thị kích thước và đường dẫn.
Kết quả cho thấy phần lớn các man pages lớn nhất trên macOS đều liên quan đến Perl, bao gồm perltoc, perlapi, perlfunc, postconf và perldiag. Rõ ràng, Perl được tài liệu hóa rất kỹ lưỡng trên hệ thống này.
Trên Ubuntu:
Kết quả trên Ubuntu lại có sự khác biệt đáng kể:
Giao diện dòng lệnh Linux với dấu nhắc bash, minh họa môi trường làm việc của quản trị viên hệ thống.
Có thể thấy rằng Ubuntu nén các man pages của mình bằng gzip, giúp tiết kiệm không gian lưu trữ hiệu quả hơn. Danh sách các trang lớn nhất í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ững điều chúng ta học được từ các Man Pages lớn nhất
Việc đọc và phân tích những man pages “khổng lồ” này không chỉ giúp chúng ta nắm bắt thông tin chuyên sâu mà còn hé lộ nhiều điều thú vị về thiết kế hệ thống và các chương trình phổ biến.
Perl được tài liệu hóa toàn diện một cách đáng kinh ngạc
Trên macOS, 4 trong số 5 man pages lớn nhất có liên quan đến Perl. Khi kiểm tra tổng số man pages của Perl, tôi phát hiện có tới 214 trang bắt đầu bằng perl*! Gần một phần ba trong số đó là các trang “delta”, ví dụ như man perl583delta:
Trang man 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, minh họa tài liệu cập nhật của Perl.
Những trang này tương đương với các ghi chú phát hành (release notes), được tạo 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: một số man pages 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 Ubuntu, chỉ có sáu man pages liên quan đến Perl. Điều này không phải do phiên bản Perl khác nhau (macOS chạy 5.34.1, Ubuntu chạy 5.34.0), mà có thể do cách đóng gói và tài liệu hóa khác nhau giữa các bản phân phối.
Zsh quá phức tạp, phải chia thành nhiều trang Man Page nhỏ hơn
Trên macOS, tôi sử dụng zsh, và shell này cũng có nhiều đại diện trong danh sách. Trong top 10 có zshcompsys, và top 20 bao gồm cả zshcontrib và zshmodules. Giống 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, tuy nhiên “chỉ” có 16 trang.
Trang zshcompsys dài tới 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 hoàn thành 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 như vậy là điều dễ hiểu.
Giao diện Bash shell trên Ubuntu, thể hiện môi trường làm việc dòng lệnh quen thuộc của người dùng Linux.
Điều này trái ngược 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à dài gần 5.000 dòng. Tuy nhiên, chỉ có một trang man page khác liên quan đến bash là bashbug, và nó rất nhỏ, mặc dù tài liệu hóa một lệnh thú vị cho phép bạn gửi báo cáo lỗi từ dòng lệnh. Các shell khác như tcsh (#9) và ksh (#20) cũng có mặt, 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, bash thường là shell mặc định và man page của nó là trang lớn nhất tổng thể trên hệ thống của tôi, một kết quả hợp lý khi không có zsh được cài đặt.
Curl là chương trình “bình thường” phức tạp nhất
Câu hỏi ban đầu của tôi là liệu có chương trình nào khác phức tạp và được tài liệu hóa tốt như curl hay không. Lệnh curl có vô số tùy chọn để xử lý tất cả các tính năng khác nhau của HTTP, đến nỗi 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 có thể 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, đây cũng là một tài liệu khổng lồ.
Khi các man pages đạ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. Thứ nhất, có tldr, một lựa chọn thay thế đơn giản hơn cho man tập trung vào các ví dụ sử dụng. Đây là những gì tldr hiển thị cho curl:
Trang tldr cho lệnh curl hiển thị mô tả ngắn gọn và các ví dụ sử dụng cơ bản, minh họa sự tiện lợi so với man page truyền thống.
Chỉ 32 dòng này hiệu quả hơn rất nhiều so với 6.000 dòng trong 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 man page curl.
macOS tập trung hơn vào Section 1 (Lệnh chung)
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 man pages lớn nhất nằm trong Section 1. Ngược lại, các man pages lớn nhất của Ubuntu đa dạng hơn nhiều, phân bổ trên các Section 1, 3 (Library Functions – Hàm Thư viện), 5 (File Formats – Định dạng Tệp), và 8 (System Manager’s Manual – Sổ tay Quản lý Hệ thống).
Trang man page của openvpn trong Section 8 là trang lớn thứ hai trên hệ thống 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 của openvpn giải thích rằng công cụ này có nhiều tùy chọn do tính linh hoạt cao, cùng với cảnh báo về độ dài tài liệu.
Đ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 tiêu dùng rộng lớn hơn, vì vậy ngay cả các man pages terminal của nó cũng được định hướng theo các lệnh dành cho người dùng cuối. Linux thu hút các lập trình viên, quản trị viên hệ thống và điều hành mạng, vì vậy các man pages cấp thấp hơn của nó toàn diện hơn.
Hơn cả, tôi học được cách tò mò trở lại
Điều bắt đầu như một câu hỏi thoáng qua mà tôi tự hỏi bản thân, đã phát triển thành một cuộc khám phá những “hang thỏ” của Unix mà tôi chưa từng dấn thân vào trước đây. Tôi biết rất ít về man pages, 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 không biết nhiều về thành phần của các man pages 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 bao nhiêu không gian cho Perl hay git-config.
Bài tập này đã khiến tôi 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í nhiều 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 bên dưới. Tôi đã được nhắc nhở rằng việc “hé nhìn” đằng sau bức màn có thể là một cách học tập hiệu quả, và tôi sẽ cố gắng nuôi dưỡng bản tính tò mò đó nhiều hơn một chút trong tương lai.
Bạn nghĩ sao về những man pages “khổng lồ” này? Hãy chia sẻ những khám phá của bạn hoặc các công cụ dòng lệnh yêu thích để tìm hiểu thêm về hệ thống bên dưới trong phần bình luận!