ต่อไปนี้เป็นบิตที่จะช่วยผู้ใช้ใหม่
ก่อนอื่นจำเป็นต้องเข้าใจแนวคิดของอินพุตมาตรฐานและเอาต์พุตมาตรฐาน
ใน Linux และระบบปฏิบัติการคล้าย UNIX อื่น ๆ แต่ละกระบวนการมีอินพุตมาตรฐาน ( stdin
) และเอาต์พุตมาตรฐาน ( stdout
) สถานการณ์ปกติคือstdin
แป้นพิมพ์ของคุณและstdout
เป็นหน้าจอหรือหน้าต่างเทอร์มินัลของคุณ
ดังนั้นเมื่อคุณเรียกใช้ก็จะโยนมันออกไปls
stdout
หากคุณไม่ทำอะไรเลยมันจะไปที่หน้าจอหรือหน้าต่างเทอร์มินัลและคุณจะดู
ตอนนี้คำสั่ง Linux บางคำสั่งจะโต้ตอบกับผู้ใช้และใช้stdin
ในการทำเช่นนั้นตัวแก้ไขข้อความของคุณจะเป็นหนึ่งในนั้น มันอ่านจากที่จะยอมรับการกดแป้นพิมพ์ของคุณทำสิ่งแล้วสิ่งที่จะเขียนstdin
stdout
อย่างไรก็ตามยังมีคำสั่งที่ไม่ใช่แบบโต้ตอบหรือ "ตัวกรอง" ที่ไม่ทำงานแบบโต้ตอบ แต่ต้องการข้อมูลจำนวนมาก คำสั่งเหล่านี้จะนำทุกอย่างstdin
ไปทำสิ่งนั้นแล้วโยนมันไปstdout
ลองดูคำสั่งอื่นที่เรียกว่าdu
- ย่อมาจากการใช้งานดิสก์ du /usr
ตัวอย่างเช่นจะพิมพ์ออกมา ( stdout
เช่นเดียวกับคำสั่ง Linux อื่น ๆ ) รายการของทุกไฟล์ในไดเรกทอรีนั้นและมีขนาด:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
ในขณะที่คุณสามารถบอกได้ทันทีจากค้างคาวมันไม่ได้ถูกจัดเรียงและคุณอาจต้องการให้มันเรียงตามขนาด
sort
เป็นหนึ่งในคำสั่ง "ตัวกรอง" ที่จะstdin
คัดแยกสิ่งต่าง ๆ ออกมาและเรียงลำดับ
ดังนั้นถ้าเราทำสิ่งนี้:
# du /usr | sort -nr
เราได้สิ่งนี้ซึ่งดีกว่า:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
และตอนนี้คุณจะเห็นว่า "ท่อ" เชื่อมต่อกับstdout
คำสั่งหนึ่งไปยังstdin
อีก โดยทั่วไปแล้วคุณจะใช้ในสถานการณ์เช่นนี้ซึ่งคุณต้องการกรองเรียงลำดับหรือจัดการกับเอาต์พุตของคำสั่ง สามารถเรียงซ้อนหากคุณต้องการประมวลผลเอาต์พุตผ่านคำสั่งตัวกรองหลายคำสั่ง
ถ้าคุณพิมพ์ด้วยตัวเองก็จะยังคงพยายามที่จะอ่านจากsort
stdin
เนื่องจากstdin
เชื่อมต่อกับแป้นพิมพ์ของคุณแล้วจะรอให้คุณพิมพ์และประมวลผลสิ่งต่าง ๆ จนกว่าคุณจะกด Control-D มันจะไม่แจ้งให้คุณทราบเนื่องจากไม่ได้มีไว้สำหรับใช้โต้ตอบ
เป็นไปได้สำหรับโปรแกรมที่จะบอกว่าstdin
เป็นแบบโต้ตอบหรือไม่ดังนั้นบางโปรแกรมอาจทำงานแตกต่างกันถ้าคุณออกมันด้วยตัวเองหรือในตอนท้ายของไพพ์
นอกจากนี้การวางโปรแกรมที่ใช้งานได้แบบโต้ตอบvi
เท่านั้นจะส่งผลให้คุณมีเวลาที่ไม่ดี
ท่อแตกต่างจากการเปลี่ยนเส้นทางซึ่งข้อมูลถูกสับจากคำสั่งหนึ่งไปยังอีกคำสั่งโดยไม่ถูกเก็บไว้ที่ใดก็ได้ ดังนั้นในตัวอย่างข้างต้นdu
เอาต์พุตของจะไม่ถูกเก็บไว้ที่ใดก็ได้ เวลาส่วนใหญ่คุณไม่ต้องการสิ่งนี้ด้วยไพพ์เพราะเหตุผลที่ใช้ไพพ์คือการประมวลผลเอาต์พุตของคำสั่งในบางวิธี - แต่มีคำสั่งtee
ที่ให้คุณมีเค้กและกินมันด้วยเช่นกัน คัดลอกสิ่งที่ได้รับจากstdin
ทั้งสองstdout
และไฟล์ที่คุณเลือก คุณอาจจะทำสิ่งนี้bash
ด้วยไวยากรณ์อาร์เคนบางอันที่เกี่ยวข้องกับเครื่องหมายและวงเล็บที่ฉันไม่รู้
|
คือมันไม่ได้ใช้ชื่อเอาต์พุตจากคำสั่ง l-hand จะถูกส่งโดยตรงไปยังอินพุตสำหรับคำสั่งที่ด้านซ้ายมือของไพพ์