ในบทนี้จะกล่าวถึงการใช้ program บน shell ที่มักจะถูกเอามาใช้เป็นประจำ แต่ก็ไม่ได้หมายความว่า ที่ใช้ประจำจะมีแค่นี้ บางโปรแกรม ก็เข้าใจยาก เลยก่ะว่าจะเอามาพูดถึงกันตอนหลัง
shell เป็น command processor บนระบบ Unix ในมุมมองเปรียบเทียบลักษณะ อาจจะคล้ายๆกับของ mikro$oft do$ แต่ถ้าลองใช้ดูจะพบว่า มีความสามารถสูงกว่ามาก เวลาที่สั่งอะไรสั่งอย่างบน konsole shell จะแปล(interpret)ความหมายคำสั่ง ที่เราสั่งไป และจะทำสิ่งที่เหมาะสมต่อไป เช่น รันโปรแกรมตามชื่อที่เราบอก
ในการทำงานกับ shell จะมีสิ่งหนึ่งที่ต้องคำนึงถึงคือ Standard Input(stdin), Output(stdout)และ Error(stderr)
$ cal 2001 > calendar.txt //เป็นการ redirect output จากคำสั่งปฏิทินใส่ text file $ cal 2002 >> calendar.txt //เป็นการ redirect output โดยเอามา append กับของเดิม $ mail Erik < fuck.messages.txt //เป็นการ redirect input ไปคำสั่งส่ง mailนอกจาก การ redirect แล้ว ยังมีออีกสิ่งหนึ่งที่ทำให้ชิวิตเราสวยงามขึ้นคือ การ Pipes อย่างสมมุติเราต้องการดู ปฎิทิน หลายๆปี เราก็สั่งรัน
$ cal 2001 ; cal 2002 ; cal 2003 //ได้แต่มันจะแสดงเร็วมากจนเรามองไม่ทัน วิธีแก้ก็คือ redirect ไปยังไฟล์โดย $ (cal 2001 ; cal 2002 ; cal 2003) > calendar3Ys.txtแต่ก็อีกนั่นแหละ เราแค่ต้องการดูหน่อยเดียว ยังต้องมาก create temporary file เฉยเลย วิธีแก้คือใช้การ pipe output ไปเป็น input ของคำสั่งอื่นโดยสั่งรันแบบนี้
$ (cal 2001 ; cal 2002 ; cal 2003) | more
**เรื่องของ stdin/stdout/stderr และ pipe เป็นเรื่องสำคัญมากอีกอันนึง ควรจะทำความเข้าใจให้ละเอียด และหัดใช้ให้คล่อง
รู ปแบบ และความหมายของการ wildcard
ls f* = มี f นำหน้า ls *ball = มี ball ตามหลัง ls *ba* = มีคำว่า ball ls ?ootball = มีคำว่า ootball ตามหลัง ตัวอักษรอะไรก็ได้ 1 ตัว ls team[ABDE] = teamA, teamB, teamD หรือ teamE ls team[1-4] = team1, team2, team3 หรือ team4 ls *[1-4] = มำตักษร 1, 2, 3 หรือ 4 ตามหลัง
utility ที่กล่าวถึง สามารถทำงานได้ค่อนข้างกว้าง จะกล่าวถึงเฉพาะรูปแบบทั่วๆไปที่ใช้กันบ่อยๆ ถ้าอยากรู้ข้อมูลว่าจริงๆแล้ว แต่ละโปรแกรมทำอะไรได้บ้างมากน้อยขนาดไหน ต้องศึกษาเอง อาจจะใช้ man ดูเอาก็ได้ หรือไม่ก็ --help เอา
รูบแบบ $ date [option] [+format]; ตัวอย่าง
$ date Thu Sep 27 21:19:50 ICT 2001 $ date "+%D : %Y:%j:%H:%M:%S : %T" 09/27/01 : 2001:270:21:19:52 : 21:19:52
รูบแบบ $ cal [month] [year]; ตัวอย่าง
& dollar; cal
September 2001
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
$ cal 8 2002
August 2002
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
รูบแบบ $ whoami [option]; ตัวอย่าง
$ whoami sirikhum
รูบแบบ $ passwd [option] <usernam> โดยปกติ มักจะ tune มาเป็น active user interface
รูปแบบ $ alias [alias_name=alias_pharse]; ตัวอย่าง
$ alias alias ls='ls -F --color=auto' alias xtermt='xterm -fn -yenbut-fixed-medium-r-normal--13-130-75-75-p-65-tis620-0' $ alias la= 'ls -a' $ alias alias la='ls -a' alias ls='ls -F --color=auto' alias xtermt='xterm -fn -yenbut-fixed-medium-r-normal--13-130-75-75-p-65-tis620-0'
รูปแบบ $ unalias [alias_name]
รูปแบบ $ ls [option] [file]...
รูปแบบ $ pwd [option]
รูบแบบ $ cd [dir_ปลายทาง]; ตัวอย่าง
$ pwd /home/sirikhum $ ls Desktop cdrom fdd modified_Ethernet_driver.c tmp GNUstep data http money vmware Mail document kvirc-2.1.0 nsmail work bin evolution log.txt pic xth blackbox-menu faq minicom.log public_html zip $ cd / $ pwd / $ cd ~netarm/ $ pwd /home/netarm
รูบแบบ $ cp [option] ต้นทาง... ปลายทาง; ตัวอย่าง
$ cp ~public_html/index.html ./index.html $ cp ~public_html/index.html ./ $ cp -R ~public_html/ /var/www/html/sirikhum -R = Recursive ใช้กับเวลาจะ copy ทั้ง directory
คู่มือนี้จะมีการแบ่งเป็น sectionๆ เช่น section ของ user, ของ system call() หรือของ admin รูบแบบ $ man [option] ชื่อโปรแกรม; ตัวอย่าง
$ man open $ man -a open -a = All ปกติแล้ว man จะแสดงเฉพาะ doc ที่เจออันแรกอันเดียว แต่อันนี้จะให้แสดงทุกอัน
คู่มืออันนี้จะต่างกับ man ตรงที่เป็น hierarchy หรือเป็น menuๆ ไป สามารถ enter เข้าไปใน body หรือใน sub-menu ได้ ตาม hyper-link
รูบแบบ $ info [ชื่อโปรแกรม หรือข้อมูลที่ต้องการ information]
รูบแบบ $ mkdir [option] directory...; ตัวอย่าง
$ mkdir tmp/dir1/dir1.1 mkdir: cannot create directory `tmp/dir1/dir1.1': No such file or directory $ mkdir -p tmp/dir1/dir1.1 -p = parent ใช้ในกรณีที่ถ้า ไม่มี parent directory(ในที่นี้คือ dir1) ก็ให้สร้างซะ
รูปแบบ $ mv [option] ต้นทาง... ปลายทาง; ตัวอย่าง
$ mv ~/public_html/index.html ~/public_html/index.html.old $ mv ./index.html ~/public_html/
รูปแบบ $ rm [option] ไฟล์...; ตัวอย่าง
$ rm ~/public_html/index.html* $ rm -rf ~/public_html -r = recursive ใช้ในกรณีที่จะลบ directory -f = force พยายามลบให้ได้ และไม่ต้องถามอะไร assume ว่าให้ลบไปก่อนเลย
รูปแบบ $ rmdir [option] directory...
การใช้งานเหมือนกับ mkdir เวลาบอก parent(-p) หมายถึงให้ลบ directory อันในสุด(ปลายกิ่ง)จนถึงอันนอกสุด
รูปแบบ $ clear
ลักษณะเหมือนกับ cls ของ mikro$oft dos ทุกอย่าง
รูปแบบ $ echo [option].. [string].. ;ตัวอย่าง
$ echo "echo Env variable:" $UID $USER $HOME $HOSTTYPE $HOSTNAME Env variable: 501 sirikhum /home/sirikhum i586 music01.eng.kmitl.ac.thเป็น tool ตัวหนึ่ง ที่ใช้งานง่าย มีความยืดหยุ่นสูง จากตัวอย่างเป็นการ echo ค่า string กับ environment variable บางตัว
รูบแบบ $ find [path] [expression] ;ตัวอย่าง
$ find /home -iname *Mail* -exec ls -l '{}' ';'
/home หมายถึงให้เริ่มจาก path /home
-iname Mail คือให้หาไฟล์ หรือ directory ที่มีชื่อว่า Mail อยู่ส่วนไหนก็ได้ โดยไม่สนใจ case-sensity
-exec ls '{}' ';' หมายถึง ถ้าเจอแล้วให้รันคำสั่ง `ls -l ชื่อไฟล์ที่เจอ`
รูปแบบ $ grep [option] [pattern] [file] ตัวอย่าง
$ ls | grep jpg เป็นการดูว่าไฟล์ไหนบ้างที่มีคำว่า 'jpg' เป็นส่วนหนึ่งของชื่อ โดย pipe output ของ คำสั่ง ls เข้า input stream ของ grep $ grep Unix *txt หาคำว่า 'Unix' ในส่วนหนึ่งของไฟล์ที่มี 'txt' เป็นส่วนหนึ่งของชื่อ
ตัวอย่าง
gzip -c file1 > dummy.gz // compress and redirect (compressed) output stream to dummy.gz gzip -d dummy.gz // de-compress dummy.gz
ใช้เพื่อ create หรือ extract (tape) archive file ตัวอย่าง
tar cfz my_page.tar.gz public_html tar fz foo.tar c = Create f = ใช้เพื่อกำหนด archive File z = gZip compressed x = eXtract
แสดงข้อมูลของ process ตัวอย่าง
$ ps -aux
ใช้เพื่อส่ง signal ไปยัง process โดยปกติใช้เพื่อ terminate process ต่างกันตรงวิธี query process ที่จะ terminate ตัวอย่าง
killall -9 netscape -9 เป็น signal 'SIGKILL'
ตัวอย่าง
$ free -m -m เพื่อ force ให้บอกขนาดเป็น Megabypes
ตัวอย่าง
$ df -h -h = Human readable
จะแสดงเฉพาะ ข้อมูลของ top process ในรูบแบบตาราง และจะ refresh ให้เอง(โดย default)
ใช้เพื่อรัน shell ในสภาพของ user ที่กำหนด ปกติโดย default จะเรียกเป็น root และจะถาม passwd ถ้าจำเป็น (อ้างถึง user ที่มีพลังมากกว่า)
รูบแบบ su [option] [user]
เวลาจะปิดเครื่อง สามารถทำได้หลายๆเป็น อาจจะ clickๆ เอาจาก ปุ่มหรือ menu ที่ gui env มีไว้ให้ก็ได้ แต่ที่นี้จำแนะนำเฉพาะ ในส่วนที่เป็นคำสั่ง
โดยปกติ ในระบบ Linux จะแบ่ง runlevel 0 ไว้สำหรับ halt (&power down) และ runlevel 6 ไว้สำหรับ reboot ปกติเวลาเปิดเครื่องมาจะอยู่ที่ runlevel 3 สำหรับ text mode และ runlevel 5 สำหรับ X ส่วน runlevel อีกอันหนึ่งที่สำคัญคือ 1 เป็น single user mode คำสั่งเวลาจะเปลี่ยนก็เรียกง่ายๆดังตำวอย่าง
$ init 0 // power down
แต่จริงๆแล้วเราอาจจะเรียกจาก binary บางตัวแล้ว past arg เข้่าไปก็ได้ ที่เห็นๆใช้กัน(ตามมาตรฐาน unix) เห็นจะเป็นคำสั่ง shutdown เวลาใช้ก็เรียกเหมือน binary ตัวๆไป (โดยปกติต้องการ root permission) ดังตัวอย่าง
$ shutdow -h now // power down ทันที ไม่รอ user ที่กำลังรันอยู่
เวลาจะใช้ก็ mount เข้ากับ directory ใดๆ ซักอันนึง แล้วก็ทำงานตามปกติ แต่ใน distro ใหม่ๆ ของ Linux เค้ามักจะให้มาพร้อมกับ supermount kernel ที่ทไให้เราไม่ต้องมานั่ง mount มือเปล่าเอาเอง
โปรแกรม ที่ใช่ทำงานกับ floppy อาจจะใช้โปรแกรมทั่วๆไป ที่ใช่โดยปกติก็ได้ แต่ก็มีโปรแกรมอยู่ชุดนึง ที่ ใช้เพื่อทำงานกับ (mikro$oft do$) floppy โดยเฉพาะ โปรแกรมในชุดนี้มีดังนี้ mattrib mbadblocks mcd mcopy mdel mdeltree mdir mdu mformat mkmanifest mlabel mmd mmount mmove mrd mread mren mtoolstest mtype โปรแกรมในชุด mtools มีลักษณะการใช้งานเหมือนกับใน mikrosoft do$