´Ù„Ô¡«ì¢Ñ„„µØ„ - linux.thai.netthep/docs/linux/linuxbasic.pdf8 ”••Õ‰ 1....
TRANSCRIPT
ยนกซขนตน
เทพพทกษ การญบญญานนท
2
สารบญ
1 เรมตนกบยนกซ 5
1.1 วธตางๆ ทจะปอนคำสงยนกซ . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 คำสงเบองตน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 เขยนขอความออกจอภาพ . . . . . . . . . . . . . . . . . . . . 6
1.2.2 ดวน-เวลา . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 ดรายชอไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 ดเนอหาไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.5 สำเนาไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.6 เปลยนชอไฟล . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.7 ลบไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.8 พมพไฟลออกเครองพมพ . . . . . . . . . . . . . . . . . . . . 14
1.3 ไดเรกทอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.1 ไดเรกทอรปจจบน . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.2 การเปลยนไดเรกทอร . . . . . . . . . . . . . . . . . . . . . . 17
1.3.3 “.” และ “..” . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.4 การสรางไดเรกทอร . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.5 การสำเนาและยายไฟลขามไดเรกทอร . . . . . . . . . . . . . . . 20
1.3.6 การสำเนาไดเรกทอร . . . . . . . . . . . . . . . . . . . . . . 20
1.3.7 การลบไดเรกทอร . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4 การตงชอไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5 wildcard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3
4
2 ระบบรกษาความปลอดภย 252.1 ผใชและกลม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 การตงรหสผาน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.3 สารบบผใช . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.4 ใครเปนใคร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4.1 ฉนคอใคร . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4.2 เหลอบแลเพอนบาน . . . . . . . . . . . . . . . . . . . . . . . 272.4.3 รจกเพอนบาน . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5 ผดแลระบบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.6 แปลงราง . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.7 การปกปองไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.7.1 สทธการเขาถงไฟล . . . . . . . . . . . . . . . . . . . . . . . 302.7.2 สทธการเขาถงไฟลแบบพเศษ . . . . . . . . . . . . . . . . . . 312.7.3 การกำหนดสทธเขาถงไฟล . . . . . . . . . . . . . . . . . . . . 322.7.4 การโอนเจาของไฟล . . . . . . . . . . . . . . . . . . . . . . . 34
3 เกยวกบไฟลและไดเรกทอร 353.1 ชนดของไฟลบนยนกซ . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 ระบบไฟลบนยนกซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.3 i-node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.4 การลงกไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.5 ตรวจสอบการใชเนอทดสก . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 เครองมอประมวลผลไฟล 434.1 การเปลยนทศทางขอมล . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2 เชอมคำสงดวย pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.3 ตวกรอง . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.1 head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.3.2 tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.3.3 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.3.4 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3.5 sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.3.6 uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.3.7 tee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.3.8 cut และ paste . . . . . . . . . . . . . . . . . . . . . . . . . 574.3.9 comm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.4 สงทาย . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
บทท
1
เรมตนกบยนกซ
ยนกซเปนระบบปฏบตการทมประวตยาวนาน ถอไดวาเปนระบบทมอายการใชงานนานทสด และแพรหลายในเครองคอมพวเตอรประเภทตางๆ มากทสดเทาทมนษยเคยมมา ไมวาจะเปนเครองในระดบมนคอมพวเตอรไปจนถงอปกรณพกพา ยนกซถกใชงานในหองวจย ในสถาบนการศกษา ในงานทางทหาร เปนจดกำเนดของอนเทอรเนต และของภาษา C ซงเปนภาษาสำหรบเขยนโปรแกรมระบบทแพรหลายทสดในปจจบนรวมทงเปนตนแบบสำหรบระบบปฏบตการอนๆ เชน MS-DOS, MS-Windows, OS/2 ผานทางมาตรฐานPOSIX อกดวย
ยนกซเองมการแตกแขนงออกไปมากมาย โดยเรมจากท AT&T Bell Lab โดย เคน ทอมปสน (KenThompson) ใน พ.ศ. 2512 ไปแตกหนอและพฒนาอยางมโหฬารทมหาวทยาลยแคลฟอรเนยทเบอรคลยเปน BSD Unix (ซงเปนแบบฉบบของ FreeBSD, NetBSD, OpenBSD และยนกซเชงพาณชยหลายตวในปจจบน) โดยตอมา AT&T กไดผนวกสวนขยายตางๆ กลบเขามาใน AT&T Unix System V เชนกนผผลตตางๆ กไดนำยนกซไปใชกบผลตภณฑของตนมากมาย เชน SunOS และ Solaris บนเครอง SunSPARC, Ultrix บน DEC PDP-11, HP-UX ของ HP, Aix ของ IBM, Xenix ของไมโครซอฟทในยคหนง (ซงตอมากลายเปน SCO Unix สำหรบเครอง PC) ฯลฯ รวมทง GNU/Linux หรอทเราเรยกกนสนๆ วาลนกซทเรากำลงพดถงในเอกสารฉบบน กนบไดวาเปนแขนงหนงของระบบยนกซเชนกน โดยเปนการเขยนขนมาใหมทงหมดภายใตเงอนไขของซอฟตแวรเสร
การทยนกซถกใชงานกวางขวางเชนน กเปนเพราะยนกซถกออกแบบมาดวยปรชญาทเรยบงาย ชดเจนแตกยงยดหยนและมประสทธภาพในการแกปญหาทซบซอน ทำใหมวฒนธรรมการใชงานเปนแบบฉบบของตวเอง ความคงทนอยในวงการมากวา 30 ปจงทำใหยนกซนาศกษาแมสำหรบผทไมไดใชยนกซกตาม
ในปจจบนน แมเดสกทอปลนกซจะอำนวยความสะดวกตอผใชดวยการสงงานผาน GUI ซงมการพฒนาขนมาเปนลำดบตามยคสมย แตโดยเนอแทแลว การสงงานผาน GUI จะทำงานไดเฉพาะในรปของโปรแกรมสำเรจรปทนกพฒนาไดออกแบบไวใหเทานน จงทำงานไดดสำหรบงานทมการออกแบบรองรบไวแลว เชน การสรางเอกสาร งานกราฟก การสำเนา/เคลอนยายไฟล ฯลฯ แตสำหรบงานอกหลายประเภทยงตองการความยดหยนมากกวานน เชน การแกไขหรอแปลงไฟลทละหลายไฟล การประมวลผลไฟลโดยผานขนตอนเปนทอดๆ การทำงานในภาวะทไมม GUI (เชน โปรแกรมททำงานอตโนมตขณะบต
5
6 บทท 1. เรมตนกบยนกซ
เครอง หรอการดแล server จากระยะไกล) ทงหมดน สามารถทำไดดวยการสงงานผานบรรทดคำสงของยนกซ ซงมความคลองตวสงแมสำหรบงานทไมใชงานสำเรจรป
1.1 วธตางๆ ทจะปอนคำสงยนกซ
การปอนคำสงยนกซจะปอนผานตวแปลคำสงทเรยกวา เชลล (shell) ซงการจะไดมาซงเชลลนน กมอยหลายวธ เชน
1. ลอกอนใน text console2. เปด terminal emulator ใน X Window3. เชอมตอไปยงเครองปลายทางดวย telnet, rlogin หรอ ssh4. เรยกเชลลซอนเชลล5. ใช shell escape จากโปรแกรมบางโปรแกรม เชน viในทนขอใหใชสองวธแรกกอน สวนวธอนๆ ทเหลอนน เราจะไดพบตอไป
1.2 คำสงเบองตน
1.2.1 เขยนขอความออกจอภาพ
เรามาเรมจากคำสงททำใหเครองโตตอบอะไรกบคณไดกอนกแลวกน คณสามารถสงแสดงขอความใดๆออกทางจอภาพไดดวยคำสง echo
ตวอยางเชน
thep@anubis:~$ echo hello
hello
thep@anubis:~$ echo how are you
how are you
thep@anubis:~$ echo "how are you"
how are you
คำสง echo จะแสดงขอความทเปนอารกวเมนต (argument คอคาทสงใหกบคำสงใดๆ) ทงหมดโดยคนระหวางอารกวเมนตแตละตวดวยชองวางหนงชอง สงเกตวา ในคำสงแรก เราสงอารกวเมนตใหกบ echo เพยงคาเดยว คำสงถดมาสงใหสามคา คอ how, are และ you การเวนชองวางระหวางhow และ are จงไมมผลใดๆ ในขณะทคำสงสดทาย เราใชเครองหมายคำพดครอบขอความทงหมด ทำใหอารกวเมนตเหลอเพยงคาเดยว
คำสง echo – แสดงขอความ
รปแบบ echo [STRING] . . .
คำบรรยาย แสดง STRING ออกทางเอาทพตมาตรฐาน คนระหวาง STRING แตละตวดวยชองวางหนงชอง
1.2. คำสงเบองตน 7
เมอเขยนจอภาพแลว คณกอาจจะอยากลบทง คำสงสำหรบลบจอภาพในยนกซไดแกคำสง clear
ซงจะพจารณาประเภทของจอทคณใช (เชน เปน xterm, Linux console หรอ VT100 ฯลฯ) และหาวธลบจอใหโดยอตโนมต
คำสง clear – ลบจอภาพ
รปแบบ clear
คำบรรยาย ลบจอภาพตามประเภทของเทอรมนลทใช
1.2.2 ดวน-เวลา
นกคอมพวเตอรหลายคนไมเคยใชนาฬกาขอมอเลย เพราะอาศยดเวลาจากเครองเอา ถงคณมนาฬกา คณกสามารถตรวจสอบนาฬกาของเครองวาเดนตรงหรอไมดวยคำสง date
thep@anubis:~$ date
Sat Jul 5 16:31:45 ICT 2003
อยาแปลกใจถาคณเหนปฏทนบนเครองของคณเปนภาษาไทย ไมเหมอนกบตวอยางขางบน นนแสดงวาคณไดใชระบบทปรบแตงใหเปนไทยแลว
คำสง date – แสดงวนทและเวลาของระบบ
รปแบบ date
คำบรรยาย แสดงวนทและเวลาของระบบ
นอกจากแสดงวน-เวลาปจจบนแลว คณอาจดปฏทนของเดอนปจจบนไดดวยคำสง cal
thep@anubis:~$ cal
July 2003
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
หรอลองดปฏทนของเดอนอน
thep@anubis:~$ cal 2 2000
February 2000
8 บทท 1. เรมตนกบยนกซ
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
ลองพมพ cal 2003 ทเครองของคณดสวาจะเกดอะไรขน
คำสง cal – แสดงปฏทน
รปแบบ cal [[month] year]
คำบรรยาย แสดงปฏทนของเดอนและปทกำหนด หากไมกำหนดอะไรเลยจะแสดงปฏทนของเดอนปจจบน และหากระบแตปไมระบเดอน จะแสดงปฏทนของทงป
1.2.3 ดรายชอไฟล
เราจะเรมสำรวจฮารดดสกกนดวยคำสงขอดรายชอไฟล ไดแกคำสง ls
thep@anubis:~$ ls
a.out Download hello.c Mail Projects tmp
ในบางระบบอาจมการตงคาไวใหใชสบงบอกชนดของไฟล เชน สนำเงนแทนไดเรกทอร สเขยวแทนไฟลโปรแกรม สปกตแทนไฟลขอมล เปนตน หากระบบของคณไมไดตงคาเชนนไว คณกยงสามารถดชนดของไฟลตางๆ ไดดวยการเพมตวเลอก -F
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ Projects/ tmp/
จะเหนวา มการเพมเครองหมายพเศษตอทายชอไฟลเพอบอกชนด กลาวคอ
/ หมายถงไดเรกทอร* หมายถงไฟลโปรแกรม@ หมายถง symbolic link= หมายถง socket| หมายถง named pipe (FIFO)
โดยถาไมมเครองหมายพเศษ จะหมายถงไฟลขอมลปกต ชนดตางๆ ของไฟล จะกลาวในรายละเอยดในบทท 3
แตไฟลตางๆ กยงมรายละเอยดมากกวาชนดของไฟล เชน ขนาด เวลาปรบปรงครงสดทาย ฯลฯ ซงคณสามารถขอดรายละเอยดทงหมดไดดวยตวเลอก -l
1.2. คำสงเบองตน 9
thep@anubis:~$ ls -l
total 28
-rwxr-xr-x 1 thep users 4815 2002-08-23 14:49 a.out
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Download
-rw-r--r-- 1 thep users 77 2002-08-23 14:49 hello.c
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Mail
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Projects
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 tmp
บรรทดแรก (total 28) จะแสดงจำนวนบลอกทงหมดของไฟลในไดเรกทอรนน โดยบลอกหนงโดยปกตจะมขนาด 1024 ไบต ทงน สำหรบไฟลทเปนไดเรกทอรยอย (เชน Download) จะไมรวมขนาดของไฟลตางๆ ทอยใตไดเรกทอรยอยนน แตจะนบเพยงขนาดของตวไดเรกทอรยอย (ทเกบชอไฟลตางๆ)เทานน
จากนน กเปนรายละเอยดของแตละไฟลในไดเรกทอร โดยแตละรายการจะแบงเปนสวนตางๆ (จากซายไปขวา) ดงน
1. permission2. จำนวนลงก (ดหวขอ 3.3)3. ผใชทเปนเจาของไฟล4. กลมทเปนเจาของไฟล5. ขนาดของไฟล6. วน-เวลาทแกไขครงสดทาย7. ชอไฟลpermission แสดงสทธทอนญาตใหผใชแตละคนเขาถงไฟลได สวนนจะประกอบดวยตวอกษร 10
ตว โดยแบงออกเปน 4 สวน สวนแรกเปนชนดของไฟล แสดงดวยตวอกษรตวแรกตวเดยว สวนอก 3สวนถดไป แสดงดวยตวอกษรสวนละ 3 ตว เปนสทธของผใชทเปนเจาของไฟล สทธของผใชในกลมเดยวกบเจาของไฟล และสทธของผใชอนๆ ตามลำดบ
ชนดของไฟล ไดแก- หมายถงไฟลปกตd หมายถงไดเรกทอรl หมายถง symbolic links หมายถง socketc หมายถง character deviceb หมายถง block devicep หมายถง named pipe (FIFO)
ชนดตางๆ ของไฟล จะกลาวในรายละเอยดในบทท 3สวนสทธของผใชทแสดงดวยอกษรสามตวนน ตวแรกจะหมายถงสทธในการอาน (r) ตวถดมา
หมายถงสทธในการเขยน (w) ตวสดทายหมายถงสทธในการ execute (x) ซงหากในตำแหนงนนๆ เปนเครองหมายลบ (-) จะหมายถงไมอนญาต หากอนญาตกจะแสดงคา r, w หรอ x ตามลำดบ โดยในสวนของสทธการ execute นน ในบางกรณอาจใชอกษรอน ไดแก s, t, S, T ซงจะมความหมายพเศษ ดงจะไดกลาวถงในหวขอ 2.7.2
permission ของไฟลน สามารถเปลยนไดดวยคำสง chmod ดงจะกลาวถงในหวขอ 2.7.3
10 บทท 1. เรมตนกบยนกซ
เราไดเหนการใชคำสง ls ในการแสดงรายชอไฟลไปแลว แตทผานมา ยงมไฟลอกสวนหนงทถกซอนไวไมไดแสดงออกมา ไฟลทถกซอนเหลานจะมชอขนตนดวย “.” คณสามารถดรายชอไฟลเหลานนไดโดยใชตวเลอก -a
thep@anubis:~$ ls -a
. .alias .bash_profile .cshrc hello.c Projects
.. a.out .bashrc Download Mail tmp
นอกจากน คำสง ls ยงสามารถตงตวเลอกในการแสดงผลไดอกหลายแบบ ดงแสดงในสรปคำสง
คำสง ls – ดรายชอไฟล
รปแบบ ls [ตวเลอก] [path]
คำบรรยาย แสดงรายชอไฟลใน path ทกำหนด โดยถาไมระบ path จะหมายถงไดเรกทอรปจจบน
ตวเลอก -1 แสดงหนงรายการตอบรรทด (สำหรบสงตอใหโปรแกรมอน)-a แสดงทกไฟลรวมทงไฟลทซอนอยดวย-F แสดงปายบอกชนดของไฟลอยางยอตอทายชอ-i แสดงหมายเลข i-node ของแตละไฟล-l แสดงรายละเอยดของไฟลอยางยาว-S เรยงลำดบตามขนาดของไฟล-t เรยงไฟลใหมขนมากอน
1.2.4 ดเนอหาไฟล
คำสงสำหรบดเนอหาไฟลของยนกซออกจะชอแปลกสกหนอย คอคำสง cat เชน เมอคณจะสงแสดงเนอหาของไฟล /etc/hostname (ซงเกบชอเครองของคณ) ออกทางจอภาพ:
thep@anubis:~$ cat /etc/hostname
anubis
ความจรงแลว คำสง cat มาจากคำวา catenate คอการตอไฟลเขาดวยกน แลวแสดงออกทางstandard output ตวอยางเชน เมอมไฟล a และ b คณสามารถตอไฟลทงสองเขาดวยกนออกทางจอภาพได:
thep@anubis:~$ cat a
hello
thep@anubis:~$ cat b
bye
thep@anubis:~$ cat a b
hello
bye
1.2. คำสงเบองตน 11
ดงนน คณจะเหนวา การแสดงเนอหาไฟลหนงไฟลออกทางจอภาพ จงเปนเพยงกรณพเศษของการตอไฟลเทานนเอง คำสง cat สามารถจะตอไฟลกไฟลเขาดวยกนกได และถาคณเรยกคำสง cat โดยไมระบไฟลใดๆ เลย cat จะหมายถง standard input (ไดแกแปนพมพ ถาไมมการเปลยนใหเปนอยางอน)
thep@anubis:~$ cat
hello
hello
bye
bye�� ��Ctrl-d
thep@anubis:~$
คณจะเหนแมวตวนพดลอเลยนคณไปตลอดบรรทดตอบรรทด เพราะมนพยายามตอไฟลทมเพยงไฟลเดยว คอแปนพมพ แลวแสดงผลลพธออกทาง standard output ซงไดแกจอภาพ จนกวาคณจะกด�� ��Ctrl-d ซงยนกซกำหนดใหหมายถง end-of-file
การปลอยใหแมวลอเลยนอยางน กใชจะไรสาระเสยทเดยว เพราะถาคณเปลยนทศทาง standardoutput จากจอภาพเปนไฟลแลวละก มนกคอวธสรางไฟลขอความอยางงายนนเอง (เราจะกลาวถงการเปลยนทศทางขอมลอกครงในหวขอ 4.1):
thep@anubis:~$ cat > d
hello
anybody here?
bye�� ��Ctrl-d
thep@anubis:~$ cat d
hello
anybody here?
bye
คณจะไดเรยนรการใชเอดเตอรในการสรางไฟลขอความในโอกาสตอไป ซงจะชวยใหคณแกไขขอความไดสะดวกกวาน (อยางนอยๆ กสามารถกลบไปแกไขบรรทดกอนได)
คำสง cat – ตอไฟลแลวแสดงออกทาง standard output
รปแบบ cat [file . . . ]
คำบรรยาย ตอไฟลทกำหนดตามลำดบ (หากไมระบไฟลใดๆ จะหมายถง standard input) แลวแสดงผลออกทาง standard output
คำสง cat จะแสดงเนอหาไฟลออกทางจอภาพในฐานะทเปนไฟลไฟลหนง โดยไมมปฏสมพนธกบแปนพมพใดๆ ทงสน แตถาคณตองการดไฟลยาวๆ โดยใหมนหยดทละหนา ยนกซกมคำสง more เพอการน
12 บทท 1. เรมตนกบยนกซ
คำสง more จะแสดงเนอหาไฟลทละหนา โดยจะแสดงคำวา “--More--” ททายหนาเพอบอกวา“มตอ” คณสามารถควบคมการแสดงผลไดดวยปมตางๆ ดงน
�� ��Enter เลอนหนาจอไป 1 บรรทด�� ��Space เลอนหนาจอไป 1 หนา�� ��/ text�� ��Enter คนหา text�� ��n คนหาตอ�� ��q ออกจากโปรแกรม
more จะออกจากโปรแกรมทนททแสดงผลมาถงทายไฟล หรอเมอคณกด�� ��q
การเรยกคำสง more สามารถเรยกโดยใสชอไฟลทตองการด โดยใสไดมากกวา 1 ไฟล ซงถาระบมากกวา 1 ไฟล กจะแสดงชอไฟลทตนขอความใหดวย และถาไมระบชอไฟล จะหมายถง standard input คลายcat ยกเวนวา more จะไมสามารถทำงานกบ standard input ทเปนแปนพมพได (เพราะแปนพมพเอาไวใชรบคำสงเลอนจอไปแลว) จงมกใช more ทไมระบชอไฟลในกรณทรบขอมลตอจากคำสงอนเทานนเชน ในการดผลทพนออกมาจากคำสงอนผาน pipe (เราจะกลาวถงการใช pipe โดยละเอยดในบทท 4)
thep@anubis:~$ ls -l /bin | more
total 2872
-rwxr-xr-x 1 root root 47464 2002-08-04 03:15 afio
-rwxr-xr-x 1 root root 2724 2002-01-27 14:05 arch
-rwxr-xr-x 1 root root 579816 2002-09-12 05:51 bash
-rwxr-xr-x 1 root root 13864 2002-08-04 16:10 cat
-rwxr-xr-x 1 root root 16232 2002-09-01 20:39 chgrp
-rwxr-xr-x 1 root root 16008 2002-09-01 20:39 chmod
-rwxr-xr-x 1 root root 18120 2002-09-01 20:39 chown
-rwxr-xr-x 1 root root 42664 2002-09-01 20:39 cp
-rwxr-xr-x 1 root root 47656 2002-06-23 03:09 cpio
-rwxr-xr-x 1 root root 82248 2002-09-14 19:32 dash
-rwxr-xr-x 1 root root 34408 2002-09-01 20:40 date
-rwxr-xr-x 1 root root 28808 2002-09-01 20:39 dd
-rwxr-xr-x 1 root root 26184 2002-09-01 20:39 df
-rwxr-xr-x 1 root root 59496 2002-09-01 20:39 dir
-rwxr-xr-x 1 root root 4076 2002-01-27 14:05 dmesg
-rwxr-xr-x 1 root root 11080 2002-09-01 20:40 echo
-rwxr-xr-x 1 root root 43292 2000-11-27 09:05 ed
--More--
คำสง more สามารถชวยใหคณดไฟลยาวๆ โดยหยดทละหนาได แตไมสามารถยอนกลบไปดหนากอนได (ในทนหมายถง more มาตรฐานของยนกซ ไมรวมถง more ในบางระบบทมการแกไขใหดหนากอนได) จงไดมการสรางคำสงใหม คอ less ซงสามารถเลอนหนาขน-ลงได การเรยกใชคำสง less กคลายกบ more ผดกนทปมทใชควบคมหนาจอของ less มากกวา ตวอยางเชน
1.2. คำสงเบองตน 13
�� ��Enter เลอนหนาจอลง 1 บรรทด�� ��Space เลอนหนาจอลง 1 หนา�� ��j เลอนหนาจอลง 1 บรรทด�� ��k เลอนหนาจอขน 1 บรรทด�� ��f เลอนหนาจอลง 1 หนา�� ��b เลอนหนาจอขน 1 หนา�� ��g ไปทตนไฟล�� ��G ไปททายไฟล�� ��m letter mark ตำแหนงปจจบนดวย letter�� ��’ letter ไปทตำแหนงท mark ไว�� ��/ text�� ��Enter คนหา text�� ��? text�� ��Enter คนหา text ยอนหลง�� ��n คนหาตอในทศทางเดม�� ��N คนหาตอในทศทางตรงขาม�� ��q ออกจากโปรแกรม
1.2.5 สำเนาไฟล
บนยนกซ คณสามารถทำสำเนาไฟลไดดวยคำสง cp (copy)
thep@anubis:~$ ls
a
thep@anubis:~$ cat a
hello
thep@anubis:~$ cp a b
thep@anubis:~$ ls
a b
thep@anubis:~$ cat b
hello
ตวอยางขางตนเปนการสำเนาไฟล a ไปเปนไฟลใหมชอ b โดยปกตแลว ถามไฟล b อยแลว b กจะถกเขยนทบดวยเนอหาใหมทนท ดงนน ควรระวงเรองนใหด ถาจะให cp เตอนกอนเขยนทบ กใชตวเลอก -i
thep@anubis:~$ ls
a b
thep@anubis:~$ cp -i a b
cp: overwrite ‘b’? y
แตถาจะบงคบใหเขยนทบไฟลทมอยแลวเสมอ กใชตวเลอก -f
14 บทท 1. เรมตนกบยนกซ
นอกจากสำเนาไฟลแลว cp ยงสามารถใชสำเนาไดเรกทอรทงชดไดดวย โดยใชตวเลอก -r ดงจะกลาวตอไปในหวขอท 1.3
1.2.6 เปลยนชอไฟล
อกครงหนงทเราจะพบคำสงยนกซทออกแบบมาในรปทวไป คำสงทใชเปลยนชอไฟลในยนกซ ไดแกคำสงmv (move)
ความจรงแลว คำสง mv มหนาทในการเคลอนยายไฟลจากทหนงไปยงอกทหนง โดยสามารถตงชอใหมได เชน คำสงตอไปนเปนการยายไฟล a ไปไวท /tmp ภายใตชอใหมคอ b
thep@anubis:~$ mv a /tmp/b
ดงนน การยายไฟลมาไวในไดเรกทอรเดมในชอใหม กคอการเปลยนชอไฟลนนเอง
thep@anubis:~$ mv a b
1.2.7 ลบไฟล
คำสงสำหรบลบไฟลบนยนกซไดแกคำสง rm
thep@anubis:~$ rm a b
เปนการลบไฟล a และ b
1.2.8 พมพไฟลออกเครองพมพ
เนองจากระบบยนกซเปนระบบ multi-user จงสนบสนนการพมพผาน print queue ผใชแตละคนสามารถสงงานไปเขาควเพอรอสงออกทางเครองพมพไดดวยคำสง lpr เมอสงไปแลว ถาคววางอย กจะถกสงไปยงเครองพมพทนท แตถาระบบกำลงพมพงานชนอนอย กตองรอในควไปกอน
ตวอยางเชน ถาจะพมพไฟล output.ps ออกทางเครองพมพ กใชคำสง
thep@anubis:~$ lpr output.ps
ในบางกรณ ระบบของคณอาจมเครองพมพมากกวาหนงตว ซงตรวจดไดทไฟล /etc/printcap
thep@anubis:~$ cat /etc/printcap
# Entry edited Tue Jun 10 15:28:13 2003 by foomatic-configure.
# Additional configuration atop /etc/foomatic/lpd/c82-foo.ppd
c82-foo||Epson Stylus C82|:\:filter_options= --lprng $J $Z /etc/foomatic/lpd/c82-foo.ppd:\:lf=/var/log/lp-errs:\
1.2. คำสงเบองตน 15
:ppdfile=/etc/foomatic/lpd/c82-foo.ppd:\:sd=/var/spool/lpd/c82-foo:\:lp=/dev/lp0:\:if=/usr/bin/foomatic-rip:\:sh:\:force_localhost:\:mx#0:
c82:\:NUP=1:\:PRINTER_TYPE=LOCAL:\:RTLFTMAR=18:\:TOPBOTMAR=18:\:ASCII_TO_PS=YES:\:TEXT_SEND_EOF=NO:\:lp=/dev/lp0:\:RESOLUTION=1440x720:\:GSDEVICE=uniprint:\:DESIRED_TO=ps:\:PAPERSIZE=a4:\:lf=/var/log/lp-errs:\:sd=/var/spool/lpd/c82:\:PS_SEND_EOF=NO:\:sh:\:force_localhost:\:mx#0:
:
ซงในทนม print queue สองคว คอ c82-foo และ c82 หากตองการเจาะจงใหออกยงควทตองการ กสามารถระบไดดวยตวเลอก -P queue เชน
thep@anubis:~$ lpr -P c82-foo output.ps
การพมพโดยไมระบชอคว จะพมพออกทางเครองพมพทผดแลระบบตงไวใหเปนควปรยายการตรวจสอบ print queue วามงานพมพอะไรรออยบาง ใชคำสง lpq
thep@anubis:~$ lpq -P c82-foo
Printer: c82-foo@localhost ’Epson Stylus C82’
Queue: 1 printable job
Server: pid 2257 active
Unspooler: pid 2258 active
Status: processing ’dfA256localhost’, size 674097, format ’f’,
16 บทท 1. เรมตนกบยนกซ
IF filter ’master-filter’ at 11:32:58.948
Rank Owner/ID Class Job Files Size Time
active thep@localhost+256 A 256 output.ps 674097 11:32:58
จะเหนวา ม active job อยหนงงาน หมายเลข job คอ 256 ไฟลทพมพคอ output.ps ขนาด 674,097ไบต สงพมพเมอเวลา 11.32 น.
หากทงไวนานแลว เหนวายงไมออกทเครองพมพ อาจมอะไรขดของบางอยาง หรอตองการจะเลกพมพกลางคน คณกสามารถยกเลกไดดวยคำสง lprm โดยระบหมายเลข job ทตองการ
thep@anubis:~$ lprm -P c82-foo 256
Printer: c82-foo@localhost ’Epson Stylus C82’
checking perms ’thep@localhost+256’
dequeued ’thep@localhost+256’
thep@anubis:~$ lpq -P c82-foo
Printer: c82-foo@localhost ’Epson Stylus C82’
Queue: no printable jobs in queue
Status: job ’thep@localhost+256’ saved at 11:45:13.299
คำสง lprm -a จะยกเลกงานทกงานในควทเปนของคณ คณจะไมมสทธยกเลกงานพมพของผใชอน นอกเสยจากคณจะเปนผดแลระบบ
เชนเดยวกบคำสง lpr คำสง lpq และ lprm จะระบควดวยตวเลอก -P หรอไมกได โดยถาไมระบ จะหมายถงควปรยายทผดแลระบบตงไว (ปกตกคอควแรกใน /etc/printcap นนเอง) หรอถาคณตองการตงคาเครองพมพปกตของคณเอง กสามารถทำไดโดยเซตตวแปรระบบชอ PRINTER
thep@anubis:~$ export PRINTER=c82
thep@anubis:~$ lpq
Printer: c82@localhost
Queue: no printable jobs in queue
Status: finished ’thep@localhost+870’, status ’JFAIL’ at 20:09:25.185
สงเกตทบรรทด Printer: วาไดเปลยนเปน c82 โดยไมตองใชตวเลอก -P
1.3 ไดเรกทอร
ระบบไฟลของยนกซมการแบงแหลงเกบไฟลเปนชนๆ ทำใหจดเกบไฟลไดอยางมระเบยบ เปรยบเสมอนตเอกสารทมการแบงหมวดหม ทำใหหาไฟลไดงาย หมวดหมหนงๆ ทใชเกบไฟลน เรยกวา ไดเรกทอร (directory)1 หนาทของไดเรกทอรกคอ เกบรายชอของไฟล และอาจเกบไดเรกทอรยอยลงไปอกกไดเชนกน
ระบบยนกซจะมโครงสรางของไดเรกทอรหลกทตายตว โดยเรมจากชนบนสดทเรยกวา ไดเรกทอรราก (root directory) จะอางถงโดยเครองหมายขดทบ หรอ slash (/)
1ใน MS-DOS จะใชคำวาไดเรกทอรเชนเดยวกบยนกซ ในขณะท MS Windows จะเรมใชคำวา โฟลเดอร (folder) ซงหมายความถงสงเดยวกน
1.3. ไดเรกทอร 17
thep@anubis:~$ ls -F /
bin/ etc/ lib/ root/ vmlinuz@
boot/ floppy/ lost+found/ sbin/ vmlinuz.old@
cdrom/ home/ mnt/ tmp/
cdrom0/ initrd/ opt/ usr/
dev/ initrd.img@ proc/ var/
จะเหนวา ไดเรกทอรรากยงม ไดเรกทอรยอย (subdirectory) อยในนนอกจำนวนหนง เมอจะอางถงไดเรกทอรยอยนบจากรากกอางไดดวยชอไดเรกทอรยอยหลง slash และเมออางถงไฟลหรอไดเรกทอรยอยลงไปอก กคนแตละชนดวย slash จนถงชอไฟลหรอไดเรกทอรยอยทตองการ2
thep@anubis:~$ ls -F /usr/local
bin/ games/ include/ lib/ man/ sbin/ share/ src/
thep@anubis:~$ cat /etc/hostname
anubis
1.3.1 ไดเรกทอรปจจบน
เมอคณอยในเชลลของยนกซ คณจะ “อย” ทไดเรกทอรใดไดเรกทอรหนงเสมอ โดยทเมอคณอางชอไฟลลอยๆ โดยไมไดระบตำแหนงแหงท มนจะหมายถงไฟลใน ไดเรกทอรปจจบน (current directory)
คณสามารถขอดคาของไดเรกทอรปจจบนไดดวยคำสง pwd (print working directory)
thep@anubis:~$ pwd
/home/thep
1.3.2 การเปลยนไดเรกทอร
คณสามารถเปลยนไดเรกทอรปจจบนไปทอนไดดวยคำสง cd (change directory)
thep@anubis:~$ cd /usr
thep@anubis:/usr$ pwd
/usr
thep@anubis:/usr$ ls -F
bin/ include/ local/ sbin/ X11R6/
doc/ info@ m68k-palmos/ share/
games/ lib/ openwin/ src/
thep@anubis:/usr$ cd local
2ใน MS-DOS และ MS Windows จะใช backslash แทน slash เพราะไดกำหนดใหใช slash ในการระบตวเลอกในบรรทดคำสงไปแลว เชน dir /w เปนตน
18 บทท 1. เรมตนกบยนกซ
thep@anubis:/usr/local$ pwd
/usr/local
จะเหนวา คณสามารถอางไดเรกทอรในแบบสมบรณ (absolute) เชน /usr หรอในแบบสมพทธ (rela-tive) กบไดเรกทอรปจจบน เชน local กได
นอกจากน การสง cd โดยไมระบอารกวเมนตจะหมายถงการเปลยนไดเรกทอรกลบไปท ไดเรกทอรบาน (home directory) ของคณ ซงไดเรกทอรบานน ผใชแตละคนจะมเปนของตวเอง กำหนดใหโดยผดแลระบบ
การเปลยนไดเรกทอรดวย cd จะเปลยนไดเรกทอรปจจบนไป ณ ตำแหนงใหม แตเมอคณใชยนกซไปสกพก คณจะเรมพบวามหลายครงทคณแคอยากเปลยนไดเรกทอรไปทำงานทอนเพยงชวคราวแลวกลบมาทำงานตอทเดม ถาใชคำสง cd คณกจำ (หรอจด) ไดเรกทอรปจจบนไวกอนเปลยนไปทใหมจากนนกคอยเปลยนกลบมาทเดมทจำ (หรอจด) ไว หรอไมกใชชดคำสง pushd และ popd
pushd และ popd จะทำงานเปนสแตก (stack–กองซอนทวางทบๆ กน โดยเวลาหยบ ชนบนสดทวางหลงสดจะถกหยบกอน) โดย pushd จะเกบคาไดเรกทอรปจจบนใสสแตกไว กอนจะเปลยนไดเรกทอรไป และคำสง popd จะหยบคาในสแตกลาสดขนมาแลวเปลยนไดเรกทอรไป
thep@anubis:~$ pushd /usr/local
/usr/local ~
thep@anubis:/usr/local$ popd
~
thep@anubis:~$
สงเกตวา popd ไมตองการอารกวเมนต และหลงการสง pushd และ popd แตละครง เชลลจะรายงานคาในสแตกใหทราบ ดงเชนในการสง pushd ในตวอยางขางตนจะทำใหสแตกเกบคาสองคา คอไดเรกทอรใหมทยายไป และไดเรกทอรเกา เมอสง popd กจะเลกคาลาสดในสแตกและใชคาถดมาแทน
คณสามารถขอดคาสแตกของไดเรกทอรนไดทกเวลาดวยคำสง dirs
thep@anubis:~$ pushd /usr/local
/usr/local ~
thep@anubis:~$ dirs
/usr/local ~
thep@anubis:/usr/local$ popd
~
thep@anubis:~$ dirs
~
thep@anubis:~$
1.3.3 “.” และ “..”
ในแตละไดเรกทอร จะมการอางองไปยงไดเรกทอรปจจบนและไดเรกทอรเบองบนภายใตชอ “.” และ“..” ตามลำดบ ซงทำใหคณสามารถอางไดเรกทอรแบบสมพทธไดยดหยนยงขน
1.3. ไดเรกทอร 19
เราทราบแลววา การอางชอพาธโดยไมไดขนตนดวย “/” นน จะอางองเทยบกบไดเรกทอรปจจบนเสมอ ซงทำใหเราอางถงไฟลหรอไดเรกทอรทอยในระดบลางลงไปได แตเมอจะอางถงไฟลหรอไดเรกทอรโดยอางองจากไดเรกทอรเบองบนขนไป กสามารถใช “..” ชวยได
thep@anubis:~$ cd /usr/local
thep@anubis:/usr/local$ ls ..
bin games info local openwin share X11R6
doc include lib m68k-palmos sbin src
thep@anubis:/usr/local$ ls ../games
3Dc gnome-stones mahjongg xdemineur
banner gnometris nethack xdigger
cgoban gnomine nethack-gnome xgal
cmail gnuchess pxboard xgalaga
debugboard gnuchessx same-gnome xtet42
gnibbles gnugo sol zic2xpm
gnobots2 grab_cgoban tint
gnome-freecell iagno xboard
thep@anubis:/usr/local$ cd ..
thep@anubis:/usr$ pwd
/usr
สวน “.” นนจะอางองถงไดเรกทอรปจจบน ซงดเผนๆ อาจจะดไมมประโยชนอะไรนก เพราะการอางถง “./file” กมกจะเทยบเทากบการอางถง “file” เฉยๆ อยแลว แตคณจะเหนประโยชนของ“.” เมอใชยนกซไปสกพก ตวอยางเชน การเรยกโปรแกรมหรอสครปตทอยในไดเรกทอรปจจบน หรอการลบไฟลทชอขนตนดวยเครองหมายลบ (-) เปนตน
1.3.4 การสรางไดเรกทอร
คำสงสรางไดเรกทอรสำหรบยนกซคอ mkdir ซงสามารถสงสรางในลกษณะสมบรณหรอสมพทธกได
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ Projects/ tmp/
thep@anubis:~$ mkdir MyDoc
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ MyDoc/ Projects/ tmp/
thep@anubis:~$ mkdir /var/tmp/MyDoc
thep@anubis:~$ ls -F /var/tmp
MyDoc/
ทงน ในการสงสรางไดเรกทอรแบบสมบรณ จะตองมไดเรกทอรเบองบนอยกอน มฉะนนจะไมสามารถสรางได
20 บทท 1. เรมตนกบยนกซ
thep@anubis:~$ mkdir /var/tmp/where/is/MyDoc
mkdir: cannot create directory ‘/var/tmp/where/is/MyDoc’: No such
file or directory
อยางไรกด mkdir ของ GNU มตวเลอก -p เพอสรางไดเรกทอรเบองบนใหดวย
thep@anubis:~$ mkdir -p /var/tmp/where/is/MyDoc
1.3.5 การสำเนาและยายไฟลขามไดเรกทอร
คำสง cp และ mv นน มอกรปแบบหนงของการเรยกนอกเหนอจากการระบชอไฟลตนทางและปลายทาง คอการระบปลายทางเปนไดเรกทอร ซงในรปแบบน จะระบไฟลตนทางไดมากกวาหนงไฟล โดย cp
(หรอ mv) จะสำเนา (หรอยาย) ไฟลตนทางทงหลายนนไปยงไดเรกทอรปลายทางภายใตชอไฟลเดม
thep@anubis:~$ ls MyDoc
thep@anubis:~$ cp /etc/hostname /etc/hosts MyDoc
thep@anubis:~$ ls MyDoc
hostname hosts
thep@anubis:~$ ls -F .
a.out* Download/ hello.c Mail/ MyDoc/ Projects/ tmp/
thep@anubis:~$ mv a.out hello.c MyDoc
thep@anubis:~$ ls -F .
Download/ Mail/ MyDoc/ Projects/ tmp/
thep@anubis:~$ ls MyDoc
a.out hello.c hostname hosts
1.3.6 การสำเนาไดเรกทอร
คำสงทใชสำเนาไดเรกทอรอยางงาย ไดแก cp -r โดยระบตนทางและปลายทางเปนไดเรกทอรแทนทจะเปนไฟลอยางการสำเนาไฟล ตวเลอก -r (recursive) จะสำเนาทกๆ ไฟลและไดเรกทอรยอยในไดเรกทอรตนทางไปยงไดเรกทอรปลายทาง
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ MyDoc/ Projects/ tmp/
thep@anubis:~$ cp -r /usr/games mygames
thep@anubis:~$ ls -F
a.out* hello.c MyDoc/ Projects/
Download/ Mail/ mygames/ tmp/
thep@anubis:~$ ls mygames
3Dc gnome-stones mahjongg xdemineur
banner gnometris nethack xdigger
1.4. การตงชอไฟล 21
cgoban gnomine nethack-gnome xgal
cmail gnuchess pxboard xgalaga
debugboard gnuchessx same-gnome xtet42
gnibbles gnugo sol zic2xpm
gnobots2 grab_cgoban tint
gnome-freecell iagno xboard
1.3.7 การลบไดเรกทอร
ยนกซจะลบไดเรกทอรดวยคำสง rmdir ซงจะใชสำหรบไดเรกทอรเปลาเทานน กลาวคอ คณจะตองลบไฟลทงหลายภายใตไดเรกทอรทจะลบนนใหหมดเสยกอน
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ MyDoc/ Projects/ tmp/
thep@anubis:~$ cp /etc/hostname MyDoc
thep@anubis:~$ ls MyDoc
hostname
thep@anubis:~$ rmdir MyDoc
rmdir: ‘MyDoc’: Directory not empty
thep@anubis:~$ rm MyDoc/*
thep@anubis:~$ rmdir MyDoc
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ Projects/ tmp/
การไมอนญาตใหลบไดเรกทอรทมขอมลนกมขอดตรงทลดโอกาสทขอมลจะหายโดยไมเจตนาลงไดอยางไรกด ยงมวธทจะลบไดเรกทอรพรอมทงไฟลและไดเรกทอรยอยทงหมดทอยในนน โดยใชตวเลอก-r ในคำสง rm ธรรมดา
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ MyDoc/ Projects/ tmp/
thep@anubis:~$ ls MyDoc
hostname
thep@anubis:~$ rm -r MyDoc
thep@anubis:~$ ls -F
a.out* Download/ hello.c Mail/ Projects/ tmp/
1.4 การตงชอไฟล
ยนกซกำหนดใหไฟลมชอยาวไดถง 14 ตวอกษร ถงแมหลายระบบ (เชน GNU/Linux) ไดขยายใหใชไดถง 256 ตวอกษร แตชอไฟลทยาวไมเกน 14 ตวอกษรจะใชไดกบยนกซทกระบบ ตวอกษรทอนญาตใหใชตงชอไฟลไดอยางปลอดภย ไดแก
22 บทท 1. เรมตนกบยนกซ
• ตวอกษรภาษาองกฤษ a-z และ A-Z โดยตวเลก-ตวใหญจะถอวาตางกน กลาวคอ abc, ABCและ Abc ถอวาเปนไฟลทตางกน
• ตวเลข 0-9• เครองหมาย . ,
สวนเครองหมายอนๆ เชน ; $ ‘ " ’ | ( ) ~ * & # - < > ? / อาจมปญหาเมอนำมาตงเปนชอไฟล เนองจากเปนเครองหมายพเศษทเชลลตความ โดยเฉพาะเครองหมาย / นน ระบบจะตความเปนเครองหมายแบงชอไดเรกทอรเสมอ
เครองหมายจด (.) นน นยมใชตงนามสกลของไฟลเพอบอกชนด เชน foo.c เปนไฟลซอรสโคดภาษาซ foo.jpg เปนไฟลรปภาพแบบ JPEG เปนตน แตถาเครองหมาย . อยหนาสด เชน .bashrc
จะทำใหไฟลนนถกซอนจากคำสง ls ปกต ตองใชตวเลอก -a จงจะเหน
1.5 wildcard
หลายตอหลายครงทเราตองสงงานกบไฟลเปนชดๆ ในยนกซจะมวธอางไฟลเปนชดๆ ทมชอสอดคลองกบรปแบบทกำหนด รปแบบดงกลาวเรยกวา wildcard เปนการอางชอไฟลโดยละบางสวนใหแปรเปลยนเปนคาตางๆ ได เชลลจะเปนผกระจาย wildcard โดยคนหาไฟลทงหมดในระบบไฟลหรอไดเรกทอรทกำหนดทมชอตามรปแบบทกำหนดโดย wildcard
การกำหนด wildcard ใชสญลกษณพเศษตอไปน
* แทนตวอกษรใดๆ ตงแต 0 ตวขนไปกตวกได
? แทนตวอกษรใดๆ 1 ตว
[ ] แทนตวอกษรใดๆ ในชดทกำหนด 1 ตว
เพอเปนตวอยาง เราจะสรางไดเรกทอรทดสอบดงน
thep@anubis:~/starwars$ touch starwars prologue.txt episode1.txt
episode2.txt episode3.txt episode4.txt episode5.txt episode6.txt
episodeX.txt epilogue.txt
thep@anubis:~/starwars$ ls
epilogue.txt episode3.txt episode6.txt starwars
episode1.txt episode4.txt episodeX.txt
episode2.txt episode5.txt prologue.txt
*.txt หมายถงไฟลทลงทายดวย “.txt”
thep@anubis:~/starwars$ ls *.txt
epilogue.txt episode3.txt episode6.txt
episode1.txt episode4.txt episodeX.txt
episode2.txt episode5.txt prologue.txt
episode?.txt หมายถงไฟลทขนตนดวย “episode” ตามดวยอกษรอะไรกได 1 ตว ตามดวย“.txt”
1.5. WILDCARD 23
thep@anubis:~/starwars$ ls episode?.txt
episode1.txt episode3.txt episode5.txt episodeX.txt
episode2.txt episode4.txt episode6.txt
episode[0-9].txt หมายถงไฟลทขนตนดวย “episode” ตามดวยตวเลข 1 ตว ตามดวย“.txt”
thep@anubis:~/starwars$ ls episode[0-9].txt
episode1.txt episode3.txt episode5.txt
episode2.txt episode4.txt episode6.txt
epi* หมายถงไฟลทขนตนดวย “epi”
thep@anubis:~/starwars$ ls epi*
epilogue.txt episode2.txt episode4.txt episode6.txt
episode1.txt episode3.txt episode5.txt episodeX.txt
*logue* หมายถงไฟลทมคำวา “logue” อยในชอ
thep@anubis:~/starwars$ ls *logue*
epilogue.txt prologue.txt
เพอเปนการแสดงใหผอานมองเหนกลไกของการกระจาย wildcard ใกลชดขนอกนด เราลองใชwildcard กบคำสง echo ดงน
thep@anubis:~/starwars$ echo *.txt
epilogue.txt episode1.txt episode2.txt episode3.txt episode4.txt
episode5.txt episode6.txt episodeX.txt prologue.txt
เราไดทราบในหวขอ 1.2.1 แลววาคำสง echo จะทำหนาทเพยงแคแสดงคาตางๆ ทเปนอารกวเมนตออกทางจอภาพ คนดวยชองวางหนงชอง ผลลพธทไดจงแสดงใหเหนวา echo ไมไดรบอารกวเมนตเปน“*.txt” แตเปนชอไฟลทงหมดทกระจายแลว ซงการกระจายดงกลาวเปนหนาทของเชลล ดงนน คณคงจะพอมองเหนแลววา คำสง ls หรอโปรแกรมใดๆ บนยนกซ ไมจำเปนตองรวธกระจาย wildcard เลย
ขอดของการออกแบบยนกซใหเชลลเปนผกระจาย wildcard แบบนกคอ ลดความซำซอนของโปรแกรมตางๆ ในอนทจะตองกระจาย wildcard รวมทงทำใหรปแบบการใช wildcard เหมอนกนหมดทกโปรแกรมทำใหงายตอการเรยนรของผใชอกดวย
จากตวอยางของ echo ขางตน หากคณไมตองการใหเชลลกระจาย wildcard เพอให echo แสดงขอความ “*.txt” จรงๆ กมวธทำไดหลายวธ ไดแก
1. ใช backslash (\) กำกบหนาเครองหมายพเศษของ wildcard
thep@anubis:~/starwars$ echo \*.txt*.txt
24 บทท 1. เรมตนกบยนกซ
thep@anubis:~/starwars$ echo episode\[0-9\].txtepisode[0-9].txt
2. ใชอญประกาศค (" ") ครอมนพจนทงหมด
thep@anubis:~/starwars$ echo "*.txt"
*.txt
thep@anubis:~/starwars$ echo "episode[0-9].txt"
episode[0-9].txt
3. ใชอญประกาศเดยว (’ ’) ครอมนพจนทงหมด
thep@anubis:~/starwars$ echo ’*.txt’
*.txt
thep@anubis:~/starwars$ echo ’episode[0-9].txt’
episode[0-9].txt
การใชอญประกาศคและอญประกาศเดยวจะใหผลเหมอนกนในกรณของ wildcard แตจะตางกนเมอมการใชตวแปรเชลล ดงจะกลาวในโอกาสตอไป
บทท
2
ระบบรกษาความปลอดภย
ยนกซเปนระบบทถอกำเนดมาเพอใชกบเครองขนาดใหญทรองรบผใชหลายคนในเวลาเดยวกน (เรยกวาเปนระบบ multi-user) ลกษณะการใชยนกซของผใชในระบบเหลานนจงคลายกบการเชาคอนโดมเนยมรวมกนมากกวาการเปนเจาของบานทงหลงเหมอนการใชระบบดอสหรอวนโดวสกบเครองคอมพวเตอรสวนตว ดงนน ยนกซจงตองมระบบรกษาความปลอดภยเพอปกปองความเปนสวนตวของผใชแตละคนเปนคณสมบตขนพนฐาน แมปจจบนเมอนำมาใชงานแบบ stand-alone ตามเครองพซตามบานกตามระบบดงกลาวกยงมประโยชนในดานการลดความเสยหายทผใชอาจกระทำตอระบบโดยไมตงใจ รวมถงการจำกดขอบเขตของผลกระทบของโปรแกรมประเภทไวรส จนทำใหแรงจงใจในการสรางไวรสสำหรบยนกซแทบไมมเอาเสยเลย
2.1 ผใชและกลม
สงแรกทจะใชจำแนกแยกแยะผใชในระบบกคอ บญชผใช (user account) ซงโดยหลกการกคลายกบบญชธนาคารมาก ผใชแตละคนจะมชอบญชและหมายเลขประจำตว (user ID หรอ uid) ทรพยากรทกอยางในระบบจะมเจาของทงนน โดยระบเจาของดวยหมายเลขประจำตวนเอง
โดยปกต เมอผใชเปดบญชในระบบแลว กจะม “บาน” ของตวเองในระบบ เรยกวา ไดเรกทอรบาน(home directory) ไวสำหรบใชงานดวย เมอจะเขาใชระบบ ผใชจะตอง ลงบนทกเขาใชระบบ (login)เสยกอน เมอลงบนทกแลว กจะเขามาอยทไดเรกทอรบานเปนอนดบแรก
นอกจากบญชผใชแลว ในระบบยนกซยงสามารถตง กลม (group) ของผใชไดอกดวย โดยผดแลระบบจะเปนผดำเนนการให กลมทตงขนอาจจะตงเพอทำงานชนหนงๆ รวมกน หรอเพอแยกประเภทผใชใหมสทธเขาถงทรพยากรตางกนกได ไฟลตางๆ ในระบบนอกจากจะมผใชเปนเจาของแลว ยงมกลมเปนเจาของอกดวย โดยผใชสามารถกำหนดไดวาจะใหสทธผใชในกลมเดยวกนเขาถงไดหรอไม ดงจะกลาวตอไปในหวขอ 2.7
ผใชคนหนงๆ สามารถอยในกลมมากกวาหนงกลมได โดยจะมกลมโดยปรยายอยกลมหนงเสมอ
25
26 บทท 2. ระบบรกษาความปลอดภย
2.2 การตงรหสผาน
เพอเปนการแสดงสทธในไฟลตางๆ ของระบบ ผใชแตละคนจงตองม รหสผาน (password) ในการเขาใชระบบ ซงโดยปกต ผดแลระบบจะตงรหสผานมาให แตผใชกสามารถเปลยนรหสผานของตวเองได (ซงควรเปลยนทนททมโอกาส) ดวยคำสง passwd
thep@anubis:~$ passwd
Changing password for thep
(current) UNIX password: (ปอนรหสผานเดม ซงจะไมปรากฏบนจอภาพ)Enter new UNIX password: (ปอนรหสผานใหม ซงจะไมปรากฏเชนกน)Retype new UNIX password: (ปอนรหสผานใหมซำอกครงเพอยนยน)passwd: password updated successfully
รหสผาน ถอเปนสงสำคญทเปนความลบของทงผใชและของระบบเอง การทผบกรกทไมประสงคดสามารถเขาระบบได แมจะไมถงกบขโมยสทธผดแลระบบได แตกเปนการเพมโอกาสในการวางกบดกเพอเจาะทำลายระบบไดเปนอยางด ดงนน ในระบบทมผใชหลากหลาย ผใชจงไมควรบอกรหสผานกบใครรวมทงไมควรตงรหสผานใหเดางายเกนไป (เชน ใชชอตว ชอแฟน ชอสตวเลยง สะกดกลบหนากลบหลง)รหสผานทดควรมความยาวตงแตแปดตวอกษรขนไป และไมควรเปนคำทมในพจนานกรม เพอปองกนการแกะรหสผานดวยโปรแกรมอตโนมต โดยถามตวเลขหรอเครองหมายพเศษปนอยดวย จะทำใหเดาไดยากยงขน
ในบางระบบ ผดแลระบบจะบงคบนโยบายในการตงรหสผานดวยคำสง passwd โดยอาจเตอนหรอไมยอมใหผานถารหสสนเกนไปหรอเดาไดงายดวยโปรแกรมอตโนมต (เชน เปนคำในพจนานกรมเปนตน)
2.3 สารบบผใช
รายชอผใชทงหมดในระบบจะเกบไวทไฟล /etc/passwd หนงคนหนงบรรทด โดยแบงเปนฟลดตางๆคนดวยทวภาค (colon) ดงตวอยาง
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
...
thep:x:500:100:Theppitak Karoonboonyanan,,,:/home/thep:/bin/bash
ขอมลในฟลดตางๆ ไดแก
1. ชอบญช (user) เชน thep
2. รหสผาน (password) โดยจะเกบในรปแบบทเขารหสทางเดยวไว แตสามารถแยกเกบในไฟล/etc/shadow ตางหากซง root อานไดคนเดยวได เพอความปลอดภยจากการเดารหสผานดวยโปรแกรมอตโนมต ดงในตวอยางขางตน โดยฟลดนจะมคาเปน x หมด
2.4. ใครเปนใคร 27
3. หมายเลขประจำตว (user id)
4. หมายเลขกลม (group id) หมายถงกลมโดยปรยาย แตผใชสามารถเขารวมในกลมอนอกได ซงจะกำหนดไวในไฟล /etc/group ดงจะกลาวตอไป
5. ขอมลผใช (comment) เกบชอ-สกลของผใช โดยอาจเกบขอมลอนๆ อกสามอยาง คนดวยจลภาค(comma) ไดแก หมายเลขหองทำงาน หมายเลขโทรศพทททำงาน หมายเลขโทรศพททบาน
6. ไดเรกทอรบาน (home directory)
7. เชลล (shell) ไดแกโปรแกรมทจะทำงานเพอรบคำสงของผใชเมอลงบนทกเขาระบบ
ผใชรายแรกๆ ถดจาก root ในตวอยางขางตน เชน daemon, bin, sys เปนผใชทสงวนไวใชวงโปรแกรมใหบรการตางๆ ไมใชผใชทเปนบคคล ขอมลในฟลดของเชลลจงอาจเปนคำสงทไมใชเชลล โดยบญชทหามลงบนทกเขาใชเดดขาดมกจะมเชลลเปน /bin/false
2.4 ใครเปนใคร
2.4.1 ฉนคอใคร
เพอทจะตรวจสอบใหแนใจวาคณกำลงทำงานอยดวยบญชของใคร คณสามารถถามไดดวยคำสง whoami
thep@anubis:~$ whoami
thep
2.4.2 เหลอบแลเพอนบาน
คำสง who จะแสดงรายชอผทกำลงเขาใชระบบทงหมด
thep@anubis:~$ who
thep tty2 Jun 26 23:59
root tty3 Jun 27 00:01
somsak tty4 Jun 27 00:02
คอลมนแรกจะเปนชอบญชผใชทเขาใชระบบ คอลมนทสองเปนชอเทอรมนลทใชตดตอกบระบบ และคอลมนถดมาเปนเวลาทเขาใชระบบ
2.4.3 รจกเพอนบาน
ขอมลตางๆ ของผใชแตละคนทเกบไวในสารบบ สามารถเรยกดไดดวยคำสง finger
thep@anubis:~$ finger thep
Login: thep Name: Theppitak Karoonboonyanan
Directory: /home/thep Shell: /bin/bash
On since Thu Jun 26 23:59 (ICT) on tty2 5 minutes 48 seconds idle
(messages off)
28 บทท 2. ระบบรกษาความปลอดภย
No mail.
No Plan.
คณสามารถแกไขรายละเอยดขอมลของตวคณเองไดบางสวนดวยคำสง chfn
thep@anubis:~$ chfn
Password: (ปอนรหสผาน)Changing the user information for thep
Enter the new value, or press ENTER for the default
Full Name: Theppitak Karoonboonyanan
Room Number []: 201
Work Phone []: 1150
Home Phone []: 1112
thep@anubis:~$ finger thep
Login: thep Name: Theppitak Karoonboonyanan
Directory: /home/thep Shell: /bin/bash
Office: 201, x1150 Home Phone: x1112
On since Thu Jun 26 23:59 (ICT) on tty2 17 minutes 3 seconds idle
(messages off)
No mail.
No Plan.
สงเกตทสองบรรทดสดทายจะตรวจสอบถงเมลวามเมลทยงไมไดอานอยหรอไม ถงเมลน ใชสำหรบเมลทเกบไวทเครองยนกซทใหบรการอยเทานน ถาคสนทนาของคณใชเวบเมลหรออยในระบบอน คณตองใชวธอนในการตรวจสอบ
สวนบรรทดสดทาย “No Plan.” นน เปนขอมลแผนการของคณทอยากเปดเผยใหเพอนบานรซงทำไดโดยเขยนไวในไฟล ~/.plan และอกไฟลหนงท finger จะตรวจสอบคอ ~/.project
เปนการใหขอมลวาคณกำลงทำโครงงานอะไรอย
thep@anubis:~$ cat > ~/.plan
To rule the world.�� ��Ctrl-d
thep@anubis:~$ cat > ~/.project
Neuclear Weapon.�� ��Ctrl-d
thep@anubis:~$ finger thep
Login: thep Name: Theppitak Karoonboonyanan
Directory: /home/thep Shell: /bin/bash
Office: 201, x1150 Home Phone: x1112
On since Thu Jun 26 23:59 (ICT) on tty2 17 minutes 3 seconds idle
(messages off)
No mail.
2.5. ผดแลระบบ 29
Project:
Neuclear Weapon.
Plan:
To rule the world.
นอกจากน ยงสามารถเปลยนเชลลไดดวยคำสง chsh
thep@anubis:~$ chsh
Password: (ปอนรหสผาน)Changing the login shell for thep
Enter the new value, or press return for the default
Login Shell [/bin/bash]: /bin/tcsh
คำสง finger นอกจากจะใชดขอมลทวไปของผใช ยงมรปแบบการเรยกแบบไมระบชอผใช โดยจะแสดงขอมลอยางยอของผใชทกำลงเขาใชระบบทงหมด
thep@anubis:~$ finger
Login Name Tty Idle Login Time
root root *tty3 15:54 Jun 27 00:01
thep Theppitak Karoon *tty2 15:55 Jun 26 23:59
somsak Somsak Saetae tty4 1:58 Jun 27 00:02
2.5 ผดแลระบบ
ดงทกลาวไปแลววาผใชแตละคนจะถกจำกดขอบเขตของสทธในการเขาถงไฟลตางๆ แตจะมผใชพเศษอยคนหนงทมสทธในการเขาถงไฟลทกไฟลในระบบ เขาคอภารโรงผถอกญแจหองทกหอง เพอจะไดชวยแกปญหาใหกบผใช และเพอปรบแตงระบบ ตดตงโปรแกรมทใชงานรวมกน ฯลฯ เรยกวา ผดแลระบบ (system administrator) หรอบางครงเรยกอยางยกยองวา super user เนองเพราะเอกสทธทไดมาพรอมกบหนาทบรการนนเอง
อยางไรกด ในระบบทวไป ผดแลระบบมกจะมบญชผใชตางหากของตวเอง เพอใชในการทำงานปกตทวไป และจะใชบญชผดแลระบบกตอเมอตองการทำงานดแลระบบเทานน เพอหลกเลยงการทำลายทรพยสนของผอนโดยไมตงใจ ขอแนะนำน ใชไดแมกบระบบทคณเปนเจาของเครองเพยงผเดยวดวย การลดสทธของคณลงมา ยอมเปนการลดโอกาสเสยงทคณจะทำระบบพง ไวรสบนยนกซไมคมทจะเขยนกเนองดวยกฎเหลกน
ดวยเหตผลตามนยประวต บญชของผดแลระบบคอ root เนองจากเปนผทมสทธในไฟลทงหมดตงแตรากของระบบไฟลเปนตนมา ในขณะทผใชปกตจะมสทธในไฟลนบจากกงทเปน “บาน” (homedirectory) ของตวเองเปนตนมาเทานน
2.6 แปลงราง
ในบางครง คณอาจจำเปนตองทำงานบางอยางในนามของผใชอนชวคราว เชน เมอคณไดรบความไววางใจจากผใชอนใหชวยแกปญหาบางอยางให และโดยเฉพาะเมอคณเปน super user ซงโดยปกตคณจะใชบญช
30 บทท 2. ระบบรกษาความปลอดภย
ตางหากของคณทำงาน แตเมอผใชในระบบมารองขอใหแกปญหาให (เชน ลมรหสผาน) คณไมจำเปนตองหาตโทรศพท เพยงแตใชคำสง su เพอเปลยนเปน super user
thep@anubis:~$ su
Password: (ปอนรหสผานของ super user)anubis:/home/thep#
สงเกตวา เครองหมายรบคำสง (prompt) ของคณไดเปลยนจาก $ เปน # ซงเปนเครองหมายของ superuser เรยบรอยแลว
anubis:/home/thep# whoami
root
คณสามารถกำหนดชอบญชผใชอนทตองการเปลยนไปเปนใหกบคำสง su ได โดยหากไมกำหนดจะหมายถง root จากนน su จะถามรหสผานของผใชทคณตองการเปลยนไปเปนนน
thep@anubis:~$ su somsak
Password: (ปอนรหสผานของ somsak)somsak@anubis:/home/thep$
การแปลงรางดวย su น เปนการสรางเชลลใหมทบเชลลเดม ดงนน เมอคณปฏบตภารกจเสรจ คณสามารถกลบไปสเชลลเดมไดโดยออกจากเชลล su น ดวยคำสง exit หรอกด
�� ��Ctrl-d
anubis:/home/thep# whoami
root
anubis:/home/thep# exit
thep@anubis:~$ whoami
thep
2.7 การปกปองไฟล
2.7.1 สทธการเขาถงไฟล
ดงทกลาวไปแลวในหวขอ 2.1 วาไฟลทกไฟลในระบบจะมผใชและกลมเปนเจาของ โดยสามารถกำหนดสทธการเขาถงของผใชประเภทตางๆ ได คำสง ls -l สามารถแสดงรายละเอยดตางๆ ดงกลาว
thep@anubis:~$ ls -l
total 28
-rwxr-xr-x 1 thep users 4815 2002-08-23 14:49 a.out
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Download
-rw-r--r-- 1 thep users 77 2002-08-23 14:49 hello.c
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Mail
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Projects
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 tmp
2.7. การปกปองไฟล 31
ดงไดเกรนไปแลวในหวขอ 1.2.3 วาคอลมนแรกของผลลพธของคำสง ls -l จะแสดงชนดของไฟลและสทธการเขาถงไฟล (permission) ซงสทธการเขาถงไฟลน มบทบาทสำคญในระบบรกษาความปลอดภยของยนกซ เนองจาก I/O ทกอยางทเรยกผานระบบจะมการตรวจสอบสทธกอนเสมอ โดยเทยบuser id และ group id ของผเรยกใชกบคาทเปนคณสมบตของไฟล โดยถาตรวจสอบสทธไมผาน ระบบจะถอเปนขอผดพลาดและไมทำงานให โดยขอความแจงขอผดพลาดมกจะเปน “Permission denied.”ดงนน ไฟลขอมลของผใชจงไดรบการปกปองเปนอยางดถามการกำหนดสทธอยางเหมาะสม
อยางไรกด ระบบจะยอมให root ผานการตรวจสอบสทธทกอยางเสมอ ดงนน ระบบจะไมสามารถปองกน root จากการแพรไวรสหรอทำลายแฟมขอมลอยางไมตงใจ อาจจะดวยกบดกทซอนอยในโปรแกรมหรอดวยความเลนเลอกตามแต ดงนน ผดแลระบบจงควรเขาใชระบบดวยบญช root เทาทจำเปนจรงๆเทานน
สทธการเขาถงไฟลจะมสามสวน ไดแก 1. สทธของเจาของไฟลเอง 2. สทธของผใชในกลมเดยวกบกลมเจาของไฟล และ 3. สทธของผใชนอกกลม และสทธแตละสวนนนสามารถกำหนดสทธไดสามประการ คอ 1. สทธในการอานไฟล (r) 2. สทธในการเขยนไฟล (w) 3. สทธในการ execute ไฟล (x)
เมอเขยนเรยงกนจงเปนรหส 9 บต แทนไดดวยเลขฐานแปด 3 หลก โดยหลกบนสดแทนสทธของเจาของไฟล ถดมาแทนสทธของผใชในกลม และผใชนอกกลม ตามลำดบ
2.7.2 สทธการเขาถงไฟลแบบพเศษ
นอกจากการกำหนดสทธเขาถงปกต ยงมการกำหนดสทธในลกษณะพเศษอกลกษณะหนงสำหรบไฟลทยอมให execute ได คอการยอมให execute โปรแกรม ดวยสทธของเจาของไฟล มบางสถานการณทจำเปนตองทำเชนนน เชน โปรแกรมตงรหสผาน passwd ซงอนญาตใหผใชเปลยนรหสผานของตวเองได แตการบนทกรหสผานทเขารหสแลวในไฟลของระบบจำเปนตองอาศยสทธของ root ดงนน ไฟล/usr/bin/passwd นอกจากจะอนญาตให execute แลว ยงอนญาตให execute ดวยสทธของ rootซงเปนเจาของไฟลไดอกดวย
thep@anubis:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 24248 2003-04-27 02:50 /usr/bin/passwd
สงเกตวา สทธของเจาของไฟลมคาเปน s ไมใช x
การกำหนดสทธลกษณะพเศษน สามารถใชกบ group ไดดวย กลาวคอ ผ execute จะสามารถexecute โดยไดสทธเทยบเทากบกลมทเปนเจาของไฟล ไฟลทมการใหสทธพเศษน ls -l จะรายงานpermission ของการ execute ของกลมเปน s เชนกน
ทงการ execute ดวยสทธของเจาของไฟลและดวยสทธของกลมเจาของไฟลน เปนเรองทคอนขางเสยงทโปรแกรมหนงๆ จะยอมใหมได เพราะหากปองกนไมด กเทากบเปนชองโหวใหกบการขโมยสทธโปรแกรมลกษณะนจงมไดมใหเหนบอยๆ และถาจำเปนตองใช กจะตองตรวจสอบดวยความระมดระวงยนกซเปดโอกาสใหโปรแกรมประเภทนรตวไดวากำลงถก execute แบบพเศษ โดยโปรเซสจะทำงานดวยeffective user/group id ของเจาของไฟลเทานน แต real user/group id จะยงคงเปนของผเรยกโปรแกรมโปรแกรมจงมโอกาสแยกแยะวาจะใหสทธใดๆ ตาม effective หรอ real user/group id
มาถงตรงน ผอานอาจกำลงนกถงบตสดทาย คอสทธของการ execute ของผใชนอกกลม วามการกำหนดสทธพเศษเชนนหรอไม เมอคดโดยตรรกะแลว การใหสทธ execute “ดวยสทธเทยบเทาผใชนอกกลม” กเปรยบเสมอนไมใหสทธอะไรพเศษเลย และอกประการหนง ไฟลมเจาของและกลมเจาของทจะใหคาแก effective user/group id เทานน ไมมอะไรเกยวของกบผใชนอกกลมเลย
32 บทท 2. ระบบรกษาความปลอดภย
คำตอบกคอ ยนกซใชบตพเศษทวานเพอจดประสงคอนทไมใชการใหสทธโดยตรง บตนเรยกวา“sticky bit” และไฟลทถกเซตบตนกเรยกวา “sticky file” โดยไฟลโปรแกรมท sticky น จะคางอยในหนวยความจำของระบบเมอจบการทำงานแลว ทำใหไมจำเปนตองเรมโหลดโปรแกรมใหมในการเรยกใชครงตอไป1
“sticky bit” น คอนขางพเศษสกหนอยเมอนำไปใชกบไดเรกทอร “sticky directory” ทยอมใหทกคนเขยน (เชน /tmp) จะยอมใหผใชทเปนเจาของไฟลเทานนสามารถลบไฟลในไดเรกทอรได (หากไมเซต sticky bit กบไดเรกทอรสาธารณะกหมายความวา ทกคนมสทธลบไฟลใดๆ กไดทงนนในไดเรกทอรนน ซงไมเหมาะสมนก)
ls -l จะแสดงสทธการ execute ของผใชนอกกลมของ sticky file/directory ดวย t แทน x
ตวอยางทดกคอ /tmp
thep@anubis:~$ ls -ld /tmp
drwxrwxrwt 7 root root 4096 2003-06-28 17:19 /tmp
การกำหนดสทธแบบพเศษทงหมดน จะอาศยบตเพมเตมอก 3 บต (เรยกวา setuid bit, setgid bitและ sticky bit ตามลำดบ) รวมกบบตเดม 9 บตเปน 12 บต โดยแทนดวยเลขฐานแปด 4 หลก การกำหนดสทธพเศษนจะอยหลกบนสด โดยถากำหนดแบบ 3 หลกปกตกจะหมายถงคาศนยในบตพเศษทงหมด
2.7.3 การกำหนดสทธเขาถงไฟล
permission ของไฟล สามารถเปลยนไดดวยคำสง chmod โดยเขารหส permission เปนเลขฐานแปด 3หลก (ในกรณปกต) แทนสทธสามสวน (เจาของ, กลม, ผอน) โดยตวเลขฐานแปดแตละหลก เมอแปลงเปนเลขฐานสองสามบต กจะแทนการอนญาตสามประการ (read, write, execute) สำหรบผใชแตละประเภท ตวอยางเชน
750 เทยบเทากบ rwxr-x--- คอเจาของสามารถอาน เขยน execute ได; ผใชในกลมเดยวกนอานและ execute ได แตเขยนไมได; ผใชนอกกลมทำอะไรไมไดเลยแมแตอาน
644 เทยบเทากบ rw-r--r-- คอเปนไฟลท execute ไมได แตอานไดทกคน และมเพยงเจาของเทานนทเขยนได
777 เทยบเทากบ rwxrwxrwx คอเปนไฟลสาธารณะ
ตวอยางการตงคา
thep@anubis:~$ touch a # สรางไฟลเปลาthep@anubis:~$ chmod 750 a
thep@anubis:~$ ls -l a
-rwxr-x--- 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod 644 a
thep@anubis:~$ ls -l a
-rw-r--r-- 1 thep users 0 2003-06-28 14:49 a
1คมอของ GNU/Linux ระบวา ความสามารถนแทบไมจำเปนสำหรบ Linux kernel แลว เพราะระบบ virtual memoryสามารถจดการใหได แตอยางไรกด มนกเปนขอกำหนดหนงของยนกซทตองคงไว
2.7. การปกปองไฟล 33
thep@anubis:~$ chmod 777 a
thep@anubis:~$ ls -l a
-rwxrwxrwx 1 thep users 0 2003-06-28 14:49 a
อยางไรกด เพอความงายตอการสงงาน chmod ยงรบคาอกลกษณะหนง คอเปนคำสงเซตบตในรปแบบ [ugoa][+-][rwx]
• อกษรตวแรก หมายถง สวนของสทธทจะตงคา (เลอกไดมากกวาหนงสวน)
u = user (เจาของไฟล)g = group (ผใชในกลม)o = other (ผใชนอกกลม)a = all (เซตคาทงสามสวนพรอมกน)
• อกษรตวทสอง หมายถง วธตงคา
+ = set (อนญาต)- = clear (ไมอนญาต)
• อกษรตวทสาม หมายถง บตทจะตงคา (เลอกไดมากกวาหนงบต)
r = read (สทธในการเขยน)w = write (สทธในการอาน)x = execute (สทธในการ execute)
ตวอยางเชน
thep@anubis:~$ ls -l a
-rwxrwxrwx 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod g-w a # หามผใชในกลมเขยนthep@anubis:~$ ls -l a
-rwxr-xrwx 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod o-rwx a # หามผใชนอกกลมทำทกอยางthep@anubis:~$ ls -l a
-rwxr-x--- 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod go+rw a # อนญาตผใชในกลมและนอกกลมอานและเขยนthep@anubis:~$ ls -l a
-rwxrwxrw- 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod a-x a # หามทกคน executethep@anubis:~$ ls -l a
-rw-rw-rw- 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod +x a # อนญาตใหทกคน executethep@anubis:~$ ls -l a
-rwxrwxrwx 1 thep users 0 2003-06-28 14:49 a
จะเหนวา สวนแรกทเลอกสวนของสทธนน ถาละกจะหมายถงทกสวน
34 บทท 2. ระบบรกษาความปลอดภย
สำหรบการกำหนดสทธแบบพเศษ จะกำหนด setuid, setgid และ sticky bit ไดโดยเพมเลขฐานแปดหลกบนอกหนงหลก โดย 4 = setuid, 2 = setgid และ 1 = sticky เชน
4750 เทยบเทากบ rwsr-x---
2750 เทยบเทากบ rwxr-s---
1755 เทยบเทากบ rwxr-xr-t
เนองจากบตพเศษทงสามใชทแสดงผลรวมกบคา x ปกต คำสง ls -l จงมวธแยกความแตกตางเมอบตพเศษถกเซตโดยท x ไมถกเซต (ซงออกจะเปนกรณทแปลกประหลาด แต ls กพยายามจดการ) โดยแสดงคา s หรอ t ดวยอกษรตวใหญ
thep@anubis:~$ chmod 4644 a # พกลthep@anubis:~$ ls -l a
-rwSr--r-- 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod +x a
thep@anubis:~$ ls -l a
-rwsr-xr-x 1 thep users 0 2003-06-28 14:49 a
คณสามารถใชรปแบบ [guoa][+-][rwxst] เซตบตพเศษดงกลาวไดเชนกน
thep@anubis:~$ chmod g+s a
thep@anubis:~$ ls -l a
-rwsr-sr-x 1 thep users 0 2003-06-28 14:49 a
thep@anubis:~$ chmod g+t a
thep@anubis:~$ ls -l a
-rwsr-sr-t 1 thep users 0 2003-06-28 14:49 a
2.7.4 การโอนเจาของไฟล
ผดแลระบบสามารถเปลยนเจาของไฟลไดดวยคำสง chown และเปลยนกลมเจาของไฟลไดดวย chgrp
anubis:/home/thep# ls -l a
-rwxrwxrwx 1 thep users 0 2003-06-28 14:49 a
anubis:/home/thep# chown somsak a
anubis:/home/thep# ls -l a
-rwxrwxrwx 1 somsak users 0 2003-06-28 14:49 a
anubis:/home/thep# chgrp wheel a
-rwxrwxrwx 1 somsak wheel 0 2003-06-28 14:49 a
คำสง chown และ chgrp เปนคำสงทสงวนไวสำหรบ root เทานน ผใชปกตไมสามารถสงได
บทท
3
เกยวกบไฟลและไดเรกทอร
เอกลกษณทสำคญอยางหนงในปรชญาการออกแบบของยนกซกคอ มการกำหนด interface ของการตดตอกบอปกรณภายนอกและองคประกอบตางๆ ของระบบในลกษณะของไฟลเหมอนกนหมด แปนพมพคอไฟล เทอรมนลคอไฟล เมาส เครองพมพ ชองสญญาณเสยง การเชอมตอผานระบบเครอขาย ทอสงขอมลระหวางโปรเซส1 ทกอยางคอไฟล รายละเอยดปลกยอยภายในของแตละสวนถกซอนไวภายใตการดแลของเคอรเนลและ device driver ทำใหการเขยนโปรแกรมตดตอกบอปกรณตางๆ บนยนกซงายลงมาก
ลกษณะพเศษของระบบไฟลบนยนกซอกอยางหนงกคอ การมโครงสรางแบบตนไมทสามารถเชอมโยงขามกงได ทงหมดคอสงทเรากำลงจะกลาวถงในบทน
3.1 ชนดของไฟลบนยนกซ
คำสง ls -l สามารถชวยแสดงชนดของไฟลตางๆ ได ดงไดกลาวไปแลวในหวขอ 1.2.3 สญลกษณทใชแทนชนดตางๆ ของไฟล ไดแก
- หมายถงไฟลปกต
d หมายถงไดเรกทอร เปนไฟลทเกบ “ตนขว” ของไฟลตางๆ ทบรรจอยภายใน
l หมายถง symbolic link เปนไฟลทชไปยงไฟลอนอกทอดหนง ดงจะกลาวตอไปในหวขอ 3.4
s หมายถง socket เปนชองตดตอสอสารกบโปรเซสอนผานระบบเครอขาย
c หมายถง character device มกเปนอปกรณภายนอกทรบสงขอมลเปนลำดบตอๆ กน เชน โมเดมเมาส เครองพมพ เทอรมนล เทป ชองสญญาณเสยง ฯลฯ
1โปรเซส (process) คอโปรแกรมทกำลงทำงานอยในขณะหนงๆ
35
36 บทท 3. เกยวกบไฟลและไดเรกทอร
b หมายถง block device ไดแกอปกรณทร บสงขอมลเปนบลอกๆ เชน ฮารดดสก ฟลอปปดสกซดรอม แรมดสก
p หมายถง named pipe (FIFO) เปนทอสงขอมลระหวางโปรเซสทโปรเซสหนงเปดไวเพอใหโปรเซสอนในระบบสามารถรบหรอสงขอมลได
3.2 ระบบไฟลบนยนกซ
ระบบไฟลทงหมดในยนกซจะเรมตนจากไดเรกทอรรากเพยงรากเดยว ซงจะบรรจไฟลและไดเรกทอรยอยลงไปเปนลำดบชนเหมอนตนไมทแตกกงกานสาขา สวนทเปนใบซงไมแตกแขนงออกไปอกแลวกไดแกไฟลขอมลหรอไฟลพเศษอนดงกลาวขางตนทไมใชไดเรกทอรนนเอง
หากคณคนเคยกบระบบดอสหรอวนโดวสทมหลายราก แตละรากเรมจากไดรฟ A: B: C: . . . ซงแตละไดรฟจะหมายถงอปกรณเปนตวๆ หรอเปนพารทชนในฮารดดสก หรอเปน network drive ทmount ผาน netware ละก คณจะพบแนวคดทตางออกไปในยนกซ
ยนกซนน จะมองระบบไฟลทงระบบเปนระบบเดยว โดยมการกำหนดหนาทของกงตางๆ ในระบบไฟลอยางชดเจน เปนหนาทของผดแลระบบทจะจดสรรอปกรณมาเตมในสวนตางๆ ของระบบไฟล เชนอาจจะใชฮารดดสกหลายลกประกอบกน หรออาจจะแบงใชพารทชนกบสวนตางๆ ของระบบไฟลตามความจำเปนในการสำรองขอมล ฯลฯ แตผใชจะมองไมเหนรายละเอยดทอยขางลางนนเลย โปรแกรมตางๆ สามารถกำหนดตำแหนงของไฟลตางๆ อยางตายตวไดตามทตองการไดโดยไมจำเปนตองรวาอยในฮารดดสกลกไหน
ไดเรกทอรทสำคญๆ ใน GNU/Linux ทควรทราบ ไดแก
/boot เปนไดเรกทอรเกบไฟลทใชบตระบบ เคอรเนลลนกซจะถกเกบไวทน
/bin (binary) เปนไดเรกทอรเกบโปรแกรมคำสงขนพนฐานของระบบ เปนโปรแกรมทจำเปนเพยงพอสำหรบการใชงานระบบในกรณทระบบไฟลสวนอนมปญหา
/sbin (system admin binary) เกบโปรแกรมคำสงขนพนฐานทใชสำหรบผดแลระบบเทานน เปนโปรแกรมทจำเปนเพยงพอสำหรบการดแลแกไขระบบในกรณทระบบไฟลสวนอนมปญหา
/lib (library) เกบไลบรารพนฐานทโปรแกรมใน /bin และ /sbin ตองใช
/etc (et cetera) เดมมชอเชนนเพราะเกบไฟลจปาถะของระบบ แตการใชงานในปจจบนจะเกบการตงคาของระบบและของโปรแกรมตางๆ
/usr (user) ชอบอกวาเปนไดเรกทอรสำหรบบรการผใช ไดเรกทอรนใชเกบสวนตางๆ ของระบบทจำเปนตองใชในโหมด multi-user ในระบบเกาๆ จะบรรจไดเรกทอรบานของผใชดวย แตปจจบนแยกออกไปท /home ตางหาก
/usr/bin เกบโปรแกรมคำสงทใชในระบบเพมเตมจาก /bin
/usr/sbin เกบโปรแกรมคำสงทใชสำหรบผดแลระบบเพมเตมจาก /sbin
/usr/lib เกบไลบรารตางๆ เพมเตมจาก /lib
/usr/include เกบ header file ทใชสำหรบคอมไพลโปรแกรม
3.3. I-NODE 37
/usr/share เกบไฟลขอมลทใชโดยโปรแกรมตางๆ
/usr/local เปนไดเรกทอรทมโครงสรางคลาย /usr แตใชสำหรบการตดตงโปรแกรมทแยกตางหากจากระบบตดตงปกต (เชน คอมไพลเองจากซอรสโคดทดาวนโหลดมาตางหาก) การแยกมาตดตงในทตางหากทำใหสะดวกตอการจดการโดยไมกระทบตอระบบตดตงปกต
/usr/X11R6 ใชสำหรบระบบ X Window ทงหมด ไมวาจะเปนโปรแกรม ไลบราร ไฟลขอมล หรอเอกสารประกอบ
/tmp ไดเรกทอรเกบไฟลชวคราวสำหรบทกคนในระบบ โดยปกตจะถกลางทงทกครงทบตระบบ
/var ไดเรกทอรเกบขอมลของระบบทจะตองมการเปลยนแปลงอยตลอดเวลา เชน log file ตางๆ ถงเมล หรอควของเครองพมพ เปนตน
/dev เกบไฟลทแทนอปกรณทกอยาง เปนทอยของไฟลชนด character device และ block deviceโดยเฉพาะ
/proc เปนทอยของไฟลเสมอนทใชตดตอกบเคอรเนลลนกซ ไฟลตางๆ ในไฟลนไมใชไฟลจรง แมจะปรากฏใน ls -l วาเปนไฟลปกตกตาม
/home เกบไดเรกทอรบานของผใชทกคน
/root ไดเรกทอรบานของ root เดมในระบบเกานน บานของ root กคอ “/” แตปญหาคอทำใหไฟลสวนตวของ root ตองไปกระจกกองอยทไดเรกทอรราก ตอมาจงเรมแยกบานของ root ออกมาเปนสดสวน
3.3 i-node
หวขอนจะกลาวถงลกษณะพเศษอกประการหนงของระบบไฟลของยนกซ คอความสามารถในการ ตงฉายา (alias) ใหกบไฟลได กลาวคอ ไฟลหนงๆ สามารถตงชอไดมากกวาหนงชอ การทจะเขาใจแนวคดนเราตองทำความเขาใจกบคำวา i-node เสยกอน
ระบบไฟลโดยทวไปจะแยกเนอหาของไฟลกบชอไฟลเปนคนละสวนกน แตยนกซมความพเศษเพมขนตรงทการเชอมโยงระหวางชอไปยงเนอหาเปนแบบ many-to-one (แทนทจะเปน one-to-one) กลาวคอในขณะทการอางถงชอหนงๆ จะหมายถงเนอหาไฟลเพยงหนงเทานน แตเนอหาไฟลหนงๆ สามารถอางมาจากชอไดหลายชอ
ตวเนอหาของไฟลทกชนจะมหมายเลข i-node ประจำ ระเบยนชอไฟลในไดเรกทอรจะเชอมโยงไปยงคา i-node ทเปนเนอหา เปนการเชอมโยงในทศทางเดยว ซงทำให i-node หนงๆ สามารถถกเชอมโยงจากชอไฟลไดหลายชอ (ในขณะทระเบยนชอไฟลชอหนงจะเกบคา i-node เพยงคาเดยว) ทตว i-nodeเองกจะเกบ reference count ไววามการเชอมโยงมายงตวมนเองเปนจำนวนเทาไร การลบไฟลในยนกซจะหมายถงการ unlink โดยตดการเชอมโยงน และลดคา reference count ใน i-node ลงหนง เมอใดทreference count ถกลดลงเหลอศนย i-node จงจะถกลบออกจากดสกจรง
คำสง ls -l จะแสดงจำนวนลงกของไฟลดงกลาวในคอลมนทสอง
thep@anubis:~$ ls -l
total 28
-rwxr-xr-x 1 thep users 4815 2002-08-23 14:49 a.out
38 บทท 3. เกยวกบไฟลและไดเรกทอร
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Download
-rw-r--r-- 1 thep users 77 2002-08-23 14:49 hello.c
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Mail
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Projects
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 tmp
จากตวอยางขางตน จะเหนวาไฟลปกต คอ a.out และ hello.c โดยปกตจะมจำนวนลงกเปน 1และเมอสงลบดวยคำสง rm กจะเปนการลดจำนวนลงกนลงหนง กลายเปนศนย และ i-node ของไฟลกจะถกลบจากฮารดดสกทนท การเชอมโยงไฟลปกตเขากบชอมากกวาหนง ทำไดดวยการสราง hard linkดวยคำสง ln ซงจะกลาวในหวขอ 3.4
หากคณสงเกตพบวา ในตวอยางขางตน ไฟลทเปนไดเรกทอรปลายทางมจำนวนลงกเปน 2 กมคำอธบายวา นอกเหนอจากการเชอมโยงจากระเบยนชอในไดเรกทอรทอยเหนอขนไปแลว ยงมลงกจากชอ “.” ในไดเรกทอรตวเองดวย สวนไดเรกทอรทมไดเรกทอรยอยภายในตวมนเอง กจะถกเชอมโยงจากชอ “..” จากไดเรกทอรยอยเพมขนมาอกดวย เชน จากตวอยางขางตน ถาขอดขอมลของไดเรกทอรปจจบน จะพบจำนวนลงกเพมจากเดมอก 4 ลงก ตามจำนวนไดเรกทอรยอยทม
thep@anubis:~$ ls -ld
drwxr-xr-x 6 thep users 4096 2002-08-23 14:28 .
อนง หากตองการดหมายเลข i-node ของแตละไฟล คณกเพยงระบตวเลอก -i ใหกบคำสง ls
thep@anubis:~$ ls -i
204580 a.out 204583 hello.c 142158 Projects
142156 Download 142157 Mail 142159 tmp
3.4 การลงกไฟล
ดงทไดกลาวไปแลว วาไฟลบนยนกซสามารถมชอไดมากกวาหนงชอ โดยอาศยการเชอมโยง อยางไรกตามการเชอมโยงไฟลไมจำเปนตองใช i-node รวมเสมอไป วธเชอมโยงมอย 2 ลกษณะ คอ
1. hard link ไดแกการเชอมโยงโดยฝงในโครงสรางของระบบไฟลโดยตรง เปนการเพมชอใหมใหกบไฟล โดยททงไฟลเกาและไฟลใหมจะมฐานะของความเปนไฟลเทาๆ กน ในทางเทคนคกคอ ไฟลทงสองจะใช i-node รวมกน หรอถาจะกลาวใหละเอยดกวานนกคอ ไฟลทงสองจะเปน entry ทตางกนในไดเรกทอร แตชไปยง i-node เดยวกน การสราง hard link จะเพม reference count ใน i-node ทถกเชอมโยงนน และทกครงทลบไฟล reference count จะถกลดลง และ i-node นนจะถกลบออกไปจากดสกจรงๆ เมอ reference count ลดลงเหลอศนย
2. symbolic link หรอทเรยกสนๆ วา symlink จะเปนการเชอมโยงผานไฟลชนดพเศษทเกบชอของไฟลทเชอมโยงไปหาอกตอหนง เมอมการอางถงไฟลทเปน symlink เพอการอานหรอเขยน ยนกซจะอานชอไฟลทเชอมโยงแลวอางไปถงชอนนๆ แทน ดงนน symlink จงไมไดมฐานะเปนไฟลทเกบขอมลดวยตวของมนเอง แตเปนเพยงตวชไปหาไฟลอนเทานน
โดยปกตจะไมสามารถทำ hard link กบไดเรกทอร และไมสามารถทำ hard link ขามอปกรณได(เชน ไมสามารถทำ hard link ขามไดเรกทอรทอยในฮารดดสกคนละพารทชนได และไมสามารถทำ hardlink จากไฟลในซดรอมลงมาทฮารดดสกได เปนตน) แตสามารถทำ symlink ได
3.4. การลงกไฟล 39
คำสงสำหรบเชอมโยงไฟลทงแบบ hard link และ symlink ใชคำสงเดยวกน คอ ln (link) โดยหากไมระบตวเลอกใดเลยจะหมายถง hard link และถาระบตวเลอก -s จะหมายถง symlink สวนรปแบบการสงคา กจะเหมอนคำสง cp คอชอไฟลตนฉบบมากอนชอไฟลปลายทางทจะสรางใหม
ตวอยางเชน มไฟล a ซงมลกษณะดงน
thep@anubis:~ $ ls -li
total 8
125565 -rw-r--r-- 1 thep users 6 2002-09-22 20:46 a
thep@anubis:~$ cat a
hello
เมอทำ hard link b ใหชมายงเนอหาเดยวกบ a
thep@anubis:~$ ln a b
thep@anubis:~$ ls -li
total 8
125565 -rw-r--r-- 2 thep users 6 2002-09-22 20:46 a
125565 -rw-r--r-- 2 thep users 6 2002-09-22 20:46 b
สงเกตวา ทง a และ b มหมายเลข i-node เดยวกน คอ 125565 และจำนวนลงก ของ a ถกเพมจาก 1 เปน 2 และจำนวนลงกของ b กเทากบ 2 เชนกน (เพราะมาจาก i-node เดยวกน)
เมอเปลยนแปลงเนอหาของไฟล b กจะเหนวา a กเปลยนตามดวย (เพราะใช i-node เดยวกน)
thep@anubis:~$ echo bye > b
thep@anubis:~$ cat a
bye
รวมทงการเปลยน permission (เพราะ permission เปนคณสมบตประจำ i-node)
thep@anubis:~$ chmod a+w b
thep@anubis:~$ ls -li
total 8
125565 -rw-rw-rw- 2 thep users 4 2002-09-22 20:50 a
125565 -rw-rw-rw- 2 thep users 4 2002-09-22 20:50 b
และเมอลบ a จำนวนลงกของ b กจะลดลงหนง
thep@anubis:~ $ rm a
thep@anubis:~ $ ls -li
total 4
125565 -rw-rw-rw- 1 thep users 4 2002-09-22 20:50 b
ในขณะทถาทำ symlink c ใหชมายง b
40 บทท 3. เกยวกบไฟลและไดเรกทอร
thep@anubis:~$ ln -s b c
thep@anubis:~$ ls -li
total 4
125565 -rw-rw-rw- 1 thep users 4 2002-09-22 20:50 b
127799 lrwxrwxrwx 1 thep users 1 2002-09-22 21:10 c -> b
จะเหนวา c เปนไฟลใหมทใชคนละ i-node กบ b โดยเปนไฟลชนด symlink ทเกบชอ “b” (สงเกตวา ขนาดของ c เทากบ 1 คอเทากบความยาวของชอ “b” ทมนเกบ) และสงเกตวา จำนวนลงกของ b
ไมไดเพมเหมอนตอนทสราง hard link
และการเปลยนแปลงใดๆ ใน c กจะมผลกบ b ดวยเชนกน
thep@anubis:~$ echo hi > c
thep@anubis:~$ cat b
hi
รวมทงการเปลยน permission
thep@anubis:~ $ chmod go-w c
thep@anubis:~ $ ls -li
total 4
125565 -rw-r--r-- 1 thep users 4 2002-09-22 20:50 b
127799 lrwxrwxrwx 1 thep users 1 2002-09-22 21:10 c -> b
แตสงเกตวา permission ของ c เองไมมความหมาย และจะแสดงเปน lrwxrwxrwx เสมอทงนเพราะมนไมไดเปนเจาของ i-node ของไฟลทอางถงเองนนเอง
โดยปกตแลว ในชวตประจำวนเรามกจะใช symlink มากกวา hard link ดวยเหตผลหลายประการเชน
• ไมสามารถทำ hard link กบไดเรกทอรได• ไมสามารถทำ hard link ขาม device ได• symlink สามารถมองเหนไดงายผานคำสง ls ธรรมดา ทำใหจดการไดงาย
อยางไรกด ปญหาทคณอาจจะพบเมอใช symlink กคอ ปญหา broken link เมอไฟลตนฉบบถกลบ
thep@anubis:~$ rm b
thep@anubis:~$ ls -l
total 0
127799 lrwxrwxrwx 1 thep user 1 2002-09-22 21:10 c -> b
thep@anubis:~$ cat c
cat: c: No such file or directory
3.5. ตรวจสอบการใชเนอทดสก 41
3.5 ตรวจสอบการใชเนอทดสก
วากนวา ฮารดดสกเปนทรพยากรทมเทาไรกไมเคยพอ ไมวาจะเปนสมย 40 MB หรอ 40 GB ฮารดดสกของคณจะถกใชจนเตมเสมอ แนนอน คณตองการเคลยรเนอทสกหนอย คณสามารถตรวจสอบเนอทวางของดสกตางๆ ทถกใชในระบบไดดวยคำสง df (disk free)
thep@anubis:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda2 3937252 3548548 188696 95% /
/dev/hda5 19251804 18236840 37008 100% /home
คอลมนตางๆ มความหมายตามหวตาราง ในทนมอปกรณทใชเกบขอมลสองตว คอ1. /dev/hda2 คอฮารดดสก IDE primary master, primary partition ท 2 mount ไวท / หรอ
รากของระบบไฟล มขนาดทงหมด 3,937,252 KB (หรอ 3.8 GB) ใชไปแลว 3,548,548 KB(หรอ 3.4 GB) เหลอ 188,696 KB (หรอ 185 MB) ใชเนอทไปคดเปน 95% โดยประมาณ
2. /dev/hda5 คอฮารดดสก IDE primary master, logical partition ท 1 mount ไวท /homeมขนาดทงหมด 19,251,804 KB (หรอ 19 GB) ใชไปแลว 18,236,840 KB (หรอ 18 GB) เหลอ37,008 KB หรอ 37 MB ใชเนอทไปคดเปน 100% โดยประมาณ
คณอาจใชตวเลอก -h เพอแสดงขนาดตางๆ ในรปแบบทอานงาย แทนการแสดงเปนจำนวนบลอก(ตวเลอก -h ในคำสงเกยวกบเนอทดสกเปนความสามารถพเศษของ GNU ทเพมเตมจากยนกซทวไป)
thep@anubis:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 3.8G 3.4G 185M 95% /
/dev/hda4 19G 18G 37M 100% /home
เมอพบวาฮารดดสกปรมๆ จะเตมเชนน คณจะเรมลงมอเคลยรฮารดดสก แตกอนอน คณคงอยากทราบวาไดเรกทอรไหนทกนท คำสง ls -l นน ชวยไดแคนดหนอยเทานน โดยในบรรทดแรกจะแสดงจำนวนบลอกทงหมดทไฟลตางๆ ในไดเรกทอรนนใช แตจะไมตรวจสอบลงไปถงไดเรกทอรยอยทอยขางใน
thep@anubis:~$ ls -l
total 28
-rwxr-xr-x 1 thep users 4815 2002-08-23 14:49 a.out
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Download
-rw-r--r-- 1 thep users 77 2002-08-23 14:49 hello.c
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Mail
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 Projects
drwxr-xr-x 2 thep users 4096 2002-08-23 14:48 tmp
บรรทด “total 28” นน แสดงจำนวนบลอก (ในทนบลอกมขนาด 1 KB) ทไดเรกทอรปจจบนใชทงหมด แตไมไดรวมเนอทตางๆ ในไดเรกทอรยอย
เครองมอตรวจสอบการใชเนอททมประสทธภาพกวาคอคำสง du (disk usage) ซงจะนบเนอททงหมดในไดเรกทอรยอยดวย
42 บทท 3. เกยวกบไฟลและไดเรกทอร
thep@anubis:~$ du
6064 ./Download/nautilus
956 ./Download/metatheme
1700 ./Download/gtk2
8760 ./Download/gdm
928 ./Download/icon
316 ./Download/metacity
18728 ./Download
4 ./Mail
4 ./Projects
4 ./tmp
18756 .
หรอคณสามารถใชตวเลอก -h เพอขอดผลลพธแบบเขาใจงาย
thep@anubis:~$ du -h
6.0M ./Download/nautilus
956K ./Download/metatheme
1.7M ./Download/gtk2
8.6M ./Download/gdm
928K ./Download/icon
316K ./Download/metacity
19M ./Download
4.0K ./Mail
4.0K ./Projects
4.0K ./tmp
19M .
ตวเลอก -s ของ du จะแสดงคาสรปของไดเรกทอรปจจบนเทานน
thep@anubis:~$ du -sh
19M .
บทท
4
เครองมอประมวลผลไฟล
นอกจากจะโตตอบกบผใชทางแปนพมพและจอภาพแลว ยนกซยงมความยดหยนในการควบคมเสนทางของขอมลระหวางโปรแกรมตางๆ เหมอนสายพานในโรงงาน ทำใหคณสามารถใชเครองมอยอยๆ ประกอบกนเพอทำงานทซบซอนไดตามความตองการ โปรแกรมคำสงตางๆ ในยนกซจงมกไมไดออกแบบมาเปน “โปรแกรมอเนกประสงค” ททำไดทกอยางในโปรแกรมเดยว แตจะเปนเหมอนตวตอเลโกชนเลกๆททำงานเฉพาะดานในดานหนง และพยายามทำใหดทสด ยดหยนทสด เพอทคณจะสามารถนำมาประกอบกบชนสวนอนเพอแกปญหาได
ในบทน เราจะมาทำความรจกกลไกการยกยายขอมลระหวางโปรแกรมตางๆ ททำงานประกอบกนและทำความรจกเครองมอบางสวนของยนกซทคณสามารถหยบฉวยมาใชได
4.1 การเปลยนทศทางขอมล
โปรแกรมบนยนกซทกโปรแกรมจะมชองทางตดตอกบอปกรณมาตรฐานสามอยาง คอ standard in-put สำหรบรบขอมลเขา, standard output สำหรบแสดงผลลพธ และ standard error สำหรบแสดงขอผดพลาด
โดยปกต ชองทางทงสามจะเชอมตอกบเทอรมนลของผใช โดย standard input จะรบขอมลจากแปนพมพ standard output และ standard error กจะแสดงออกทางจอภาพ แตกสามารถสงใหเชอมตอกบไฟลอนทไมใชเทอรมนลไดเชนกน (คงจำไดวา ในมมมองของยนกซ เทอรมนลกคอไฟลชนดหนง)ซงถาเชอมทาง standard input โปรแกรมกจะอานขอมลจากไฟลแทนแปนพมพ ถาเชอมทาง standardoutput หรอ standard error โปรแกรมกจะแสดงผลลพธหรอขอผดพลาดออกทางไฟลแทนจอภาพตามลำดบ
การเปลยนทศทางขอมล (redirection) สำหรบ standard input และ standard output ในเชลลตางๆบนยนกซ จะใชเครองหมาย < > >> ดงนcommand < file เปลยน standard input ใหมารบขอมลจาก file
command > file เปลยน standard output ใหแสดงผลลพธออกทาง file โดยเขยนทบเนอหา
43
44 บทท 4. เครองมอประมวลผลไฟล
เดมถามอย ถายงไมมกจะสรางไฟลใหมcommand >> file เปลยน standard output ใหแสดงผลลพธออกทาง file โดยเขยนตอทาย
เนอหาเดมถามอย ถายงไมมกจะสรางไฟลใหมสำหรบการเปลยนทศทาง standard error นน ออกจะตางกนไปในเชลลแตละชนด ถาคณใชเชลลใน
ตระกลเดยวกบ Bourne Shell (sh) เชน Korn Shell (ksh) Zsh (zsh) หรอ Bourne Again Shell(bash คอเชลลทใชเปนเชลลหลกใน GNU/Linux นนเอง) จะใชรปแบบ command 2> file และ
command 2>> file คลายกบการเปลยนทศทาง standard output1 ระวงวา “2>” และ “2>>”
นน เขยนตดกนหมด ไมมชองวางคนระหวาง 2 และ >สวนเชลลในตระกลเดยวกบ C Shell (csh) เชน TENEX C Shell (tcsh) จะมเพยงวธเปลยน
ทศทาง standard error ใหออกยงไฟลเดยวกบ standard output เทานน ไมสามารถเปลยนทศทางแยกกนโดยตรงได2 รปแบบทใชคอ command >& file และ command >>& file
เหนความสามารถในการเปลยนทศทาง standard error ออกทางไฟลเดยวกบ standard outputของ C Shell แลว คณอาจเกดคำถามขนบางวาจะทำเชนนนใน bash ทคณกำลงใชใน GNU/Linuxอยางไร เพราะคงมบอยครงทคณอยากจะโยนทกสงทกอยางทปรากฏบนจอภาพลงไฟล ทงผลลพธและขอผดพลาด ทแนๆ คอ คณทำเชนนไมได
thep@anubis:~$ ls -R /root
log Mail minicom.log XF86Config.new
ls: /root/Mail: Permission denied
thep@anubis:~$ ls -R /root > res 2> res
thep@anubis:~$ cat res
ls: /root/Mail: Permission denied
nfig.new
เพราะผลลพธจะปนกนเนองจากการเขยนทบกนไปมาผานไฟลทเปดแยกกน จงไมเปนลำดบเหมอนทเคยปรากฏบนจอ เราจำเปนตองทำให standard output และ standard error กลายเปนไฟลเดยวกนในมมมองของโปรแกรม ซงรปแบบการสงการเชนนนใน bash และเชลลในตระกลเดยวกน คอ 2>&1
thep@anubis:~$ ls -R /root > res 2>&1
thep@anubis:~$ cat res
/root:
log
minicom.log
XF86Config.new
ls: /root/Mail: Permission denied
ความหมายของ “2>&1” กคอ ให file descriptor 2 เปลยนทศทางออกทางไฟลเดยวกบ filedescriptor 1 ซงกคอ ให standard error ออกทางไฟลเดยวกบ standard output นนเอง (รปแบบ
1เลข 2 ใน 2> และ 2>> มาจากคา file descriptor ทโปรแกรมทกโปรแกรมในยนกซใชตดตอกบ standard error โดยคา0 หมายถง standard input และคา 1 หมายถง standard output แตจะไมมรปแบบ 0< 1> หรอ 1>> มเพยง standard errorเทานนทใช
2อยางไรกด มวธแกขดอยทางหนงคอ (command > file1) >& file2
4.1. การเปลยนทศทางขอมล 45
นสามารถใชกบ file descriptor คาอนทมากกวา 2 ไดอกดวย แตเรองนอยนอกเหนอขอบเขตของยนกซพนฐานเลมน)
รปแบบสดทายของการเปลยนทศทางขอมลกคอ การปอน input ในบรรทดคำสงเลย (เรยกวา here-document) โดยใชรปแบบ
command << delimitor
... here-document ...
delimitor
โดยท delimitor คอขอความทใชจบเอกสาร ขอความทกบรรทดกอนบรรทดนจะถกปอนเขาทางstandard input ของ command โดยตรง
thep@anubis:~$ cat << EOF
> At $HOME, I saw this poetry:
>
> A keeper who worked at the zoo,
> Was given a gnu to see to;
> He cries: ‘That’s the gnu
> That I knew at Bellevue --
> I knew that I knew that new gnu.’
> EOF
At /home/thep, I saw this poetry:
A keeper who worked at the zoo,
Was given a gnu to see to;
He cries: ‘That’s the gnu
That I knew at Bellevue --
I knew that I knew that new gnu.’
thep@anubis:~$
สงเกตวา $HOME ซงเปนตวแปรระบบจะถกแทนคาเหมอนบรรทดคำสงปกต ถาไมตองการใหเชลลแทนคา คณตองใสเครองหมายคำพด (คหรอเดยวกได) ครอม delimitor ทตำแหนงเรม
thep@anubis:~$ cat << "EOF"
> At $HOME, I saw this poetry:
> ...
> EOF
At $HOME, I saw this poetry:
...
thep@anubis:~$
46 บทท 4. เครองมอประมวลผลไฟล
4.2 เชอมคำสงดวย pipe
นอกจากการยกยายขอมลจากเทอรมนลใหเชอมกบไฟลแทนแลว สงอำนวยความสะดวกอกอยางหนงของยนกซกคอ การตอ ทอ (pipe) เพอสงขอมลจากโปรเซสหนงไปยงอกโปรเซสหนง ทำใหคณสามารถประกอบหลายคำสงใหทำงานรบชวงกนเปนทอดๆ ได
การเชอมทอในคำสงเชลลมรปแบบดงน
command1 | command2 | ...
ผลกคอ standard output ของ command1 จะถกเชอมตรงเขากบ standard input ของ command2และหากมคำสงเชอมทอตอจาก command2 อก กจะมการเชอมในลกษณะเดยวกนกบคำสงถดๆ ไป
ดวยกลไกการทำงานเชนน คำสงแตละคำสงในยนกซจะทำงานงายๆ คอ อานขอมลเขาทาง standardinput ประมวลผล เขยนผลลพธออกทาง standard output และแสดงขอผดพลาดออกทาง standarderror เทานน ไมตองม interface ซบซอน จากนน ผใชจะเปนผประกอบคำสงตางๆ เขาดวยกนเองตามความตองการ
เราไดเหนตวอยางของการใช pipe ไปบางแลวเมอพดถงการใช more
thep@anubis:~$ ls -l /bin | more
total 2872
-rwxr-xr-x 1 root root 47464 2002-08-04 03:15 afio
-rwxr-xr-x 1 root root 2724 2002-01-27 14:05 arch
-rwxr-xr-x 1 root root 579816 2002-09-12 05:51 bash
-rwxr-xr-x 1 root root 13864 2002-08-04 16:10 cat
-rwxr-xr-x 1 root root 16232 2002-09-01 20:39 chgrp
-rwxr-xr-x 1 root root 16008 2002-09-01 20:39 chmod
-rwxr-xr-x 1 root root 18120 2002-09-01 20:39 chown
-rwxr-xr-x 1 root root 42664 2002-09-01 20:39 cp
-rwxr-xr-x 1 root root 47656 2002-06-23 03:09 cpio
-rwxr-xr-x 1 root root 82248 2002-09-14 19:32 dash
-rwxr-xr-x 1 root root 34408 2002-09-01 20:40 date
-rwxr-xr-x 1 root root 28808 2002-09-01 20:39 dd
-rwxr-xr-x 1 root root 26184 2002-09-01 20:39 df
-rwxr-xr-x 1 root root 59496 2002-09-01 20:39 dir
-rwxr-xr-x 1 root root 4076 2002-01-27 14:05 dmesg
-rwxr-xr-x 1 root root 11080 2002-09-01 20:40 echo
-rwxr-xr-x 1 root root 43292 2000-11-27 09:05 ed
--More--
และเราจะไดเหนประโยชนของ pipe มากขนอก เมอไดกลาวถงคำสงตวกรองตางๆ
4.3. ตวกรอง 47
4.3 ตวกรอง
ความสามารถเรองการเปลยนทศทางขอมลหรอ pipe จะไมมประโยชนอะไรมากนก ถาขาดโปรแกรมคำสงสำหรบงานตางๆ มารองรบ เปรยบเสมอนโรงงานทมแตสายพาน แตขาดเครองจกรนนเอง ในหวขอนเราจะมาทำความรจกกบโปรแกรมตวกรอง (filter) ตางๆ บางสวนของทมในยนกซทคณสามารถหยบมาใชได
4.3.1 head
มหลายกรณทคณไมไดสนใจเนอหาของไฟลทงไฟล ยนกซมคำสงสำหรบตดเอาเฉพาะสวนตนหรอสวนทายของไฟลมาใช ไดแกคำสง head และ tail ตามลำดบ
คำสง head – แสดงสวนตนของไฟล
รปแบบ head [ตวเลอก] [file]
คำบรรยาย แสดงสวนตนของไฟล file ถาไมระบ file จะแสดงขอมลจาก standard input
ตวเลอก -n แสดงผล n บรรทดแรก (หากไมระบ จะแสดง 10 บรรทดแรก)-c n แสดงผล n ไบตแรก
ตวอยางเชน เมอคณจะหาไฟลทใหญทสด 10 ไฟลแรกในไดเรกทอรของคณ:
thep@anubis:~$ ls -S /bin | head
bash
tcsh
tar
netstat
dash
mount
dir
ls
vdir
ps
4.3.2 tail
นอกจากจะดเฉพาะตนไฟล คณสามารถขอดเฉพาะทายไฟลกไดเชนกน ดวยคำสง tail
คำสง tail – แสดงสวนทายของไฟล
รปแบบ tail [ตวเลอก] [file]
คำบรรยาย แสดงสวนทายของไฟล file ถาไมระบ file จะแสดงขอมลจาก standard input
48 บทท 4. เครองมอประมวลผลไฟล
ตวเลอก -n แสดงผล n บรรทดสดทาย (หากไมระบ จะแสดง 10 บรรทดสดทาย)-c n แสดงผล n ไบตสดทาย-f รอแสดงผลแบบทนทเมอไฟลถกเขยนตอทาย
ตวอยางเชน ถาจะด error log รายการลาสดจาก log file:
thep@anubis:~$ tail -6 /var/log/httpd/error log
[Fri Sep 20 19:57:15 2002] [error] [client 203.185.2.14] File
does not exist: /var/www/html/d/winnt/system32/cmd.exe
[Fri Sep 20 19:57:19 2002] [error] [client 203.185.2.14] File
does not exist: /var/www/html/scripts/..%5c../winnt/system32/c
md.exe
[Fri Sep 20 19:57:19 2002] [error] [client 203.185.2.14] File
does not exist: /var/www/html/_vti_bin/..%5c../..%5c../..%5c
../winnt/system32/cmd.exe
[Fri Sep 20 19:57:29 2002] [error] [client 203.185.2.14] File
does not exist: /var/www/html/_mem_bin/..%5c../..%5c../..%5c..
/winnt/system32/cmd.exe
[Fri Sep 20 19:57:30 2002] [error] [client 203.185.2.14] File
does not exist: /var/www/html/msadc/..%5c../..%5c../..%5c/..x.
./..x../..x../winnt/system32/cmd.exe
[Fri Sep 20 19:57:34 2002] [error] [client 203.185.2.14] File
does not exist: /var/www/html/scripts/..../winnt/system32/cmd
.exe
ตวเลอก -f มประโยชนมากในการด log file ทมการเพมขอมลตอทายอยตลอดเวลา โดยจะตดตามขนาดของไฟลและแสดงขอความทเพมททายไฟลทนททไฟลเปลยนขนาด ชวยในการตดตาม error logของเซรฟเวอรแบบทนเหตการณไดเปนอยางด
4.3.3 grep
คำสงหนงทใชบอยมากในยนกซคอคำสงคนหาขอความในไฟล ไดแกคำสง grep คณไมจำเปนตองเปดพจนานกรมหาความหมายของมนหรอก เพราะมนคอตวยอของ Global Regular Expression Printกลาวคอ เปนคำสงทใชพมพบรรทดทมขอความทเขากบรปแบบ regular expression ทกำหนด3
3ทมาของชอ grep กคอ คำสงคนคำใน line editor ของยนกซเชน ed, ex รวมทง full screen editor ทสามารถใชคำสงของ ex ไดอยาง vi ซงมรปแบบเปน
g/re/p
โดยท g คอคำสง global สำหรบกระทำทงเอกสาร re หมายถง regular expression และ p (print) เปนคำสงทใหกระทำกบบรรทดท match ดวยการพมพออกทางจอภาพ
4.3. ตวกรอง 49
คำสง grep – แสดงบรรทดทมขอความเขากบรปแบบทกำหนด
รปแบบ grep [ตวเลอก] {pattern|-e pattern} [file . . . ]
คำบรรยาย แสดงบรรทดทมขอความทเขากบ regular expression pattern
ตวเลอก -e pattern ใชเมอ pattern ขนตนดวย ‘-’-c นบบรรทดแตไมแสดงบรรทด-h ไมแสดงชอไฟล-H บงคบแสดงชอไฟลเสมอ-i อกษรตวใหญตวเลกถอวาไมตางกน-l แสดงแตชอไฟลท match-L แสดงแตชอไฟลทไม match-n แสดงหมายเลขบรรทดดวย-o แสดงเฉพาะขอความท match แทนการแสดงทงบรรทด-v หาบรรทดทไมตรงกบ pattern แทน
คำวา “regular expression” หากพดเปนภาษาคณตศาสตรกหมายถงรปแบบทแทนเซตของขอความเซตหนง ซงขอความใดๆ ทอยในเซตนถอวา “เขากนได” (match) กบ regular expression นน รปแบบการเขยน regular expression จะแบงเปนสวนกำหนดเซตของอกขระทจะ match กบโอเปอเรเตอร
สวนของการกำหนดเซตของอกขระทจะ match ไดแก1. ตวอกษร เปนเซตทงายทสด อกษรทกตวและตวเลขเปน regular expression ท match กบตว
มนเอง โดยถาอกขระนนๆ เปนเครองหมายพเศษทมความหมายใน regular expression จะตอง escapeดวยการเขยน backslash (\) นำหนา
2. จด ‘.’ จะ match กบอกขระใดๆ กไดหนงตว3. วงเลบเหลยม กลมของตวอกษรทครอบดวยวงเลบเหลยม จะ match กบอกษรใดกไดในชดนน
หนงตว เชน [abc] จะ match กบ a หรอ b หรอ c กไดการลสตอกขระสามารถเขยนเปนชวงไดโดยใช ‘-’ กได เชน เชน [a-z] จะ match กบอกขระ
ใดกไดตงแต a ถง z หนงตว [a-zA-Z0-9] จะ match กบอกษรภาษาองกฤษทงหมดและตวเลขอารบกทกตว
หากอกขระแรกของเซตเปน circumflex (^) จะเปนเซตนเสธ คอจะ match กบอกขระใดๆ ทไมอยในเซตทกำหนด เชน [^0-9] จะ match กบอกขระใดๆ ทไมใชตวเลขอารบก ถาคณตองการเขยนเซตทม ^ กสามารถเขยนไดโดยไมลสตมนเปนตวแรก และถาตองการเขยนเซตทม ] กเขยนโดยลสตมนเปนตวแรกของเซต
สวนของโอเปอเรเตอร ไดแก1. ดอกจน ‘*’ เมอเขยนตอทายเซตจะหมายถงการซำของเซตนนตงแต 0 ครงขนไป เชน• a* จะ match กบขอความวางเปลา หรอ a หรอ aa . . .• a[0-9]* จะ match กบ a หรอ a ทตามดวยเลขอารบกกตวกได2. circumflex ‘^’ เมอเขยนทตน regular expression จะหมายถงการ match กบขอความทตน
บรรทด เชน ^Richard จะ match กบบรรทดทขนตนดวย Richard
3. dollar ‘$’ เมอเขยนททาย regular expression จะหมายถงการ match กบขอความททายบรรทดเชน Bazaar$ จะ match กบบรรทดทลงทายดวย Bazaar
50 บทท 4. เครองมอประมวลผลไฟล
สมมตวา คณตองการหาชอไดเรกทอรยอยทงหมดในไดเรกทอรปจจบน กสามารถทำไดโดยสง“ls -l” แลวเลอกเอาเฉพาะบรรทดทขนตนดวย ‘d’
thep@anubis:~$ ls -l | grep ^d
drwxr-xr-x 8 thep users 4096 2003-06-30 21:38 Download
drwxr-xr-x 2 thep users 4096 2003-06-30 14:58 Mail
drwxr-xr-x 2 thep users 4096 2003-07-01 22:19 Projects
drwxr-xr-x 2 thep users 4096 2003-07-01 22:19 tmp
หรอจะหาบรรทดทลงทายดวย slash (/) ในผลลพธของ “ls -F” กได
thep@anubis:~$ ls -F | grep ’/$’
Download/
Mail/
Projects/
tmp/
กลบกน ถาคณตองการชอไฟลปกต ไมใชไดเรกทอร คณกใชตวเลอก -v กลบผลลพธเสย
thep@anubis:~$ ls -F | grep -v ’/$’
a.out*
bye.c
hello.c
4.3.4 wc
ไมใชหองนำ แตคอ word count เปนคำสงนบจำนวนอกขระ จำนวนคำ และจำนวนบรรทดในไฟล
คำสง wc – นบจำนวนอกขระ จำนวนคำ และจำนวนบรรทด
รปแบบ wc [ตวเลอก] [file . . . ]
คำบรรยาย แสดงจำนวนอกขระ จำนวนคำ และจำนวนบรรทดใน file หรอถาไมกำหนด file
กจะนบขอมลใน standard input
ตวเลอก -l แสดงจำนวนบรรทด-w แสดงจำนวนคำ-c แสดงจำนวนอกขระ
เชน เมอใชกบไฟลปกต
thep@anubis:~$ cat hello.c
#include <stdio.h>
4.3. ตวกรอง 51
int main()
{printf("Hello, world.\n");return 0;
}
thep@anubis:~$ wc hello.c
8 10 77 hello.c
thep@anubis:~$ wc -l hello.c
8 hello.c
thep@anubis:~$ wc *.c
8 11 85 bye.c
8 10 77 hello.c
16 21 162 total
คณสามารถสงนบจำนวนไฟลในไดเรกทอรได
thep@anubis:~$ ls | wc -l
10
4.3.5 sort
คณสามารถเรยงลำดบขอมลไดดวยคำสง sort
คำสง sort – เรยงลำดบบรรทดตางๆ ในไฟลขอความ
รปแบบ sort [ตวเลอก] [file . . . ]
คำบรรยาย ตอไฟลทงหมดทกำหนดและเรยงลำดบบรรทดออกทาง standard output ถาไมกำหนดไฟลจะอานขอมลจาก standard input
ตวเลอก -k POS1[,POS2 ]กำหนดคยทใชเรยงลำดบโดยเรมจากฟลดท POS1 จนถงฟลดท POS2 (เรมนบจาก1) เชน ‘-k2,3’ หมายถงใชฟลดทสองและสามเปนคย หากไมกำหนด POS2 จะหมายถงใชตงแตฟลดท POS1 จนจบบรรทดเปนคย
-t delim กำหนดอกขระทใชแบงฟลดในไฟล (คาปกตหากไมระบจะเปน space หรอ tab)-n ใหตความคยเปนตวเลขกอนเรยง-r เรยงลำดบยอนกลบ-u เลอกเอาบรรทดทซำกนเพยงบรรทดเดยว
ตวอยางเชน มไฟลขอมลตอไปน
thep@anubis:~$ cat tel
6402 thep 0-1234-5678
52 บทท 4. เครองมอประมวลผลไฟล
9876 ott 0-9876-5432
4444 pruet 0-5555-5555
2847 chanop 0-6789-0123
เมอสง sort โดยไมใสตวเลอก กหมายถงการเปรยบเทยบทงบรรทด
thep@anubis:~$ sort tel
2847 chanop 0-6789-0123
4444 pruet 0-5555-5555
6402 thep 0-1234-5678
9876 ott 0-9876-5432
หากตองการเรยงชอตามลำดบอกษรโดยอาศยฟลดทสอง
thep@anubis:~$ sort -k2,2 tel
2847 chanop 0-6789-0123
9876 ott 0-9876-5432
4444 pruet 0-5555-5555
6402 thep 0-1234-5678
หรอเรยงยอนลำดบอกษร
thep@anubis:~$ sort -k2,2r tel
6402 thep 0-1234-5678
4444 pruet 0-5555-5555
9876 ott 0-9876-5432
2847 chanop 0-6789-0123
ลองอกสกตวอยาง สมมตวา คณตองการหาไดเรกทอรทกนเนอทมากทสดเรยงตามลำดบ คำสง duใหผลลพธวา
thep@anubis:~$ du
6064 ./Download/nautilus
956 ./Download/metatheme
1700 ./Download/gtk2
8760 ./Download/gdm
928 ./Download/icon
316 ./Download/metacity
18728 ./Download
4 ./Mail
4 ./Projects
4 ./tmp
18780 .
4.3. ตวกรอง 53
คณตองการเรยงลำดบตามฟลดแรกเปนหลกจากมากไปนอย จากนนใชฟลดทสองเปรยบเทยบตามลำดบอกษรถาฟลดแรกเทากน
thep@anubis:~$ du | sort -k1,1nr -k2,2
18780 .
18728 ./Download
8760 ./Download/gdm
6064 ./Download/nautilus
1700 ./Download/gtk2
956 ./Download/metatheme
928 ./Download/icon
316 ./Download/metacity
4 ./Mail
4 ./Projects
4 ./tmp
คำสง sort น จะมผลตามโลแคล LC COLLATE และ LC CTYPE ดงนน ถาคณเซตตวแปรระบบทงสอง หรอเซต LC ALL เปน th TH และระบบของคณสนบสนนโลแคลไทย (เชน ดวย GNU Clibrary 2.1.1 ขนไป) คณกจะสามารถเรยงลำดบคำไทยตามพจนานกรมฉบบราชบณฑตยสถานได และหากคณตองการการเรยงลำดบแบบ ASCII ธรรมดา คณกเซตโลแคลใหเปน C เสย
4.3.6 uniq
คำสง uniq ใชกำจดบรรทดซำในไฟลขอความทเรยงลำดบแลว
คำสง uniq – กำจดบรรทดซำในไฟลขอความทเรยงแลว
รปแบบ uniq [ตวเลอก] [input [output]]
คำบรรยาย กำจดบรรทดซำทอยตดกนใน input (หรอ standard input ถาไมระบ) และแสดงผลลพธออกทาง output (หรอ standard output ถาไมระบ)
ตวเลอก -c แสดงจำนวนบรรทดทซำไวขางหนาแตละบรรทดดวย-d แสดงเฉพาะบรรทดทซำเทานน-u แสดงเฉพาะบรรทดทไมซำเทานน
เนองจาก uniq จะกำจดบรรทดซำทอยตดกนเทานน การใช uniq กบไฟลทยงไมเรยงลำดบจงยงมโอกาสมบรรทดซำกนหลงเหลอในผลลพธ ดงนน ถาคณตองการไมใหเหลอบรรทดซำเลย คณควรจะsort เสยกอนสงให uniq
สมมตวาคณมไฟลขอมลบทความนาอานซงคนฟลดดวย bar (|) ดงน
thep@anubis:~$ cat readings
Eric Raymond|How To Become A Hacker
Eric Raymond|The Cathedral and the Bazaar
54 บทท 4. เครองมอประมวลผลไฟล
Havoc Pennington|Working on Free Software
Havoc Pennington|Free software maintenance: Adding Features
Advogato|Advogato’s Number: Advice for young free software developers
Richard Stallman|The GNU Project
Richard Stallman|The Free Software Definition
Richard Stallman|Why GNU/Linux?
Richard Stallman|We Can Put an End to Word Attachments
Open Source Initiative|The Open Source Definition
Robert Chassel|Making a Living with Free Software
Andy Tai|Free Software: Hackers Comeback
Richard Stallman|The GNU Manifesto
Richard Stallman|Why Software should not have owners
Richard Stallman|Copyleft: Pragmatic Idealism
Eric Raymond|Homesteading the Noosphere
คณตดเอาเฉพาะชอผแตงดวยคำสง cut (เราจะพดถงคำสง cut โดยละเอยดในหวขอ 4.3.8 ในทนขอใหเชอวาคำสงนสามารถตดเอาเฉพาะฟลดแรกออกมาไดไปกอน)
thep@anubis:~$ cut -d "|" -f1 readings
Eric Raymond
Eric Raymond
Havoc Pennington
Havoc Pennington
Advogato
Richard Stallman
Richard Stallman
Richard Stallman
Richard Stallman
Open Source Initiative
Robert Chassel
Andy Tai
Richard Stallman
Richard Stallman
Richard Stallman
Eric Raymond
หากใชคำสง uniq เพอตดชอซำโดยตรง คณจะยงไดชอซำหลงเหลออย
thep@anubis:~$ cut -d "|" -f1 readings | uniq
Eric Raymond
Havoc Pennington
Advogato
4.3. ตวกรอง 55
Richard Stallman
Open Source Initiative
Robert Chassel
Andy Tai
Richard Stallman (ซำ)Eric Raymond (ซำ)
คณจงควร sort กอน uniq เพอทบรรทดซำจะไดมาอยตดกน
thep@anubis:~$ cut -d "|" -f1 readings | sort | uniq
Advogato
Andy Tai
Eric Raymond
Havoc Pennington
Open Source Initiative
Richard Stallman
Robert Chassel
หรออกวธหนงคอ ใชตวเลอก -u (uniq) กบคำสง sort โดยตรง
thep@anubis:~$ cut -d "|" -f1 readings | sort -u
Advogato
Andy Tai
Eric Raymond
Havoc Pennington
Open Source Initiative
Richard Stallman
Robert Chassel
ในตวอยางขางตน คณอาจเหนวาผลของคำสง “sort | uniq” กบ “sort -u” นนเหมอนกนแตอยางไรกด ผลจะตางกนถามการเลอกใชคยในคำสง sort โดยถาเทยบคยของสองบรรทดแลวไดเทากน sort จะถอวาสองบรรทดนนซำกน แมวาสวนอนของบรรทดจะไมไดเหมอนกนกตาม พจารณาผลของการสงตอไปน
thep@anubis:~$ sort -t "|" -k1,1 readings | uniq
Advogato|Advogato’s Number: Advice for young free software developers
Andy Tai|Free Software: Hackers Comeback
Eric Raymond|Homesteading the Noosphere
Eric Raymond|How To Become A Hacker
Eric Raymond|The Cathedral and the Bazaar
Havoc Pennington|Free software maintenance: Adding Features
Havoc Pennington|Working on Free Software
Open Source Initiative|The Open Source Definition
56 บทท 4. เครองมอประมวลผลไฟล
Richard Stallman|Copyleft: Pragmatic Idealism
Richard Stallman|The Free Software Definition
Richard Stallman|The GNU Manifesto
Richard Stallman|The GNU Project
Richard Stallman|We Can Put an End to Word Attachments
Richard Stallman|Why GNU/Linux?
Richard Stallman|Why Software should not have owners
Robert Chassel|Making a Living with Free Software
เทยบกบผลของคำสง sort เหมอนเดมแตเพมตวเลอก -u แทนการใช uniq
thep@anubis:~$ sort -u -t "|" -k1,1 readings
Advogato|Advogato’s Number: Advice for young free software developers
Andy Tai|Free Software: Hackers Comeback
Eric Raymond|How To Become A Hacker
Havoc Pennington|Working on Free Software
Open Source Initiative|The Open Source Definition
Richard Stallman|The GNU Project
Robert Chassel|Making a Living with Free Software
ซงจะเหนวา เปนการพยายาม unique ฟลดผแตง โดยเลอกบรรทดอยางสม (ขนอยกบการทำงานของอลกอรทมทใชเรยงลำดบวาจะเจอบรรทดไหนกอน) มาหนงบรรทดแทนผแตงแตละคน (กรณอยางนเรยกวาคยไมสมบรณทไมสามารถแยก record ตางๆ ออกจากกนได)
4.3.7 tee
เรามาสลบฉากดวยคำสงเบาๆ ทมประโยชนพอควรคำสงหนง ทชวยใหคณสามารถดกขอมลในทอทสงระหวางโปรเซสได โดยตอทอรปตวท (T) แทรกกลางเขาไป คำสงททำหนาทเชนนคอ tee
คำสง tee – อาน standard input และสงผานออกทาง standard output และไฟล
รปแบบ tee [ตวเลอก] [file . . . ]
คำบรรยาย กอปป standard input ไปยง standard output และไฟลทกำหนด
ตวเลอก -a เขยนขอมลตอทายไฟลแทนการเขยนทบ
สมมตวาจากไฟล readings ในหวขอทแลว คณใชคำสง cut ตดฟลดผแตงออกมาแลวสงตอดวย “sort -u | wc -l” เพอนบจำนวนผแตงทงหมด แตคณตองการเกบรายชอผแตงทไดไวดวยคณสามารถแทรกคำสง tee ระหวางทางได
thep@anubis:~$ cut -d "|" -f1 readings | sort -u | tee authors \| wc -l
4.3. ตวกรอง 57
7
thep@anubis:~$ cat authors
Advogato
Andy Tai
Eric Raymond
Havoc Pennington
Open Source Initiative
Richard Stallman
Robert Chassel
4.3.8 cut และ paste
คำสง cut และ paste จะทำงานกบไฟลในแนวดง คำสง cut ใชตดเฉพาะฟลดทตองการออกมาจากทกบรรทดในไฟล สวนคำสง paste ใชตอไฟลทแยกฟลดนนเขามาเปนไฟลเดยว
คำสง cut – เลอกคอลมนทตองการออกมาจากไฟล
รปแบบ cut [ตวเลอก] [file . . . ]
คำบรรยาย เลอกคอลมนทตองการจากไฟล (กำหนดไดมากกวาหนงไฟล หรอเลอกจาก standardinput ถาไมระบ) แลวเขยนออกทาง standard output โดยเลอกไดสามแบบ คอเลอกเปนไบต(ดวย -b) เลอกเปนอกขระ (ดวย -c) หรอเลอกเปนฟลด (ดวย -f)
ตวเลอก -b list เลอกไบตทตองการ-c list เลอกอกขระทตองการ (อาจจะตางจาก -b ในภาษาทอกขระยาวกวาหนงไบต)-f list เลอกฟลดทตองการ
การระบสวนทตองการดวย list ในตวเลอก -b, -c และ -f จะระบดวยตวเลขลำดบทตองการ (เรมนบจาก 1) หรอเปนชวงในรปแบบ m-n กได และสามารถละ m หรอ n
สวนใดสวนหนงได โดย -n หมายถง 1-n และ m- หมายถงตงแต m ถงทายบรรทด-d delim กำหนดตวคนฟลดเปน delim (ใชสำหรบตวเลอก -f)-s ตดบรรทดทไมมตวคนฟลดปรากฏทง (ใชสำหรบตวเลอก -f)
เราไดเหนตวอยางการใช cut ตดฟลดไปแลวในหวขอ 4.3.5 และ 4.3.6 ซงนาจะเปนกรณทพบบอยทสด
อยางไรกด หากคณตองการหาอกษรนำของชอตนของผแตงทกคน คณสามารถใช cut ตดไดเชนกน
thep@anubis:~$ cut -b1 readings
E
E
H
H
A
58 บทท 4. เครองมอประมวลผลไฟล
R
R
R
R
O
R
A
R
R
R
E
คำสง paste – รวมบรรทดของชดของไฟล
รปแบบ paste [ตวเลอก] [file . . . ]
คำบรรยาย รวมบรรทดตางๆ ของชดของไฟลทกำหนด (หากไมกำหนด หรอใช - แทนชอไฟล จะหมายถง standard input) ตามลำดบขนานกนไปในแตละบรรทด โดยคนสวนของแตละไฟลดวยชด delimiter ทกำหนด (หรอ
�� ��TAB หากไมกำหนดเปนอยางอน)
ตวเลอก -d delimiters ใชชดอกขระใน delimiters ตามลำดบเปนตวคนระหวางฟลดกลาวคอ ตวแรกคนระหวางฟลดแรกกบฟลดทสอง ตวทสองคนระหวางฟลดทสองกบฟลดทสาม ฯลฯ และยอนกลบมาใชตวแรกใหมถา delimiters สนกวาจำนวนdelimiter ทตองการ
-s รวมไฟลแบบหนงไฟลตอหนงบรรทดแทนการรวมบรรทดแบบขนาน-f หยดเมอสดไฟลใดไฟลหนง
สมมตวามไฟลขอมลสองไฟลดงน
thep@anubis:~$ cat id
1
2
thep@anubis:~$ cat name
bruce
richard
eric
เมอ paste ตามปกต
thep@anubis:~$ paste id name
1�� ��TAB bruce
2�� ��TAB richard�� ��TAB eric
4.3. ตวกรอง 59
เมอ paste โดยกำหนด delimiters
thep@anubis:~$ paste -d ’!@’ id name id
1!bruce@1
2!richard@2
!eric@
เมอ paste แบบ serial
thep@anubis:~$ paste -s id name
1�� ��TAB 2
bruce�� ��TAB richard
�� ��TAB eric
เมอ paste แบบหยดทไฟลแรกทสนสด
thep@anubis:~$ paste -f id name
1�� ��TAB bruce
2�� ��TAB richard
4.3.9 comm
คำสง comm จะชวยคณเปรยบเทยบไฟลสองไฟลทเรยงลำดบแลวได โดยคดแยกบรรทดทมเหมอนกนออกจากบรรทดทไมเหมอนกน โดยแยกเปนสามกอง
คำสง comm – เทยบไฟลสองไฟลทเรยงแลวบรรทดตอบรรทด
รปแบบ comm [ตวเลอก] file1 file2
คำบรรยาย เปรยบเทยบไฟลท เรยงแลวสองไฟลบรรทดตอบรรทด คดแยกออกเปนสามคอลมนบรรทดทมเฉพาะในไฟลแรกอยคอลมนแรก บรรทดทมเฉพาะในไฟลทสองอยคอลมนทสองและบรรทดทมในทงสองไฟลอยคอลมนทสาม คอลมนจะถกแยกกนดวย
�� ��TAB หนงตวผลลพธแตละบรรทดจะมขอมลเพยงคอลมนเดยวเทานน คอลมนทเหลอจะวางเปลา
ตวเลอก -1 ไมแสดงคอลมนท 1-2 ไมแสดงคอลมนท 2-3 ไมแสดงคอลมนท 3
สมมตวา เรามไฟลสองไฟลทเรยงลำดบแลวดงน
thep@anubis:~$ cat gnome
hp
miguel
otaylor
timj
60 บทท 4. เครองมอประมวลผลไฟล
tml
thep@anubis:~$ cat rh
drepper
hp
otaylor
เมอสงเปรยบเทยบไฟลทงสองดวย comm
thep@anubis:~$ comm gnome rh
drepper
hp
miguel
otaylor
timj
tml
จะเหนวา คำทปรากฏในทงสองไฟล คอ hp และ otaylor จะถกแยกไวคอลมนทสาม สวนทเหลอถกแยกไวในคอลมนแรกสำหรบไฟลแรก และคอลมนทสองสำหรบไฟลทสอง หากตองการแคบางคอลมนเรากสงระงบคอลมนทไมตองการได
thep@anubis:~$ comm -3 gnome rh
drepper
miguel
timj
tml
thep@anubis:~$ comm -12 gnome rh
hp
otaylor
ทน มาทำอะไรทเปนเรองเปนราวดกวา สมมตวาคณมไฟลเกบ e-mail address ทแยกออกมาไดจากไฟลอน
thep@anubis:~$ cat devlist
คณตองการตรวจวา ใครมชอในไฟล gnome บาง กอนอนคณตอง cut เอาแตชอออกมากอน แลวsort กอน comm เอาเฉพาะบรรทดทซำกน
4.4. สงทาย 61
thep@anubis:~$ cut -d ’@’ -f1 devlist | sort | comm -12 - gnome
hp
miguel
otaylor
timj
และใครไมอยบาง กทำเชนเดม เพยงแตเลอกเอาเฉพาะบรรทดทไมมในไฟล gnome
thep@anubis:~$ cut -d ’@’ -f1 devlist | sort | comm -23 - gnome
iliad
rms
สงเกตการใช ‘-’ แทน standard input ในคำสง comm
4.4 สงทาย
ในบทนเราไดทราบถงเครองมอตางๆ ของยนกซในการประมวลผลขอมลเปนสายงานผาน pipe แตความสามารถในการประกอบเครองมอใหมของยนกซยงไมจบลงแคน เชลลของยนกซอนญาตใหคณใชคำสงเหลานเขยนเปนโปรแกรมใหมขนมาเลยทเดยว ซงหากคณคนเคยกบ batch file ของดอสหรอวนโดวสมาแลวละก คณจะไดพบความยดหยนอยางทไมเคยพบมากอนในเชลลของยนกซ เพราะมนไมใชฉบบยอทจำกดจำเขยเหมอนทคณคนเคยอกตอไป