การเปลี่ยนเส้นทางอินพุตเอาต์พุตในตัวอย่าง Linux/Unix

การเปลี่ยนเส้นทางคืออะไร?

การเปลี่ยนเส้นทางเป็นคุณสมบัติหนึ่งใน Linux ซึ่งเมื่อดำเนินการคำสั่ง คุณสามารถเปลี่ยนอุปกรณ์อินพุต/เอาท์พุตมาตรฐานได้ ขั้นตอนการทำงานขั้นพื้นฐานใดๆ คำสั่งลินุกซ์ คือรับอินพุตและให้เอาท์พุต

  • อุปกรณ์อินพุตมาตรฐาน (stdin) คือแป้นพิมพ์
  • อุปกรณ์เอาต์พุตมาตรฐาน (stdout) คือหน้าจอ

ด้วยการเปลี่ยนเส้นทาง อินพุต/เอาท์พุตมาตรฐานข้างต้นสามารถเปลี่ยนแปลงได้

คลิก Good Farm Animal Welfare Awards หากไม่สามารถเข้าถึงวิดีโอได้

การเปลี่ยนเส้นทางเอาต์พุต

เทศกาล '>สัญลักษณ์ ' ใช้สำหรับการเปลี่ยนเส้นทางเอาต์พุต (STDOUT)

การเปลี่ยนเส้นทางเอาต์พุต

ตัวอย่าง:

ls -al > listings

ผลลัพธ์ของคำสั่ง ls -al จะถูกเปลี่ยนเส้นทางไปยังไฟล์ "รายการ" แทนหน้าจอของคุณ

การเปลี่ยนเส้นทางเอาต์พุต

หมายเหตุ: ใช้ชื่อไฟล์ที่ถูกต้องในขณะที่เปลี่ยนเส้นทางเอาต์พุตคำสั่งไปยังไฟล์ หากมีไฟล์ชื่อเดียวกันอยู่แล้ว คำสั่งที่ถูกเปลี่ยนเส้นทางจะลบเนื้อหาของไฟล์นั้น จากนั้นอาจถูกเขียนทับ”

หากคุณไม่ต้องการให้เขียนทับไฟล์แต่ต้องการเพิ่มเนื้อหาลงในไฟล์ที่มีอยู่ คุณควรใช้ -' ผู้ดำเนินการ

การเปลี่ยนเส้นทางเอาต์พุต

คุณสามารถเปลี่ยนเส้นทางเอาต์พุตมาตรฐาน ไม่ใช่แค่ไฟล์ แต่ยังรวมถึงอุปกรณ์ด้วย!

$ cat music.mp3 > /dev/audio

คำสั่ง cat อ่านไฟล์ music.mp3 และส่งเอาต์พุตไปที่ /dev/audio ซึ่งเป็นอุปกรณ์เสียง หากการกำหนดค่าเสียงในพีซีของคุณถูกต้อง คำสั่งนี้จะเล่นไฟล์ music.mp3

การเปลี่ยนเส้นทางอินพุต

เทศกาล 'สัญลักษณ์ ' ใช้สำหรับการเปลี่ยนเส้นทางอินพุต (STDIN)

การเปลี่ยนเส้นทางอินพุต

ตัวอย่าง: โปรแกรมเมลใน Linux ช่วยให้คุณส่งอีเมลจาก Terminal ได้

คุณสามารถพิมพ์เนื้อหาอีเมลได้โดยใช้แป้นพิมพ์ของอุปกรณ์มาตรฐาน แต่ถ้าคุณต้องการแนบไฟล์ไปกับอีเมล คุณสามารถใช้ตัวดำเนินการเปลี่ยนเส้นทางอินพุตในรูปแบบต่อไปนี้

Mail -s "Subject" to-address < Filename

การเปลี่ยนเส้นทางอินพุต

นี่จะแนบไฟล์ไปกับอีเมล และจะส่งไปยังผู้รับ

ตัวอย่างข้างต้นนั้นเรียบง่าย เรามาดูเทคนิคการเปลี่ยนทิศทางขั้นสูงซึ่งใช้ File กัน Descriptหรือ.

เนื้อไม่มีมัน Descriptหรือ (FD)

ใน Linux/Unix ทุกอย่างจะเป็นไฟล์ ไฟล์ปกติ ไดเร็กทอรี และแม้แต่อุปกรณ์ก็เป็นไฟล์ ทุกไฟล์มีหมายเลขที่เกี่ยวข้องเรียกว่าไฟล์ Descriptหรือ (FD)

หน้าจอของคุณมีไฟล์ด้วย Descriptหรือ. เมื่อโปรแกรมถูกดำเนินการ ผลลัพธ์จะถูกส่งไปยังไฟล์ Descriptหรือของหน้าจอ และคุณจะเห็นเอาต์พุตของโปรแกรมบนจอภาพของคุณ หากเอาต์พุตถูกส่งไปยัง File Descriptหรือของเครื่องพิมพ์ โปรแกรมก็จะถูกพิมพ์ออกมา

