ปฏิบัติการครั้งที่ ๑ ตอนที่ ๑ - การปรับแต่งการทำงานของโปรแกรม -------------------------------------------------- Applications และ Utilities ในระบบปฏิบัติการชนิด Multiuser มีแฟ้มโปรแกรมเพียงแฟ้มเดียว เช่น โปรแกรม vi มีแฟ้มโปรแกรมอยู่ที่ /usr/bin/vi เมื่อผู้ใช้แต่ละรายเรียกใช้ ระบบปฏิบัติการจะสร้างโพรเซสจากแฟ้มโปรแกรมเดียวกันสำหรับผู้ใช้แต่ละราย เนื่องจากผู้ใช้แต่ ละคนมีความต้องการต่างกัน เช่น ผู้เขียนโปรแกรมอาจต้องการให้มีการย่อหน้าอัตโนมัติ (autoindent) และต้องการตรวจสอบการครบคู่ ของวงเล็บ เป็นต้น ในขณะที่ผู้ใช้ที่ต้องการพิมพ์บันทึกข้อความหรือรายงานอาจมีความต้องการแบบอื่น เพื่อให้สามารถปรับแต่งการทำงาน ของโปรแกรมตามความต้องการของผู้ใช้ได้ ระบบปฏิบัติการ Unix กำหนดให้ผู้ใช้ระบุความต้องการเป็นข้อความธรรมดาไว้ใน Text file โดยมีรูปแบบของข้อมูลและชื่อแฟ้มเป็นไปตามที่โปรแกรมนั้นๆ กำหนด แฟ้มนี้กำหนดเป็นแฟ้มซ่อน (ชื่อแฟ้มขึ้นต้นด้วยเครื่องหมายจุด) ใน Home directory ของผู้ใช้แต่ละราย ทุกครั้งที่ระบบปฏิบัติการสร้างโพรเซสจากแฟ้มโปรแกรม จะมีอ่านข้อมูลในแฟ้มเพื่อทำการปรับ แต่งให้โพรเซสมีคุณลักษณะเป็นไปตามที่ผู้ใช้กำหนดเสมอ ปฏิบัติการครั้งนี้เป็นการกำหนดแฟ้มสำหรับใช้เป็นแฟ้มกำหนดคุณลักษณะของโปรแกรม /bin/bash ซึ่งเป็นแฟ้มโปรแกรม สำหรับ Bourne Again Shell และโปรแกรม /usr/bin/vi แฟ้มกำหนดคุณลักษณะการทำงานของโปรแกรมเช่นนี้นิยมเรียกว่า Run Control (.*rc) Tips ---- 1. การตรวจสอบว่าแฟ้มโปรแกรมที่สนใจ มีตำแหน่งอยู่ที่ใดในระบบแฟ้ม ทำได้โดยการใช้คำสั่ง which (locate a command) เช่น ต้องการตรวจสอบตำแหน่งของแฟ้มโปรแกรม vi ทำได้ดังนี้ $ which vi /usr/bin/vi 2. แฟ้มซ่อนมีชื่อแฟ้มขึ้นต้นด้วยเครื่องหมายจุด คำสั่ง ls ตามปกติจะไม่แสดงรายชื่อของแฟ้มซ่อน หากต้องการต้องกำหนด ด้วย option -a (All) แฟ้มกำหนดคุณลักษณะของโปรแกรม /bin/bash --------------------------------------------------- แฟ้มกำหนดคุณลักษณะการทำงานของ Bourne Again Shell เรียกว่า Startup files ซึ่งเป็นแฟ้มที่ shell จะทำดำเนินการทุก ครั้งเมื่อเริ่มทำงาน โดยจะเริ่มทำงานตามคำสั่งในแฟ้ม /etc/profile ซึ่งกำหนดไว้เป็น Startup file สำหรับผู้ใช้ทุกคนที่ใช้ Bourne Again Shell หลังจากนั้นจะทำงานตามคำสั่งใน Startup file ที่อยู่ใน Home directiory ของผู้ใช้แต่ละราย โดยมีลำดับการทำงานดังนี้คือ แฟ้ม ~/.bash_profile, ~/.bash_login และ ~/.profile ผู้ใช้แต่ละรายสามารถกำหนดลักษณะการทำงานตามความต้องการได้ ในกรณีที่เป็น คำสั่งที่ซ้ำกับคำสั่งใน /etc/profile คำสั่งในแฟ้มของผู้ใช้จะมีผลเหนือกว่า แฟ้มทั้งสามนี้อาจมีเพียงแฟ้มใดแฟ้มหนึ่ง สองแฟ้ม หรือทั้ง สามแฟ้มก็ได้แล้วแต่ความจำเป็นในการใช้งาน เมือผู้ใช้ Logout หากต้องการให้ shell ดำเนินการบางอย่าง เช่น การลบแฟ้มชั่วคราว สามารถกำหนดรายละเอียดได้ในแฟ้ม ~/.bash_logout ในกรณีที่เป็นคำสั่งที่ซ้ำกับคำสั่งใน /etc/profile ระบบจะยกเลิกคำสั่งที่เคบทำมาแล้วในแฟ้ม /etc/profile และดำเนินการตามคำสั่งใน แฟ้มของผู้ใช้ ตัวอย่างข้อมูลในแฟ้ม ~/.bash_profile ----------------------------------------- $ cat -n .bash_profile # option -n กำหนดให้โปรแกรม cat (concatenation) แสดงหมายเลขบรรทัด 1 PS1='$ ' 2 TERM=vt100 3 PATH=$PATH:~/bin:. 4 ulimit -c unlimited 5 umask 0077 หมายเหตุ ---------- คำสั่งบรรทัดที่ 1, 2 และ 3 เป็นคำสั่งกำหนดค่าตัวแปร ในรูปแบบ name-value pair คือ ตัวแปรระบบ=ค่า ตัวแปรของระบบปฏิบัติการ นิยมใช้อักษรตัวใหญ่เพื่อให้แตกต่างจากคำสั่ง คำสั่งบรรทัดที่ 4 และ 5 เป็นคำสั่งเฉพาะของ Bourne Again Shell ความหมายของข้อมูลในแฟ้ม ------------------------------- หมวดที่ ๑. การกำหนดค่าของตัวแปรระบบ PS1='$ ' # กำหนดให้ Primary Prompt เป็น '$' (Prompt มาตรฐานของ Bourne shell) TERM=vt100 # กำหนดให้การจำลองหน้าจอ มีทำงานเหมือน Terminal รุ่น VT100 # ซึ่งเป็น Terminal ที่ได้รับความนิยมสูงในอดีต โปรแกรมจำลองหน้าจอ เช่น Secure Shell (SSH), Tera Term, Putty เป็นโปรแกรมในกลุ่มที่เรียกว่า Terminal Emulator PATH=$PATH:~/bin:. # กำหนดให้เส้นทางการค้นแฟ้มเป็นไปตามที่ระบบกำหนดไว้ในตัวแปร PATH และกำหนดเพิ่ม # อีก 2 เส้นทาง คือ - directory ~/bin ของผู้ใช้, และ - ไดเรกทอรีปัจจุบัน (current directory) ซึ่งแทนด้วยเครื่องหมายจุด Tips ----- การขอดูค่าของตัวแปรระบบทำได้โดยใช้คำสั่ง echo (display a line of text) ซึ่งใช้แสดงข้อความที่กำหนด เช่น $ echo hello world $ echo PATH hello world PATH ในกรณีที่ต้องการดูค่าของตัวแปรระบบ ต้องใช้เครื่องหมาย $ นำหน้าชื่อตัวแปร เช่น ต้องการดูค่าของตัวแปร PATH $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/staff/jira/bin:. หมวดที่ ๒. คำสั่งของ bash ulimit -c unlimited คำสั่ง ulimit เป็นคำสั่งภายในของ shell ใช้สำหรับกำหนดปริมาณของทรัพยากรที่ shell สามารถใช้ได้ สามารถกำหนดได้หลายแบบ โดยเลือกใช้ option ที่เหมาะสม สำหรับ option -c ใช้กำหนดขนาดของ core file เป็นไม่มีขีดจำกัด (unlimited) คำสั่งนี้เหมาะสำหรับ ผู้เขียนโปรแกรมภาษา C โดยปกติเมื่อโปรแกรมภาษา C เกิดความผิดพลาดระหว่างการทำงานหรือ Runtime error เช่น Pointer ชี้ไปยังหน่วยความจำที่อยู่นอก ขอบเขตที่ได้รับอนุญาตให้ใช้ หรือ Segmentation fault ระบบปฏิบัติการจะทำการคัดลอกหน่วยความจำทั้งหมดที่โพรเซสใช้งานในขณะนั้น เก็บเป็นแฟ้มไว้ เรียกว่า core file แล้วจึงทำลายโพรเซสนั้น ซึ่งจะแสดงข่าวสารหน้าจอเช่น Segmentation fault - core dumped แฟ้ม core เป็น memory image ของหน่วยความจำ เมื่อนำไปใช้งานร่วมกับ Debugger เช่น gdb จะสามารถหาจุดที่ทำให้เกิด Runtime error ได้ในเวลาอันรวดเร็ว คำสั่งนี้หากไม่กำหนดระบบจะไม่สามารถสร้าง core file ขนาดใหญ่ได้ umask 0077 กำหนดตัวพราง (mask) เพื่อใช้กำหนด file mode creation mask เมื่อมีการสร้างแฟ้มและไดเรกทอรีใหม่ โดยกำหนดเป็นเลขฐาน แปดจำนวน 4 หลัก ซึ่งสมนัยกับเลขฐานสอง 12 บิต แบิตของ mask ที่เป็น 0 หมายถึง การกำหนดให้มีสิทธินั้น (Enable) บิตที่เป็น 1 หมายถึงไม่มีสิทธินั้น (Diable) ในตัวอย่างนี้มีค่าเป็น Owner Other | | 0077 = 000 000 111 111 | Group ดังนั้นทุกครั้งที่มีการสร้างแฟ้มใหม่ ผู้ใช้จะมีสิทธิ rwx ส่วน group และ other จะไม่สิทธิดำเนินการใดกับแฟ้มเลย คำถาม ------- หากกำหนด umask เป็น 0022 สิทธิของ group และ other จะเปลี่ยนแปลงไปอย่างไร? Tips ---- การขอดูค่าปัจจุบันของ umask เป็นเลขฐานแปด $ umask 0022 # = 000 000 010 010 (ฐานสอง) หากต้องการดูเป็นสัญลักษณ์ (Symbol) กำหนดด้วย option -S เช่น $ umask -S u=rwx, g=rx, o=rx หลังจากที่มีการสร้างแฟ้มหรือไดเรกทอรีแล้ว เจ้าของแฟ้มสามารถเปลี่ยนสิทธิในการใช้แฟ้ม (file permission) สามารถทำได้โดยใช้ คำสั่ง chmod (change file mode bits) นอกจากนี้ยังสามารถเปลี่ยนเจ้าของได้โดยใช้คำสั่ง chown (change file owner and group) คำสั่ง umask หากผู้ใช้ไม่กำหนด สิทธิโดยปริยายในการสร้างแฟ้มและไดเรกทอรีจะเป็นไปตามที่กำหนดไว้เรียกว่า default umask ซึ่ง ระบบกำหนดไว้ในแฟ้ม /etc/login.defs ----------------------------------------------------------------------------------------------- * ปฏิบัติการ - จงสร้างแฟ้ม ~/.bash_profile ตามตัวอย่าง โดยสร้างไว้ที่ Home direcoty * ----------------------------------------------------------------------------------------------- ตอนที่ ๒ โปรแกรม vi และแฟ้ม ~/.exrc ------------------------------------------ อ่านและทำความเข้าใจการใช้งานโปรแกรม vi จากแฟ้ม vi.pdf ในไดเรกทอรี Supplement ตัวอย่างข้อมูลในแฟ้ม ~/.exrc -------------------------------- $ cat .exrc set shiftwidth=5 # ย่อหน้า 5 ตัวอักษร เมื่อกด Ctrl-D, Ctrl-T set ai # Automatic indentation set showmatch # แสดงการ "ครบคู่" ของวงเล็บแบบต่างๆ set showmode # แสดง "ภาวะ" การทำงาน set wrapmargin=5 # เมื่อพิมพ์ถึงตำแหน่งที่ 5 นับจากขอบขวาให้ขึ้นบรรทัดใหม่ set wrap # ขึ้นบรรทัดใหม่ เมื่อถึงขอบขวา syntax off # ปิดการเน้น keyword ด้วยสี หรือ underline หมายเหตุ แฟ้ม .exrc เป็น Run control สำหรับโปรแกรม ex ซึ่งเป็น predeceesor ของ vi --------------------------------------------------------------------------------- * ปฏิบัติการ - สร้างแฟ้ม .exrc ตามตัวอย่าง โดยสร้างไว้ที่ Home directory * --------------------------------------------------------------------------------- ตอนที่ ๓ - Utilities ที่ควรรู้จัก ------------------------------- Online manual page ระบบปฏิบัติการ Unix มาพร้อมด้วย Online manual page สำหรับ Utilities และ System calls ของ Unix, Standard Library Functions ของภาษา C, และรายละเอียดของแฟ้มที่สำคัญในระบบเป็นต้น ตัวอย่าง Online manual page ของคำสั่ง ls จากคำสั่ง $ man ls # ls เป็นคำสั่งในหมวดที่ 1 เรียกว่า User Command LS(1) User Commands LS(1) # ชื่อและคำอธิบายอย่างย่อ NAME ls - list directory contents # สาระสำคัญ - รูปแบบการใช้งาน SYNOPSIS ls [OPTION]... [FILE]... # คำอธิบายการทำงานโดยละเอียด DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... # ผู้เขียน การรายงานปัญหา และลิขสิทธ์ AUTHOR Written by Richard M. Stallman and David MacKenzie. REPORTING BUGS Report ls bugs to bug-coreutils@gnu.org ... ... ... ... ... ... ... ... COPYRIGHT Copyright ?? 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later ... ... ... ... ... ... ... ... # คำสั่งหรือเอกสารอื่นที่เกี่ยวข้อง SEE ALSO The full documentation for ls is maintained as a Texinfo manual. If the info and ls programs are prop?[m erly installed at your site, the command info coreutils 'ls invocation' should give you access to the complete manual. GNU coreutils 8.12.197-032bb September 2011 LS(1) ---------------------------------------------------------------------------------------------------------------- * ปฏิบัติการ - ใช้คำสั่ง man man (ขอดู Online manual page ของคำสั่ง man) และตอบคำถามต่อไปนี้ * * คำถาม - Online manual page มีกี่ section แต่ละ section มีเนื้อหาใด? * * คำแนะนำ - ผู้เรียนสามารถ copy ศัพท์ภาษาอังกฤษที่สนใจไป paste ใน Web dictionary เพื่อหาคำแปล * * ได้ เช่นที่ http://dict.longdo.com * ----------------------------------------------------------------------------------------------------------------- คำสั่ง apropos ---------------- apropos - search the manual page names and descriptions ใช้สำหรับค้น "คำ" (keyword) จากชื่อและคำอธิบายอย่างย่อของ online manual page เช่น ต้องการค้นคำว่า directory ----------------------------------------------------------------------------------------------------------- * ปฏิบัติการ - ใช้คำสั่ง apropos directory (ค้นหาคำสั่งที่มีคำว่า directory อยู่ในคำอธิบายอย่างย่อ) * * คำถาม - ผลลัพธ์ที่ได้เป็นจากคำสั่งเป็นอย่างไร? * ----------------------------------------------------------------------------------------------------------- ในกรณีที่มีการกำหนด keyword สำหรับคำสั่ง apropos ตั้งแต่สองคำขึ้นไป apropos จะค้นคำสั่งที่มี keyword ตัวใดตัวหนึ่งหรือทั้งสองตัว (หรือ keyword1 OR keyword2) ในกรณีที่ต้องการให้คำสั่งนั้นมี keyword ที่กำหนดทุกตัว ต้องกำหนดให้ keyword นั้นมีการ AND --------------------------------------------------------------------------------------------------------------------------------------- * ปฏิบัติการ - ใช้คำสั่ง apropos directory (ค้นคำสั่งที่มีคำว่า directory อยู่ในคำอธิบายอย่างย่อ และศึกษาว่าหากต้องการ AND * * keywords ตั้งแต่ 2 คำขึ้นไป เช่น working directory หรือ print working directory จะต้องใช้ option ใด? มีรูปแบบการใช้งาน * * อย่างไร? และจะทดสอบได้อย่างไรว่าข้อสรุปของตนถูกต้อง? * --------------------------------------------------------------------------------------------------------------------------------------- คำสั่ง chmod -------------- chmod - change file mode bits (เปลี่ยนสิทธิในการใช้งานโดยเปลี่ยนบิตของ file permission mode) file permission mode มี 12 บิต แบ่งเป็น 4 ชุด ชุดละสามบิตคือ rwx ซึ่งสมนัยกับเลขฐานแปด 1 หลัก เริ่มจากด้านซ้ายมือ หรือหลักที่มีนัยสำคัญสูงสุด - ชุดแรก เป็น Special File Permission ได้แก่ setuid, setgid, และ sticky bits ซึ่งจะได้กล่าวถึงในโอกาสต่อไป - ชุดที่สองเป็นสิทธิในการใช้งานของเจ้าของ (owner) - ชุดที่สามเป็นสิทธิในการใช้งานของผู้ใช้ที่อยู่ในกลุ่มเดียวกับเจ้าของ (group) - ชุดที่สี่เป็นสิทธิในการใช้งานของผู้ใช้ที่อื่นในระบบ (other) ---------------------------------------------------------------------------------------------------------------------------------------- * ปฏิบัติการ - ใช้คำสั่ง man chmod และศึกษาว่าหากต้องการเปลี่ยนสิทธิในการใช้งานแฟ้มโดยใช้เลขฐานแปดจะทำได้อย่างไร? * * 1. หากต้องการเปลี่ยนสิทธิในการใช้งานของแฟ้ม xx.c เป็น -r-xr-xrw- จะเขียนคำสั่งอย่างไร? * * 2. สิทธิในการใช้งานแฟ้ม -r-xr-xrw- ที่กำหนดในโจทย์ข้อ 1. เป็นสิทธิการใช้งานที่สมเหตุสมผลหรือไม่? เพราะเหตุใด? * ----------------------------------------------------------------------------------------------------------------------------------------