พื้นฐานเบื้องต้นของยูนิกซ์และลีนุกซ์ (2)

การใช้ wildcard

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

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

ตัวอย่าง : คุณต้องการทำการสำเนาไฟล์ทั้งหมดจากไดเรกทอรีปัจจุบันไปยังไดเรกทอรีที่ชื่อว่า backup ให้คุณใช้คำสั่งต่อไปนี้
cp data* ~/backup
เครื่องหมายดอกจัน (*) หมายถึงคุณสั่งให้ระบบทำการสำเนาไฟล์ที่มีชื่อขึ้นต้นด้วย data ทั้งหมดไปไว้ที่ไดเรกทอรี ~/backup

เราสามารถใช้เครื่องหมายตัวหนอน (~) เพื่อแทนความหมายของ home directory ได้ซึ่ง home directory ก็คือไดเรกทอรีของเจ้าตัวผู้ใช้งานนั่นเอง ซึ่งจะเป็นไดเรกทอรีแรกที่เราทำการล็อกอินเข้ามาใช้งาน โดยปกติ home directory ของ super user จะเป็น /root สำหรับตัวอย่างข้างบน หาก home directory ของเราเป็น /home/peter การอ้าง ถึง ~/backup จะหมายความถึง /home/peter/backup นั่นเอง

ให้คุณทดลองใช้คำสั่งดูว่า
cp d*w ~/backup
จะทำงานอย่างไร

การใช้เครื่องหมายอัศเจรีย์ (?)
การใช้เครื่องหมาย ? จะหมายถึงแทนตัวอักษรอะไรก็ได้ จำนวนเท่ากับจำนวนของเครื่องหมาย ? นั้น ตัวอย่างเช่น
cp abc.d?? ~/backup
จะหมายถึงให้ทำการสำเนาไฟล์ ที่มีชื่อเป็น abc และมีนามสกุลที่ขึ้นต้นด้วย d และลง ท้ายด้วยตัวอักษรอะไรก็ได้สองตัว ไปไว้ที่ไดเรกทอรี ~/backup

UNIX concept

standard input/output

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

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

การทำ redirection

การเปลี่ยนทิศทางของการแสดงผลลัพธ์ (output redirection) ซึ่งจะมีประโยชน์ในการเก็บ ผลลัพธ์ของคำสั่งต่างๆนั้นลงไปเก็บไว้ในไฟล์ หรือนำออกไปพิมพ์ผ่านทางเครื่องพิมพ์ แทนที่จะพิมพ์ออก ทางหน้าจอตามปกติ เราสามารถสั่งให้ยูนิกซ์ทำการเปลี่ยนทิศทางของ การแสดงผลลัพธ์ได้โดยการใช้เครื่องหมายมากกว่า (>) ต่อท้ายคำสั่งเช่น
ls -l > listing
คำสั่งนี้จะแสดงรายชื่อไฟล์ในไดเรกทอรีปัจจุบันออกมา และนำไปเก็บไว้ในไฟล์ที่ชื่อ listing หากใช้การเปลี่ยนทิศทางของการแสดงผลลัพธ์กับคำสั่ง cat ดังตัวอย่าง
cat > myfile
This is a cat in a file
^D
เมื่อเราพิมพ์ข้อความต่างๆลงไป และสิ้นสุดด้วยการกด Ctrl-d แล้วนั้น ระบบจะไม่นำเอาข้อความที่เราพิมพ์ลงไปแสดงออกมาที่หน้าจอ แต่จะเก็บลงไปในไฟล์ที่ชื่อว่า myfile แทน คุณสามารถสั่งให้ระบบแสดงข้อความในไฟล์ออกมาได้โดยใช้คำสั่ง
cat myfile
จะเห็นข้อความที่ได้พิมพ์เก็บไว้ข้างต้น เราสามารถใช้วิธีนี้ในการพิมพ์ข้อมูลเก็บลง ไปในไฟล์อย่างง่ายๆได้ นอกจากนี้เราสามารถทำการเปลี่ยนทิศทางการแสดงผลลัพธ์ ให้นำไปต่อท้ายได้ โดยใช้เครื่องหมาย ">>" (nondestructive redirection) ตัวอย่างเช่น
ls >> myfile
จะแสดงรายชื่อของไฟล์ในไดเรกทอรีปัจจุบัน และนำไปต่อท้ายยังไฟล์ myfile

เราสามารถจะทำการเปลี่ยนทิศทางของข้อมูลเข้า (input redirection) ก็ได้เช่นเดียวกัน โดยแทนที่จะให้นำข้อมูลเข้าจากคีย์บอร์ด เราอาจสามารถให้ระบบนำข้อมูลจากไฟล์มาเป็น ข้อมูลเข้าแก่คำสั่งก็ได้ ตัวอย่างเช่น
sort < listfile
จะแสดงผลลัพธ์จากไฟล์ listfile ที่เรียงลำดับกัน ออกมาให้

การ pipe

คุณสามารถนำเอาผลลัพธ์ที่ได้จากคำสั่งหนึ่ง นำไปใส่เป็นข้อมูลให้กับอีกคำสั่งหนึ่ง ได้ คุณจะต้องใช้เครื่องหมาย '|' เพื่อทำการเปลี่ยนผลลัพธ์ไปเป็น input ให้กับ
คำสั่งอื่น
ตัวอย่าง ต้องการให้แสดงรายชื่อของไฟล์ในไดเรกทอรีโดยเรียงลำดับกันจากมาก ไปหาน้อย โดยปกติแล้วคุณจะต้องใช้คำสั่งทีละคำสั่งต่อไปนี้
  1. สั่งให้แสดงรายชื่อของไฟล์ในไดเรกทอรี และเก็บผลลัพธ์ลงไฟล์
    ls > listfile
    
  2. นำเอาข้อมูลที่อยู่ในไฟล์ listfile มาเป็น input ให้กับคำสั่ง sort เพื่อเรียงลำดับจากมากไปหาน้อย โดยจะต้องใช้ option -r
    sort -r < listfile
    
    หรือ
    sort -r listfile
    
    แต่แทนที่คุณจะต้องสั่งทั้งสองคำสั่งนี้ คุณสามารถจะยุบรวมคำสั่งให้เหลือคำสั่งเดียวได้ โดยใช้ความสามารถของ pipe เข้าช่วยดังนี้
    ls | sort -r
    

คำสั่งอื่นๆ

มีคำสั่งอื่นๆที่น่าสนใจ ขอให้คุณลองใช้คำสั่งดังต่อไปนี้เพื่อทดลองแสดงผลลัพธ์ต่างๆ คำสั่งเหล่านี้นอกจากเราจะทำการสั่งโดยพิมพ์คำสั่งนั้นอย่างเดียวแล้วเรายังสามารถใส่ option ระบุเพิ่มลงไปด้วย คุณสามารถหาความหมายเพิ่มเติมของ option ได้โดยการระบุ option --help ต่อท้ายคำสั่ง เพื่อให้ระบบพิมพ์ข้อความอธิบายออกมา หรือใช้คำสั่ง man เพื่อขอดูวิธีการใช้งานคำสั่งเหล่านี้


HTML developed by Kaiwal Development Team (kaiwal@geocities.com)