# พื้นฐานเบื้องต้นของยูนิกซ์และลีนุกซ์ (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 เพื่อขอดูวิธีการใช้งานคำสั่งเหล่านี้

- date จะพิมพ์วันที่ของระบบออกมา
- who จะพิมพ์รายชื่อผู้ใช้งาน ที่กำลังใช้งานระบบออกมา
- finger เหมือนกับ who แต่จะมีรายละเอียดอย่างอื่นออกมาด้วย
- grep เลือกเอาข้อมูลที่สอดคล้องกับที่ระบุไว้ (ต่อท้ายคำสั่ง)
- help ขอคำอธิบายเกี่ยวกับคำสั่งในลีนุกซ์

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