Prac05 ปฏิบัติการตอนที่ ๑ จำนวน Link ------------------------- จงสร้างไดเรกทอรี ~/886326/lab05 และเข้าสู่ไดเรกทอรีนี้ ไดเรกทอรีที่สร้างใหม่ ควรเป็นไดเรกทอรีว่าง แต่เมื่อขอดูรายลื่อแฟ้มทั้งหมด ด้วยคำสั่ง ls -al ดังนี้ total 8 drwx------ 2 jira staff 4096 Feb 1 12:46 . # จำนวน link ของไดเรกทอรีปัจจุบันเพิ่มขึ้นจาก 2 เป็น 3 drwx------ 3 jira staff 4096 Feb 1 12:46 .. ※หมายเหตุ ※ 1. option -a (all) ใช้สำหรับขอดูรายชื่อแฟ้มและไดเรกทอรีทั้งหมดซึ่งรวมทั้งแฟ้มซ่อนด้วย 2. option -l (long listing format)ใช้สำหรับขอดูลักษณะประจำของแฟ้ม กล่าวอีกนัยหนึ่งคือข้อมูลใน inode และชื่อแฟ้ม 3. เมื่อมีการกำหนด option -l จะมีการแสดงจำนวน block ของทุกรายการที่คำสั่งนี้แสดงผล ในรูปแบบ total <จำนวน block> เมื่อทำการสร้างไดเรกทอรี tmp $ ls -al drwx------ 3 jira staff 4096 Feb 1 13:06 . drwx------ 3 jira staff 4096 Feb 1 12:46 .. drwx------ 2 jira staff 4096 Feb 1 13:06 tmp ความหมาย long listing format (option -i) ---------------------------------------- สิทธิในการใช้งาน ↓ วันเวลาที่การเปลี่ยนแปลงแฟ้มครั้งล่าสุด ↓ จำนวน link กลุ่มที่เจ้าของแฟ้มสังกัด (Date and time of last modified) ↓ ↓ ↓ ↓ d rwx --- --- 2 jira staff 4096 Nov 19 09:37 tmp ↑ ↑ ↑ ↑ ชนิดของแฟ้ม เจ้าของแฟ้ม ขนาดของแฟ้มเป็นไบต์ ชื่อแฟ้ม - แฟ้มธรรมดา หากเป็นไดเรกทอรีคือขนาด d ไดเรกทอรี ของ block เป็นไบต์ ผู้ใช้สามารถขอดูรายชื่อแฟ้มทั้งหมดพร้อมด้วยหมายเลข inode ด้วย option -i กล่าวอีกนัยหนึ่งคือเป็นการขอดูข้อมูลใน directory block $ ls -ai 90513412 . 90513411 .. 90513413 tmp การแสดงผลจะดูง่ายขึ้นหากนำมาแสดงในรูปของตารางดังนี้ หมายเลข inode ชื่อแฟ้ม ------------ ----- 90513412 . 90513411 .. 90513413 tmp option ต่างๆ สามารถนำใช้รวมกันได้ เช่น $ ls -ail 90513412 drwx------ 3 jira staff 4096 Feb 1 13:06 . # .../886326/lab05 90513411 drwx------ 3 jira staff 4096 Feb 1 12:46 .. # .../886326 90513413 drwx------ 2 jira staff 4096 Feb 1 13:06 tmp # .../886326/lab05/tmp นำผลลัพธ์ที่ได้แสดงเป็นแผนภาพของไดเรกทอรีพร้อมด้วยหมายเลข inode (ในวงเล็บ) ได้ดังนี้ 886326 (90513411) | +-----------------+-------------------------------------+- |* | lab05 (90513412) ... | ไดเรกทอรีและแฟ้มที่มีอยู่เดิม tmp (90513413) ทำการเปลี่ยนไดเรกทอรีเข้าใน tmp ซึ่งขณะนี้ยังเป็นไดเรกทอรีว่าง และใช้คำสั่ง ls -ail $ cd tmp $ ls -ail 90513413 drwx------ 2 jira staff 4096 Feb 1 13:06 . 90513412 drwx------ 3 jira staff 4096 Feb 1 13:06 .. ❓คำถาม 1. หมายเลข inode ที่ได้สอดคล้องกับโครงสร้างไดเรกทอรีข้างต้นหรือไม่? อย่างไร? 2. หากทำการสร้างไดเรกทอรีย่อย จำนวน link ของไดเรกทอรีปัจจุบันจะเปลี่ยนแปลงไปหรือไม่? อย่างไร? ทำการลบไดเรกทอรี tmp ด้วยคำสั่ง rmdir $ cd .. # จะลบไดเรกทอรีได้เมื่ออยู่ในระดับเหนือไดเรกทอรีนั้น และต้องเป็นไดเรกทอรีว่าง $ rmdir tmp $ ls -al ... ... ... ... ... ❓คำถาม 3. จำนวน link ของไดเรกทอรี lab05 เปลี่ยนแปลงหรือไม่? อย่างไร? ปฏิบัติการตอนที่ ๒ เรียนรู้การใช้งานคำสั่ง touch และ stat ---------------------------------------------- กำหนดให้ไดเรกทอรีปัจจุบันเป็น ~/886326/lab05 ซึ่งในขณะนี้เป็นไดเรกทอรีว่าง สร้างแฟ้ม pangram.txt โดยใช้การเปลี่ยนทิศทาง output ของคำสั่ง echo ดังนี้ $ echo "The quick brown fox jumps over the lazy dog." > pangram.txt ตรวจสอบหมายเลข inode และคุณลักษณะแฟ้ม สำหรับใช้งานต่อไป $ ls -il 90512802 -rw------- 1 jira staff 45 Feb 1 15:43 pangram.txt ➤ คำสั่ง stat - display file or file system status ------------------------------------------------- คำสั่ง stat - แสดงสถานะของแฟ้ม หรือสถานะของระบบแฟ้ม รูปแบบการใช้งานอย่างง่าย: stat <ชื่อแฟ้ม> ตัวอย่าง การขอดูสถานะของแฟ้ม pangram.txt ที่เพิ่งสร้างขึ้น $ stat pangram.txt File: pangram.txt Size: 45 Blocks: 8 IO Block: 1048576 regular file Device: 1ah/26d Inode: 90512802 Links: 1 Access: (0600/-rw-------) Uid: ( 1005/ jira) Gid: ( 50/ staff) Access: 2018-02-01 15:43:48.291183764 +0700 Modify: 2018-02-01 15:43:48.399183702 +0700 Change: 2018-02-01 15:43:48.399183702 +0700 Birth: - คำสั่ง stat แสดงหมายเลข inode ของแฟ้ม และวันเวลาล่าสุดที่มีการใช้แฟ้ม (Access), เปลี่ยนแปลงข้อมูลในแฟ้ม (Modify) และการ เปลี่ยนแปลงลักษณะประจำ (การเปลี่ยนแปลงข้อมูลของ inode) ของแฟ้มนั้น (Change) เช่นการเปลี่ยนสิทธิการใช้งาน ข้อมูลเหล่านี้เป็นข้อมูลที่สำคัญในการตรวจสอบการใช้งานแฟ้มของผู้ใช้ในระบบที่มีผู้ใช้หลายคน (Multiuser) โดยเวลาที่แสดงผลเป็นเวลาท้องถิ่นประเทศไทย ซึ่งเร็วกว่าเวลามาตรฐาน UTC 7 ชั่วโมง (+0700) เวลามาตรฐาน UTC (Coordinated Universal Time) เป็นเวลาที่อ้างอิงจากเวลามาตรฐานกรีนิช (GMT - Greenwich Mean Time) ➤ คำสั่ง touch - change file timestamps ------------------------------------- คำสั่ง touch - เปลี่ยนแปลงเวลาประทับของแฟ้ม รูปแบบการใช้งานอย่างง่าย: touch <ชื่อแฟ้ม> คำสั่ง touch ใช้สำหรับเปลี่ยนแปลงเวลาที่มีการใช้แฟ้ม และเวลาที่มีแก้ไขข้อมูลในแฟ้มให้เป็นเวลาปัจจุบัน หากไมาพบแฟ้มที่กำหนด จะทำการสร้างแฟ้มว่างให้ ด้วยคุณลักษณะนี้เองทำให้ผู้ใช้ส่วนหนึ่งเข้าใจว่า คำสั่ง touch ใช้ในการสร้างแฟ้มว่าง (แฟ้มที่ไม่มีข้อมูลใด) ตัวอย่างการเปลี่ยนเวลาที่มีการใช้งานแฟ้ม,เวลาที่มีการเปลี่ยนแปลงข้อมูลในแฟ้ม แลเวลาที่มีการแก้ไขลักษณะเฉพาะของแฟ้ม pangram.txt เป็นเวลาปัจจุบัน $ date; touch pangram.txt # ใช้ ; คั่นระหว่างคำสั่งเพื่อให้ทำงานต่อเนื่องกัน Thu Feb 1 15:57:52 +07 2018 $ stat pangram.txt File: pangram.txt Size: 45 Blocks: 8 IO Block: 1048576 regular file Device: 1ah/26d Inode: 90512802 Links: 1 Access: (0600/-rw-------) Uid: ( 1005/ jira) Gid: ( 50/ staff) Access: 2018-02-01 15:57:52.606939516 +0700 Modify: 2018-02-01 15:57:52.606939516 +0700 Change: 2018-02-01 15:57:52.606939516 +0700 Birth: - ❓คำถาม 1. เวลาประทับ (timestamp) ของแฟ้มมีการเปลี่ยนแปลงหรือไม่? อย่างไร? 2. จงออกแบบการทดลองเพื่อให้ทดสอบว่า การอ่านแฟ้ม การแก้ไขข้อมูลในแฟ้ม และการเปลี่ยนชื่อแฟ้ม มีผลต่อเวลา Access, Modify และ change อย่างไร? 3. จงอธิบายวิธีการที่ใช้ทดสอบ เพื่อแสดงว่า "วันเวลา" ของแฟ้มที่ปรากฏเมื่อใช้คำสั่ง ls -l เป็นเวลา Access, Modify, หรือ Change การเปลี่ยนแปลงวันเวลาของแฟ้ม ใช้ประโยชน์ในการสำรองข้อมูล (backup) โดยเฉพาะระบบที่กำหนดให้มีการสำรองข้อมูลเฉพาะแฟ้ม ที่มีการเปลี่ยนแปลงไปจากที่มีการสำรองครั้งสุดท้าย แฟ้มที่ไม่เปลี่ยนแปลงจะไม่ได้รับการสำรอง หากต้องการสำรองแฟ้มเหล่านี้ทำได้โดย การกำหนดวันเวลาใหม่ โดยใช้คำสั่ง touch การใช้งานอีกกรณีหนึ่งคือการเปลี่ยนวันเวลาของแฟ้มต้นฉบับภาษา C เพื่อให้โปรแกรม make ทำการ compile แฟ้มที่ไม่มีการเปลี่ยนแปลงด้วย ปกิณกะ -------- ข้อความในแฟ้ม pangram.txt เป็นประโยคที่มีการใช้อักษรทุกตัวในภาษาอังกฤษครบทุกตัว จะใช้ครั้งเดียวหรือหลายครั้งก็ได้ เรียกว่า pangram ของภาษาอังกฤษ ใช้สำหรับทดสอบการทำงานของแป้นพิมพ์ว่าพิมพ์ตัวอักษรได้ครบทุกตัวหรือไม่, pangram สำหรับภาษาไทย เรียกว่า สำนวนมาตรฐาน ซึงต้องมีพยัญชนะ สระ วรรณยุกต์ และการันต์ ครบถ้วน สมาคมคอมพิวเตอร์แห่งประเทศไทย ได้จัดประกวดเพื่อหาสำนวนมาตรฐานภาษาไทย เมื่อ ปี พ.ศ.2530 ได้สำนวนที่ชนะเลิศเป็นของนิสิตชั้นปีที่ 2 คณะวิศวกรรมศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย เป็นบทกลอนแปด ดังนี้ โดยแต่งเป็นกลอนแปด ดังนี้ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋า น่าฟังเอยฯ ปฏิบัติการตอนที่ ๓ Hard Links และ Symbolic Links -------------------------------------------- การสร้าง Hard Link ----------------- ระบบปฏิบัติการ Unix อนุญาตให้แฟ้มหนึ่งมีชื่อได้หลายชื่อและสามารถอยู่ในไดเรกทอรีที่แตกต่างกันในระบบแฟ้มเดียวกัน แฟ้มซึ่งมีหลาย ชื่อแต่มีข้อมูลเดียวกันเรียกว่า Hard link ขอให้ทำความเข้าใจ โดยการทดลองโดยการป้อนคำสั่งที่กำหนดให้ และตอบคำถามเป็นลำดับไป ➤ คำสั่ง ln - make links between files (สร้าง link ระหว่างแฟ้ม) ✦ รูปแบบการใช้งานแบบที่ ๑ : ln <ชื่อแฟ้ม> <ชื่อ link> คำอธิบาย : คำสั่ง ln ใช้ในการสร้าง hard link ไปยังแฟ้มที่กำหนดซึ่งต้องเป็นแฟ้มที่มีอยู่จริง หากไม่มีอยู่จริง จะได้ข่าวสารดังนี้ ln: accessing `ชื่อแฟ้ม': No such file or directory กำหนดไดเรกทอรีปัจจุบันเป็น ~/886326/lab05 $ touch myfile # myfile เป็นแฟ้มว่าง $ ls -l ... ... ... ... ... ❓คำถาม 1. ขณะนี้แฟ้ม myfile มีจำนวน link = ... ... ... 2. แฟ้ม myfile มีขนาด ... ... ... ไบต์ 3. จงกำหนดนิยามของ "แฟ้มว่าง" ... ... ... $ ln myfile hlink # สร้าง hard link ชื่อ hlink ไปยังแฟ้ม myfile $ ls -l ... ... ... ... ... ❓คำถาม 4. ลักษณะประจำของแฟ้ม hlink ซึ่งเป็น hard link และลักษณะประจำของแฟ้ม myfile เหมือนกันหรือไม่? อย่างไร? 5. จำนวน link ของแฟ้ม myfile เปลี่ยนแปลงหรือไม่? อย่างไร? $ ls -il ... ... ... ... ... ❓คำถาม 6. หมายเลข i-node ของแฟ้ม myfile และ hlink เหมือนกันหรือไม่? 7. จงกำหนดนิยามของ hard link ทำการเพิ่มข้อมูลในแฟ้ม myfile 2 บรรทัด โดยใช้คำสั่ง cat ประกอบกับการเปลี่ยนทิศทาง output ไปยังแฟ้ม myfile เมื่อพิมพ์เสร็จให้กดแป้น Ctrl-D (^D) เพื่อสร้างรหัส ascii = 4 ซึ่งเป็นรหัสควบคุมที่มีมีชื่อเป็น EOT (end of transmission) เพื่อแจ้งต่ออุปกรณ์ปลายทางว่า "เสร็จสิ้นการส่งข้อมูล" $ cat > myfile # เพิ่มข้อมูลต่อไปนี้ลงในแฟ้ม myfile Hello world 0123456789 ^D ดำเนินการต่อไปนี้ $ cat myfile ... ... ... ... ... $ cat hlink ... ... ... ... ... ❓คำถาม 8. ผลลัพธ์ที่ได้จากแฟ้มทั้งสองเหมือนกันหรือไม่? อย่างไร? 9. นิยามที่กำหนดไว้ในข้อ 7 ยังคงถูกต้องสมบูรณ์หรือไม่? หากยังไม่สมบูรณ์จะปรับปรุงอย่างไร? 10. ทดลองเพิ่มข้อมูลในแฟ้ม hlink อีก 1 - 2 บรรทัด และทดสอบให้แน่ใจว่าข้อมูลในแฟ้ม myfile เป็นข้อมูลเดียวกัน การสร้าง Hard link ไปยังแฟ้ม สามารถทำได้เฉพาะในระบบแฟ้ม (filesystem) เดียวกัน ไม่สามารถดำเนินการข้ามระบบแฟ้มได้ และผู้ใช้ ธรรมดาสามารถสร้าง Hard link ไปยังแฟ้มได้เพียงอย่างเดียว การสร้าง Hard link ไปยังไดเรกทอรีเป็นสิทธิเฉพาะของ superuser เท่านั้น พิจารณาข้อความต่อไปนี้ ---------------- "เมื่อทำการสร้าง Hard link เสร็จแล้ว แฟ้มเดิม และ link ที่เกิดขึ้นมีฐานะเท่ากันคือเป็น link ไปยังข้อมูลในแฟ้ม ไม่มีชื่อใดสำคัญกว่า อีกชื่อหนึ่ง ดังนั้นการลบแฟ้มโดยใช้คำสั่ง rm จึงเป็นเพียงการกำจัด link เท่านั้น ตราบเท่าที่ยังมี link อันใดอันหนึ่งเหลืออยู่ ผู้ใช้ยังสามารถ เข้าถึงแฟ้มนั้นได้ผ่าน "ชื่อ" ที่เหลืออยู่ การลบแฟ้มโดยสมบูรณ์จะเกิดขึ้นเฉพาะเมื่อมีการลบ link ที่มีอยู่ออกจนหมดเท่านั้น" ❓คำถาม 11. จงออกแบบการทดลอง เพื่อยืนยันว่าข้อความดังกล่าวนี้เป็นจริง Symbolic link หรือ Soft Link ------------------------- เนื่องจาก hard link มีข้อจำกัด ระบบปฏิบัติการจึงกำหนด symbolic link ซึ่งทำงานได้ใกล้เคึยงกับ hard link แต่สามารถเชื่อมโยงแฟ้ม ข้ามระบบแฟ้มได้ นอกจากนี้แล้วยังสามารถสร้าง symbolic link ไว้ล่วงหน้าได้ซึ่งอำนวยความสะดวกในการเขียนโปรแกรม และเช่นเดียวกับ Hard link เราจะทำความเข้าใจ โดยการทดลองโดยการป้อนคำสั่งที่กำหนดให้ และตอบคำถามเป็นลำดับไป การสร้าง Symbolic link ทำโดยใช้คำสั่ง ln เช่นเดียวกัน เพียงแต่ต้องเพิ่ม option -s ตามรูปแบบการใช้งานดังนี้ ✦ รูปแบบการใช้งานแบบที่ ๒ : ln -s <ชื่อแฟ้ม> <ชื่อ link> คำสั่ง ln -s ใช้ในการสร้าง symbolic link หรือ soft link ไปยังแฟ้มที่กำหนด <ชื่อแฟ้ม> คือชื่อแฟ้มที่ต้องการสร้างการเชื่อมโยงซึ่งจะมีอยู่หรือไม่ก็ได้ หากไม่มีอยู่สามารถสร้างขึ้นภายหลังได้ แต่จะสามารถดำเนินการกับแฟ้มนั้นผ่าน symbolic link ได้ ก็ต่อเมื่อมีแฟ้มจริงแล้วเท่านั้น $ ln -s myfile slink # สร้าง symbolic link ชื่อ slink ไปยังแฟ้ม myfile, สังเกตการใช้ option -s $ ls -l ... ... ... ... ... ❓คำถาม 12. คุณลักษณะของแฟ้ม slink ซึ่งเป็น symbolic link และคุณลักษณะของแฟ้ม myfile เหมือนกันหรือแตกต่างกันอย่างไร? เพราะเหตุใด? 13. จำนวน link ของแฟ้ม myfile เปลี่ยนแปลงหรือไม่? อย่างไร? $ ls -il ... ... ... ... ... ❓คำถาม 14. หมายเลข i-node ของแฟ้ม myfile และ slink เหมือนกันหรือไม่? 15. hard link และ symbolic link เแตกต่างกันอย่างไร? ทดลองเพิ่มข้อมูลลงใน slink ดังนี้ $ echo ABCDEFGHIJKLMNOPQRSTUVWXYZ >> slink $ cat myfile ... ... ... ... ... $ cat hlink ... ... ... ... ... $ cat slink ... ... ... ... ... ❓คำถาม 16. เมื่อทดลองจนถึงจุดนี้ ความแตกต่างที่กำหนดไว้ในข้อ 15 ยังคงถูกต้องสมบูรณ์หรือไม่? หากยังไม่สมบูรณ์จะปรับปรุงอย่างไร? การสร้าง Symbolic link ไปยังแฟ้ม สามารถดำเนินการข้ามระบบแฟ้มได้ และสามารถสร้าง symbolic link ไปยังไดเรกทอรีได้ อย่างไรก็ดี symbolic link และแฟ้มที่ link นั้นเชื่อมโยงไปมีความแตกต่างกัน การลบ symbolic link ไม่มีผลใดต่อแฟ้มจริง แต่การลบแฟ้มจริง จะทำให้ symbolic link มีสถานะลอย ไม่สามารถเชื่อมโยงไปยังแฟ้มใดได้เลย การสร้าง symbolic link เชื่อมโยงไปยังไดเรกทอรี ขอทิ้งไว้ให้เป็นแบบฝึกหัดของผู้เรียนที่จะออกแบบ ทดลอง และหาข้อสรุปด้วยตน เอง ประโยชน์และการประยุกต์ใช้งาน hard link และ symbolic link จะกล่าวถึงในการบรรยายครั้งต่อไป