UNIX


        UNIX ปัญหาที่ไม่เป็นปัญหา ผู้ใช้ระบบ Unix ที่เป็นมือใหม่ มักจะพบปัญหาซึ่งที่จริงแล้วอาจจะเป็นปัญหาเล็กๆ แต่ด้วยความไม่มีประสบการณ์ ทำให้จับต้นชนปลายไม่ถูก ว่าปัญหานั้นเกิดจากอะไร ตัวอย่างเช่น เมื่อระบบแสดงข้อความออกมาว่า

" File not found. หรือ Permission denied."

ดูจากข้อความก็ไม่ได้บอกอะไรมาก แต่ที่แน่ๆ ก็คือ จะต้องมีเหตุที่ทำให้ระบบแสดงข้อความเหล่านั้นออกมา ส่วนใหญ่ถ้าคิดทบทวนให้ดีแล้ว ก็สามารถ จะรู้ว่าปัญหานั้นเกิดจากอะไร แต่ก็มีบางครั้งที่ต้องออกแรงบ้างจึงจะรู้สาเหตุที่แท้จริง เมื่อพบข้อความที่แจ้งข้อผิดพลาด (error message) ให้หยุดตั้งสติสักครู่แล้วพิจารณาดูว่าในขณะที่ปัญหาเกิดขึ้น เรากำลังทำอะไร และทำไป ได้ถึงไหนแล้ว และส่วนใหญ่ปัญหาก็จะเกิดจากคำสั่งสุดท้ายที่ป้อนเข้าไปนั่นเอง

         ปัญหาส่วนใหญ่ก็คือ การพิมพ์คำสั่ง หรือชื่อแฟ้มไม่ถูกต้อง ดังนั้นสิ่งแรกที่ต้องกระทำก็คือตรวจสอบคำสั่งสุดท้ายว่ามีการสะกดคำผิด หรือเขียนคำสั่งไม่ถูกไวยกรณ์หรือไม่ ปัญหาอีกอย่างหนึ่งที่เกิดขึ้นบ่อยๆ แม้แต่กับผู้ที่มีประสบการณ์แล้ว นั่นคือ การอยู่ในตำแหน่ง directory ที่ไม่ถูกต้อง ให้ตรวจสอบตำแหน่ง ที่เราอยู่ในขณะนั้น โดยใช้คำสั่ง pwd (print working directory) ในบางครั้งปัญหาจะเกิดจากการเข้าไปใช้ account ของคนอื่นแล้วลืมไป พยายามที่จะใช้แฟ้มของตัวเอง ซึ่งก็แน่นอนว่า ระบบปฏิเสธการ กระทำเช่นนั้น ให้ตรวจสอบว่า เรากำลังทำงานอยู่ในชื่อของใคร โดยใช้คำสั่ง whoamiเมื่อทำตามขั้นตอนดังกล่าวแล้วยังไม่พบสาเหตุ จำเป็นต้องออกแรงค้นหา เราก็ต้องจดบันทึกคำสั่งหรืองานที่กำลังทำเมื่อเกิดปัญหา จดข้อความแจ้งความผิดให้ครบถ้วน เพราะข้อมูลเหล่านี้จะมีประโยชน์มากไม่ว่าจะเป็นการค้นหาในคู่มือการใช้งาน หรือ นำไปสอบถามผู้รู้

ความผิดร้ายแรง

ปัญหาที่มักพบในมือใหม่ส่วนใหญ่ ก็คือ ความกลัวว่าจะทำผิดพลาดร้ายแรง จนทำให้แฟ้มข้อมูลสำคัญหายไป หรือระบบไม่สามารถทำงานต่อไปได้ ซึ่งเป็นธรรมดาที่คนเราต้องกลัวไว้ก่อน เพราะไม่รู้ส่าสิ่งที่จะทำมีความเสี่งแค่ไหน ดังนั้นวิธีที่จะลดความกลัวเหล่านี้ได้ ก็คือ เรียนรู้เกี่ยวกับความเสี่ยง ที่จะเกิดได้จริง และหาทางที่จะลดความเสี่ยงเหล่านั้นให้เหลือน้อยลงที่สุด ซึ่งที่จริงแล้ว มือใหม่ส่วนใหญ่ก็ไม่มีความรู้มากพอที่จะทำให้ระบบเสีย หายร้ายแรงได้

ข้อมูลถูกทำลาย

