เรียนรู้พื้นฐานการทำงานของการเปลี่ยนเส้นทาง I/O (อินพุต/เอาท์พุต) ของ Linux
หนึ่งในหัวข้อที่สำคัญและน่าสนใจที่สุดภายใต้การดูแลระบบ Linux คือการเปลี่ยนเส้นทาง I/O คุณลักษณะของบรรทัดคำสั่งนี้ช่วยให้คุณสามารถเปลี่ยนเส้นทางอินพุตและ/หรือเอาต์พุตของคำสั่งจากและ/หรือไปยังไฟล์ หรือรวมคำสั่งหลายคำสั่งเข้าด้วยกันโดยใช้ไปป์เพื่อสร้างสิ่งที่เรียกว่า “ไปป์ไลน์คำสั่ง ” .
คำสั่งทั้งหมดที่เรารันโดยพื้นฐานแล้วจะสร้างเอาต์พุตสองประเภท:
- ผลลัพธ์คำสั่ง – ข้อมูลที่โปรแกรมออกแบบมาเพื่อผลิตและ
- สถานะของโปรแกรมและข้อความแสดงข้อผิดพลาดที่แจ้งให้ผู้ใช้ทราบรายละเอียดการทำงานของโปรแกรม
ใน Linux และระบบที่คล้าย Unix อื่นๆ มีไฟล์เริ่มต้นสามไฟล์ชื่อด้านล่าง ซึ่งเชลล์ระบุด้วยโดยใช้หมายเลขตัวอธิบายไฟล์:
- stdin หรือ 0 – เชื่อมต่อกับแป้นพิมพ์ โปรแกรมส่วนใหญ่อ่านอินพุตจากไฟล์นี้
- stdout หรือ 1 – ติดอยู่ที่หน้าจอ และโปรแกรมทั้งหมดจะส่งผลลัพธ์ไปที่ไฟล์นี้และ
- stderr หรือ 2 – โปรแกรมส่งข้อความสถานะ/ข้อผิดพลาดไปยังไฟล์นี้ซึ่งแนบไปกับหน้าจอด้วย
ดังนั้นการเปลี่ยนเส้นทาง I/O ช่วยให้คุณสามารถเปลี่ยนแหล่งอินพุตของคำสั่ง รวมถึงตำแหน่งที่เอาต์พุตและข้อความแสดงข้อผิดพลาดถูกส่งไป และสิ่งนี้เกิดขึ้นได้โดยตัวดำเนินการเปลี่ยนเส้นทาง “< ”
และ “> ”
วิธีเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์ใน Linux
คุณสามารถเปลี่ยนเส้นทางเอาต์พุตมาตรฐานได้ดังตัวอย่างด้านล่าง ที่นี่ เราต้องการจัดเก็บเอาต์พุตของคำสั่ง top เพื่อการตรวจสอบในภายหลัง:
top -bn 5 >top.log
ที่ไหนธง:
-b
– เปิดใช้งาน top เพื่อทำงานในโหมดแบตช์ เพื่อให้คุณสามารถเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์หรือคำสั่งอื่นได้-n
– ระบุจำนวนการวนซ้ำก่อนที่คำสั่งจะสิ้นสุดลง
คุณสามารถดูเนื้อหาของไฟล์ top.log
ได้โดยใช้คำสั่ง cat ดังนี้:
cat top.log
หากต้องการต่อท้ายเอาต์พุตของคำสั่ง ให้ใช้ตัวดำเนินการ “>> ”
ตัวอย่างเช่น หากต้องการต่อท้ายเอาต์พุตของคำสั่งด้านบนด้านบนในไฟล์ top.log โดยเฉพาะภายในสคริปต์ (หรือบนบรรทัดคำสั่ง) ให้ป้อนบรรทัดด้านล่าง:
top -bn 5 >>top.log
หมายเหตุ: การใช้หมายเลขตัวอธิบายไฟล์ คำสั่งการเปลี่ยนเส้นทางเอาต์พุตด้านบนจะเหมือนกับ:
top -bn 5 1>top.log
วิธีเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังไฟล์ใน Linux
ในการเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานของคำสั่ง คุณต้องระบุหมายเลขตัวอธิบายไฟล์ 2
อย่างชัดเจนสำหรับเชลล์เพื่อทำความเข้าใจสิ่งที่คุณพยายามทำ
ตัวอย่างเช่น คำสั่ง ls ด้านล่างจะทำให้เกิดข้อผิดพลาดเมื่อดำเนินการโดยผู้ใช้ระบบปกติโดยไม่มีสิทธิ์ root:
ls -l /root/
คุณสามารถเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังไฟล์ได้ดังนี้:
ls -l /root/ 2>ls-error.log
cat ls-error.log
หากต้องการผนวกข้อผิดพลาดมาตรฐาน ให้ใช้คำสั่งด้านล่าง:
ls -l /root/ 2>>ls-error.log
วิธีเปลี่ยนเส้นทางเอาต์พุตมาตรฐาน/ข้อผิดพลาดไปเป็นไฟล์เดียว
นอกจากนี้ยังสามารถบันทึกเอาต์พุตทั้งหมดของคำสั่ง (ทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐาน) ลงในไฟล์เดียวได้อีกด้วย ซึ่งสามารถทำได้สองวิธีที่เป็นไปได้โดยการระบุหมายเลขตัวอธิบายไฟล์:
1. วิธีแรกเป็นวิธีการที่ค่อนข้างเก่าซึ่งใช้งานได้ดังนี้:
ls -l /root/ >ls-error.log 2>&1
คำสั่งด้านบนหมายความว่าเชลล์จะส่งเอาต์พุตของคำสั่ง ls ไปยังไฟล์ ls-error.log ก่อน (โดยใช้ >ls-error.log
) จากนั้นจึงเขียน ข้อความแสดงข้อผิดพลาดทั้งหมดไปยังตัวอธิบายไฟล์ 2 (เอาต์พุตมาตรฐาน) ซึ่งถูกเปลี่ยนเส้นทางไปยังไฟล์ ls-error.log (โดยใช้ 2>&1
). หมายความว่าข้อผิดพลาดมาตรฐานจะถูกส่งไปยังไฟล์เดียวกันกับเอาต์พุตมาตรฐานด้วย
2. วิธีที่สองและโดยตรงคือ:
ls -l /root/ &>ls-error.log
คุณสามารถผนวกเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานเข้ากับไฟล์เดียวได้เช่นกัน:
ls -l /root/ &>>ls-error.log
วิธีเปลี่ยนเส้นทางอินพุตมาตรฐานไปยังไฟล์
คำสั่งส่วนใหญ่หากไม่ใช่ทั้งหมดจะได้รับอินพุตจากอินพุตมาตรฐาน และตามค่าเริ่มต้นอินพุตมาตรฐานจะแนบไปกับคีย์บอร์ด
หากต้องการเปลี่ยนเส้นทางอินพุตมาตรฐานจากไฟล์อื่นที่ไม่ใช่คีย์บอร์ด ให้ใช้ตัวดำเนินการ “< ”
ดังต่อไปนี้:
cat <domains.list
วิธีการเปลี่ยนเส้นทางอินพุต/เอาท์พุตมาตรฐานไปยังไฟล์
คุณสามารถดำเนินการอินพุตมาตรฐานและการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานพร้อมกันได้โดยใช้คำสั่ง sort ดังต่อไปนี้:
sort <domains.list >sort.output
วิธีใช้การเปลี่ยนเส้นทาง I/O โดยใช้ไพพ์
หากต้องการเปลี่ยนเส้นทางเอาต์พุตของคำสั่งหนึ่งไปเป็นอินพุตของอีกคำสั่งหนึ่ง คุณสามารถใช้ไพพ์ได้ ซึ่งเป็นวิธีที่มีประสิทธิภาพในการสร้างบรรทัดคำสั่งที่มีประโยชน์สำหรับการดำเนินการที่ซับซ้อน
ตัวอย่างเช่น คำสั่งด้านล่างจะแสดงรายการไฟล์ที่แก้ไขล่าสุดห้าอันดับแรก
ls -lt | head -n 5
ที่นี่ตัวเลือก:
-l
– เปิดใช้งานรูปแบบรายการแบบยาว-t
– จัดเรียงตามเวลาแก้ไขโดยแสดงไฟล์ใหม่ล่าสุดก่อน-n
– ระบุจำนวนบรรทัดส่วนหัวที่จะแสดง
คำสั่งสำคัญสำหรับการสร้างไปป์ไลน์
ที่นี่ เราจะทบทวนคำสั่งสำคัญสองคำสั่งโดยย่อสำหรับการสร้างไปป์ไลน์คำสั่ง ซึ่งได้แก่:
xargs ซึ่งใช้ในการสร้างและดำเนินการบรรทัดคำสั่งจากอินพุตมาตรฐาน ด้านล่างนี้เป็นตัวอย่างของไปป์ไลน์ที่ใช้ xargs คำสั่งนี้ใช้เพื่อคัดลอกไฟล์ไปยังหลายไดเร็กทอรีใน Linux:
echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
และตัวเลือก:
-n 1
– สั่งให้ xargs ใช้มากที่สุดหนึ่งอาร์กิวเมนต์ต่อบรรทัดคำสั่งและส่งไปยังคำสั่ง cpcp
– คัดลอกไฟล์-v
– แสดงความคืบหน้าของคำสั่งคัดลอก
สำหรับตัวเลือกการใช้งานและข้อมูลเพิ่มเติม โปรดอ่านหน้าคู่มือ xargs:
man xargs
คำสั่ง tee อ่านจากอินพุตมาตรฐานและเขียนไปยังเอาต์พุตและไฟล์มาตรฐาน เราสามารถสาธิตการทำงานของ ที ได้ดังนี้:
echo "Testing how tee command works" | tee file1
ตัวกรองไฟล์หรือข้อความมักใช้กับไพพ์เพื่อการทำงานของไฟล์ Linux ที่มีประสิทธิภาพ เพื่อประมวลผลข้อมูลด้วยวิธีที่มีประสิทธิภาพ เช่น การปรับโครงสร้างเอาต์พุตของคำสั่ง (ซึ่งอาจมีความสำคัญสำหรับการสร้างรายงาน Linux ที่เป็นประโยชน์) การแก้ไขข้อความในไฟล์ รวมถึงการดูแลระบบ Linux อื่นๆ อีกหลายรายการ งาน
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตัวกรองและไปป์ของ Linux โปรดอ่านบทความนี้ ค้นหาที่อยู่ IP 10 อันดับแรกในการเข้าถึงเซิร์ฟเวอร์ Apache แสดงตัวอย่างที่เป็นประโยชน์ของการใช้ตัวกรองและไปป์
ในบทความนี้ เราได้อธิบายพื้นฐานของการเปลี่ยนเส้นทาง I/O ใน Linux อย่าลืมแบ่งปันความคิดของคุณผ่านทางส่วนคำติชมด้านล่าง