12 ต.ค. เวลา 23:32 • วิทยาศาสตร์ & เทคโนโลยี

ลินุกซ์พื้นฐาน : รีไดเรกและไปป์

ในการทำงานบนระบบลินุกซ์ “เชลล์” ไม่ได้เป็นเพียงแค่เครื่องมือรับคำสั่งเท่านั้น แต่ยังสามารถ “เชื่อมโยงข้อมูล” ระหว่างคำสั่งต่าง ๆ ได้อย่างยืดหยุ่น ซึ่งคุณสมบัตินี้เรียกว่า การรีไดเรก (Redirect) และ ไปป์ (Pipe)
นี่คือหัวใจสำคัญของ “ปรัชญายูนิกซ์” — ทำงานเล็ก ๆ ให้ดี แล้วนำเครื่องมือเล็กหลายชิ้นมาทำงานร่วมกันจนกลายเป็นงานใหญ่ได้
1. ทำไมต้องมี stdin, stdout และ stderr ?
โดยปกติเมื่อเราสั่งรันคำสั่งใด ๆ ในเชลล์
ข้อมูลที่ “รับเข้า” มักมาจาก stdin (คีย์บอร์ด)
ข้อมูลที่ “ส่งออก” หรือผลลัพธ์จะไปที่ stdout (หน้าจอ)
ส่วนข้อความแจ้งข้อผิดพลาดจะไปที่ stderr (หน้าจอเช่นกัน)
แต่ในความจริงแล้ว ข้อมูลเหล่านี้สามารถ “เปลี่ยนช่องทาง” ได้ เช่น
นำผลลัพธ์จากคำสั่งหนึ่งไปเป็นข้อมูลเข้าของอีกคำสั่งหนึ่ง หรือบันทึกข้อผิดพลาดลงในไฟล์แทนการแสดงบนหน้าจอ
สิ่งนี้เองที่เรียกว่า “รีไดเรกชัน (Redirection)” และ “ไปป์ (Pipe)”
2. การรีไดเรก (Redirection)
รีไดเรก คือการ “เปลี่ยนทิศทางของข้อมูล”
จากแหล่งมาตรฐาน (stdin/stdout/stderr) ไปยังไฟล์ หรือจากไฟล์กลับเข้าสู่คำสั่ง
ตัวอย่างพื้นฐานเช่น
$ ls > result.txt
คำสั่งนี้จะนำผลลัพธ์จาก ls ไปเก็บไว้ในไฟล์ result.txt แทนที่จะแสดงบนหน้าจอ
หรือหากต้องการ “อ่านข้อมูลจากไฟล์” แทนที่จะพิมพ์เอง
$ sort < data.txt
ตารางรูปแบบการรีไดเรกทั่วไป
3. การจัดการข้อผิดพลาดด้วยรีไดเรก
ในบางกรณี คำสั่งอาจแสดงผลลัพธ์และข้อผิดพลาดบนหน้าจอพร้อมกัน
เราสามารถแยกเก็บไว้คนละไฟล์ได้ เช่น
$ cat /etc/shadow /etc/passwd > result.txt 2> error.txt
1> (stdout) → เก็บผลลัพธ์ปกติใน result.txt
2> (stderr) → เก็บข้อผิดพลาดใน error.txt
หากไม่ต้องการเก็บข้อผิดพลาดเลย ก็สามารถทิ้งลงไฟล์พิเศษ /dev/null ได้ เช่น
$ cat /etc/shadow /etc/passwd 2> /dev/null
4. การใช้ here document
รูปแบบนี้ช่วยให้เราป้อนข้อมูลหลายบรรทัดให้คำสั่งโดยตรง
เช่น สร้างไฟล์ง่าย ๆ ด้วยคำสั่ง cat
$ cat <<EOF > hello.c
#include <stdio.h>
int main() { printf("Hello World!\n"); }
EOF
5. การใช้คำสั่ง tee
โดยทั่วไปเมื่อรีไดเรกข้อมูลไปยังไฟล์ ข้อมูลจะ “หายจากหน้าจอ”
ถ้าอยากให้ แสดงผลบนหน้าจอ และ บันทึกลงไฟล์พร้อมกัน
ให้ใช้คำสั่ง tee
$ echo "Hello Linux!" | tee output.txt
Hello Linux!
คำสั่งนี้จะแสดง “Hello Linux!” บนหน้าจอ และบันทึกข้อความเดียวกันลงในไฟล์ output.txt
6. ไปป์ (Pipe)
ไปป์ ใช้เชื่อมคำสั่งหลายคำสั่งเข้าด้วยกัน โดยนำ “ผลลัพธ์ของคำสั่งแรก” (stdout) ไปเป็น “ข้อมูลเข้า” (stdin) ของคำสั่งถัดไป
เช่น
$ du -D /tmp | sort -nr | head -n 3
คำสั่งนี้จะ
1. แสดงขนาดไฟล์ใน /tmp
2. เรียงจากมากไปน้อย (sort -nr)
3. แสดงเพียง 3 รายการแรก (head -n 3)
หรือจะต่ออีกขั้นเพื่อดูเฉพาะชื่อไดเรกทอรี
$ du -D /tmp | sort -nr | head -n 3 | cut -f 2
สรุป
การใช้ รีไดเรก และ ไปป์ เป็นพื้นฐานสำคัญที่ทำให้เชลล์ในลินุกซ์มีพลังและยืดหยุ่นสูง
คุณสามารถ
นำคำสั่งเล็ก ๆ มาประกอบกันเป็นกระบวนการอัตโนมัติ
แยกเก็บผลลัพธ์และข้อผิดพลาดได้อย่างเป็นระบบ
ทำงานซับซ้อนได้ด้วยคำสั่งเพียงไม่กี่บรรทัด
นี่แหละคือ “ปรัชญายูนิกซ์” อย่างแท้จริง — ทำสิ่งเล็ก ๆ ให้ดี แล้วนำมารวมกันให้ยิ่งใหญ่
ฝากติดตามซีรีส์การใช้ Linux ขั้นพื้นฐานด้วยนะครับ
ติดตามตอนต่อไปได้ที่ - > https://www.blockdit.com/series/68dc9f8ccfbe2a355b6c87d6

ดูเพิ่มเติมในซีรีส์

โฆษณา