คำสั่ง man: วิธีใช้และออปชัน หมายเลขเซกชัน และการค้นหาด้วย man -k

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8man-db 2.9บัญชี rootDebian 12 · man-db 2.11 บัญชีผู้ใช้ทั่วไป
คำสั่งเชลล์man, whatis, aproposตำแหน่ง/usr/bin/man

เมื่อต้องการดูวิธีใช้คำสั่งหรือไฟล์ตั้งค่าบนเซิร์ฟเวอร์ Linux ให้เปิดหน้าคู่มือด้วยคำสั่ง man และถ้าไม่รู้ชื่อ ให้ค้นหาคำอธิบายสั้นด้วย man -k เมื่อค้นหาหน้า passwd บนเซิร์ฟเวอร์ AlmaLinux 9 และ Debian 12 พบว่า Debian 12 มีทั้งหน้าคำสั่งในเซกชัน 1 และหน้ารูปแบบไฟล์ในเซกชัน 5 แต่ AlmaLinux 9 ไม่มีหน้าในเซกชัน 5

ผลลัพธ์ด้านล่างได้จากเซิร์ฟเวอร์ AlmaLinux 9.8 ด้วยบัญชี root และจากเซิร์ฟเวอร์ Debian 12 ด้วยบัญชีทั่วไป ชื่อโฮสต์และที่อยู่การเชื่อมต่อในซิมูเลเตอร์เป็นค่าตัวอย่าง

1️⃣ วิธีใช้พื้นฐานของคำสั่ง man

  • ↪️ เปิดหน้า เลื่อนหน้าจอ และหน้าที่ไม่มี

เมื่อพิมพ์ชื่อคำสั่งต่อจาก man หน้าคู่มือของคำสั่งนั้นจะเปิดขึ้น man ส่งหน้าให้โปรแกรมเพจเจอร์แสดงทีละหน้าจอ จึงไม่กลับไปที่พรอมต์ทันทีหลังรัน เพจเจอร์กำหนดด้วยตัวแปรสภาพแวดล้อม MANPAGER หรือ PAGER และถ้าทั้งสองว่าง จะใช้ less

ถ้าส่งผลลัพธ์ผ่านไปป์ จะได้เฉพาะข้อความโดยไม่มีเพจเจอร์ เมื่อรับ 12 บรรทัดแรกของ [man ls] ด้วย head บรรทัดแรกมี LS(1) แล้วตามด้วยหัวข้อ NAME, SYNOPSIS และ DESCRIPTION ตามลำดับ

man ls | head -n 12
LS(1)                            User Commands                           LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci-
       fied.

เลข 1 ในวงเล็บของ LS(1) ในบรรทัดแรกคือหมายเลขเซกชันที่หน้านี้อยู่

ภายในหน้า [Space] แสดงหน้าจอถัดไป และ [/คำ] ตามด้วย Enter ใช้ค้นหาคำ [n] ไปยังตำแหน่งถัดไปที่มีคำเดียวกัน และ [q] ปิด man

ถ้าพิมพ์ชื่อที่ไม่มีอยู่ จะขึ้นข้อผิดพลาด [No manual entry for] และรหัสออกคือ 16

man no-such-cmd9
No manual entry for no-such-cmd9
echo $?
16

หัวข้อ EXIT STATUS ของหน้า man อธิบายว่า 16 เป็นค่าเมื่อไม่พบหน้า ไฟล์ หรือคำ อย่างน้อยหนึ่งรายการ ส่วนข้อผิดพลาดในการใช้งานคือ 1 สคริปต์จึงแยกจัดการสองกรณีนี้ได้

2️⃣ หมายเลขเซกชันของ man

  • ↪️ 1 คำสั่ง, 5 ไฟล์ตั้งค่า, 8 คำสั่งดูแลระบบ

ถ้ามีหน้าชื่อเดียวกันอยู่ในหลายเซกชัน man จะค้นหาตามลำดับเซกชันที่กำหนดไว้ และเปิดเฉพาะหน้าแรกที่พบ เซกชันมีตั้งแต่ 1 ถึง 9 และเซกชันที่เปิดบ่อยในงานเซิร์ฟเวอร์คือเซกชัน 1 คำสั่ง เซกชัน 5 รูปแบบไฟล์ และเซกชัน 8 คำสั่งดูแลระบบ

