Bagaimana Anda menampilkan daftar semua halaman manual di bagian tertentu?

Jawaban:

4

Perintah ini mencantumkan nama yang diurutkan dari semua entri di bagian yang diberikan:

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

Jika Anda ingin melihat nama path, gunakan:

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

Ini memberitahu Anda manuntuk mencari bagian untuk semua perintah menggunakan pola wildcard *(tanda kutip garis miring terbalik sehingga shell tidak menafsirkannya). -amenemukan semua kecocokan, -Wmencetak nama path alih-alih menampilkan halaman, dan -S 1menentukan bagian satu. Ubah bagian 1apa pun yang ingin Anda cari.

The sedperintah strip ekstensi nama file; hapus jika Anda ingin melihat nama file lengkap. sortmengurutkan hasil ( -umenghapus duplikat).

Untuk penggunaan ulang yang nyaman, ini mendefinisikan fungsi Bash shell:

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

Misalnya, Anda dapat memintanya mansect 3untuk melihat entri di bagian tiga.

[Diuji pada macOS.]

Chris Page
sumber
Terima kasih banyak. Saya mendapatkan beberapa duplikat (misalnya jalur di /Applications/Xcode.app dan "Mempercepat" di bagian 7), tetapi tidak ada yang dimasukkan ke uniqdalam pipa tidak diperbaiki.
xyz
@xyz: Saya memperbarui perintah pengurutan sort -uuntuk menghapus duplikat.
Chris Page
24

Untuk membuat daftar semua halaman manual yang terinstal dari bagian tertentu Anda dapat menggunakan apropos :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Ulrich Dangel
sumber
"apropos: -s: opsi tidak diketahui"
Michael Mrozek
@MichaelMrozek sistem apa yang Anda gunakan? Ini bekerja untuk saya, misalnya: keluaran apropos -s 2 -w '*'
Ulrich Dangel
Terima kasih. Opsi -s tidak ada dalam apropos Mac OS X, yang mungkin berasal dari BSD.
xyz
@ f100 Ah ok, mungkin cobaman -a -s 2 '*'
Ulrich Dangel
Tampaknya lebih seperti itu, tetapi alih-alih mencantumkannya, itu sebenarnya meminta pengunjung untuk masing-masing secara bergantian. Saya telah meretas fungsi untuk melakukan listing yang saya posting di komentar lain. Kemungkinan memiliki masalah tetapi cukup bagi saya :)
xyz
20

Halaman manual biasanya ditempatkan di /usr/share/man, tetapi periksa $MANPATH, dan disusun menjadi beberapa bagian seperti:

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

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

 ...

Jadi untuk membuat daftar semua halaman 2 bagian yang diinstal, lakukan:

ls /usr/share/man/man2/

Atau yang lebih lengkap:

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

Yang terakhir akan memiliki masalah jika Anda memiliki direktori $MANPATHdengan ruang dalam nama mereka.

Pada sebagian besar distribusi, Anda juga dapat memeriksa halaman manual yang tersedia dengan alat paket, misalnya pada distribusi turunan Debian yang dapat Anda gunakan apt-fileseperti:

apt-file search /man2/
Thor
sumber
1
Terima kasih - Ini adalah awal yang saya butuhkan. Saya membuat fungsi shell yang dijalankan misalnya lman 2dan mencantumkan nama tanpa hiasan untuk setiap halaman pada baris baru dan halaman mereka. Tubuh fungsinya adalah:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

Di Mac OS X, satu-satunya hal yang dapat saya lakukan adalah man -k . | grep -F '(3)', yang mencantumkan semuanya di bagian 3.

zellyn
sumber
0

Saya tahu ini adalah pertanyaan yang sangat lama, namun jawaban yang diberikan di sini tidak bekerja untuk saya. Oleh karena itu saya datang dengan satu-liner berikut yang bekerja di Ubuntu 18.04 dan macOS Mojave, 10.14.6:

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

Lari cepat ke bawah:

  • form Thors answer: $(man --path | tr ':' ' ')untuk mendapatkan jalur saat ini dari halaman manual
  • find <man paths> -type f -path '*man2*' -exec basename {} \; mendapatkan nama file dari semua file biasa di path man
  • sed menghilangkan ekstensi file
  • sort menurut abjad.
Ben
sumber