คุณจะแสดงรายการหน้าเพจทั้งหมดในส่วนใดส่วนหนึ่งได้อย่างไร


25

forkตัวอย่างเช่นman page สำหรับอยู่ในส่วน System Calls ที่มีหมายเลข 2:

man 2 fork

คุณจะเห็นส่วนที่ 2 อื่น ๆ โดยไม่หันไปใช้ Google ได้อย่างไร


หากไม่มี google แต่ผ่านเว็บให้ไปที่man7.org/linux/man-pages/dir_section_2.html (หรือหน้าหลักที่นี่: kernel.org/doc/man-pages )
belacqua

คำตอบ:


4

คำสั่งนี้แสดงรายการชื่อที่เรียงลำดับของรายการทั้งหมดในส่วนที่กำหนด:

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

หากคุณต้องการดูชื่อพา ธ ให้ใช้:

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

สิ่งนี้บอกmanให้ค้นหาส่วนสำหรับคำสั่งทั้งหมดโดยใช้รูปแบบไวด์การ์ด*(เครื่องหมายทับขวาเพื่อให้เชลล์ไม่ได้แปล) -aค้นหาการแข่งขันทั้งหมด-Wพิมพ์ชื่อพา ธ แทนการแสดงหน้าและ-S 1ระบุส่วนที่หนึ่ง เปลี่ยนเป็น1ส่วนใดก็ได้ที่คุณต้องการค้นหา

sedคำสั่งแถบนามสกุลของไฟล์นั้น ลบออกหากคุณต้องการดูชื่อไฟล์ที่สมบูรณ์ sortเรียงลำดับผลลัพธ์ ( -uลบรายการที่ซ้ำกัน)

เพื่อความสะดวกในการใช้ซ้ำสิ่งนี้จะกำหนดฟังก์ชั่นเปลือก Bash:

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

ตัวอย่างเช่นคุณสามารถเรียกใช้mansect 3เพื่อดูรายการในส่วนที่สาม

[ทดสอบบน macOS]


ดี - ขอบคุณ ฉันได้รับสิ่งที่ซ้ำกัน (เช่นพา ธ ใน /Applications/Xcode.app และ "เร่ง" ในส่วนที่ 7) แต่ไม่มีสิ่งใดที่วางในไพพ์uniqไลน์ไม่สามารถแก้ไขได้
xyz

@xyz: ฉันได้อัปเดตคำสั่ง sort sort -uเพื่อลบรายการที่ซ้ำกัน
Chris หน้า

24

ในการแสดงรายการman pages ที่ติดตั้งทั้งหมดจากส่วนเฉพาะคุณสามารถใช้apropos :

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

"apropos: -s: ตัวเลือกที่ไม่รู้จัก"
Michael Mrozek

@MichaelMrozek คุณใช้ระบบอะไร มันใช้งานได้สำหรับฉันเช่น: ผลลัพธ์ของ apropos -s 2 -w '*'
Ulrich Dangel

ขอบคุณ ตัวเลือก -s ไม่มีอยู่ในข้อเสนอ Mac OS X ซึ่งน่าจะมาจาก BSD
xyz

@ f100 อ่าโอเคลองได้เลยman -a -s 2 '*'
Ulrich Dangel

ดูเหมือนจะเป็นมากกว่านั้น แต่แทนที่จะแสดงรายการพวกเขาจะเรียกผู้ชมสำหรับแต่ละรายการแทน ฉันแฮ็กฟังก์ชั่นในการทำรายการซึ่งฉันโพสต์ในความคิดเห็นอื่น อาจเป็นไปได้ว่ามีปัญหา แต่ก็เพียงพอแล้วสำหรับฉัน :)
xyz

20

โดยทั่วไป Manpages จะถูกวางไว้/usr/share/manแต่ให้ตรวจสอบ$MANPATHและจัดเรียงเป็นส่วน ๆ ดังนี้:

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

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

 ...

ดังนั้นในการแสดง manpages ส่วนที่ติดตั้งทั้งหมดให้ทำ:

ls /usr/share/man/man2/

หรือหนึ่งที่สมบูรณ์มากขึ้น:

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

หลังหนึ่งจะมีปัญหาหากคุณมีไดเรกทอรีในที่$MANPATHมีช่องว่างในชื่อของพวกเขา

ในการแจกแจงส่วนใหญ่คุณสามารถตรวจสอบ man pages ที่มีอยู่ด้วยเครื่องมือ package เช่นการแจกแจงแบบ Debian ที่คุณสามารถใช้apt-fileดังนี้

apt-file search /man2/

1
ขอบคุณ - นี่คือจุดเริ่มต้นที่ฉันต้องการ ฉันสร้างฟังก์ชั่นเชลล์ที่ทำงานเช่นlman 2และแสดงชื่อที่ไม่มีการตกแต่งสำหรับแต่ละหน้าในบรรทัดใหม่และหน้าพวกเขา ร่างกายของฟังก์ชั่นคือ:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz

1

ใน Mac OS X สิ่งเดียวที่ฉันสามารถทำงานได้คือman -k . | grep -F '(3)'แสดงทุกสิ่งในส่วนที่ 3


0

ฉันรู้ว่านี่เป็นคำถามที่เก่ามาก แต่คำตอบที่ได้รับที่นี่ทั้งหมดไม่ได้สำหรับฉัน ดังนั้นฉันจึงมากับหนึ่งซับที่ทำงานบนUbuntu 18.04 และmacOS Mojave, 10.14.6:

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

วิ่งลงอย่างรวดเร็ว:

  • form Thors answer: $(man --path | tr ':' ' ')เพื่อรับเส้นทางปัจจุบันของ man pages
  • find <man paths> -type f -path '*man2*' -exec basename {} \; รับชื่อไฟล์ของไฟล์ปกติทั้งหมดในพา ธ man
  • sed กำจัดนามสกุลไฟล์
  • sort ตามลำดับตัวอักษร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.