Làm thế nào để bạn xuất ra một danh sách tất cả các trang man trong một phần cụ thể?


Câu trả lời:


4

Lệnh này liệt kê các tên được sắp xếp của tất cả các mục trong phần đã cho:

man -aWS 1 \* | xargs basename | sed 's/\.[^.]*$//' | sort -u

Nếu bạn muốn xem tên đường dẫn, hãy sử dụng:

man -aWS 1 \* | sed 's/\.[^.]*$//' | sort

Điều này cho biết manđể tìm kiếm một phần cho tất cả các lệnh bằng cách sử dụng mẫu ký tự đại diện *(dấu gạch chéo ngược để shell không diễn giải nó). -atìm tất cả các kết quả trùng khớp, -Win tên đường dẫn thay vì hiển thị các trang và -S 1chỉ định phần một. Thay đổi 1thành bất cứ phần nào bạn muốn tìm kiếm.

Các sedlệnh dải các phần mở rộng tên tập tin; loại bỏ nó nếu bạn muốn xem tên tập tin đầy đủ. sortsắp xếp các kết quả ( -uloại bỏ trùng lặp).

Để tái sử dụng thuận tiện, điều này xác định hàm shell Bash:

function mansect { man -aWS ${1?man section not provided} \* | xargs basename | sed 's/\.[^.]*$//' | sort -u; }

Ví dụ, bạn có thể gọi nó như mansect 3để xem các mục trong phần ba.

[Đã thử nghiệm trên macOS.]


Đẹp - Cảm ơn. Tôi nhận được một số bản sao (ví dụ: các đường dẫn trong /Appluggest/Xcode.app và "Tăng tốc" trong phần 7), nhưng không có gì đặt một uniqđường ống dẫn không khắc phục được.
xyz

@xyz: Tôi đã cập nhật lệnh sort sort -uđể loại bỏ trùng lặp.
Chris Trang

24

Để liệt kê tất cả các trang man được cài đặt từ một phần cụ thể, bạn có thể sử dụng apropos :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos

"apropos: -s: tùy chọn không xác định"
Michael Mrozek

@MichaelMrozek bạn đang sử dụng hệ thống nào? Nó hoạt động với tôi, ví dụ: đầu ra của apropos -s 2 -w '*'
Ulrich Dangel

Cảm ơn. Tùy chọn -s không có trong apropos Mac OS X, có lẽ là từ BSD.
xyz

@ f100 Ah ok, có thể thửman -a -s 2 '*'
Ulrich Dangel

Điều đó có vẻ giống như vậy, nhưng thay vì liệt kê chúng, nó thực sự lần lượt gọi người xem cho từng người. Tôi đã hack một chức năng để làm danh sách mà tôi đã đăng trong một bình luận khác. Nó có thể có vấn đề nhưng nó đủ cho tôi :)
xyz

20

Các trang thường được đặt trong /usr/share/man, nhưng kiểm tra $MANPATHvà được sắp xếp thành các phần như vậy:

 Section 1:
 /usr/share/man/man1/

 Section 2:
 /usr/share/man/man2/

 ...

Vì vậy, để liệt kê tất cả các trang 2 phần đã cài đặt, hãy làm:

ls /usr/share/man/man2/

Hoặc một cái hoàn chỉnh hơn:

find $(echo $MANPATH | tr ':' ' ') -path '*/man2/*'

Cái thứ hai sẽ có vấn đề nếu bạn có các thư mục $MANPATHcó khoảng trắng trong tên của chúng.

Trên hầu hết các bản phân phối, bạn cũng có thể kiểm tra các trang man có sẵn bằng một công cụ gói, ví dụ như trên các bản phân phối có nguồn gốc Debian bạn có thể sử dụng apt-filenhư vậy:

apt-file search /man2/

1
Cảm ơn - Đây là sự khởi đầu tôi cần. Tôi đã tạo một hàm shell được chạy ví dụ lman 2và liệt kê tên chưa được đặt cho mỗi trang trên một dòng mới và trang chúng. Cơ thể của chức năng là:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz

1

Trên Mac OS X, điều duy nhất tôi có thể làm việc là man -k . | grep -F '(3)'liệt kê mọi thứ trong phần 3.


0

Tôi biết đây là một câu hỏi rất cũ, tuy nhiên tất cả các câu trả lời ở đây đều không phù hợp với tôi. Do đó, tôi đã đưa ra một lớp lót sau hoạt động trên Ubuntu 18.04 và macOS Mojave, 10.14.6:

find $(man --path | tr ':' ' ') -type f -path '*man2*' \
  -exec basename {} \; | sed 's/\..*//' | sort

Chạy nhanh xuống:

  • mẫu Thors trả lời: $(man --path | tr ':' ' ')để có được các đường dẫn hiện tại của trang man
  • find <man paths> -type f -path '*man2*' -exec basename {} \; lấy tên tệp của tất cả các tệp thông thường trong đường dẫn man
  • sed thoát khỏi phần mở rộng tập tin
  • sort theo bảng chữ cái
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.