ค้นหาเว็บไซต์

เรียนรู้พื้นฐานการทำงานของการเปลี่ยนเส้นทาง I/O (อินพุต/เอาท์พุต) ของ Linux


หนึ่งในหัวข้อที่สำคัญและน่าสนใจที่สุดภายใต้การดูแลระบบ Linux คือการเปลี่ยนเส้นทาง I/O คุณลักษณะของบรรทัดคำสั่งนี้ช่วยให้คุณสามารถเปลี่ยนเส้นทางอินพุตและ/หรือเอาต์พุตของคำสั่งจากและ/หรือไปยังไฟล์ หรือรวมคำสั่งหลายคำสั่งเข้าด้วยกันโดยใช้ไปป์เพื่อสร้างสิ่งที่เรียกว่า “ไปป์ไลน์คำสั่ง ” .

คำสั่งทั้งหมดที่เรารันโดยพื้นฐานแล้วจะสร้างเอาต์พุตสองประเภท:

  1. ผลลัพธ์คำสั่ง – ข้อมูลที่โปรแกรมออกแบบมาเพื่อผลิตและ
  2. สถานะของโปรแกรมและข้อความแสดงข้อผิดพลาดที่แจ้งให้ผู้ใช้ทราบรายละเอียดการทำงานของโปรแกรม

ใน Linux และระบบที่คล้าย Unix อื่นๆ มีไฟล์เริ่มต้นสามไฟล์ชื่อด้านล่าง ซึ่งเชลล์ระบุด้วยโดยใช้หมายเลขตัวอธิบายไฟล์:

  1. stdin หรือ 0 – เชื่อมต่อกับแป้นพิมพ์ โปรแกรมส่วนใหญ่อ่านอินพุตจากไฟล์นี้
  2. stdout หรือ 1 – ติดอยู่ที่หน้าจอ และโปรแกรมทั้งหมดจะส่งผลลัพธ์ไปที่ไฟล์นี้และ
  3. stderr หรือ 2 – โปรแกรมส่งข้อความสถานะ/ข้อผิดพลาดไปยังไฟล์นี้ซึ่งแนบไปกับหน้าจอด้วย

ดังนั้นการเปลี่ยนเส้นทาง I/O ช่วยให้คุณสามารถเปลี่ยนแหล่งอินพุตของคำสั่ง รวมถึงตำแหน่งที่เอาต์พุตและข้อความแสดงข้อผิดพลาดถูกส่งไป และสิ่งนี้เกิดขึ้นได้โดยตัวดำเนินการเปลี่ยนเส้นทาง “< ” และ “> ”

วิธีเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์ใน Linux

คุณสามารถเปลี่ยนเส้นทางเอาต์พุตมาตรฐานได้ดังตัวอย่างด้านล่าง ที่นี่ เราต้องการจัดเก็บเอาต์พุตของคำสั่ง top เพื่อการตรวจสอบในภายหลัง:

top -bn 5 >top.log

ที่ไหนธง:

  1. -b – เปิดใช้งาน top เพื่อทำงานในโหมดแบตช์ เพื่อให้คุณสามารถเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์หรือคำสั่งอื่นได้
  2. -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 

ที่นี่ตัวเลือก:

  1. -l – เปิดใช้งานรูปแบบรายการแบบยาว
  2. -t – จัดเรียงตามเวลาแก้ไขโดยแสดงไฟล์ใหม่ล่าสุดก่อน
  3. -n – ระบุจำนวนบรรทัดส่วนหัวที่จะแสดง

คำสั่งสำคัญสำหรับการสร้างไปป์ไลน์

ที่นี่ เราจะทบทวนคำสั่งสำคัญสองคำสั่งโดยย่อสำหรับการสร้างไปป์ไลน์คำสั่ง ซึ่งได้แก่:

xargs ซึ่งใช้ในการสร้างและดำเนินการบรรทัดคำสั่งจากอินพุตมาตรฐาน ด้านล่างนี้เป็นตัวอย่างของไปป์ไลน์ที่ใช้ xargs คำสั่งนี้ใช้เพื่อคัดลอกไฟล์ไปยังหลายไดเร็กทอรีใน Linux:

echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

และตัวเลือก:

  1. -n 1 – สั่งให้ xargs ใช้มากที่สุดหนึ่งอาร์กิวเมนต์ต่อบรรทัดคำสั่งและส่งไปยังคำสั่ง cp
  2. cp – คัดลอกไฟล์
  3. -v – แสดงความคืบหน้าของคำสั่งคัดลอก

สำหรับตัวเลือกการใช้งานและข้อมูลเพิ่มเติม โปรดอ่านหน้าคู่มือ xargs:

man xargs 

คำสั่ง tee อ่านจากอินพุตมาตรฐานและเขียนไปยังเอาต์พุตและไฟล์มาตรฐาน เราสามารถสาธิตการทำงานของ ที ได้ดังนี้:

echo "Testing how tee command works" | tee file1 

ตัวกรองไฟล์หรือข้อความมักใช้กับไพพ์เพื่อการทำงานของไฟล์ Linux ที่มีประสิทธิภาพ เพื่อประมวลผลข้อมูลด้วยวิธีที่มีประสิทธิภาพ เช่น การปรับโครงสร้างเอาต์พุตของคำสั่ง (ซึ่งอาจมีความสำคัญสำหรับการสร้างรายงาน Linux ที่เป็นประโยชน์) การแก้ไขข้อความในไฟล์ รวมถึงการดูแลระบบ Linux อื่นๆ อีกหลายรายการ งาน

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตัวกรองและไปป์ของ Linux โปรดอ่านบทความนี้ ค้นหาที่อยู่ IP 10 อันดับแรกในการเข้าถึงเซิร์ฟเวอร์ Apache แสดงตัวอย่างที่เป็นประโยชน์ของการใช้ตัวกรองและไปป์

ในบทความนี้ เราได้อธิบายพื้นฐานของการเปลี่ยนเส้นทาง I/O ใน Linux อย่าลืมแบ่งปันความคิดของคุณผ่านทางส่วนคำติชมด้านล่าง