ข้อผิดพลาดในการเปลี่ยนเส้นทาง

ทุกครั้งที่คุณรันโปรแกรม/คำสั่งที่เทอร์มินัล ไฟล์ 3 ไฟล์จะเปิดอยู่เสมอ ได้แก่ อินพุตมาตรฐาน เอาท์พุตมาตรฐาน ข้อผิดพลาดมาตรฐาน.

ข้อผิดพลาดในการเปลี่ยนเส้นทาง

ไฟล์เหล่านี้จะปรากฏทุกครั้งที่มีการรันโปรแกรม ตามที่อธิบายไว้ก่อนหน้าตัวอธิบายไฟล์ จะเชื่อมโยงกับแต่ละไฟล์เหล่านี้

เนื้อไม่มีมัน เนื้อไม่มีมัน Descriptor
อินพุตมาตรฐาน STDIN 0
เอาต์พุตมาตรฐาน STDOUT 1
ข้อผิดพลาดมาตรฐาน STDERR 2

โดยค่าเริ่มต้น สตรีมข้อผิดพลาดจะแสดงบนหน้าจอ การเปลี่ยนเส้นทางข้อผิดพลาดคือการกำหนดเส้นทางข้อผิดพลาดไปยังไฟล์อื่นนอกเหนือจากหน้าจอ

เหตุใดจึงมีข้อผิดพลาดในการเปลี่ยนเส้นทาง

การเปลี่ยนทิศทางข้อผิดพลาดเป็นหนึ่งในคุณสมบัติยอดนิยมของ Unix / ลินุกซ์.

ผู้ใช้ UNIX บ่อยครั้งจะถือว่าคำสั่งจำนวนมากทำให้เกิดข้อผิดพลาดจำนวนมหาศาล

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

วิธีแก้ไขคือเปลี่ยนเส้นทางข้อความแสดงข้อผิดพลาดไปยังไฟล์อีกครั้ง

1 ตัวอย่าง

$ myprogram 2>errorsfile

เหตุใดจึงมีข้อผิดพลาดในการเปลี่ยนเส้นทาง

ด้านบนนี้เรากำลังรันโปรแกรมชื่อ myprogram

ตัวอธิบายไฟล์สำหรับข้อผิดพลาดมาตรฐานคือ 2

การใช้ “2>” เราจะเปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดไปยังไฟล์ชื่อ “errorfile”

ดังนั้นเอาต์พุตของโปรแกรมจึงไม่เต็มไปด้วยข้อผิดพลาด

2 ตัวอย่าง

นี่เป็นอีกตัวอย่างหนึ่งที่ใช้คำสั่ง find –

find . -name 'my*' 2>error.log

การใช้คำสั่ง “find” เรากำลังค้นหาไฟล์ที่มี “ชื่อ” ที่ขึ้นต้นด้วย “my” ในไดเร็กทอรีปัจจุบัน

เหตุใดจึงมีข้อผิดพลาดในการเปลี่ยนเส้นทาง

3 ตัวอย่าง: มาดูตัวอย่างที่ซับซ้อนกว่านี้

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

ls Documents ABC> dirlist 2>&1

ที่นี่

  • ซึ่งเขียนเอาต์พุตจากไฟล์หนึ่งไปยังอินพุตของไฟล์อื่น 2>&1 หมายความว่า STDERR เปลี่ยนเส้นทางไปยังเป้าหมายของ STDOUT (ซึ่งเป็นไฟล์ dirlist)
  • เรากำลังเปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดไปยังเอาต์พุตมาตรฐาน ซึ่งจะถูกเปลี่ยนเส้นทางไปยังไฟล์ dirlist ดังนั้นเอาต์พุตทั้งสองจึงถูกเขียนไปยังไฟล์ dirlist

เหตุใดจึงมีข้อผิดพลาดในการเปลี่ยนเส้นทาง

สรุป

  • แต่ละไฟล์ใน Linux มีไฟล์ที่สอดคล้องกัน Descriptหรือเกี่ยวข้องกับมัน
  • แป้นพิมพ์เป็นอุปกรณ์อินพุตมาตรฐาน ในขณะที่หน้าจอของคุณเป็นอุปกรณ์เอาต์พุตมาตรฐาน
  • “>” คือตัวดำเนินการเปลี่ยนเส้นทางเอาต์พุต “>>” จะผนวกเอาต์พุตไปยังไฟล์ที่มีอยู่
  • “<” คือตัวดำเนินการเปลี่ยนเส้นทางอินพุต
  • “>&” เปลี่ยนเส้นทางเอาต์พุตของไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง
  • คุณสามารถเปลี่ยนเส้นทางข้อผิดพลาดได้โดยใช้ไฟล์ที่เกี่ยวข้อง Descriptหรือ 2