December 19, 2011

Shell: ธรรมชาติของโปรแกรมลินุกซ์ และการเปลี่ยนทิศทางข้อมูล

คำสั่งต่างๆ ของ Unix/Linux นั้นก็คือโปรแกรมโปรแกรมหนึ่ง ปรกติเราสามารถเรียกมันมาทำงานโดยพิมพ์ชื่อโปรแกรม (คำสั่ง) นั้นๆ ลงไป อย่างเช่นที่เคยทำมาแล้ว

เราสามารถใส่ argument ให้กับคำสั่งนั้นๆ โดย argument มีอยู่ 2 แบบ แบบแรกคือ option argument ซึ่งจะใช้เครื่องหมาย - นำหน้าคำสั่งที่เป็นตัวย่อ (สามารถใส่ได้หลายคำสั่ง) หรือใช้ -- นำหน้าคำสั่งเต็ม (เพื่อให้อ่านง่าย) ซึ่งแต่ละ option จะแยกกันด้วย space เช่น

ส่วน argument อีกแบบคืออันที่ไม่มีเครื่องหมาย - นำหน้า มันอาจหมายถึง path ของไฟล์สำหรับคำสั่งนั้นๆ หรือข้อความที่ส่งเข้าไปเป็น argument ให้ก็ได้

เนื่องจากคำสั่งเหล่านี้มีเยอะแยะมากมายตามแต่ละโปรแกรม สามารถหาอ่านเองได้ด้วยคำสั่ง man แล้วตามด้วยชื่อโปรแกรมที่อยากรู้ครับ (ออกโปรแกรมด้วยตัว q)



ธรรมชาติอีกอย่างของโปรแกรมเหล่านี้คือ บางโปรแกรมจะพิมพ์ผลลัพท์ออกมาทันทีแล้วกลับมาอยู่ที่ shell หลักเลย ส่วนบางโปรแกรมจะพาเราเข้าไปอยู่ใน shell ประจำโปรแกรมนั้นๆ พร้อมกับรอคำสั่งเพิ่มเติม อย่างเช่นโปรแกรม cat ที่จะทำการพิมพ์ข้อความซ้ำตามที่เราพิมพ์ป้อนให้มันครับ

วิธีการออกจากโปรแกรมเหล่านี้ก็แตกต่างกันออกไป (บางโปรแกรมก็มีคำสั่งเฉพาะสำหรับออกโปรแกรม) แต่ส่วนใหญ่แล้ว สามารถกด keyboard เพื่อป้อนคำสั่งให้หยุดโปรแกรมได้ ดังนี้
  1. [Ctrl]+[c] ส่งสัญญาณ keyboard interrupt บางโปรแกรมจะหยุดแค่งานย่อยๆ แต่ไม่ออกโปรแกรม
  2. [Ctrl]+[z] หยุดโปรแกรมชั่วคราว (เรียกทำงานต่อโดยคำสั่ง fg)
  3. [Ctrl]+[d] ออกโปรแกรม
อย่างไรก็ตาม โปรแกรมเหล่านี้บางโปรแกรมก็ไม่จำเป็นต้องเข้า shell ส่วนตัวเสมอไป ถ้าส่ง argument ให้กับโปรแกรมอย่างถูกต้อง เช่น โปรแกรม cat ที่เมื่อรับชื่อไฟล์เข้าไป จะพิมพ์ข้อความภายในไฟล์ออกมาทีละบรรทัด และสามารถรับไฟล์หลายไฟล์พร้อมกันได้



ในขั้นต้นเราอาจเห็นว่าโปรแกรมอย่าง cat นั้นดูไร้สาระ เพราะ shell ของโปรแกรมมันทำหน้าที่พิมพ์ซ้ำข้อความที่เราพิมพ์เข้าไป แต่เราจะได้ใช้ประโยชน์จากมันเมื่อรู้จักเทคนิค redirection ครับ

การ redirection คือการเปลี่ยนวิธีการใช้ input, output ซึ่งกระทำต่อ shell ของโปรแกรมย่อยๆ เหล่านั้น ซึ่งเปลี่ยนจากพิมพ์คำสั่งโดย keyboard มาเป็นใช้ไฟล์แทน อย่างเช่น

หรือรับ input เข้ามาเป็นไฟล์เสมือน (สร้าไฟล์เดี๋ยวนั้น แล้วจบไฟล์ด้วย keyword ที่ตั้งไว้)

ส่วนการจัดการกับ output จะเป็นการบันทึก output ที่ได้มาลงในไฟล์

อีกเทคนิคหนึ่งคือการ pipe มันคือการส่ง output จากโปรแกรมก่อนหน้า ไปให้โปรแกรมถัดไปจัดการต่อ เช่น ใช้โปรแกรม grep เพื่อหาคำที่ต้องการ

No comments:

Post a Comment