เซกชันหน้าที่อยู่ในเซกชันตัวอย่างที่เห็นบนเซิร์ฟเวอร์ AlmaLinux 9.8
1โปรแกรมที่รันได้และคำสั่งเชลล์ls, passwd, crontab, man
2การเรียกระบบ (ฟังก์ชันที่เคอร์เนลให้บริการ)
3ฟังก์ชันไลบรารี
4ไฟล์พิเศษ (ส่วนใหญ่อยู่ใต้ /dev)
5รูปแบบไฟล์และข้อกำหนด เช่น /etc/passwdcrontab
6เกม
7เบ็ดเตล็ด (แพ็กเกจมาโครและข้อกำหนด)
8คำสั่งดูแลระบบ ส่วนใหญ่สำหรับ rootuseradd, mandb
9รูทีนของเคอร์เนล (ไม่เป็นมาตรฐาน)

crontab มีหน้าอยู่ในสองเซกชัน เพราะคำสั่งและรูปแบบไฟล์ตั้งค่าใช้ชื่อเดียวกัน เมื่อตรวจสอบด้วย [man -f crontab] บรรทัดของเซกชัน 1 และเซกชัน 5 แสดงออกมาด้วยกัน

man -f crontab
crontab (1)          - maintains crontab files for individual users
crontab (5)          - files used to schedule the execution of programs

ถ้ารัน [man crontab] โดยไม่ใส่หมายเลขเซกชัน หน้าคำสั่ง crontab ในเซกชัน 1 จะเปิดขึ้น หากต้องการดูรูปแบบของไฟล์ตั้งเวลางาน ให้ใส่ 5 ไว้หน้าชื่อ

man 5 crontab | head -n 4
CRONTAB(5)                       File Formats                       CRONTAB(5)

NAME
       crontab - files used to schedule the execution of programs

บรรทัดแรกเปลี่ยนเป็น CRONTAB(5) และ File Formats และบรรทัด NAME ก็แสดงคำอธิบายไฟล์ตั้งเวลางานแทนคำอธิบายคำสั่ง

ถ้าเซกชันที่ระบุไม่มีหน้าชื่อนั้น จะขึ้นข้อผิดพลาด บนเซิร์ฟเวอร์ AlmaLinux 9.8 เมื่อรัน [man 5 passwd] เพื่อดูรูปแบบไฟล์ /etc/passwd ก็ขึ้นข้อผิดพลาดว่าไม่มีหน้าในเซกชัน 5

man 5 passwd
No manual entry for passwd in section 5

บนเซิร์ฟเวอร์ Debian 12 [man -f passwd] แสดงบรรทัด passwd ของเซกชัน 5 ด้วย เซกชันใดมีหน้าบ้างนั้นขึ้นกับคู่มือที่ติดตั้งบนเซิร์ฟเวอร์ จึงควรตรวจสอบด้วย [man -f] ก่อนใส่หมายเลขเซกชัน

man -f passwd
passwd (1)           - change user password
passwd (1ssl)        - OpenSSL application commands
passwd (5)           - the password file

เซกชัน 8 มีคำสั่งดูแลระบบที่ส่วนใหญ่รันด้วยบัญชี root เช่น useradd ที่ใช้สร้างบัญชี

man -f useradd
useradd (8)          - create a new user or update default new user information

3️⃣ ออปชันของคำสั่ง man และการค้นหาด้วย -k, -f

  • ↪️ whatis, apropos และตำแหน่งไฟล์ด้วย man -w

[man -f] แสดงคำอธิบายหนึ่งบรรทัดของหน้าที่มีชื่อเดียวกัน และทำงานเหมือน whatis เมื่อรัน [man -f passwd] และ [whatis passwd] บนเซิร์ฟเวอร์ AlmaLinux 9.8 ได้สองบรรทัดเดียวกัน

man -f passwd
passwd (1)           - update user's authentication tokens
passwd (1ossl)       - OpenSSL application commands

บรรทัด 1ossl คือหน้าของคำสั่ง OpenSSL ที่ใช้ชื่อ passwd ร่วมกัน

ถ้าไม่รู้ชื่อ ให้ใช้ [man -k] ค้นหาชื่อหน้าและคำอธิบายสั้น ทำงานเหมือน apropos และคำที่ค้นจะถูกอ่านเป็นนิพจน์ปกติ

man -k '^passwd'
passwd (1)           - update user's authentication tokens
passwd (1ossl)       - OpenSSL application commands

