คำสังเบื้องต้นของยูนิกซ์และลีนุกซ์
เนื่องจากลีนุกซ์ถูกพัฒนาขึ้นมาโดยอาศัยรูปแบบส่วนใหญ่มาจากยูนิกซ์ และผู้พัฒนาระยะ แรกๆก็เป็นผู้เชี่ยวชาญยูนิกซ์เป็นส่วนใหญ่ ดังนั้นหากเรียนรู้ยูนิกซ์เราก็จะรู้ลีนุกซ์ด้วยเช่นเดียวกัน
หลังจากความพยายามอันยาวนานของคุณ เครื่องพีซีของคุณก็เริ่มบูตลีนุกซ์ และต้อนรับคุณด้วยหน้าจอรับชื่อผู้ใช้และรหัสผ่าน จะสังเกตุเห็นว่าลักษณะคล้ายกับ เวลาต่อโมเด็มเข้าไปที่โฮสต์ของ ISP (Internet Service Provider) เมื่อเราต้องการจะใช้งานอินเทอร์เนต คุณได้ใส่ชื่อผู้ใช้ ถ้าคุณเป็นคนติดตั้งเอง แน่นอนที่ว่าคุณจะต้องใส่ชื่อผู้ใช้เป็น root ซึ่งแสดงถึงความเป็น super user ซึ่งเป็นเจ้าของระบบและตามด้วยรหัสผ่านที่คุณได้ให้ไว้ในขั้นตอนการติดตั้ง
Login :
root Password : ********
เมื่อคุณใส่รหัสผ่านได้ถูกต้อง ระบบจะอนุญาตให้คุณเข้ามาใช้งานในระบบได้ ซึ่งจะแสดงเครื่องหมายพร้อมพท์ เตรียมรับคำสั่ง ในกรณีที่ทำการล็อกอินเข้ามาด้วย super user เครื่องหมายพร้อมพท์จะแสดงเป็น "#" แต่ถ้าเข้ามาในฐานะผู้ใช้ปกติเครื่องหมายจะแสดงเป็น "$"
คุณก็สามารถเข้ามาในระบบแล้ว และก็น่าจะลองสั่งแสดงชื่อไฟล์ดูสักหน่อยโดยใช้คำสั่ง ls ซึ่งย่อมาจาก list directory
# ls
mbox
คำสั่งนี้จะคล้ายกับ DIR ในดอสและมันก็แสดงรายชื่อไฟล์ออกมา ซึ่งตอนนี้มีอยู่หนึ่งไฟล์คือ mbox คำสั่งในยูนิกซ์จะแตกต่างจากดอส คือเป็นลักษณะที่เรียกว่า case-sensitive หมายความว่าตัวอักษรตัวใหญ่ และตัวอักษรตัวเล็กจะมีความแตกต่างกัน เช่น cat และ Cat จะมีความแตกต่างกัน ดังนั้นเราจะต้องระวังสะกดตัวอักษรให้ถูกต้องตามคำสั่งที่มีอยู่ในคู่มือด้วย
ตอนนี้คุณควรเรียนรู้คำสั่งที่สำคัญสองคำสั่ง คำสั่งแรก คือคำสั่งเมื่อคุณจะเลิกใช้งานระบบ ถ้าคุณต้องการพักการใช้งาน เพื่อเข้าไปใช้อีกครั้งโดยใช้ชื่อล็อกอินของผู้ใช้คนอื่น คุณต้องใช้คำสั่ง
logout
หรือ
exit
และแล้วคุณก็จะกลับออกมาสู่หน้าจอ ของการรอรับชื่อผู้ใช้และรหัสผ่านอีกครั้งหนึ่ง แต่ในกรณีที่คุณต้องการจะเลิกใช้งานเลย คุณจะปิดเครื่องเฉยๆเลยเหมือนกับการใช้งานดอสไม่ได้ คุณจะต้องสั่งให้ระบบทำการเก็บข้อมูลทุกสิ่งทุกอย่างจากหน่วยความจำลงไปเก็บไว้ในฮาร์ดดิสก์ทั้งหมด และบางทีอาจจะต้องมีการหยุดโปรแกรมที่รันทิ้งไว้ในหน่วยความจำบางงาน ไม่ต้องเป็นกังวลกับงานพวกนี้ คุณใช้แค่คำสั่งเดียวเท่านั้น แต่อย่าลืม คุณจำเป็นจะต้องเป็น root หรือเป็นผู้ใช้ที่มีฐานะเทียบเท่ากับ root
# /sbin/shutdown -h now สั่งชัตดาวน์ (ยุติการทำงานระบบ) และหยุดเครื่อง
# /sbin/shutdown -r now สั่งชัตดาวน์ และให้ระบบทำการบูตใหม่
พารามิเตอร์ "now" ข้างหลังคือบอกให้กระทำคำสั่งในทันที ถ้าใส่ตัวเลขก็จะถือเป็นการ หน่วงเวลาก่อนจะกระทำคำสั่ง เมื่อชัตดาวน์เสร็จแล้วและถ้าเป็นการสั่งแบบหยุดเครื่อง คุณก็สามารถปิดสวิทช์เครื่องของคุณได้เลย
ในกรณีที่คุณเข้าใช้งานด้วย ชื่อทะเบียนผู้ใช้ธรรมดา และต้องการเปลี่ยนระดับ (permission) ไปเป็น root ก็ให้ใช้คำสั่ง
$ su root (หรือ su เฉยๆ)
password : ********
#<--- สังเกตที่พร้อมพท์ '#'
หมายความว่าคุณมีฐานะเทียบเท่าrootแล้วคราวนี้คุณก็สามารถสั่งชัตดาวน์ตามคำสั่งข้างบนได้
การใช้คำสั่งบนลีนุกซ์
คำสั่งแรกก็คือ cat ให้ทดลองพิมพ์คำว่า cat ที่พร้อมพต์แล้วกดปุ่ม Enter $ cat
จะปรากฎเคอร์เซอร์รอรับคำสั่งในบรรทัดถัดมา ให้ทดลองพิมพ์ประโยคลงไปสักหนึ่งบรรทัด กดปุ่ม Enter แล้วตรวจผลที่เกิดขึ้น
$ cat
This is a cat
This is a cat
จะสังเกตุเห็นว่า เมื่อเราพิมพ์ประโยคใดลงไป cat จะพิมพ์ประโยคที่เราพิมพ์นั้นออกมาที่หน้าจอภาพ หากต้องการจะออกจากโปรแกรม cat ให้กดปุ่ม Ctrl-d ซึ่งจะหมายถึง การส่งสัญลักษณ์ end-of-file (EOF) ไปให้กับโปรแกรม นั่นหมายความว่าเรา (หรืออาจเป็นโปรแกรมอื่นๆ) ได้บอกกับโปรแกรม cat ให้ทราบว่า จบการอ่านข้อมูลแล้ว โปรแกรม cat จะรับทราบและหยุดการทำงาน โปรแกรมลักษณะเดียวกับ cat นี้มีมากบนยูนิกซ์ และโดยมากมักจะมีขนาดเล็กและมีจุดมุ่งหมายในการใช้งานจำเพาะ ซึ่งมักจะเรียกว่า utility program และโดยมากเราสามารถกดปุ่ม Ctrl-d เพื่อทำการเลิกใช้งาน utility program เหล่านั้นได้ ให้ทดลองใช้งานโปรแกรม sort แล้วสังเกตุผลลัพธ์ที่เกิดขึ้นว่า มันทำงานอย่างไรหากคุณทดลองเรียกใช้งานโปรแกรม sort แล้ว และลองพิมพ์ข้อมูลลงไปสองบรรทัด และจบการทำงานของโปรแกรมด้วยการกด Ctrl-d คุณจะเห็นว่ามันจะทำการพิมพ์ผลลัพธ์ออกมาสองบรรทัดซึ่งเป็นข้อมูลที่คุณพิมพ์เข้าไป แต่พิมพ์ออกมาในลักษณะที่เรียงลำดับกัน
ขอความช่วยเหลือจากระบบ
ระบบยูนิกซ์จะมีระบบให้ความช่วยเหลือ ซึ่งเป็นเอกสารที่อธิบายความหมายและการใช้งาน คำสั่งต่างๆให้ทราบอย่างคร่าวๆ ซึ่งจะคล้ายกับ help ในดอส แต่ในยูนิกซ์คุณจะต้องใช้คำสั่ง man ซึ่งย่อมาจาก manual ตัวอย่าง ถ้าคุณต้องการจะทราบรายละเอียดเกี่ยวกับคำสั่ง cat ให้คุณใช้คำสั่งดังนี้
$ man cat
CAT(1) CAT(1)
NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [-benstuvAET] [--number] [--number-nonblank]
[--squeeze-blank] [--show-nonprinting] [--show-ends]
[--show-tabs] [--show-all] [--help] [--version] [file...]
DESCRIPTION
This documentation is no longer being maintained and may
be inaccurate or incomplete. The Texinfo documentation is
now the authoritative source.
This manual page documents the GNU version of cat. cat
writes the contents of each given file, or the standard
input if none are given or when a file named `-' is given,
to the standard output.
OPTIONS
-b, --number-nonblank
คำสั่งนี้จะแสดงรายละเอียดเกี่ยวกับคำสั่ง man มาหนึ่งหน้า ซึ่งบางทีคุณอาจจะไม่เข้าใจทั้งหมด ทั้งนี้เราจะต้องมีความรู้ของยูนิกซ์บางอย่างก่อน และโชคร้ายที่ไม่มีคำอธิบายคำสั่งบนยูนิกซ์ออกมาเป็นภาษาไทย เนื่องจากยังไม่มีผู้คิดจะทำ
ในด้านล่างของคำอธิบาย จะมีเครื่องหมาย ":" หรือ "-more-,Line1" หรือที่คล้ายกัน ซึ่งเป็นเครื่องหมายพร้อมพต์ของโปรแกรม more หรือ page (แล้วแต่กรณี) จุดประสงค์คือ เนื่องจากคำอธิบายคำสั่งของยูนิกซ์นั้น อาจมีความยาวมากกว่าหนึ่งหน้า ดังนั้นการใช้ more หรือ page เข้ามาช่วย จะทำให้เราสามารถหยุดอ่านเอกสารในแต่ละหน้าได้ทัน คุณสามารถกดปุ่ม spacebar เพื่อสั่งให้เปิดคำอธิบายในหน้าถัดไป หรือกดปุ่ม q เพื่อออกจากระบบให้ความช่วยเหลือ
หากคุณต้องการค้นหาหัวข้อเกี่ยวกับคำ (keyword) ที่คุณสนใจ ตัวอย่างเช่นคุณอาจสนใจ คำว่า "ps" หรือ "Postscript" และคุณต้องการคำอธิบายเพิ่มเติม คุณสามารถใช้ man เข้ามาช่วยในกรณีนี้ได้โดยใช้คำสั่ง
man -k ps
และ
man -k Postscript
man จะทำการแสดงหัวข้อที่เกี่ยวข้องกับที่เราต้องการค้นหาออกมา วิธีนี้จะมีประโยชน ในกรณีที่คุณไปเจอ keyword หรือคำที่คุณไม่ทราบความหมายต่างๆ
โครงสร้างของระบบไฟล์และไดเรกทอรี
ในระบบยูนิกซ์ทำการเก็บข้อมูลโดยใช้ ไฟล์ และ ไดเรกทอรี เข้ามาช่วย โดยจะมีลักษณะเป็นรูปแบบของ heirachy หรือโครงสร้างแบบต้นไม้ หากคุณค้นเคยกับดอสมาก่อน จะเห็นว่ามีรูปแบบการเก็บข้อมูลที่คล้ายกัน เพียงแต่การใช้งานจะแตกต่างกันบ้าง ไดเรกทอรีจะเปรียบเสมือนแฟ้ม ที่สามารถเก็บไฟล์ต่างๆ (เหมือนกับกระดาษ) ในไดเรกทอรีลำดับบนๆ ก็เหมือนกับแฟ้มขนาดใหญ่ ซึ่งนอกจากจะเก็บไฟล์ได้แล้วก็ยังสามารถเก็บไดเรกทอรีอื่นๆได้ด้วย
ไดเรกทอรีลำดับบนสุดจะถูกเรียกว่า ไดเรกทอรีราก (root directory) ซึ่งจะประกอบไปด้วยไฟล์และไดเรกทอรีต่างๆ ในไดเรกทอรีที่ย่อยลงมาก็อาจจะประกอบไปด้วยไฟล์และไดเรกทอรีไปเรื่อยๆ ในไฟล์แต่ละไฟล์จะต้องมีชื่ออยู่ จะมีชื่ออยู่สองแบบที่ใช้อ้างถึงไฟล์ได้ คือชื่อแบบยาว และชื่อแบบสั้น ตัวอย่างชื่อแบบสั้นก็คือ "note" และถ้าจะอ้างถึงชื่อแบบยาว ก็อาจจะอ้างได้เป็น "/home/mary/note"
ให้สังเกตุชื่อยาวของไฟล์นี้ ตัวอักษรซ้ายสุดคือ "/" ซึ่งจะระบุถึงไดเรกทอรีราก ซึ่งเป็นไดเรกทอรีลำดับบนสุด ในไดเรกทอรีรากนี้จะมีไดเรกทอรี "home" บรรจุอยู่และภายใต้ไดเรกทอรี "home" ก็จะมีไดเรกทอรี "mary" ไฟล์ "note" ของเราก็จะอยู่ภายใต้ไดเรกทอรี "mary" นั่นเอง สรุปคือ ในการอ้างถึงชื่อแบบยาว ชื่อทั้งหมดก่อนหน้าชื่อไฟล์ (คือ "/home/mary") จะเป็นชื่อของไดเรกทอรี ส่วนชื่อ "note" จึงจะเป็นชื่อของไฟล์จริงๆการขอดูชื่อของไฟล์
ดังที่ได้แนะนำแล้วในตอนต้น คุณสามารถจะใช้คำสั่ง "ls" เพื่อจะดูไฟล์ต่างๆ ได้ ถ้าหากคุณใช้คำสั่ง "ls" ในไดเรกทอรีที่ไม่มีไฟล์ คุณจะไม่เห็นผลลัพธ์ใดๆ (ตรง ข้ามกับดอสที่จะบอกว่า No file found) วิธีนี้เป็นรูปแบบของยูนิกซ์ที่บอกคุณให้ทราบว่าไม่มีไฟล์อะไรอยู่ในไดเรกทอรีนี้
ในการใช้งานยูนิกซ์จะมีคำพูดวลีหนึ่งคือ "No news is good news" นั่นคือระบบยูนิกซ์ จะมีการแจ้งข้อความออกมาให้น้อยที่สุด และถ้ามีการแจ้งมาแล้ว หมายความว่าอาจมีปัญหา บางอย่างเกิดขึ้น จากโครงสร้างของไดเรกทอรีข้างบนคุณอาจสงสัยว่า ในระบบยูนิกซ์มีไดเรกทอรีตั้งมากมาย และก็น่าจะมีไฟล์เป็นจำนวนมากด้วย ทำไมเมื่อสั่งแสดงผลด้วย ls ถึงปรากฏผลลัพธ์ออกมา เป็นไฟล์เพียงไม่กี่ไฟล์ ทั้งนี้ก็เนื่องจากคำสั่ง ls จะทำการแสดงชื่อของไฟล์และไดเรกทอรี ที่มีอยู่ในไดเรกทอรีที่คุณอยู่ในขณะนั้น หรือ ไดเรกทอรีปัจจุบัน (current directory)
คุณสามารถจะระบุให้แสดงชื่อของไฟล์ที่มีอยู่ในไดเรกทอรีอื่นก็ได้เช่น
# ls /
bin etc lost+found opt sbin var
boot home mnt proc tmp
dev lib net root usr
คำสั่งนี้จะเป็นการแสดงชื่อของไฟล์และไดเรกทอรีที่มีอยู่ในไดเรกทอรีรากออกมา หากคุณต้องการให้มันแสดงด้วยว่าชื่อไหนเป็นไฟล์ ชื่อไหนเป็นไดเรกทอรี หรือเป็นไฟล์ ชนิดพิเศษ คุณจะต้องระบุตัวเลือก (option) เพิ่มเติมคือ option "-F" ตัวอย่าง
# ls -F /
bin/ etc/ lost+found/ opt/ sbin/ var/
boot/ home/ mnt/ proc/ tmp/
dev/ lib/ net/ root/ usr/
ให้คุณทดลองใช้คำสั่ง ls กับไดเรกทอรีอื่นๆดู โดยทั่วไปแล้วคำสั่งในยูนิกซ์ส่วนใหญ่ จะต้องมีการระบุ option ด้วย ซึ่งถ้าคุณใช้ man ดูคุณอาจจะเห็น รูปแบบของการใช้งานคำสั่งคล้ายๆกับดังต่อไปนี้
ls [-arF] [directory]
นี่คือ รูปแบบ (template) ของคำสั่ง คุณจะสังเกตุเห็นเครื่องหมาย "[" และ "]" สิ่งที่ระบุไว้ในเครื่องหมายก้ามปูดังกล่าว หมายความว่าเป็น option เราอาจจะใส่หรือ ไม่ใส่ไว้ก็ได้
การปฏิบัติการกับไดเรกทอรี
หากคุณต้องการอยากจะทราบว่าคุณกำลังอยู่ ณ ไดเรกทอรีไหนในขณะนี้ คุณสามารถใช้คำสั่ง pwd
เพื่อให้แสดงชื่อของไดเรกทอรีที่คุณกำลังอยู่ในขณะนั้นออกมาได้ (current directory) pwd ย่อมาจากคำว่า print work directory และถ้าคุณต้องการย้ายเปลี่ยนไปอยู่ไดเรกทอรีอื่น คุณสามารถใช้คำสั่ง cd ได้ คำสั่ง นี้โดยมีรูปแบบคือ
cd [directory]
โดยถ้าหากคุณสั่ง cd เฉยๆ จะหมายความว่า คุณต้องการจะกลับไปที่ไดเรกทอรีแรกสุดที่ คุณเข้ามาหลังจากทำการล็อกอิน (home directory)
ในทุกไดเรกทอรีจะมีรูปแบบที่ใช้การอ้างถึง ไดเรกทอรีที่อยู่ลำดับเหนือขึ้นไป และ ไดเรกทอรีที่หมายถึงไดเรกทอรีตนเอง คือ cd .. หมายถึงต้องการย้ายไปอยู่ไดเรกทอรีที่อยู่ลำดับเหนือขึ้นไปและ cd . หมายถึงระบุไดเรกทอรีตนเอง (current directory)
ดังนั้นการอ้างชื่อของไฟล์ note ข้างบนนอกจากจะอ้างด้วยชื่อเต็มและชื่อแบบสั้นแล้ว ยังสามารถอ้างได้อีกแบบ (ในกรณีที่ไดเรกทอรีปัจจุบันเป็น "/home/mary") คือ
./note
และถ้าหากคุณต้องการสร้างไดเรกทอรีใหม่ คุณสามารถใช้คำสั่ง
mkdir [directory]
หากต้องการลบไดเรกทอรี ก็ให้ใช้คำสั่ง
rm [directory]
การปฏิบัติการกับไฟล์
ในระบบยูนิกซ์เป็นระบบที่เกี่ยวข้องกับผู้ใช้หลายคน ดังนั้นระบบยูนิกซ์จึงมีการกำหนดเกี่ยวกับเรื่องสิทธิ์ที่จะเข้าถึงแฟ้มข้อมูล (file permission) ในระบบได้ ซึ่งคุณสามารถจะขอดู permission ของไฟล์ได้จากคำสั่ง
$ ls -l
drwxr-xr-x 2 root root 1024 Nov 17 21:49 axhome
drwxr-xr-x 2 root root 1024 Dec 28 13:57 backup
-rw------- 1 root root 6 Mar 31 23:26 dead.letter
-rw------- 1 root root 3075 Apr 15 03:49 mbox
คุณจะเห็นคอลัมน์แรก ซึ่งจะเป็นคอลัมน์ที่ระบุเกี่ยวกับเรื่อง permission ของไฟล์ type คือชนิดของไฟล์ ถ้าหากไม่ระบุ (-) จะหมายความว่าเป็นไฟล์ปกติ แต่ถ้าหากเป็น (d) จะหมายความว่าเป็นไดเรกทอรี และถ้าเป็น (b) จะหมายถึงเป็น device file แบบ block หากเป็น (c) หมายถึง device file แบบ character นอกจากนั้นยัง มีรูปแบบชนิดอื่นๆอีก
user permission จะระบุระดับการอนุญาตให้เข้าถึงไฟล์ในระดับผู้ใช้ (ตัวเอง)
r จะหมายถึง "อ่านไฟล์ได้" (readable)
w จะหมายถึง "เขียนไฟล์ได้" (writable)
x จะหมายถึง "สามารถเรียกใช้งานได้ หรือรันได้" (executable)
group permission จะระบุระดับการอนุญาตให้เข้าถึงไฟล์ในระดับกลุ่มผู้ใช้ (group) ซึ่งจะมีรูปแบบเหมือนกับ user permission
other permission จะระบุระดับการอนุญาตให้เข้าถึงไฟล์ในระดับผู้ใช้รายอื่นๆ ที่ไม ได้อยู่กลุ่มเดียวกัน รูปแบบก็จะเหมือนกันกับ user permission
ในระบบยูนิกซ์จะมีไฟล์ที่มองไม่เห็นอยู่ด้วย (hidden file) ซึ่งไฟล์เหล่านี้เมื่อ ใช้คำสั่ง ls ธรรมดาจะไม่สามารถมองเห็นได้ เราจะต้องใช้ option -a ดังตัวอย่าง
# ls -a
. .saves-622-daffy.kaiwal.com~
.. .seyon
.FVWM95-errors .tcshrc
.Xauthority .tin
.Xclients .xboing-scores
.Xclients,bkp .xfm
.Xdefaults .xsession
.bash_history .xsession-errors
.bash_logout axhome
.bash_profile backup
.bashrc dead.letter
.cshrc mbox
hidden file เหล่านี้จะถูกนำหน้าด้วย จุด "." ซึ่งถ้าเราไม่ใช้ option -a ก็จะ มองไม่เห็นไฟล์เหล่านั้น โดยทั่วไปมักจะใช้ไฟล์แบบนี้เพื่อเก็บข้อมูลเฉพาะของรูปแบบ การทำงานของผู้ใช้ (user environment) เช่น .bash_profile , .xsession เป็นต้น
COPY
เราสามารถทำการสำเนาแฟ้มข้อมูล (หรืออาจจะเป็นไดเรกทอรีด้วยก็ได้) โดยใช้คำสั่ง cp file1 file2
คำสั่งข้างบนจะทำการสำเนาแฟ้มข้อมูล (copy) จาก file ไปเป็นชื่อ file2
REMOVE
หากต้องการทำการลบแฟ้มข้อมูล (หรืออาจจะเป็นไดเรกทอรี) ก็สามารถใช้คำสั่ง rm filename
MOVE
เราสามารถใช้คำสั่ง mv เพื่อทำการย้ายแฟ้มจากไดเรกทอรีหนึ่ง ไปสู่อีกไดเรกทอรีหนึ่ง mv filename directory
คำสั่งข้างบนจะทำการย้ายแฟ้มชื่อ filename จากไดเรกทอรีปัจจุบัน ไปสู่ไดเรกทอรีที่ ชื่อ directory นอกจากนี้เราสามารถใช้คำสั่ง mv เพื่อใช้ทำการเปลี่ยนชื่อไฟล์ได้ mv file1 file2
คำสั่งนี้จะทำการเปลี่ยนชื่อจาก file1 ไปเป็นชื่อ file2
การใช้ 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. สั่งให้แสดงรายชื่อของไฟล์ในไดเรกทอรี และเก็บผลลัพธ์ลงไฟล์
2. ls > listfile
3. นำเอาข้อมูลที่อยู่ในไฟล์ listfile มาเป็น input ให้กับคำสั่ง sort เพื่อเรียงลำดับจากมากไปหาน้อย โดยจะต้องใช้ option -r
4. sort -r < listfile หรือ sort -r listfile
แต่แทนที่คุณจะต้องสั่งทั้งสองคำสั่งนี้ คุณสามารถจะยุบรวมคำสั่งให้เหลือคำสั่งเดียวได้ โดยใช้ความสามารถของ pipe เข้าช่วยดังนี้
ls sort -r
คำสั่งอื่นๆ
มีคำสั่งอื่นๆที่น่าสนใจ ขอให้คุณลองใช้คำสั่งดังต่อไปนี้เพื่อทดลองแสดงผลลัพธ์ต่างๆ คำสั่งเหล่านี้นอกจากเราจะทำการสั่งโดยพิมพ์คำสั่งนั้นอย่างเดียวแล้วเรายังสามารถใส่ option ระบุเพิ่มลงไปด้วย คุณสามารถหาความหมายเพิ่มเติมของ option ได้โดยการระบุ option --help ต่อท้ายคำสั่ง เพื่อให้ระบบพิมพ์ข้อความอธิบายออกมา หรือใช้คำสั่ง man เพื่อขอดูวิธีการใช้งานคำสั่งเหล่านี้
date จะพิมพ์วันที่ของระบบออกมา
who จะพิมพ์รายชื่อผู้ใช้งาน ที่กำลังใช้งานระบบออกมา
finger เหมือนกับ who แต่จะมีรายละเอียดอย่างอื่นออกมาด้วย
grep เลือกเอาข้อมูลที่สอดคล้องกับที่ระบุไว้ (ต่อท้ายคำสั่ง)
help ขอคำอธิบายเกี่ยวกับคำสั่งในลีนุกซ์
เนื่องจากลีนุกซ์ถูกพัฒนาขึ้นมาโดยอาศัยรูปแบบส่วนใหญ่มาจากยูนิกซ์ และผู้พัฒนาระยะ แรกๆก็เป็นผู้เชี่ยวชาญยูนิกซ์เป็นส่วนใหญ่ ดังนั้นหากเรียนรู้ยูนิกซ์เราก็จะรู้ลีนุกซ์ด้วยเช่นเดียวกัน
หลังจากความพยายามอันยาวนานของคุณ เครื่องพีซีของคุณก็เริ่มบูตลีนุกซ์ และต้อนรับคุณด้วยหน้าจอรับชื่อผู้ใช้และรหัสผ่าน จะสังเกตุเห็นว่าลักษณะคล้ายกับ เวลาต่อโมเด็มเข้าไปที่โฮสต์ของ ISP (Internet Service Provider) เมื่อเราต้องการจะใช้งานอินเทอร์เนต คุณได้ใส่ชื่อผู้ใช้ ถ้าคุณเป็นคนติดตั้งเอง แน่นอนที่ว่าคุณจะต้องใส่ชื่อผู้ใช้เป็น root ซึ่งแสดงถึงความเป็น super user ซึ่งเป็นเจ้าของระบบและตามด้วยรหัสผ่านที่คุณได้ให้ไว้ในขั้นตอนการติดตั้ง
Login :
root Password : ********
เมื่อคุณใส่รหัสผ่านได้ถูกต้อง ระบบจะอนุญาตให้คุณเข้ามาใช้งานในระบบได้ ซึ่งจะแสดงเครื่องหมายพร้อมพท์ เตรียมรับคำสั่ง ในกรณีที่ทำการล็อกอินเข้ามาด้วย super user เครื่องหมายพร้อมพท์จะแสดงเป็น "#" แต่ถ้าเข้ามาในฐานะผู้ใช้ปกติเครื่องหมายจะแสดงเป็น "$"
คุณก็สามารถเข้ามาในระบบแล้ว และก็น่าจะลองสั่งแสดงชื่อไฟล์ดูสักหน่อยโดยใช้คำสั่ง ls ซึ่งย่อมาจาก list directory
# ls
mbox
คำสั่งนี้จะคล้ายกับ DIR ในดอสและมันก็แสดงรายชื่อไฟล์ออกมา ซึ่งตอนนี้มีอยู่หนึ่งไฟล์คือ mbox คำสั่งในยูนิกซ์จะแตกต่างจากดอส คือเป็นลักษณะที่เรียกว่า case-sensitive หมายความว่าตัวอักษรตัวใหญ่ และตัวอักษรตัวเล็กจะมีความแตกต่างกัน เช่น cat และ Cat จะมีความแตกต่างกัน ดังนั้นเราจะต้องระวังสะกดตัวอักษรให้ถูกต้องตามคำสั่งที่มีอยู่ในคู่มือด้วย
ตอนนี้คุณควรเรียนรู้คำสั่งที่สำคัญสองคำสั่ง คำสั่งแรก คือคำสั่งเมื่อคุณจะเลิกใช้งานระบบ ถ้าคุณต้องการพักการใช้งาน เพื่อเข้าไปใช้อีกครั้งโดยใช้ชื่อล็อกอินของผู้ใช้คนอื่น คุณต้องใช้คำสั่ง
logout
หรือ
exit
และแล้วคุณก็จะกลับออกมาสู่หน้าจอ ของการรอรับชื่อผู้ใช้และรหัสผ่านอีกครั้งหนึ่ง แต่ในกรณีที่คุณต้องการจะเลิกใช้งานเลย คุณจะปิดเครื่องเฉยๆเลยเหมือนกับการใช้งานดอสไม่ได้ คุณจะต้องสั่งให้ระบบทำการเก็บข้อมูลทุกสิ่งทุกอย่างจากหน่วยความจำลงไปเก็บไว้ในฮาร์ดดิสก์ทั้งหมด และบางทีอาจจะต้องมีการหยุดโปรแกรมที่รันทิ้งไว้ในหน่วยความจำบางงาน ไม่ต้องเป็นกังวลกับงานพวกนี้ คุณใช้แค่คำสั่งเดียวเท่านั้น แต่อย่าลืม คุณจำเป็นจะต้องเป็น root หรือเป็นผู้ใช้ที่มีฐานะเทียบเท่ากับ root
# /sbin/shutdown -h now สั่งชัตดาวน์ (ยุติการทำงานระบบ) และหยุดเครื่อง
# /sbin/shutdown -r now สั่งชัตดาวน์ และให้ระบบทำการบูตใหม่
พารามิเตอร์ "now" ข้างหลังคือบอกให้กระทำคำสั่งในทันที ถ้าใส่ตัวเลขก็จะถือเป็นการ หน่วงเวลาก่อนจะกระทำคำสั่ง เมื่อชัตดาวน์เสร็จแล้วและถ้าเป็นการสั่งแบบหยุดเครื่อง คุณก็สามารถปิดสวิทช์เครื่องของคุณได้เลย
ในกรณีที่คุณเข้าใช้งานด้วย ชื่อทะเบียนผู้ใช้ธรรมดา และต้องการเปลี่ยนระดับ (permission) ไปเป็น root ก็ให้ใช้คำสั่ง
$ su root (หรือ su เฉยๆ)
password : ********
#<--- สังเกตที่พร้อมพท์ '#'
หมายความว่าคุณมีฐานะเทียบเท่าrootแล้วคราวนี้คุณก็สามารถสั่งชัตดาวน์ตามคำสั่งข้างบนได้
การใช้คำสั่งบนลีนุกซ์
คำสั่งแรกก็คือ cat ให้ทดลองพิมพ์คำว่า cat ที่พร้อมพต์แล้วกดปุ่ม Enter $ cat
จะปรากฎเคอร์เซอร์รอรับคำสั่งในบรรทัดถัดมา ให้ทดลองพิมพ์ประโยคลงไปสักหนึ่งบรรทัด กดปุ่ม Enter แล้วตรวจผลที่เกิดขึ้น
$ cat
This is a cat
This is a cat
จะสังเกตุเห็นว่า เมื่อเราพิมพ์ประโยคใดลงไป cat จะพิมพ์ประโยคที่เราพิมพ์นั้นออกมาที่หน้าจอภาพ หากต้องการจะออกจากโปรแกรม cat ให้กดปุ่ม Ctrl-d ซึ่งจะหมายถึง การส่งสัญลักษณ์ end-of-file (EOF) ไปให้กับโปรแกรม นั่นหมายความว่าเรา (หรืออาจเป็นโปรแกรมอื่นๆ) ได้บอกกับโปรแกรม cat ให้ทราบว่า จบการอ่านข้อมูลแล้ว โปรแกรม cat จะรับทราบและหยุดการทำงาน โปรแกรมลักษณะเดียวกับ cat นี้มีมากบนยูนิกซ์ และโดยมากมักจะมีขนาดเล็กและมีจุดมุ่งหมายในการใช้งานจำเพาะ ซึ่งมักจะเรียกว่า utility program และโดยมากเราสามารถกดปุ่ม Ctrl-d เพื่อทำการเลิกใช้งาน utility program เหล่านั้นได้ ให้ทดลองใช้งานโปรแกรม sort แล้วสังเกตุผลลัพธ์ที่เกิดขึ้นว่า มันทำงานอย่างไรหากคุณทดลองเรียกใช้งานโปรแกรม sort แล้ว และลองพิมพ์ข้อมูลลงไปสองบรรทัด และจบการทำงานของโปรแกรมด้วยการกด Ctrl-d คุณจะเห็นว่ามันจะทำการพิมพ์ผลลัพธ์ออกมาสองบรรทัดซึ่งเป็นข้อมูลที่คุณพิมพ์เข้าไป แต่พิมพ์ออกมาในลักษณะที่เรียงลำดับกัน
ขอความช่วยเหลือจากระบบ
ระบบยูนิกซ์จะมีระบบให้ความช่วยเหลือ ซึ่งเป็นเอกสารที่อธิบายความหมายและการใช้งาน คำสั่งต่างๆให้ทราบอย่างคร่าวๆ ซึ่งจะคล้ายกับ help ในดอส แต่ในยูนิกซ์คุณจะต้องใช้คำสั่ง man ซึ่งย่อมาจาก manual ตัวอย่าง ถ้าคุณต้องการจะทราบรายละเอียดเกี่ยวกับคำสั่ง cat ให้คุณใช้คำสั่งดังนี้
$ man cat
CAT(1) CAT(1)
NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [-benstuvAET] [--number] [--number-nonblank]
[--squeeze-blank] [--show-nonprinting] [--show-ends]
[--show-tabs] [--show-all] [--help] [--version] [file...]
DESCRIPTION
This documentation is no longer being maintained and may
be inaccurate or incomplete. The Texinfo documentation is
now the authoritative source.
This manual page documents the GNU version of cat. cat
writes the contents of each given file, or the standard
input if none are given or when a file named `-' is given,
to the standard output.
OPTIONS
-b, --number-nonblank
คำสั่งนี้จะแสดงรายละเอียดเกี่ยวกับคำสั่ง man มาหนึ่งหน้า ซึ่งบางทีคุณอาจจะไม่เข้าใจทั้งหมด ทั้งนี้เราจะต้องมีความรู้ของยูนิกซ์บางอย่างก่อน และโชคร้ายที่ไม่มีคำอธิบายคำสั่งบนยูนิกซ์ออกมาเป็นภาษาไทย เนื่องจากยังไม่มีผู้คิดจะทำ
ในด้านล่างของคำอธิบาย จะมีเครื่องหมาย ":" หรือ "-more-,Line1" หรือที่คล้ายกัน ซึ่งเป็นเครื่องหมายพร้อมพต์ของโปรแกรม more หรือ page (แล้วแต่กรณี) จุดประสงค์คือ เนื่องจากคำอธิบายคำสั่งของยูนิกซ์นั้น อาจมีความยาวมากกว่าหนึ่งหน้า ดังนั้นการใช้ more หรือ page เข้ามาช่วย จะทำให้เราสามารถหยุดอ่านเอกสารในแต่ละหน้าได้ทัน คุณสามารถกดปุ่ม spacebar เพื่อสั่งให้เปิดคำอธิบายในหน้าถัดไป หรือกดปุ่ม q เพื่อออกจากระบบให้ความช่วยเหลือ
หากคุณต้องการค้นหาหัวข้อเกี่ยวกับคำ (keyword) ที่คุณสนใจ ตัวอย่างเช่นคุณอาจสนใจ คำว่า "ps" หรือ "Postscript" และคุณต้องการคำอธิบายเพิ่มเติม คุณสามารถใช้ man เข้ามาช่วยในกรณีนี้ได้โดยใช้คำสั่ง
man -k ps
และ
man -k Postscript
man จะทำการแสดงหัวข้อที่เกี่ยวข้องกับที่เราต้องการค้นหาออกมา วิธีนี้จะมีประโยชน ในกรณีที่คุณไปเจอ keyword หรือคำที่คุณไม่ทราบความหมายต่างๆ
โครงสร้างของระบบไฟล์และไดเรกทอรี
ในระบบยูนิกซ์ทำการเก็บข้อมูลโดยใช้ ไฟล์ และ ไดเรกทอรี เข้ามาช่วย โดยจะมีลักษณะเป็นรูปแบบของ heirachy หรือโครงสร้างแบบต้นไม้ หากคุณค้นเคยกับดอสมาก่อน จะเห็นว่ามีรูปแบบการเก็บข้อมูลที่คล้ายกัน เพียงแต่การใช้งานจะแตกต่างกันบ้าง ไดเรกทอรีจะเปรียบเสมือนแฟ้ม ที่สามารถเก็บไฟล์ต่างๆ (เหมือนกับกระดาษ) ในไดเรกทอรีลำดับบนๆ ก็เหมือนกับแฟ้มขนาดใหญ่ ซึ่งนอกจากจะเก็บไฟล์ได้แล้วก็ยังสามารถเก็บไดเรกทอรีอื่นๆได้ด้วย
ไดเรกทอรีลำดับบนสุดจะถูกเรียกว่า ไดเรกทอรีราก (root directory) ซึ่งจะประกอบไปด้วยไฟล์และไดเรกทอรีต่างๆ ในไดเรกทอรีที่ย่อยลงมาก็อาจจะประกอบไปด้วยไฟล์และไดเรกทอรีไปเรื่อยๆ ในไฟล์แต่ละไฟล์จะต้องมีชื่ออยู่ จะมีชื่ออยู่สองแบบที่ใช้อ้างถึงไฟล์ได้ คือชื่อแบบยาว และชื่อแบบสั้น ตัวอย่างชื่อแบบสั้นก็คือ "note" และถ้าจะอ้างถึงชื่อแบบยาว ก็อาจจะอ้างได้เป็น "/home/mary/note"
ให้สังเกตุชื่อยาวของไฟล์นี้ ตัวอักษรซ้ายสุดคือ "/" ซึ่งจะระบุถึงไดเรกทอรีราก ซึ่งเป็นไดเรกทอรีลำดับบนสุด ในไดเรกทอรีรากนี้จะมีไดเรกทอรี "home" บรรจุอยู่และภายใต้ไดเรกทอรี "home" ก็จะมีไดเรกทอรี "mary" ไฟล์ "note" ของเราก็จะอยู่ภายใต้ไดเรกทอรี "mary" นั่นเอง สรุปคือ ในการอ้างถึงชื่อแบบยาว ชื่อทั้งหมดก่อนหน้าชื่อไฟล์ (คือ "/home/mary") จะเป็นชื่อของไดเรกทอรี ส่วนชื่อ "note" จึงจะเป็นชื่อของไฟล์จริงๆการขอดูชื่อของไฟล์
ดังที่ได้แนะนำแล้วในตอนต้น คุณสามารถจะใช้คำสั่ง "ls" เพื่อจะดูไฟล์ต่างๆ ได้ ถ้าหากคุณใช้คำสั่ง "ls" ในไดเรกทอรีที่ไม่มีไฟล์ คุณจะไม่เห็นผลลัพธ์ใดๆ (ตรง ข้ามกับดอสที่จะบอกว่า No file found) วิธีนี้เป็นรูปแบบของยูนิกซ์ที่บอกคุณให้ทราบว่าไม่มีไฟล์อะไรอยู่ในไดเรกทอรีนี้
ในการใช้งานยูนิกซ์จะมีคำพูดวลีหนึ่งคือ "No news is good news" นั่นคือระบบยูนิกซ์ จะมีการแจ้งข้อความออกมาให้น้อยที่สุด และถ้ามีการแจ้งมาแล้ว หมายความว่าอาจมีปัญหา บางอย่างเกิดขึ้น จากโครงสร้างของไดเรกทอรีข้างบนคุณอาจสงสัยว่า ในระบบยูนิกซ์มีไดเรกทอรีตั้งมากมาย และก็น่าจะมีไฟล์เป็นจำนวนมากด้วย ทำไมเมื่อสั่งแสดงผลด้วย ls ถึงปรากฏผลลัพธ์ออกมา เป็นไฟล์เพียงไม่กี่ไฟล์ ทั้งนี้ก็เนื่องจากคำสั่ง ls จะทำการแสดงชื่อของไฟล์และไดเรกทอรี ที่มีอยู่ในไดเรกทอรีที่คุณอยู่ในขณะนั้น หรือ ไดเรกทอรีปัจจุบัน (current directory)
คุณสามารถจะระบุให้แสดงชื่อของไฟล์ที่มีอยู่ในไดเรกทอรีอื่นก็ได้เช่น
# ls /
bin etc lost+found opt sbin var
boot home mnt proc tmp
dev lib net root usr
คำสั่งนี้จะเป็นการแสดงชื่อของไฟล์และไดเรกทอรีที่มีอยู่ในไดเรกทอรีรากออกมา หากคุณต้องการให้มันแสดงด้วยว่าชื่อไหนเป็นไฟล์ ชื่อไหนเป็นไดเรกทอรี หรือเป็นไฟล์ ชนิดพิเศษ คุณจะต้องระบุตัวเลือก (option) เพิ่มเติมคือ option "-F" ตัวอย่าง
# ls -F /
bin/ etc/ lost+found/ opt/ sbin/ var/
boot/ home/ mnt/ proc/ tmp/
dev/ lib/ net/ root/ usr/
ให้คุณทดลองใช้คำสั่ง ls กับไดเรกทอรีอื่นๆดู โดยทั่วไปแล้วคำสั่งในยูนิกซ์ส่วนใหญ่ จะต้องมีการระบุ option ด้วย ซึ่งถ้าคุณใช้ man ดูคุณอาจจะเห็น รูปแบบของการใช้งานคำสั่งคล้ายๆกับดังต่อไปนี้
ls [-arF] [directory]
นี่คือ รูปแบบ (template) ของคำสั่ง คุณจะสังเกตุเห็นเครื่องหมาย "[" และ "]" สิ่งที่ระบุไว้ในเครื่องหมายก้ามปูดังกล่าว หมายความว่าเป็น option เราอาจจะใส่หรือ ไม่ใส่ไว้ก็ได้
การปฏิบัติการกับไดเรกทอรี
หากคุณต้องการอยากจะทราบว่าคุณกำลังอยู่ ณ ไดเรกทอรีไหนในขณะนี้ คุณสามารถใช้คำสั่ง pwd
เพื่อให้แสดงชื่อของไดเรกทอรีที่คุณกำลังอยู่ในขณะนั้นออกมาได้ (current directory) pwd ย่อมาจากคำว่า print work directory และถ้าคุณต้องการย้ายเปลี่ยนไปอยู่ไดเรกทอรีอื่น คุณสามารถใช้คำสั่ง cd ได้ คำสั่ง นี้โดยมีรูปแบบคือ
cd [directory]
โดยถ้าหากคุณสั่ง cd เฉยๆ จะหมายความว่า คุณต้องการจะกลับไปที่ไดเรกทอรีแรกสุดที่ คุณเข้ามาหลังจากทำการล็อกอิน (home directory)
ในทุกไดเรกทอรีจะมีรูปแบบที่ใช้การอ้างถึง ไดเรกทอรีที่อยู่ลำดับเหนือขึ้นไป และ ไดเรกทอรีที่หมายถึงไดเรกทอรีตนเอง คือ cd .. หมายถึงต้องการย้ายไปอยู่ไดเรกทอรีที่อยู่ลำดับเหนือขึ้นไปและ cd . หมายถึงระบุไดเรกทอรีตนเอง (current directory)
ดังนั้นการอ้างชื่อของไฟล์ note ข้างบนนอกจากจะอ้างด้วยชื่อเต็มและชื่อแบบสั้นแล้ว ยังสามารถอ้างได้อีกแบบ (ในกรณีที่ไดเรกทอรีปัจจุบันเป็น "/home/mary") คือ
./note
และถ้าหากคุณต้องการสร้างไดเรกทอรีใหม่ คุณสามารถใช้คำสั่ง
mkdir [directory]
หากต้องการลบไดเรกทอรี ก็ให้ใช้คำสั่ง
rm [directory]
การปฏิบัติการกับไฟล์
ในระบบยูนิกซ์เป็นระบบที่เกี่ยวข้องกับผู้ใช้หลายคน ดังนั้นระบบยูนิกซ์จึงมีการกำหนดเกี่ยวกับเรื่องสิทธิ์ที่จะเข้าถึงแฟ้มข้อมูล (file permission) ในระบบได้ ซึ่งคุณสามารถจะขอดู permission ของไฟล์ได้จากคำสั่ง
$ ls -l
drwxr-xr-x 2 root root 1024 Nov 17 21:49 axhome
drwxr-xr-x 2 root root 1024 Dec 28 13:57 backup
-rw------- 1 root root 6 Mar 31 23:26 dead.letter
-rw------- 1 root root 3075 Apr 15 03:49 mbox
คุณจะเห็นคอลัมน์แรก ซึ่งจะเป็นคอลัมน์ที่ระบุเกี่ยวกับเรื่อง permission ของไฟล์ type คือชนิดของไฟล์ ถ้าหากไม่ระบุ (-) จะหมายความว่าเป็นไฟล์ปกติ แต่ถ้าหากเป็น (d) จะหมายความว่าเป็นไดเรกทอรี และถ้าเป็น (b) จะหมายถึงเป็น device file แบบ block หากเป็น (c) หมายถึง device file แบบ character นอกจากนั้นยัง มีรูปแบบชนิดอื่นๆอีก
user permission จะระบุระดับการอนุญาตให้เข้าถึงไฟล์ในระดับผู้ใช้ (ตัวเอง)
r จะหมายถึง "อ่านไฟล์ได้" (readable)
w จะหมายถึง "เขียนไฟล์ได้" (writable)
x จะหมายถึง "สามารถเรียกใช้งานได้ หรือรันได้" (executable)
group permission จะระบุระดับการอนุญาตให้เข้าถึงไฟล์ในระดับกลุ่มผู้ใช้ (group) ซึ่งจะมีรูปแบบเหมือนกับ user permission
other permission จะระบุระดับการอนุญาตให้เข้าถึงไฟล์ในระดับผู้ใช้รายอื่นๆ ที่ไม ได้อยู่กลุ่มเดียวกัน รูปแบบก็จะเหมือนกันกับ user permission
ในระบบยูนิกซ์จะมีไฟล์ที่มองไม่เห็นอยู่ด้วย (hidden file) ซึ่งไฟล์เหล่านี้เมื่อ ใช้คำสั่ง ls ธรรมดาจะไม่สามารถมองเห็นได้ เราจะต้องใช้ option -a ดังตัวอย่าง
# ls -a
. .saves-622-daffy.kaiwal.com~
.. .seyon
.FVWM95-errors .tcshrc
.Xauthority .tin
.Xclients .xboing-scores
.Xclients,bkp .xfm
.Xdefaults .xsession
.bash_history .xsession-errors
.bash_logout axhome
.bash_profile backup
.bashrc dead.letter
.cshrc mbox
hidden file เหล่านี้จะถูกนำหน้าด้วย จุด "." ซึ่งถ้าเราไม่ใช้ option -a ก็จะ มองไม่เห็นไฟล์เหล่านั้น โดยทั่วไปมักจะใช้ไฟล์แบบนี้เพื่อเก็บข้อมูลเฉพาะของรูปแบบ การทำงานของผู้ใช้ (user environment) เช่น .bash_profile , .xsession เป็นต้น
COPY
เราสามารถทำการสำเนาแฟ้มข้อมูล (หรืออาจจะเป็นไดเรกทอรีด้วยก็ได้) โดยใช้คำสั่ง cp file1 file2
คำสั่งข้างบนจะทำการสำเนาแฟ้มข้อมูล (copy) จาก file ไปเป็นชื่อ file2
REMOVE
หากต้องการทำการลบแฟ้มข้อมูล (หรืออาจจะเป็นไดเรกทอรี) ก็สามารถใช้คำสั่ง rm filename
MOVE
เราสามารถใช้คำสั่ง mv เพื่อทำการย้ายแฟ้มจากไดเรกทอรีหนึ่ง ไปสู่อีกไดเรกทอรีหนึ่ง mv filename directory
คำสั่งข้างบนจะทำการย้ายแฟ้มชื่อ filename จากไดเรกทอรีปัจจุบัน ไปสู่ไดเรกทอรีที่ ชื่อ directory นอกจากนี้เราสามารถใช้คำสั่ง mv เพื่อใช้ทำการเปลี่ยนชื่อไฟล์ได้ mv file1 file2
คำสั่งนี้จะทำการเปลี่ยนชื่อจาก file1 ไปเป็นชื่อ file2
การใช้ 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. สั่งให้แสดงรายชื่อของไฟล์ในไดเรกทอรี และเก็บผลลัพธ์ลงไฟล์
2. ls > listfile
3. นำเอาข้อมูลที่อยู่ในไฟล์ listfile มาเป็น input ให้กับคำสั่ง sort เพื่อเรียงลำดับจากมากไปหาน้อย โดยจะต้องใช้ option -r
4. sort -r < listfile หรือ sort -r listfile
แต่แทนที่คุณจะต้องสั่งทั้งสองคำสั่งนี้ คุณสามารถจะยุบรวมคำสั่งให้เหลือคำสั่งเดียวได้ โดยใช้ความสามารถของ pipe เข้าช่วยดังนี้
ls sort -r
คำสั่งอื่นๆ
มีคำสั่งอื่นๆที่น่าสนใจ ขอให้คุณลองใช้คำสั่งดังต่อไปนี้เพื่อทดลองแสดงผลลัพธ์ต่างๆ คำสั่งเหล่านี้นอกจากเราจะทำการสั่งโดยพิมพ์คำสั่งนั้นอย่างเดียวแล้วเรายังสามารถใส่ option ระบุเพิ่มลงไปด้วย คุณสามารถหาความหมายเพิ่มเติมของ option ได้โดยการระบุ option --help ต่อท้ายคำสั่ง เพื่อให้ระบบพิมพ์ข้อความอธิบายออกมา หรือใช้คำสั่ง man เพื่อขอดูวิธีการใช้งานคำสั่งเหล่านี้
date จะพิมพ์วันที่ของระบบออกมา
who จะพิมพ์รายชื่อผู้ใช้งาน ที่กำลังใช้งานระบบออกมา
finger เหมือนกับ who แต่จะมีรายละเอียดอย่างอื่นออกมาด้วย
grep เลือกเอาข้อมูลที่สอดคล้องกับที่ระบุไว้ (ต่อท้ายคำสั่ง)
help ขอคำอธิบายเกี่ยวกับคำสั่งในลีนุกซ์