ปัญหาที่ร้ายแรงที่สุดสำหรับมือใหม่ก็คือ การลบแฟ้มข้อมูลหรือข้อมูลบางส่วนไปโดยไม่ได้ตั้งใจ และในระบบ UNIX ข้อมูลที่ไปแล้วจะไปลับ ไม่มีทางนำกลับคืนมาได้เหมือนระบบ MSDOS ดังนั้น ผู้ดูแลระบบจึงต้องทำการสำรองข้อมูลที่มีการเปลี่ยนแปลงไว้ใน backup tapes อย่างสม่ำเสมอ แต่ถึงแม้ว่าจะเรียกข้อมูลล่าสุดที่เก็บสำรองไว้มาใช้ได้ แต่การสูญเสียข้อมูงใหม่ที่ยังไม่ทันได้สำรองข้อมูลไว้ ก็ไม่ใช่เรื่องน่ายินดีนัก

วิธีที่จะบรรเทาปัญหาแฟ้มข้อมูลถูกลบหรือเขียนทับโดยไม่ได้ตั้งใจก็คือ

การคัดลอกแฟ้มข้อมูลนั้นไว้ทุกครั้งที่มีการแก้ไขเปลี่ยนแปลงมากๆ เมื่อแฟ้มต้นฉบับเสียหายไป การเริ่มทำแฟ้มที่คัดลอกไว้ก็คงจะง่ายว่าการเริ่มทำใหม่ทั้งหมด สำหรับการป้องกันเบื่องต้นนั้นสามารถทำได้โดยเพิ่มคำสั่ง ในแฟ้ม .cshrc ใน home
        directory ของเราดังนี้
        set noclobber
        alias cp         ' cp -i '
        alias cp         ' rm -i '
        alias cp         ' mv -i '
ในกรณีที่มีการใช้สัญลักษณ์   >   เปลี่ยนอุปกรณ์แสดงผล (redirect output) คำสั่ง set noclobber จะช่วยป้องกันไม่ให้เขียนข้อมูลทับแฟ้มที่มีอยู่แล้ว ส่วนคำสั่ง alias ก็จะเปลี่ยนคำสั่ง cp (copy), rm (remove) และ mv (move) ให้มี option สำหรับการทำงานเป็น   -i   นั่นคือ ผู้ออกคำสั่งต้อง ยืนยันทุกคั้งที่จะมีการลบหรือการเขียนข้อมูลทับแฟ้มข้อมูลที่มีอยู่แล้ว
คำสั่ง อธิบาย
ls - ใช้สั่งแสดงไฟล์ (เหมือนกับ dir ของ Dos) มีรูปแบบคำสั่งคือ ls (พารามิเตอร์) (เป้าหมาย) ซึ่งมีพารามิเตอร์ดังนี้
ls -a - แสดงไฟล์ทั้งหมด (รวมถึงไฟล์ซ่อน) ใน Directory ของ root
ls -l - แสดงไฟล์เป็นแถวเดียว
ls -t - แสดงไฟล์ตามเวลาที่มีการแก้ไข
clear เป็นการล้างหน้าจอ
cp -ใช้ทำสำเนาข้อมูล(หมือนกับ copy ใน Dos) มีรูปแบบคำสั่งดังนี้
cp (ไฟล์ต้นฉบับ) (ไฟล์สำเนา) เช่น
cp sniffer.c source.c ให้ทำสำเนาไฟล์ sniffer.c ไปเป็น source.c
cat - ใช้ในการแสดงข้อมูลในไฟล์นั้นๆ ออกหน้าจอ (เหมือนคำสั่ง type ใน Dos) มีรูปแบบคำสั่งดังนี้
cat (ไฟล์) เช่น
cat source.c ให้แสดงข้อมูลในไฟล์ source.c ยังหน้าจอ
date -แสดงวันที่ และเวลาของระบบ
du -ใช้ดูเนื้อที่ที่ถูกใช้ไป
find - ใช้ค้นหาไฟล์ตามเงื่อนไขที่ต้องการ (เหมือนคำสั่ง find ใน Dos) มีรูปแบบคำสั่งดังนี้
(ไดเร็กทอรี่) (เงื่อนไข) เช่น  find /root -name "index.html" ให้ค้นหาไฟล์ชื่อ index.html ในไดเร็กทอรี่ root ซึ่งมีพารามิเตอร์ดังนี้
finger -คล้าย who แต่มีรายละเอียดมากกว่า
find -name - name ค้นหาให้ตรงกับชื่อที่กำหนด
find -perm - perm ค้นหาตามสิทธิของไฟล์
find -size -size ค้นหาตามขนาดของไฟล์
find -mtime -mtime ค้นหาไฟล์ในระยะช่วงเวลา
id -ใช้แสดง id ของเจ้าของบัญชีและกลุ่มของเจ้าของบัญชี
irc -ใช้เชื่อมต่อกับ irc server สำหรับการสนทนา
   
   
   
   
:wq - ระบบถูกปิด ในกรณีที่ผู้ดูแลระบบจำเป็นต้องปิดการทำงานของระบบ (shutdown) ก็จะส่งข้อความเตือนมายังผู้ที่กำลังใช้ระบบทุกคน ตามปกติ ก่อนที่ระบบจะหยุด การทำงาน มันจะบันทึกแฟ้มที่กำลังแก้ไขด้วยโปรแกรม vi ให้โดยอัตโนมัติ แต่จะเป็นการดีถ้าเราบันทึกข้อมูลเองโดยใช้คำสั่ง (write+quit)
sync ในกรณีที่เรากำลังใช้โปรแกรมอื่นอยู่ แล้วต้องการให้แน่ใจว่า ข้อมูลล่าสุกถูกบันทึกเรียบร้อยแล้วให้ใช้คำสั่ง (synchronize)
Panic : condition - ระบบหยุดการทำงาน กรณีที่ระบบหยุดการทำงานอย่างกระทันหัน (crash) ถ้าเป็นการ login เข้ามาจากเครื่องอื่น (terminal) การติดต่อจะถูกตัดขาดไป ไม่สามารถทำอะไรต่อไปได้ แต่ถ้าเรา ทำงานอยู่บนเครื่องที่เป็นตัวระบบเอง (workstation) ตัว Windows และ mouse จะไม่มีการตอบสนองอย่างที่ควร และ จะมีข้อความปรากฎบนหน้าจอ เช่น Panic : condition คำว่า panic (ตื่นตกใจ) หมายความว่า โปรแกรมควบคุมพบสภาวะการทำงานผิดพลาดที่ไม่เกิดขึ้นบ่อยนัก ซึ่งเราก็ไม่ควรจะตื่นตกใจไปด้วย เพราะสภาวะเช่นนี้มักจะหายไปเมื่อเราให้ระบบเริ่มทำงานใหม่อีกครั้ง แต่ก็ควรจะจัดข้อความไว้ก่อนเพื่อที่จะได้แจ้งให้ผู้ดูแลระบบทราบ
>b - หลังจากข้อความแจ้งความผิดแล้ว ถ้ามี prompt ของโปรแกรมควบคุมการทำงานพื้นฐานของระบบ (monitor) เป็นเครื่องหมาย > ปรากฎบนหน้าจอ เราสามารถป้อนคำสั่ง ให้ระบบเริ่มทำงาน แล้วใช้คำสั่ง >b         (boot)
vi -r - ในการนำข้อมูลที่กำลังแก้ไขด้วย vi อยู่เมื่อระบบหยุดการทำงานกลับคืนมา (recover) ให้ cd (chanange directory) ไปยังตำแหน่งที่อยู่เมื่อระบบหยุดการทำงาน แล้วใช้คำสั่ง vi -r          filename
w: บันทึกข้อมูลด้วยคำสั่ง :w         (write)