^ หมายถึงต้นบรรทัด จึงแสดงเฉพาะบรรทัดที่ขึ้นต้นด้วย passwd นอกจากนี้ยังค้นด้วยคำในคำอธิบายได้ โดย [man -k 'directory contents'] พบหน้า dir และ vdir พร้อมกับ ls

man -k 'directory contents'
dir (1)              - list directory contents
ls (1)               - list directory contents
vdir (1)             - list directory contents

[man -k] ค้นเฉพาะคำอธิบายสั้นในหัวข้อ NAME จึงหาหน้าด้วยชื่อออปชันหรือคำในเนื้อหาไม่ได้ ส่วน [man -K] ที่ค้นถึงเนื้อหาจะอ่านทุกหน้าตามลำดับ จึงใช้เวลานาน

ถ้าไม่มีคำที่ค้นหา จะขึ้น [nothing appropriate] และรหัสออกคือ 16

man -k no-such-word9
no-such-word9: nothing appropriate.
echo $?
16

[man -w] แสดงเฉพาะตำแหน่งของไฟล์ต้นฉบับโดยไม่เปิดหน้า

man -w ls
/usr/share/man/man1/ls.1.gz
man -w 5 crontab
/usr/share/man/man5/crontab.5.gz

ไฟล์ทั้งสองอยู่ในโฟลเดอร์ man1 และ man5 ใต้ /usr/share/man และตัวเลขในชื่อโฟลเดอร์ตรงกับหมายเลขเซกชัน ไฟล์หน้า 1ossl ที่หาด้วย [man -w 1ossl passwd] ก็อยู่ในโฟลเดอร์ man1 เดียวกับเซกชัน 1

รวมออปชันไว้ในสองแท็บด้านล่าง

ตัวเลือกคัดลอกคำอธิบาย
-f, --whatisแสดงคำอธิบายหนึ่งบรรทัดของหน้าที่มีชื่อเดียวกัน ทำงานเหมือน whatis
-k, --aproposค้นหาชื่อหน้าและคำอธิบายสั้น ทำงานเหมือน apropos
-w, --where, --path, --locationแสดงเฉพาะตำแหน่งของไฟล์ต้นฉบับโดยไม่เปิดหน้า
-a, --allแสดงทุกหน้าที่ชื่อตรงกันตามลำดับ
ตัวเลือกคัดลอกคำอธิบาย
-K, --global-aproposค้นหาคำในเนื้อหาของทุกหน้า ใช้เวลานาน
-S, -s, --sectionsรายการกำหนดเซกชันที่จะค้นหาและลำดับเป็นรายการที่คั่นด้วยจุลภาคหรือโคลอน
-P, --pagerเพจเจอร์กำหนดเพจเจอร์ที่ใช้แสดงหน้า ค่าเริ่มต้นคือ less
-M, --manpathพาธกำหนดพาธคู่มือที่ใช้ค้นหาหน้า
-L, --localelocaleกำหนด locale ที่ใช้ในการรันครั้งนี้
-l, --local-fileแสดงไฟล์ที่ระบุเป็นหน้า โดยไม่ค้นหาในคู่มือของระบบ
-u, --updateอัปเดตแคชดัชนีของหน้าที่ติดตั้งไว้
-V, --versionแสดงข้อมูลเวอร์ชัน

🔲 ซิมูเลเตอร์คำสั่ง man

ในซิมูเลเตอร์ด้านล่าง เปิดหน้าด้วย [man ls] แล้วเลื่อนหน้าจอด้วยชิป [Space], [/list], [n], [q] ได้ บนเซิร์ฟเวอร์เสมือนเดียวกันยังใส่หมายเลขเซกชันอย่าง [man 5 crontab] หรือพิมพ์ [man -f], [man -k], [man -w] ได้

ซิมูเลเตอร์คำสั่ง manman-db 2.9 · บัญชี root
[root@server work]#
ทำงานภายในเบราว์เซอร์เท่านั้น ในหน้าจอของหน้าคู่มือ ให้กดชิป Space, /คำ, n, q และใช้ ↑↓ บนคีย์บอร์ดเพื่อเรียกคำสั่งที่พิมพ์ไว้ก่อนหน้ากลับมา

4️⃣ โครงสร้างของหน้า man

  • ↪️ การอ่าน NAME, SYNOPSIS, DESCRIPTION, OPTIONS

หน้า man แบ่งเป็นหัวข้อที่มีชื่อเป็นตัวพิมพ์ใหญ่ เมื่อดึงเฉพาะชื่อหัวข้อด้วย grep มาเทียบกัน หน้า ls มีคำอธิบายออปชันอยู่ใน DESCRIPTION ส่วนหน้า crontab มีหัวข้อ OPTIONS แยกต่างหาก

man ls | grep -E '^[A-Z]+( [A-Z]+)*$'
NAME
SYNOPSIS
DESCRIPTION
AUTHOR
REPORTING BUGS
COPYRIGHT
SEE ALSO
man crontab | grep -E '^[A-Z]+( [A-Z]+)*$'
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
CAVEATS
SEE ALSO
FILES
STANDARDS
DIAGNOSTICS
AUTHOR

ชื่อหัวข้อต่างกันเล็กน้อยในแต่ละหน้า และหัวข้อที่พบบ่อยมีดังนี้

หัวข้อเนื้อหาที่อยู่ในหัวข้อ
NAMEชื่อและคำอธิบายหนึ่งบรรทัด (บรรทัดที่ man -f และ man -k แสดง)
SYNOPSISรูปแบบการพิมพ์คำสั่ง
DESCRIPTIONคำอธิบายการทำงาน (หน้า ls ใส่คำอธิบายออปชันไว้ในหัวข้อนี้ด้วย)
OPTIONSหนึ่งย่อหน้าต่อหนึ่งออปชัน
EXIT STATUSความหมายของรหัสออก
FILESไฟล์ที่คำสั่งอ่านหรือเขียน
SEE ALSOหน้าที่ควรดูประกอบ

สัญลักษณ์ใน SYNOPSIS เป็นไปตามกฎที่หน้า man กำหนด สิ่งที่อยู่ในวงเล็บเหลี่ยมละได้ ออปชันที่คั่นด้วยเส้นตั้ง (|) ใช้ร่วมกันไม่ได้ และอาร์กิวเมนต์ที่มีจุดสามจุด (...) ต่อท้ายเขียนได้หลายครั้ง

SYNOPSIS ของ ls คือ ls [OPTION]... [FILE]... จึงละได้ทั้ง ออปชันของคำสั่งและอาร์กิวเมนต์บรรทัดคำสั่งอย่างชื่อไฟล์ทั้งหมด หรือจะเขียนหลายตัวก็ได้

[--help] เป็นสรุปวิธีใช้ที่โปรแกรมแสดงเอง จึงออกที่เทอร์มินัลโดยตรงโดยไม่มีเพจเจอร์ Usage ในบรรทัดแรกของ [ls --help] มีรูปแบบเดียวกับ SYNOPSIS และความยาวทั้งหมดคือ 121 บรรทัด สั้นกว่า 245 บรรทัดของ [man ls]

ls --help | head -n 3
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

หน้า man ยังมีหัวข้ออื่นที่ไม่มีใน [--help] เช่น AUTHOR และ SEE ALSO เมื่อต้องการดูออปชันเดียวอย่างรวดเร็วให้ใช้ [--help] และเมื่อต้องการคำอธิบายที่แบ่งเป็นหัวข้อ เช่น รูปแบบไฟล์ตั้งค่าหรือรหัสออก ให้เปิด man

🔢 FAQ & เนื้อหาแนะนำ

cd เป็นคำสั่งในตัวของ bash ดังนั้น [man cd] จึงพาไปยังหน้าที่รวมคำสั่งในตัวทั้งหมด บนเซิร์ฟเวอร์ AlmaLinux 9.8 [type cd] แสดง [cd is a shell builtin] และ [man -w cd] แสดงตำแหน่งของไฟล์ builtins.1.gz วิธีใช้ของคำสั่งในตัวแต่ละคำสั่งดูได้ทันทีด้วย [help cd]

เมื่อรัน [man -a ชื่อ] หน้าที่ชื่อตรงกันจะเปิดตามลำดับ ถ้าต้องการดูเฉพาะตำแหน่งไฟล์ ให้ใส่ [-w] ด้วย บนเซิร์ฟเวอร์ AlmaLinux 9.8 เมื่อรัน [man -w -a crontab] ได้สองบรรทัดของไฟล์ crontab ในโฟลเดอร์ man1 และ man5

ดัชนีที่ [man -k] และ [man -f] ค้นหานั้น mandb เป็นผู้สร้างและอัปเดต ดังนั้นหน้าที่ยังไม่เข้าดัชนีจะไม่ขึ้นในผลการค้นหา และสร้างดัชนีใหม่ได้โดยรัน [mandb] ด้วยบัญชี root

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 3   +   2   =