Nattawut Phetmak
Jack of all Trades
คำสั่งต่างๆ ของ Unix/Linux นั้นก็คือโปรแกรมโปรแกรมหนึ่ง ปรกติเราสามารถเรียกมันมาทำงานโดยพิมพ์ชื่อโปรแกรม (คำสั่ง) นั้นๆ ลงไป อย่างเช่นที่เคยทำมาแล้ว
$ ls
Desktop Documents Downloads Music Pictures
เราสามารถใส่ argument ให้กับคำสั่งนั้นๆ โดย argument มีอยู่ 2 แบบ แบบแรกคือ option argument ซึ่งจะใช้เครื่องหมาย -
นำหน้าคำสั่งที่เป็นตัวย่อ (สามารถใส่ได้หลายคำสั่ง) หรือใช้ --
นำหน้าคำสั่งเต็ม (เพื่อให้อ่านง่าย) ซึ่งแต่ละ option จะแยกกันด้วย space เช่น
$ ls -a
. .cache Desktop Downloads Pictures
.. .config Documents Music .profile
$ ls -aF
./ .cache* Desktop/ Downloads/ Pictures/
../ .config* Documents/ Music/ .profile*
$ ls -F --all --si
./ .cache* Desktop/ Downloads/ Pictures/
../ .config* Documents/ Music/ .profile*
ส่วน argument อีกแบบคืออันที่ไม่มีเครื่องหมาย -
นำหน้า มันอาจหมายถึง path ของไฟล์สำหรับคำสั่งนั้นๆ หรือข้อความที่ส่งเข้าไปเป็น argument ให้ก็ได้
$ ls Documents/
morning.txt goodbye.txt
$ mkdir New
$ rmdir New
$ echo what is the answer
what is the answer
เนื่องจากคำสั่งเหล่านี้มีเยอะแยะมากมายตามแต่ละโปรแกรม สามารถหาอ่านเองได้ด้วยคำสั่ง man
แล้วตามด้วยชื่อโปรแกรมที่อยากรู้ครับ (ออกโปรแกรมด้วยตัว q)
$ man ls
ธรรมชาติอีกอย่างของโปรแกรมเหล่านี้คือ บางโปรแกรมจะพิมพ์ผลลัพท์ออกมาทันทีแล้วกลับมาอยู่ที่ shell หลักเลย ส่วนบางโปรแกรมจะพาเราเข้าไปอยู่ใน shell ประจำโปรแกรมนั้นๆ พร้อมกับรอคำสั่งเพิ่มเติม อย่างเช่นโปรแกรม cat
ที่จะทำการพิมพ์ข้อความซ้ำตามที่เราพิมพ์ป้อนให้มันครับ
$ cat
hello
hello
world
world
วิธีการออกจากโปรแกรมเหล่านี้ก็แตกต่างกันออกไป (บางโปรแกรมก็มีคำสั่งเฉพาะสำหรับออกโปรแกรม) แต่ส่วนใหญ่แล้ว สามารถกด keyboard เพื่อป้อนคำสั่งให้หยุดโปรแกรมได้ ดังนี้
[Ctrl]+[c]
ส่งสัญญาณ keyboard interrupt บางโปรแกรมจะหยุดแค่งานย่อยๆ แต่ไม่ออกโปรแกรม[Ctrl]+[z]
หยุดโปรแกรมชั่วคราว (เรียกทำงานต่อโดยคำสั่ง fg
)[Ctrl]+[d]
ออกโปรแกรมอย่างไรก็ตาม โปรแกรมเหล่านี้บางโปรแกรมก็ไม่จำเป็นต้องเข้า shell ส่วนตัวเสมอไป ถ้าส่ง argument ให้กับโปรแกรมอย่างถูกต้อง เช่น โปรแกรม cat ที่เมื่อรับชื่อไฟล์เข้าไป จะพิมพ์ข้อความภายในไฟล์ออกมาทีละบรรทัด และสามารถรับไฟล์หลายไฟล์พร้อมกันได้
$ cat Documents/morning.txt Documents/goodbye.txt
good morning.
good afternoon, good evening, and good night.
ในขั้นต้นเราอาจเห็นว่าโปรแกรมอย่าง cat นั้นดูไร้สาระ เพราะ shell ของโปรแกรมมันทำหน้าที่พิมพ์ซ้ำข้อความที่เราพิมพ์เข้าไป แต่เราจะได้ใช้ประโยชน์จากมันเมื่อรู้จักเทคนิค redirection ครับ
การ redirection คือการเปลี่ยนวิธีการใช้ input, output ซึ่งกระทำต่อ shell ของโปรแกรมย่อยๆ เหล่านั้น ซึ่งเปลี่ยนจากพิมพ์คำสั่งโดย keyboard มาเป็นใช้ไฟล์แทน อย่างเช่น
$ cat < Desktop/hello.c
#include <stdio.h>
int main(void) { printf("hello\n"); return 0; }
หรือรับ input เข้ามาเป็นไฟล์เสมือน (สร้าไฟล์เดี๋ยวนั้น แล้วจบไฟล์ด้วย keyword ที่ตั้งไว้)
$ cat << endpoint
> there is no ultimate answer
> where's ultimate question exist
> endpoint
there is no ultimate answer
where's ultimate question exist
ส่วนการจัดการกับ output จะเป็นการบันทึก output ที่ได้มาลงในไฟล์
$ # store output in a new file
$ echo 4 8 15 16 23 > number.txt
$ cat number.txt
4 8 15 16 23
$
$
$ # append output to exist file
$ echo and 42 >> number.txt
$ cat number.txt
4 8 15 16 23
and 42
อีกเทคนิคหนึ่งคือการ pipe มันคือการส่ง output จากโปรแกรมก่อนหน้า ไปให้โปรแกรมถัดไปจัดการต่อ เช่น ใช้โปรแกรม grep
เพื่อหาคำที่ต้องการ
$ ls | grep s
Desktop/
Music/
Pictures/