นี่เป็นวิธีส่วนตัวในการอ่าน manpages:
ผู้จัดการ
เมื่อคุณเปิด manpage โดยใช้man
คำสั่งเอาต์พุตจะแสดง / แสดงผลโดยคำสั่งless
หรือmore
คำสั่งหรือคำสั่งอื่นใดที่จะถูกตั้งค่าเป็นเพจเจอร์ของคุณ (manpager)
หากคุณใช้ Linux คุณอาจได้รับบริการโครงสร้างพื้นฐานของมนุษย์ที่กำหนดค่าให้ใช้งานแล้ว/usr/bin/less -is
(เว้นแต่คุณจะติดตั้ง distro น้อยที่สุด) ให้man(1)
อธิบายในส่วนของตัวเลือก:
-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable,
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.
ใน FreeBSD และ OpenBSD เป็นเพียงเรื่องของการแก้ไขMANPAGER
ตัวแปรสภาพแวดล้อมเนื่องจากส่วนใหญ่จะใช้more
และคุณลักษณะบางอย่างเช่นการค้นหาและการไฮไลต์ข้อความอาจหายไป
มีคำตอบที่ดีสำหรับคำถามของสิ่งที่แตกต่างคือmore
, less
และmost
มีที่นี่ (ไม่เคยใช้most
) ความสามารถในการเลื่อนไปข้างหลังและเลื่อนไปข้างหน้าทีละหน้าด้วยSpaceหรือทั้งสองวิธีตามบรรทัดที่มี↓หรือ↑(ด้วยการใช้vi
การเชื่อมjและk) เป็นสิ่งจำเป็นในขณะที่เรียกดู manpages กดhในขณะที่ใช้less
เพื่อดูข้อมูลสรุปของคำสั่งต่างๆ
และนั่นคือเหตุผลที่ฉันแนะนำให้คุณใช้less
เป็นเพจเจอร์ชายของคุณ less
มีคุณสมบัติที่จำเป็นบางอย่างที่จะใช้ในระหว่างคำตอบนี้
คำสั่งจัดรูปแบบอย่างไร
ข้อกำหนดของยูทิลิตี้ : ข้อกำหนดเฉพาะของ Open Group Base ฉบับที่ 7 - IEEE Std 1003.1, 2013 Edition คุณควรเยี่ยมชมลิงค์นั้นก่อนที่จะพยายามทำความเข้าใจกับ manpage การอ้างอิงออนไลน์นี้อธิบายถึงไวยากรณ์ของอาร์กิวเมนต์ของโปรแกรมอรรถประโยชน์มาตรฐานและแนะนำคำศัพท์ที่ใช้ตลอด POSIX.1-2017 สำหรับการอธิบายอาร์กิวเมนต์ที่ประมวลผลโดยยูทิลิตี้ สิ่งนี้จะช่วยให้คุณได้รับการปรับปรุงเกี่ยวกับความหมายที่แท้จริงของคำเช่นพารามิเตอร์อาร์กิวเมนต์ตัวเลือกอาร์กิวเมนต์ ...
หัวหน้า manpage ใด ๆ จะมีความลับน้อยกว่าสำหรับคุณหลังจากทำความเข้าใจกับสัญลักษณ์ของอนุสัญญายูทิลิตี้:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
มีอยู่ในใจว่าคุณต้องการทำอะไร
เมื่อทำการวิจัยเกี่ยวกับxargs
คุณทำเพื่อวัตถุประสงค์ใช่มั้ย คุณมีความต้องการเฉพาะที่อ่านเอาต์พุตมาตรฐานและดำเนินการคำสั่งตามเอาต์พุตนั้น
แต่เมื่อฉันไม่รู้คำสั่งที่ฉันต้องการ
ใช้man -k
หรือapropos
(พวกเขาเทียบเท่า) ถ้าฉันไม่รู้วิธีค้นหาไฟล์: man -k file | grep search
. อ่านคำอธิบายและค้นหาคำที่เหมาะสมกับความต้องการของคุณมากขึ้น ตัวอย่าง:
apropos -r '^report'
bashbug (1) - report a bug in bash
df (1) - report file system disk space usage
e2freefrag (8) - report free space fragmentation information
filefrag (8) - report on file fragmentation
iwgetid (8) - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1) - report or set the keyboard mode
lastlog (8) - reports the most recent login of all users or of a given user
pmap (1) - report memory map of a process
ps (1) - report a snapshot of the current processes.
pwdx (1) - report current working directory of a process
uniq (1) - report or omit repeated lines
vmstat (8) - Report virtual memory statistics
Apropos ทำงานร่วมกับนิพจน์ทั่วไปตามค่าเริ่มต้น ( man apropos
อ่านคำอธิบายและค้นหาว่า-r
ทำอะไร) และในตัวอย่างนี้ฉันกำลังมองหาทุก manpage ที่คำอธิบายเริ่มต้นด้วย "รายงาน"
หากต้องการค้นหาข้อมูลที่เกี่ยวข้องกับการอ่านการประมวลผลอินพุต / เอาต์พุตมาตรฐานและเข้าถึงxargs
เป็นตัวเลือกที่เป็นไปได้:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
ควรอ่านDESCRIPTION
ก่อนเริ่มต้น
ใช้เวลาและอ่านคำอธิบาย เพียงแค่อ่านคำอธิบายของxargs
คำสั่งเราจะได้เรียนรู้ว่า:
xargs
อ่านจาก STDIN และดำเนินการคำสั่งที่จำเป็น นอกจากนี้ยังหมายความว่าคุณจะต้องมีความรู้เกี่ยวกับการทำงานของอินพุตมาตรฐานและวิธีการจัดการผ่านคำสั่งไพพ์ไปยังเชน
/bin/echo
พฤติกรรมเริ่มต้นคือการทำหน้าที่เหมือน นี่เป็นเคล็ดลับเล็ก ๆ น้อย ๆ ที่ว่าหากคุณต้องการเชื่อมโยงมากกว่าหนึ่งรายการxargs
คุณไม่จำเป็นต้องใช้ echo ในการพิมพ์
- นอกจากนี้เรายังได้เรียนรู้ว่าชื่อไฟล์ยูนิกซ์สามารถมีช่องว่างและบรรทัดใหม่ได้ซึ่งอาจเป็นปัญหาและอาร์กิวเมนต์
-0
เป็นวิธีการป้องกันสิ่งต่าง ๆ โดยใช้ตัวคั่นตัวละครแบบ null คำอธิบายเตือนคุณว่าคำสั่งที่ใช้เป็นอินพุตจำเป็นต้องสนับสนุนคุณลักษณะนี้ด้วยและ GNU find
ก็สนับสนุน ยิ่งใหญ่ xargs
เราใช้จำนวนมากพบกับ
xargs
จะหยุดถ้าถึงสถานะออก 255
คำอธิบายบางอย่างสั้นมากและนั่นเป็นเพราะซอฟต์แวร์ทำงานในวิธีที่ง่ายมาก อย่าคิดข้ามส่วนนี้ของ manpage ;)
สิ่งอื่นที่ต้องใส่ใจ ...
find
คุณรู้ว่าคุณสามารถค้นหาไฟล์โดยใช้ มีตัวเลือกมากมายและหากคุณดูเพียงอย่างเดียวSYNOPSIS
คุณจะได้รับความเสียหายจากสิ่งเหล่านั้น มันเป็นเพียงส่วนปลายของภูเขาน้ำแข็ง ไม่รวมNAME
, SYNOPSIS
และDESCRIPTION
คุณจะมีส่วนต่อไปนี้:
AUTHORS
: ผู้ที่สร้างหรือช่วยเหลือในการสร้างคำสั่ง
BUGS
: แสดงรายการข้อบกพร่องที่ทราบ อาจเป็นข้อ จำกัด ในการใช้งานเท่านั้น
ENVIRONMENT
: ลักษณะของเชลล์ที่อาจได้รับผลกระทบจากคำสั่งหรือตัวแปรที่จะใช้
EXAMPLES
หรือNOTES
: อธิบายตนเอง
REPORTING BUGS
: ใครที่คุณจะต้องติดต่อถ้าคุณพบข้อบกพร่องในเครื่องมือนี้หรือในเอกสารประกอบ
COPYRIGHT
: บุคคลที่สร้างและปฏิเสธความรับผิดชอบเกี่ยวกับซอฟต์แวร์ ทั้งหมดที่เกี่ยวข้องกับลิขสิทธิ์ของซอฟต์แวร์นั้นเอง
SEE ALSO
: คำสั่งเครื่องมือหรือลักษณะการทำงานอื่น ๆ ที่เกี่ยวข้องกับคำสั่งนี้และไม่สามารถพอดีกับส่วนอื่น ๆ
คุณอาจพบข้อมูลที่น่าสนใจเกี่ยวกับแง่มุมที่คุณต้องการของเครื่องมือในส่วนตัวอย่าง / บันทึกย่อ
ตัวอย่าง
ในขั้นตอนต่อไปนี้ฉันจะใช้find
เป็นตัวอย่างเนื่องจากแนวคิดเป็น "ง่ายกว่า" กว่าที่xargs
จะอธิบาย (คำสั่งหนึ่งค้นหาไฟล์และข้อตกลงอื่น ๆ ที่มี stdin และการดำเนินการตามคำสั่ง pipelined ของเอาต์พุตคำสั่งอื่น ๆ ) สมมติว่าเราไม่รู้อะไรเกี่ยวกับคำสั่งนี้ (หรือน้อยมาก)
ฉันมีปัญหาเฉพาะคือฉันต้องมองหาทุกไฟล์ที่มี.jpg
นามสกุลและด้วย 500KiB (KiB = 1024 byte หรือที่เรียกกันทั่วไปว่า kibibyte) หรือมากกว่านั้นในโฟลเดอร์ ftp server
ก่อนอื่นให้เปิดคู่มือ: man find
. SYNOPSIS
เป็นบาง ลองค้นหาสิ่งต่าง ๆ ในคู่มือ: พิมพ์/บวกคำที่คุณต้องการ ( size
) มันจะทำดัชนีรายการจำนวนมาก-size
ที่จะนับขนาดเฉพาะ ได้ติดอยู่. ไม่ทราบวิธีค้นหาด้วย "มากกว่า" หรือ "น้อยกว่า" ขนาดที่กำหนดและชายคนนั้นไม่ได้แสดงให้ฉันเห็น
nขอให้มันลองและค้นหารายการถัดไปพบได้โดยการกดปุ่ม ตกลง. find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
พบสิ่งที่น่าสนใจ: บางทีตัวอย่างนี้แสดงให้เราเห็นว่า-size +100M
มันจะค้นหาไฟล์ที่มี 100MB หรือมากกว่า ฉันจะยืนยันได้อย่างไร ไปที่หัวของ manpage และค้นหาคำอื่น ๆ
greater
อีกครั้งลองคำ การกดgจะนำเราไปที่หัวของ manpage /greater
และรายการแรกคือ:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
ฟังดูดี. ดูเหมือนว่าบล็อกของคู่มือนี้ยืนยันสิ่งที่เราสงสัย อย่างไรก็ตามสิ่งนี้จะไม่ใช้กับขนาดไฟล์เท่านั้น มันจะนำไปใช้กับสิ่งn
ที่สามารถพบได้ใน manpage นี้ (ตามวลีที่กล่าวว่า: "อาร์กิวเมนต์ที่เป็นตัวเลขสามารถระบุเป็น")
ดี. g /insensitive
ให้เราหาวิธีที่จะกรองตามชื่อ: ทำไม? ตาย? WTF? เรามีเซิร์ฟเวอร์ FTP สมมุติที่ว่า "ระบบปฏิบัติการอื่น ๆ" คนที่จะให้ชื่อไฟล์ที่มีนามสกุลเป็น.jpg
, ,.JPG
.JpG
สิ่งนี้จะนำเราไปสู่:
-ilname pattern
Like -lname, but the match is case insensitive. If the -L
option or the -follow option is in effect, this test returns
false unless the symbolic link is broken.
อย่างไรก็ตามหลังจากที่คุณค้นหาlname
คุณจะเห็นว่านี่จะเป็นการค้นหาลิงก์สัญลักษณ์เท่านั้น เราต้องการไฟล์จริง รายการถัดไป:
-iname pattern
Like -name, but the match is case insensitive. For example, the
patterns `fo*' and `F??' match the file names `Foo', `FOO',
`foo', `fOo', etc. In these patterns, unlike filename expan‐
sion by the shell, an initial '.' can be matched by `*'. That
is, find -name *bar will match the file `.foobar'. Please note
that you should quote patterns as a matter of course, otherwise
the shell will expand any wildcard characters in them.
ยิ่งใหญ่ ฉันไม่จำเป็นต้องอ่าน-name
เพื่อดูว่า-iname
เป็นกรณีที่ไม่มีความรู้สึกของการโต้แย้งนี้ ให้รวบรวมคำสั่ง:
คำสั่ง: find /ftp/dir/ -size +500k -iname "*.jpg"
อะไรคือความหมายที่นี่: ความรู้ที่ว่าไวด์การ์ดนั้น?
หมายถึง "ตัวละครใด ๆ ที่ตำแหน่งเดียว" และ*
แสดงถึง "ศูนย์หรือมากกว่าของตัวละครใด ๆ " -name
พารามิเตอร์จะให้บทสรุปของความรู้นี้
เคล็ดลับที่ใช้กับคำสั่งทั้งหมด
ตัวเลือกบางอย่างช่วยจำและ "รูปแบบไวยากรณ์" เดินทางผ่านคำสั่งทั้งหมดทำให้คุณซื้อเวลาโดยไม่ต้องเปิด manpage เลย สิ่งเหล่านี้เรียนรู้จากการฝึกฝนและสิ่งที่พบบ่อยที่สุดคือ
- โดยทั่วไป
-v
หมายถึง verbose -vvv
เป็นรูปแบบ "verbose มาก" ในซอฟต์แวร์บางตัว
- ตามมาตรฐาน POSIX โดยทั่วไปแล้วหนึ่งอาร์กิวเมนต์อาร์กิวเมนต์สามารถซ้อนกันได้ ตัวอย่าง:
tar -xzvf
, cp -Rv
.
- โดยทั่วไป
-R
และ / หรือ-r
หมายถึงการเรียกซ้ำ
- คำสั่งเกือบทั้งหมดมีความช่วยเหลือสั้น ๆ เกี่ยวกับ
--help
ตัวเลือก
--version
แสดงเวอร์ชันของซอฟต์แวร์
-p
ในการคัดลอกหรือย้ายยูทิลิตี้หมายถึง "สงวนสิทธิ์"
-y
หมายถึงใช่หรือ "ดำเนินการต่อโดยไม่มีการยืนยัน" ในกรณีส่วนใหญ่
โปรดทราบว่าข้างต้นอาจไม่เป็นเช่นนั้นเสมอไป ตัวอย่างเช่น-r
สวิตช์อาจหมายถึงสิ่งที่แตกต่างกันมากสำหรับซอฟต์แวร์ที่แตกต่างกัน เป็นความคิดที่ดีเสมอที่จะตรวจสอบและตรวจสอบให้แน่ใจว่าคำสั่งอาจเป็นอันตรายเมื่อใด แต่เป็นค่าเริ่มต้นทั่วไป
ค่าเริ่มต้นของคำสั่ง
ในก้อนเพจเจอร์ของคำตอบนี้เราเห็นว่าเป็นเพจเจอร์ของless -is
man
พฤติกรรมเริ่มต้นของคำสั่งจะไม่แสดงที่ส่วนที่แยกจากกันบน manpages เสมอหรือในส่วนที่อยู่ด้านบนสุด
คุณจะต้องอ่านตัวเลือกเพื่อค้นหาค่าเริ่มต้นหรือหากคุณโชคดีการพิมพ์/pager
จะนำคุณไปสู่ข้อมูลนั้น สิ่งนี้ยังทำให้คุณต้องทราบแนวคิดของเพจเจอร์ (ซอฟต์แวร์ที่เลื่อน manpage) และนี่คือสิ่งที่คุณจะได้รับหลังจากอ่าน manpages จำนวนมากเท่านั้น
เหตุใดจึงสำคัญ ซึ่งจะเป็นการเปิดการรับรู้ของคุณถ้าคุณพบความแตกต่างในการเลื่อนและสีพฤติกรรมในขณะที่อ่านman(1)
บน Linux ( less -is
เพจเจอร์) หรือ FreeBSD man(1)
ตัวอย่างเช่น
แล้วSYNOPSIS
ไวยากรณ์ล่ะ
หลังจากรับข้อมูลทั้งหมดที่จำเป็นในการเรียกใช้งานคำสั่งคุณสามารถรวมตัวเลือกอาร์กิวเมนต์ตัวเลือกและตัวถูกดำเนินการแบบอินไลน์เพื่อให้งานของคุณเสร็จสิ้น ภาพรวมของแนวคิด:
- ตัวเลือกคือสวิตช์ที่กำหนดพฤติกรรมคำสั่ง " ทำสิ่งนี้ " " อย่าทำอย่างนี้ " หรือ " ทำแบบนี้ " มักเรียกว่าสวิตช์
- ตัวเลือกอาร์กิวเมนต์จะใช้ในกรณีส่วนใหญ่เมื่อตัวเลือกไม่ได้เป็นไบนารี (เปิด / ปิด) เช่น
-t
บนภูเขาที่ระบุประเภทของระบบแฟ้ม ( -t iso9660
, -t ext2
) " ทำสิ่งนี้ด้วยดวงตาที่ปิด " หรือ "ให้อาหารสัตว์ แต่มีเพียงสิงโต " เรียกว่าข้อโต้แย้ง
- ตัวถูกดำเนินการเป็นสิ่งที่คุณต้องการให้คำสั่งนั้นดำเนินการ ถ้าคุณใช้
cat file.txt
ตัวถูกดำเนินการเป็นไฟล์ในไดเรกทอรีปัจจุบันของคุณและเนื้อหานั้นจะปรากฏSTDOUT
ขึ้น ls
เป็นคำสั่งที่ตัวถูกดำเนินการเป็นตัวเลือก จุดสามจุดหลังจากตัวถูกดำเนินการโดยปริยายจะบอกคุณว่าcat
สามารถดำเนินการกับตัวถูกดำเนินการหลายตัว (ไฟล์) ในเวลาเดียวกัน คุณอาจสังเกตเห็นว่าคำสั่งบางอย่างได้ตั้งค่าชนิดของตัวถูกดำเนินการที่จะใช้ ตัวอย่าง:cat [OPTION] [FILE]...
เรื่องย่อที่เกี่ยวข้อง:
วิธีนี้จะไม่ทำงานเมื่อใด
- Manpages ที่ไม่มีตัวอย่าง
- จัดการที่ตัวเลือกมีคำอธิบายสั้น ๆ
- เมื่อคุณใช้คำหลักทั่วไปเช่น
and
, to
, for
ภายใน manpages
- Manpages ที่ไม่ได้ติดตั้ง ดูเหมือนว่าจะชัดเจน แต่ถ้าคุณไม่ได้
lftp
ติดตั้ง (และ manpages) คุณไม่สามารถรู้ได้ว่าเป็นตัวเลือกที่เหมาะสมในฐานะไคลเอนต์ ftp ที่ซับซ้อนยิ่งขึ้นโดยการรันman -k ftp
ในบางกรณีตัวอย่างจะค่อนข้างง่ายและคุณจะต้องทำการประมวลผลคำสั่งของคุณเพื่อทดสอบหรือในกรณีที่เลวร้ายที่สุดคือ Google
อื่น ๆ : ภาษาโปรแกรมและโมดูล:
หากคุณกำลังเขียนโปรแกรมหรือสร้างสคริปต์โปรดจำไว้ว่าบางภาษามีระบบ manpages ของตัวเองเช่นperl
( perldocs
), python ( pydocs
), ฯลฯ โดยเก็บข้อมูลเฉพาะเกี่ยวกับวิธี / funcions ตัวแปรพฤติกรรมและข้อมูลสำคัญอื่น ๆ เกี่ยวกับโมดูล คุณกำลังพยายามใช้และเรียนรู้ สิ่งนี้มีประโยชน์สำหรับฉันเมื่อฉันสร้างสคริปต์เพื่อดาวน์โหลดอีเมล IMAP ที่ยังไม่ได้อ่านโดยใช้perl Mail::IMAPClient
โมดูล
คุณจะต้องคิดออก manpages เฉพาะเหล่านั้นโดยใช้man -k
หรือค้นหาออนไลน์ ตัวอย่าง:
[root@host ~]# man -k doc | grep perl
perldoc (1) - Look up Perl documentation in Pod format
[root@host ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1) User Contributed Perl Documentation IMAPCLIENT(1)
NAME
Mail::IMAPClient - An IMAP Client API
SYNOPSIS
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => ’localhost’,
User => ’username’,
Password => ’password’,
Ssl => 1,
Uid => 1,
);
... สิ่งอื่น ๆ อีกมากมายที่นี่พร้อมส่วนเหมือน manpage ปกติ ...
ด้วยหลาม:
[root@host ~]# pydoc sys
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...
หรือhelp()
funcion ภายในเปลือกหลามถ้าคุณต้องการอ่านรายละเอียดเพิ่มเติมของวัตถุ:
nwildner@host:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)
Help on built-in function round in module builtins:
round(...)
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
โบนัส:wtf
คำสั่งสามารถช่วยให้คุณมีตัวย่อและการทำงานเป็นwhatis
ถ้าย่อที่มันไม่มีฐานข้อมูลจะพบ แต่สิ่งที่คุณกำลังค้นหาเป็นส่วนหนึ่งของฐานข้อมูลคนที่ ใน Debian คำสั่งนี้เป็นส่วนหนึ่งของbsdgames
แพ็คเกจ ตัวอย่าง:
nwildner@host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@host:~$ wtf afaik
AFAIK: as far as I know
nwildner@host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager