เชลล์ล็อกอินส่วนใหญ่โดยการนับบนระบบที่ติดตั้งใหม่นั้นไม่ใช่แบบโต้ตอบจริง:
$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c
5 /bin/bash
23 /bin/false
1 /bin/sh
1 /bin/sync
17 /usr/sbin/nologin
ชัดเจน/bin/bash
และ/bin/sh
เป็นกระสุนแบบดั้งเดิมและเป็นแบบโต้ตอบ แต่รายการอื่น ๆ ทั้งหมดในรายการนั้นไม่ใช่แบบโต้ตอบ หากคุณกำลังอ่านรายการและไม่ทราบว่าหนึ่งในนั้นทำอะไรคุณสามารถค้นหาหน้าคู่มือได้ (เช่นman nologin
หรือman sync
)
สิ่งที่คำสั่งทำจริง
ดูประวัติการโพสต์ของกัปตันแมนฉันเห็นว่าพวกมันค่อนข้างไม่มีประสบการณ์กับยูนิกซ์ ดังนั้นบางทีคำถามในความคิดเห็นเกี่ยวกับการไม่ติดตามเกี่ยวข้องกับบรรทัดคำสั่งที่ด้านบนของคำตอบไม่ใช่เพียงแค่เอาต์พุต ดังนั้นฉันจะอธิบายบรรทัดคำสั่งด้วยเช่นกันแม้ว่าจะเป็นหัวข้อนอกจริงสำหรับคำถามนี้
คำสั่งเป็นท่อระบบปฏิบัติการยูนิกซ์ ไปป์ไลน์เป็นห่วงโซ่ของคำสั่ง - คุณอ่านจากซ้ายไปขวา - ซึ่งเอาต์พุตของคำสั่งแรกกลายเป็นอินพุตของวินาทีเอาต์พุตของวินาทีจะกลายเป็นอินพุตของสามและต่อ ๆ ไปจนกระทั่ง ในตอนท้ายของท่อ ผลลัพธ์ของกระบวนการสุดท้ายจะแสดงบนเทอร์มินัล (เว้นแต่จะถูกเปลี่ยนเส้นทาง) ดูรายการวิกิพีเดียเกี่ยวกับท่อเปลือกสำหรับข้อมูลเพิ่มเติม
หากคุณไม่เข้าใจว่าท่อกำลังทำอะไรคุณสามารถเรียกใช้เป็นกลุ่มเพื่อดูว่าเกิดอะไรขึ้น นอกจากนี้คุณยังสามารถอ่านหน้าคู่มือสำหรับคำสั่งที่มีการใช้ (ที่นี่awk
, sort
และuniq
) จริงๆแล้วคุณควรทำอย่างนั้น ฉันจะรอ.
มารันขั้นตอนของการเพิ่มขั้นตอน (คุณสามารถทำได้อย่างปลอดภัยบนระบบ Unix ของคุณเอง):
~$ awk -F: '{print $7}' < /etc/passwd | sed -e 's/^/ /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]
เอาต์พุตด้านบนเป็นเพียงเนื้อหาของฟิลด์ที่เจ็ดจาก/etc/passwd
ไฟล์ นั่นคือฐานข้อมูล (ไฟล์ข้อความตัวอักษร) ซึ่งบอกระบบว่าเชลล์ล็อกอินของทุกคนคืออะไร หากคุณต้องการที่จะหาข้อมูลเพิ่มเติมเกี่ยวกับ/etc/passwd
เพียงแค่ไปอ่านมัน (มันของโลกสามารถอ่านได้) (man 5 passwd)
และดูที่หน้าคู่มือสำหรับมัน
ดังนั้นการอ่านรายการทั้งหมดที่นั่นคุณจะได้รับความคิดว่าไอเท็มยอดนิยมคืออะไร แต่นั่นไม่ใช่รูปแบบที่ดีสำหรับคำตอบของคำถามนี้ ลองนับพวกมันดู วิธีที่ง่ายที่สุดในการทำเช่นนั้นคือการเรียงลำดับรายการก่อน:
~$ awk -F: '{print $7}' < /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]
เราสามารถใช้โปรแกรมuniq
เพื่อแสดงให้เราเห็นเฉพาะรายการที่ไม่ซ้ำกัน:
~ $ awk -F: '{พิมพ์ $ 7}' </ etc / passwd | จัดเรียง | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / ซิงค์ / usr / sbin / nologin
แต่เดี๋ยวก่อนไม่มีประโยชน์มีกี่คน? ลองถามuniq
(อ่านหน้าคน!):
~$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c
5 /bin/bash
23 /bin/false
1 /bin/sh
1 /bin/sync
17 /usr/sbin/nologin
นั่นคือผลลัพธ์ที่เราเห็นที่ด้านบนสุดของคำตอบแน่นอน ลองจัดเรียงอีกครั้งเพื่อดูรายการตามลำดับ:
~$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c | sort
17 /usr/sbin/nologin
1 /bin/sh
1 /bin/sync
23 /bin/false
5 /bin/bash
รอที่ไม่สามารถได้รับสิทธิ 17 มาก่อนวันที่ 1 และ 5 หลังจากที่ 23. ปัญหาคือว่ารายการที่มีการเรียงlexicographically ขอsort
เรียงลำดับตัวเลขและเรียงกลับกัน:
~$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c | sort -n -r
23 /bin/false
17 /usr/sbin/nologin
5 /bin/bash
1 /bin/sync
1 /bin/sh
ฉันคิดว่ามันอธิบายทุกอย่างในคำตอบดั้งเดิม หากคุณยังไม่ชัดเจนเกี่ยวกับรายละเอียดของคำสั่งเหล่านั้นคุณสามารถอ่านหน้าคู่มือได้ หากคุณยังไม่ชัดเจนในหลักการของสิ่งที่เกิดขึ้นคุณควรเริ่มต้นด้วยการอ่านหนังสือ (ออนไลน์หรือบนกระดาษ) อธิบาย Unix และ Linux
telnet towel.blinkenlights.nl
สำหรับเชลล์ล็อกอินที่ไม่ใช่แบบโต้ตอบ ;-)