Next Previous Contents

2. เครื่องมือใช้งานพื้นฐานบน konsole

ในบทนี้จะกล่าวถึงการใช้ program บน shell ที่มักจะถูกเอามาใช้เป็นประจำ แต่ก็ไม่ได้หมายความว่า ที่ใช้ประจำจะมีแค่นี้ บางโปรแกรม ก็เข้าใจยาก เลยก่ะว่าจะเอามาพูดถึงกันตอนหลัง

2.1 พื้นฐานกับ shell

shell เป็น command processor บนระบบ Unix ในมุมมองเปรียบเทียบลักษณะ อาจจะคล้ายๆกับของ mikro$oft do$ แต่ถ้าลองใช้ดูจะพบว่า มีความสามารถสูงกว่ามาก เวลาที่สั่งอะไรสั่งอย่างบน konsole shell จะแปล(interpret)ความหมายคำสั่ง ที่เราสั่งไป และจะทำสิ่งที่เหมาะสมต่อไป เช่น รันโปรแกรมตามชื่อที่เราบอก

2.2 Standard input/output/error & Pipe

ในการทำงานกับ shell จะมีสิ่งหนึ่งที่ต้องคำนึงถึงคือ Standard Input(stdin), Output(stdout)และ Error(stderr)

เราสามารถ เปลี่ยนทิศทางของ stream 3 อันนี้ได้ โดยใช้เครื่องหมาย '>' '<' หรือ '>>' โดยทิศทางก็ตามหัวลูกศร เช่น
$ 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 เป็นเรื่องสำคัญมากอีกอันนึง ควรจะทำความเข้าใจให้ละเอียด และหัดใช้ให้คล่อง

2.3 การใช้ Wildcard */?/ฯลฯ

รู ปแบบ และความหมายของการ 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 ตามหลัง

2.4 เครื่องมือทั่วไป

utility ที่กล่าวถึง สามารถทำงานได้ค่อนข้างกว้าง จะกล่าวถึงเฉพาะรูปแบบทั่วๆไปที่ใช้กันบ่อยๆ ถ้าอยากรู้ข้อมูลว่าจริงๆแล้ว แต่ละโปรแกรมทำอะไรได้บ้างมากน้อยขนาดไหน ต้องศึกษาเอง อาจจะใช้ man ดูเอาก็ได้ หรือไม่ก็ --help เอา

date แสดงหรือตั้งค่าวัน/เวลา ของระบบ

รูบแบบ $ 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 แสดงปฏิทิน

รูบแบบ $ 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 แสดง user ID ที่กำลังรันอยู่

รูบแบบ $ whoami [option]; ตัวอย่าง

$ whoami
sirikhum

passwd เปลี่ยน password

รูบแบบ $ passwd [option] <usernam> โดยปกติ มักจะ tune มาเป็น active user interface

alias สร้าง/แสดงนามแผง

รูปแบบ $ 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 ลบนามแฝง

รูปแบบ $ unalias [alias_name]

ls แสดงข้อมูลของไฟล์ หรือ directory

รูปแบบ $ ls [option] [file]...

pwd แสดง directory ปัจจุบัน

รูปแบบ $ pwd [option]

cd เปลี่ยน directory (change directory)

รูบแบบ $ 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 copy ไฟล์ หรือ directory

รูบแบบ $ 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

man คู่มือ

คู่มือนี้จะมีการแบ่งเป็น sectionๆ เช่น section ของ user, ของ system call() หรือของ admin รูบแบบ $ man [option] ชื่อโปรแกรม; ตัวอย่าง

$ man open      
$ man -a open
-a = All ปกติแล้ว man จะแสดงเฉพาะ doc ที่เจออันแรกอันเดียว แต่อันนี้จะให้แสดงทุกอัน

info คู่มือ ในรูบแบบ hypertext document

คู่มืออันนี้จะต่างกับ man ตรงที่เป็น hierarchy หรือเป็น menuๆ ไป สามารถ enter เข้าไปใน body หรือใน sub-menu ได้ ตาม hyper-link

รูบแบบ $ info [ชื่อโปรแกรม หรือข้อมูลที่ต้องการ information]

mkdir สร้าง directory

รูบแบบ $ 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 ย้าย/เปลี่ยนชื่อ ไฟล์ หรือ directory

