การเปลี่ยนเส้นทางอินพุตเอาต์พุตในตัวอย่าง 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