โปรเซสของ Unix

โปรเซส คือ โปรแกรมที่ทำงานอยู่หรือฝั่งตัวอยู่ในขณะนั้น โปรเซสจะทำการจับจองหน่วยความจำ เพื่อใช้ในการดำเนินการทำงาน
  • การสร้างโปรเซส
    การสร้างโปรเซสนั้น โปรเซสจะถูกสร้าวงขึ้นด้วยโปรเซสเอง ยกเว้นโปรเซสหมายเลข 0 จะถูกสร้างขึ้นเมื่อเริ่มต้นระบบ โปรเซสที่สร้างขึ้นใหม่จะเรียกว่าโปรเซสลูกและโปรเซสเดิมเราเรีกว่าโปรเซสแม่ โปรเซสแต่ละโปรเซสจะมีเลขที่ประจำตัวที่เราเรียกว่า PID (Parent Process Identification) โปรเซสลูกจะต่างกันกับโปรเซสแม่ตรงหมายเลข PID แต่จะมีหมายเลข PPID (Parrent Parent Process Identification) เหมือนกัน
  • ชนิดของโปรเซส
    - โปรเซสแบบฉากหน้า เป็นโปรเซสที่ใช้กันอยู่ด้วยกันโดยทั่วไป โปรเซสนี้ทำงานเสร็จแล้วก็จะยกเลิกตัวเองออกจากหน่วยความจำ
    - โปรเซสแบบฉากหลัง เป็นโปรเซสที่ทำงานค่อนข้างนาน โปรเซสจะทำงานแบบฉากหลังได้ต้องเติมเครื่องหมาย & หลังคำสั่ง
    - โปรเซสปีศาจ โปรเซสทำงานเมื่อเริ่มต้นระบบและสิ้นสุดลงเมื่อทำการยกเลิกระบบ จะทำงานเมื่อมีการกระตุ้นจาก Input/Output (I/O)
    - โปรเซสผีดิบ เป็นโปรเซสที่ทำงานแล้วไม่ยอมยกเลิกการฝั่งตัวในหน่วยความจำ

    เชลล์ (Shell)

    คือตัว Interpreter ที่ใช้แปลคำสั่งที่เราพิมพ์นั้นส่งให้กับคอมพิวเตอร์ เชลล์นี้เองที่ทำให้เราสามารถสั่งงาน Unix ได้ ด้วยคำสั่งต่าง ๆ มากมาย เชลล์มีหลายตัวด้วยกันซิ่งที่นิยมในปัจจุบันมีดังนี้
            Bourne Shell (อ่านว่า บอร์นเชล) เป็นเชลล์มาตราฐานที่ Unix ทุกรุ่นมีกันอยู่แล้ว ถ้าคุณเป็นผู้เริ่มต้นก็ควรลองใช้ Shell นี้ให้คล่องก่อนแล้วกัน
            C Shell (อ่านว่า ซี เชลล์) มีประสิทธิภาพมากขึ้นและดีกว่า Bourne Shell มีแฟ้มเก็บคำสั่งการทำงาน
            Korn Shell (อ่านว่า คอร์น เชลล์) ได้รวม Bourne Shell กับ C Shell เข้าด้วยกัน แต่ปัญหาก็คือ Korn Shell จะไม่มีใน Unix ทุกระบบ

    เมื่อเข้าระบบไม่ได้ ทำไงล่ะ

             ในกรณีที่เราเข้าไปใช้ระบบไม่ได้ ส่วนใหญ่จะเป็นความผิดปกติของตัวระบบ ซึ่งเราก็ทำอะไรไม่ได้ นอกจากรอให้ผู้ดูแลระบบแก้ไขให้ แต่ถ้าเป็นความ ผิดของตัวเราเอง ก็อาจจะแก้ไขได้ เราลองมาดูว่าสาเหตุที่เข้าระบบไม่ได้มีอะไรบ้างการที่ใครจะเข้ามาใช้ระบบได้ ก็ต้องมี account ที่ผู้ดูแลระบบสร้างให้ ดังนั้น เราเป็นผู้ใช้ใหม่ และไม่เคยเข้ามาใช้ระบบเลย ก็ต้องคิดไว้ก่อนว่าผู้ดูแลระบบยังไม่ได้สร้าง account ให้แต่ถ้าผู้ดูแลระบบยืนยันว่าสร้างให้แล้ว ก็ต้องดูว่าถ้าเป็น account เฉพาะเครื่อง ก็ไปใช้กับเครื่องอื่นไม่ได้แต่ถ้าใช้ระบบ NIS (Network Information System) ซึ่งทุกเครื่องในเครือข่ายใช้ account ร่วม กัน เราสามารถจะ login เขาเครื่องไหนก็ได้
            ขั้นตอนในการเข้าระบบ นอกจากจะใส่ชื่อเจ้าของ account แล้ว ก็ต้องป้อนรหัสผ่าน (password) ด้วย ถ้าลืมรหัสก็เขาระบบไม่ได้ คงต้อง วิ่งไปขอให้ผู้ดูแลระบบเปลี่ยนรหัสผ่านให้ใหม่เมื่อเข้าระบบได้แล้ว เราก็สามารถที่จะเปลี่ยนรหัสผ่านได้เองตามใจชอบ ถ้าจะให้จำได้ง่าย ควรใช้คำที่มี ความหมายพิเศษเฉพาะตัวเรา การใช้ตัวเลขหรือสัญลักษณ์ต่างๆ มักจะทำให้สับสนได้ง่ายพยายามอย่าใช้อักษรพิเศษ เช่น Ctrl-C, Ctrl-S, Esc และ Tab แม้แต่เครื่องหมาย # และ @ ก็ไม่ควรใช้ เพราะเครื่องบางเครื่องจะถือว่าเป็นสัญญาณควบคุม (control signals) ซึ่งทำให้ไม่สามารถป้อนรหัสที่ภูกต้องได้ ในการเปลี่ยนรหัสผ่านนั้น ถ้าเป็นรหัสผ่านของตัวเราเองก็คงไม่มีปัญหาอะไร แต่ถ้าเราใช้คำสั่ง su (shell use) เรียก shell ใหม่ โดยใช้ชื่อของคนอื่น เราไม่สามารถจะแก้รหัสผ่านของคนอื่นนั้นได้ ถ้าต้องการจะแก้จริง ก็ต้องออกไปทำการ login เข้ามาอย่างเป็นทางการ

    กลับสู่หน้ารอบรู้เรื่องคอมพิวเตอร์