รูปแบบ $ mv [option] ต้นทาง... ปลายทาง; ตัวอย่าง

$ mv ~/public_html/index.html ~/public_html/index.html.old
$ mv ./index.html ~/public_html/

rm ลบไฟล์หรือ directory

รูปแบบ $ rm [option] ไฟล์...; ตัวอย่าง

$ rm ~/public_html/index.html*
$ rm -rf ~/public_html

-r = recursive ใช้ในกรณีที่จะลบ directory
-f = force พยายามลบให้ได้ และไม่ต้องถามอะไร assume ว่าให้ลบไปก่อนเลย

rmdir ลบ directory

รูปแบบ $ rmdir [option] directory...

การใช้งานเหมือนกับ mkdir เวลาบอก parent(-p) หมายถึงให้ลบ directory อันในสุด(ปลายกิ่ง)จนถึงอันนอกสุด

clear clear หน้าจอ

รูปแบบ $ clear

ลักษณะเหมือนกับ cls ของ mikro$oft dos ทุกอย่าง

echo แสดงข้อมูล

รูปแบบ $ 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 หาไฟล์ หรือ directory

รูบแบบ $ find [path] [expression] ;ตัวอย่าง

$ find /home -iname *Mail* -exec ls -l '{}' ';'

/home หมายถึงให้เริ่มจาก path /home 
-iname Mail คือให้หาไฟล์ หรือ directory ที่มีชื่อว่า Mail อยู่ส่วนไหนก็ได้ โดยไม่สนใจ case-sensity 
-exec ls '{}' ';' หมายถึง ถ้าเจอแล้วให้รันคำสั่ง `ls -l ชื่อไฟล์ที่เจอ`

grep matching pattern

รูปแบบ $ grep [option] [pattern] [file] ตัวอย่าง

$ ls | grep jpg 

เป็นการดูว่าไฟล์ไหนบ้างที่มีคำว่า 'jpg' เป็นส่วนหนึ่งของชื่อ โดย pipe output ของ คำสั่ง ls เข้า input stream ของ grep
$ grep Unix *txt หาคำว่า 'Unix' ในส่วนหนึ่งของไฟล์ที่มี 'txt' เป็นส่วนหนึ่งของชื่อ

gzip compress ไฟล์ (= gunzip -c)

gunzip uncompress ไฟล์ (= gzip -d)

ตัวอย่าง

gzip -c file1 > dummy.gz // compress and redirect (compressed) output stream to dummy.gz
 gzip -d dummy.gz // de-compress dummy.gz

tar รวมไฟล์เป็นก้อนเดียว

ใช้เพื่อ 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

ps แสดงรายชื่อ process (hierachy view use, pstree)

แสดงข้อมูลของ process ตัวอย่าง

$ ps -aux

kill ฆ่า process จาก PID (process ID)

killall ฆ่า process จากชื่อ

ใช้เพื่อส่ง signal ไปยัง process โดยปกติใช้เพื่อ terminate process ต่างกันตรงวิธี query process ที่จะ terminate ตัวอย่าง

killall -9 netscape

-9 เป็น signal 'SIGKILL'

free แสดงข้อมูลเกี่ยว memory

ตัวอย่าง

$ free -m

-m เพื่อ force ให้บอกขนาดเป็น Megabypes

df แสดงมูลเนื้อที่ของ disks

ตัวอย่าง

$ df -h

-h = Human readable

top แสดงข้อมูล process

จะแสดงเฉพาะ ข้อมูลของ top process ในรูบแบบตาราง และจะ refresh ให้เอง(โดย default)

su เปลี่ยน user ที่รันอยู่

ใช้เพื่อรัน shell ในสภาพของ user ที่กำหนด ปกติโดย default จะเรียกเป็น root และจะถาม passwd ถ้าจำเป็น (อ้างถึง user ที่มีพลังมากกว่า)

รูบแบบ su [option] [user]

telnet โปรแกรม telnet client

exit ออก

2.5 การปิดเปิดเครื่อง

เวลาจะปิดเครื่อง สามารถทำได้หลายๆเป็น อาจจะ 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 ที่กำลังรันอยู่

2.6 การใช้งาน diskette

เวลาจะใช้ก็ 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$


Next Previous Contents