Transcript Linux Shell
LINUX SHELL 357362 – Special Problems in Electronics Choopan Rattanapoka Introduction การใช้งาน Linux ด้วย command line สามารถเข้าถึงได้ 3 วิธี Virtual Terminal Graphical Terminal Remote Terminal (Telnet, SSH) คาสัง่ ทุกคาสัง่ ใน command line จะทางานผ่านสิ่งแวดล้อมที่เรียกว่า “Shell” ใน Linux มี shell ให้เลือกใช้งานหลายชนิ ด แต่ชนิ ดที่ได้รบั ความนิ ยม และใช้กนั มากก็คือ BASH (Bourne-again shell) Linux Shell เมื่อเปิ ด terminal ขึ้ นมาจะมี command prompt ซึ่งเป็ น Linux shell สิทธิของผูใ้ ช้ Prompt จะมีรายละเอียดดังนี้ [choopan@localhost ~]$ $ = ผูใ้ ช้ทวั ่ ไป # = ผูด้ แู ลระบบ ชื่อบัญชีผใู้ ช้งาน ชื่อเครื่องที่ใช้งาน Path ที่กาลังทางาน คาสัง่ whoami ใน Linux มีคาสัง่ ที่ใช้ตรวจสอบว่า ขณะนี้ ผูใ้ ช้เป็ นใคร คาสัง่ นั้นคือ whoami คาสัง่ สาหรับเปลี่ยนผูใ้ ช้งาน ปกติจะปลอดภัยในการ Login เข้า Linux เป็ นผูใ้ ช้ธรรมดามากกว่าเป็ น root เนื่ องจาก บางทีอาจไปลบแฟ้ มข้อมูลระบบโดยไม่ได้ต้งั ใจได้ แต่ผใู้ ช้ก็สามารถเข้าทางานเป็ น root ในภายหลังได้หลังจากที่ Login เข้า มาเป็ นผูใ้ ช้ธรรมดา ด้วยคาสัง่ “su” กด Ctrl+D หรือพิมพ์ exit แล้ว Enter เพื่อออกจาก shell ของ root คาสัง่ จัดการ Directory คาสัง่ ที่ใช้จดั การแฟ้ มข้อมูล และ Directory ที่สาคัญมีดงั นี้ pwd cd mkdir mv ls rm rmdir แสดงตาแหน่ ง directory ปั จจุบนั เปลี่ยนตาแหน่ งของ directory ที่ทางาน สร้าง Directory ขึ้ นใหม่ เปลี่ยนชื่อ หรือ เปลี่ยนตาแหน่ งแฟ้ มข้อมูลหรือ directory ดูรายชื่อแฟ้ มข้อมูล และ directory ลบแฟ้ มข้อมูล ลบ directory ทดลองใช้คาสัง่ จัดการ Directory สร้าง directory ชื่อ Hello ที่อยูใ่ นภายใน directory ที่อยู่ Test ที่อยูภ่ ายใต้ home directory (รอตรวจ) ลบ directory ที่เพิ่งสร้างออก Linux Filesystem (1) แฟ้ มข้อมูลในคอมพิวเตอร์ ปกติจะใช้เก็บข้อมูลต่างๆ รวมถึงโปรแกรม ฐานข้อมูล ภาพ หนัง เพลง ซึ่งแฟ้ มข้อมูลของระบบใน Linux จะถูกรวมกันอยูใ่ น directory (หรือ folder) ต่างๆ Directory ที่สาคัญๆ ของ Linux มีดงั นี้ root home bin sbin lib usr usr/bin usr/sbin usr/lib เป็ น home directory ของผูด้ ูแลระบบ เป็ น directory ที่เก็บ home ของผูใ้ ช้ เป็ นที่เก็บคาสัง่ พื้ นฐานของ Linux เป็ นที่เก็บคาสัง่ เฉพาะของผูด้ ูแลระบบ ที่เก็บ library สาคัญของระบบ เก็บโปรแกรมที่ติดตั้ง คาสัง่ ที่เรียกใช้งานโปรแกรม คาสัง่ เฉพาะของผูด้ แู ลระบบ library ที่จาเป็ นของโปรแกรม Linux Filesystem (2) var boot etc lost+found media misc srv mnt opt proc dev selinux tmp เก็บข้อมูลต่างๆเช่น log, database, web, mail เก็บแฟ้ มข้อมูลสาคัญในการ boot ระบบ เก็บแฟ้ มข้อมูล config ต่างๆ ของโปรแกรมระบบ เก็บแฟ้ มข้อมูลที่กคู ้ ืนหลังจากระบบล้มเหลว ตาแหน่ งการเชื่อมต่อของอุปกรณ์แบบ dynamic อัตโนมัติ(USB key, CD-rom) ตาแหน่ งทัว่ ไปตอนเชื่อมต่อกับ NFS ที่เก็บข้อมูลของ web, ftp, cvs ตาแหน่ งเชื่อมต่ออุปกรณ์ (CD-ROM, remote file) ที่ติดตั้งโปรแกรม 3rd-party เก็บแฟ้ มข้อมูลเกี่ยวกับข้อมูลของระบบที่กาลังทางาน ตาแหน่ งเชื่อมต่อกับ hardware (HDD, network card) เก็บการปรับแต่งค่าของ SELinux เก็บแฟ้ มข้อมูลชัว่ คราว สิทธิการเข้าใช้งานแฟ้ มข้อมูล เมื่อใช้คาสัง่ “ls -l” เพื่อแสดง list รายละเอียดของแฟ้ มข้อมูลหรือ Directory สิ่งที่จะเห็นในคอลัมแรก คือสิทธิการเข้าใช้งานของแฟ้ มข้อมูล ใน Linux จะมีสิทธิดว้ ยกัน 3 ระดับ เจ้าของแฟ้ มข้อมูล กลุ่มของเจ้าของแฟ้ มข้อมูล ทุกคน รายละเอียดแฟ้ มข้อมูล drwxrwxrwx all group user directory ชื่อแฟ้ มข้อมูล วันเวลาที่สร้างแฟ้ มข้อมูล ขนาดของแฟ้ มข้อมูล กลุ่มของแฟ้ มข้อมูล rwx r = read w = write x = execute เจ้าของแฟ้ มข้อมูล จานวน link หรือแฟ้ มข้อมูลที่อยูใ่ น directory ชนิ ดของแฟ้มข้อมูล (File types) - แฟ้ มข้อมูลปกติ d แฟ้ มข้อมูลประเภท directory l แฟ้ มข้อมูลประเภท soft link b block device (HDD, CD-ROM) c character device (modem) s socket เชื่อมต่อแบบ network p แฟ้ มข้อมูลประเภท pipe การปรับสิทธิการเข้าถึงของแฟ้มข้อมูล (1) คาสัง่ “chmod” (change mode) ใช้สาหรับแก้ไขสิทธิการเข้าถึงแฟ้ มข้อมูล สิทธิของแฟ้ มข้อมูลมี 3 ชั้นคือ การเข้าถึงแฟ้ มข้อมูลมี 3 แบบคือ ผูใ้ ช้ (user) u กลุ่ม (group) g ทุกคน (all) a อ่าน (read) r เขียน (write) w เรียกใช้งาน (execute) x ตัวอย่าง ต้องการเขียนแฟ้ มข้อมูลชื่อ myfile.txt ให้คนในกลุ่มเขียนได้ chmod g+w myfile.txt การปรับสิทธิการเข้าถึงของแฟ้มข้อมูล (2) การปรับสิทธิการเข้าถึงแฟ้ มข้อมูลบางครั้งทาสะดวกกว่าเมื่อใช้เป็ นตัวเลข ตัวเลขจะถูกแบ่งออกเป็ น 3 ชุด ของ ผูใ้ ช้, กลุ่ม, และ ทุกคน ซึ่งแต่ละชุดจะมีสิทธิ ในการอ่าน, เขียน,เรียกใช้งาน ดังนี้ rwx 421 ตัวอย่าง ถ้าต้องการปรับสิทธิการเข้าถึงแฟ้ มข้อมูล myfile.txt ให้ ผูใ้ ช้ มีสิทธิทุกอย่างคือ อ่าน เขียน และเรียกใช้งาน กลุ่ม มีสิทธิในการการอ่าน ทุกคน ไม่มีสิทธิใดๆในแฟ้ มข้อมูลนี้ เลย chmod 740 myfile.txt แบบฝึ กหัด คาสัง่ “touch” ใน Linux มีไว้เพื่อสร้างแฟ้ มข้อมูลว่างขึ้ นมา ให้สร้างแฟ้ มข้อมูลว่างขึ้ นมา 2 แฟ้ มข้อมูลชื่อ testpriv1 และ testpriv2 ให้ปรับสิทธิแฟ้ มข้อมูล testpriv1 ให้ วิธีใช้ : touch <ชื่อแฟ้ มข้อมูล> ผูใ้ ช้มีสิทธิทุกอย่าง กลุ่ม และ ทุกคน สามารถเรียกใช้งานได้อย่างเดียว ให้ปรับสิทธิแฟ้ มข้อมูล testpriv2 ให้ ผูใ้ ช้ มีสิทธิทุกอย่าง กลุ่ม มีสิทธิทุกอย่าง ทุกคน สามารถอ่านและเรียกใช้งานได้ Text Editor : vi การใช้งานสร้างและแก้ไขแฟ้ มข้อมูลใน Linux ถ้าทาผ่าน command line จะมี text editor ที่นิยมมากคือ vi การใช้งานของโปรแกรม vi ค่อนข้างจะซับซ้อนสาหรับผูเ้ ริ่มต้นใช้งาน แต่ เมื่อใช้งานคล่องแล้วจะสามารถทางานได้มปี ระสิทธิภาพมากขึ้ นกว่า text editor ตัวอื่น โปรแกรม vi เป็ นโปรแกรมมาตรฐานใน Linux และ Unix ต่างๆ ทาให้ สามารถทางานกับ Linux ได้ทุกประเภท โหมดการทางานของ vi โปรแกรม vi จะแบ่งการทางานออกเป็ น 2 โหมดคือ โหมดคาสัง่ โหมดการแก้ไขเอกสาร เมื่อเริ่มใช้งาน vi ผ่านคาสัง่ vi ชื่อแฟ้ มข้อมูล โปรแกรมจะเริ่มต้นที่โหมดคาสัง่ ถ้าแฟ้ มข้อมูลที่ตอ้ งการไม่มอี ยูใ่ นระบบ vi จะสร้างแฟ้ มข้อมูลนั้นขึ้ นมา ถ้าแฟ้ มข้อมูลที่ตอ้ งการมีอยูใ่ นระบบ vi จะเปิ ดแฟ้ มข้อมูลนั้นขึ้ นมาแก้ไข การเปลี่ยนโหมดใน vi ให้กลับมาอยูใ่ นโหมดคาสัง่ จะต้องกด ESC คาสัง่ ของ vi ในโหมดคาสัง่ คำสั ่ง คำอธิบำย Up arrow, k เลื่อน cursor ขึ้ นข้างบน 1 บรรทัด Down arrow, j เลื่อน cursor ลงข้างล่าง 1 บรรทัด Left arrow, h เลื่อน cursor ไปทางซ้าย 1 ตัวอักษร Right arrow, l เลื่อน cursor ไปทางขวา 1 ตัวอักษร :q ออกจากโปรแกรม :q! บังคับให้ออกจากโปรแกรม :w บันทึกแฟ้ มข้อมูล :wq , ZZ บันทึกแฟ้ มข้อมูล และออกจากโปรแกรม x ลบตัวอักษรที่ cursor ชี้ อยู่ dw ลบ 1 คาที่ cursor ชี้ อยู่ dd ลบ 1 บรรทัดที่ cursor ชี้ อยู่ คาสัง่ ของ vi ในโหมดคาสัง่ (2) คำสั ่ง คำอธิบำย / <text> ค้นหาคาในแฟ้ มข้อมูล n ค้นหาคาถัดไป u yy undo Copy ข้อความบรรทัดที่ cursor ชี้ อยู่ yw Copy ข้อความหนึ่ งคาที่ cursor ชี้ อยู่ p Paste ข้อมูลที่ copy ไว้ลงในแฟ้ มข้อมูล i แทรกข้อมูลลงในแฟ้ มข้อมูลตาแหน่ งที่ cursor ชี้ อยู่ I แทรกข้อมูลตาแหน่ งท้ายสุดของบรรทัดที่ cursor ชี้ อยู่ <ตัวเลข>G ไปที่บรรทัด <ตัวเลข> แบบฝึ กหัด ให้สร้างแฟ้ มข้อมูลชื่อ hello โดยพยายามฝึ กหัดใช้โปรแกรม vi มีขอ้ ความดังนี้ Hello everybody This is my text file created by vi Try to copy the following line 5 times HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld Try to save this file with :w ello XHelloWorldX ดูเนื้ อหาในแฟ้ มข้อมูล คาสัง่ ที่ใช้ดเู นื้ อหาในแฟ้มข้อมูล cat ชื่อแฟ้ มข้อมูล เมื่อต้องการดูเนื้ อหาหลายแฟ้ มข้อมูลต่อกัน cat ชื่อแฟ้ มข้อมูล1 ชื่อแฟ้ มข้อมูล2 คาสัง่ ที่ใช้ดแู ฟ้ มข้อมูลยาวๆ แต่ตดั ให้เห็นที่ละหน้า more ชื่อแฟ้ มข้อมูล ตัวพัฒนาต่อจากคาสัง่ more ให้มีการทางานที่สะดวกมากขึ้ น less ชื่อแฟ้ มข้อมูล ดูเนื้ อหาในแฟ้ มข้อมูลบางส่วน คาสัง่ ที่ใช้ดขู อ้ มูลส่วนหัวของแฟ้ มข้อมูล head ชื่อแฟ้ มข้อมูล คาสัง่ ที่ใช้ดขู อ้ มูลส่วนท้ายของแฟ้ มข้อมูล tail ชื่อแฟ้ มข้อมูล ทั้ง head และ tail มี option ที่นิยมใช้คือ -n จานวนบรรทัด head -n 10 ชื่อแฟ้ มข้อมูล แสดงเนื้ อหาในแฟ้ มข้อมูล 10 บรรทัดเริ่มนั บจากบรรทัดที่ 1 tail -n 10 ชื่อแฟ้ มข้อมูล แสดงเนื้ อหาในแฟ้ มข้อมูล 10 บรรทัดนับจากบรรทัดสุดท้ายของแฟ้ มข้อมูล แฟ้มข้อมูลประเภท link ใน Linux แฟ้ มข้อมูลประเภท link จะมีดว้ ยกัน 2 ประเภท คือ Soft link Hard link Soft link ทาหน้าที่เหมือน shortcut ใน Windows คือเป็ นแค่ตวั ชี้ ไปหา แฟ้ มข้อมูลต้นฉบับ วิธีการสร้าง softlink ทาได้โดยใช้คาสัง่ “ln –s TARGET link_name” ถ้าแฟ้ มข้อมูลต้นฉบับถูกลบทิ้ ง softlink จะไม่สามารถค้นหาแฟ้ มข้อมูลได้ Hard link เป็ นแฟ้ มข้อมูลพิเศษของ Linux ซึ่งเป็ นการสร้างเนื้ อหาข้อมูล ร่วมกัน ถึงแฟ้ มข้อมูลไหนจะถูกลบถ้ายังมีตวั ชี้ อยูก่ ็ยงั ไม่หายไปจากระบบ วิธีสร้าง hardlink ทาได้โดยใช้คาสัง่ “ln TARGET link_name” ทดสอบการใช้งานของ Link สร้าง soft link ชื่อ ect ชี้ ไปหาแฟ้ ม hello ที่สร้างขึ้ น สร้าง hard link ชื่อ cit ชี้ ไปหาแฟ้ ม hello ที่สร้างขึ้ น ลองดูขอ้ มูลภายใน link ect และ cit ด้วยคาสัง่ cat แก้ไขแฟ้ มข้อมูล hello เพิ่ม รหัสนักศึกษา ไปที่บรรทัดสุดท้าย ลองดูขอ้ มูลภายใน link ect และ cit ด้วยคาสัง่ cat ลบแฟ้ มข้อมูล hello ลองดูขอ้ มูลภายใน link ect และ cit ด้วยคาสัง่ cat คาสัง่ เกี่ยวกับ text processing Command Usage Description wc wc <ชื่อแฟ้ มข้อมูล> นับจานวนคาที่อยูใ่ นแฟ้ มข้อมูล grep grep <ข้อความ> <ชื่อแฟ้ มข้อมูล> ค้นหาข้อความในแฟ้ มข้อมูล cut cut <ชื่อแฟ้ มข้อมูล> ตัดคาในแฟ้ มข้อมูล sort sort <ชื่อแฟ้ มข้อมูล> เรียงคาในแฟ้ มข้อมูล wc มี option ที่ใช้ควบคูไ่ ปด้วยคือ -l นับจานวนบรรทัดของแฟ้ มข้อมูล -w นับจานวนคาของเนื้ อหาในแฟ้ มข้อมูล -c นับจานวนตัวอักษรในแฟ้ มข้อมูล คาสัง่ grep grep เป็ นคาสัง่ ที่ใช้คน้ หาคาในแฟ้ มข้อมูล การใช้งานที่ง่ายที่สุดเช่น grep root /etc/passwd เป็ นการค้นหาบรรทัดที่มีคาว่า root ในแฟ้ มข้อมูล /etc/passwd คาสัง่ grep สามารถใช้ในการค้นหาคาที่มีความซับซ้อนมากขึ้ นได้ โดยจะ มีการใช้งานคู่กบั regular expression (option –r) Regular expression หรือบางครั้งเราสามารถเรียกได้วา่ เป็ น pattern ของข้อความ Regular expression Pattern Usage [aeiou] Matching 1 ตัวอักษร a, e, i, o, หรือ u [a-z] Matching ตัวอักษร a ถึง z [a-z][A-Z] Matching ตัวอักษร a ถึง z และตามด้วยตัวอักษร A ถึง Z ^<pattern> Matching บรรทัดที่ขนต้ ึ้ นด้วย pattern <pattern>$ Matching บรรทัดที่ลงท้ายด้วย pattern ^[a-z][0-9]$ . Matching บรรทัดที่มีตวั อักษร a ถึง z และตามด้วยตัวเลข <pattern>+ Matching pattern ซ้ากัน 1 หรือ มากกว่า <pattern>* Matching pattern ซ้ากัน 0 หรือ มากกว่า <pattern>? Matching pattern ซ้ากัน 0 หรือ 1 ครั้ง Matching ตัวอักษร 1 ตัว แบบฝึ กหัด grep -r ใช้งานคาสัง่ grep บนแฟ้ มข้อมูล cit Hello เพื่อแสดงบรรทัดที่ขึ้นต้นด้วย Hello เพื่อแสดงบรรทัดที่มี World เพื่อแสดงบรรทัดที่ลงท้ายด้วย World เพื่อแสดงเฉพาะบรรทัดที่ท้งั บรรทัดมีคาว่า HelloWorld เพื่อแสดงเฉพาะบรรทัดที่มีตวั อักษร 4 ตัว เพื่อแสดงบรรทัดที่มี คาสัง่ cut cut เป็ นคาสัง่ สาหรับตัดคามี option ที่สาคัญคือ -c เป็ นการเลือกตัดลาดับตัวอักษรที่กาหนด -f เลือกฟิ ลด์ที่ตอ ้ งการ -d เป็ นการกาหนดตัวอักษรที่ใช้ในการตัดคา (delimiter) โดยที่ -c และ -f จะมีการกาหนดค่าได้ 5 รูปแบบ N ตัดเฉพาะตาแหน่ ง N Nตัดตั้งแต่ N ถึงสุดบรรทัด N-M ตัดตั้งแต่ N ถึง M -M ตัดตั้งแต่ต้งั บรรทัดถึง M N,M,.. เอาเฉพาะตาแหน่ งที่ N, M, … ออกมา การใช้งานคาสัง่ cut ลองดูขอ้ มูลใน /etc/passwd ตัวอย่าง : root:x:0:0:root:/root:/bin/bash username:password:userID:groupID:name:HomeDirectory:shell ใช้คาสัง่ cut เพื่อเอาแต่ username ออกมา ใช้คาสัง่ cut เพื่อเอา username และ userID ออกมา cut -d”:” -f1 /etc/passwd cut -d”:” -f1,3 /etc/passwd ใช้คาสัง่ cut เอาตัวอักษร 3 ตัวแรกของแต่ละบรรทัดมาแสดง cut -c-3 /etc/passwd cut -c1-3 /etc/passwd การใช้งานคาสัง่ sort sort ใช้สาหรับเรียงข้อความหรือตัวเลข การใช้งาน sort [option] ชื่อแฟ้ มข้อมูล ตัวอย่าง ต้องการเรียงข้อมูลของ /etc/passwd ตามตัวอักษร sort /etc/passwd option -n ใช้สาหรับเรียงลาดับที่เป็ นตัวเลข sort -n ชื่อแฟ้ มข้อมูล Standard I/O devices ทุกโปรแกรมใน Linux, Unix จะมี concept ของ I/O streams เพื่อส่งข้อมูลเข้า และรับผลลัพธ์ออกจากโปรแกรม ซึ่งจะมีอยู่ 3 ตัวโดยปกติ standard input (default คือ keyboard) standard output (default คือ monitor) standard error (default คือ monitor) เราสามารถเปลี่ยนทิศทางการรับค่าจาก standard input และผลลัพธ์ ที่ออกจาก standard output และ standard error ได้ เราเรียก วิธีนี้ว่า Redirection Redirection เราสามารถ redirect standard streams ได้ดว้ ยการใช้เครื่องหมาย 3 อย่าง > , >>, < > เป็ นการ redirect ของ standard output จากที่ออกหน้าจอให้ไปออกที่สิ่ง ที่อยูด่ า้ นขวาของเครื่องหมาย ตัวอย่าง cat /etc/passwd > mypass >> เป็ นการ redirect ของ standard output เหมือนกันกับเครื่องหมาย > แต่จะเป็ นการนาข้อมูลต่อท้ายแทนที่จะลบแล้วสร้างแฟ้ มข้อมูลใหม่ < เป็ นการ redirect ของ standard input จากที่รบ ั ทาง keyboard ให้ไป รับจากแฟ้ มข้อมูล ตัวอย่าง mysql databasename < sql.txt การ redirect standard error จาเป็ นต้องใส่เลข 2 ก่อนหน้า > ตัวอย่าง ls –l xerdf 2> output Piping การ redirect อีกแบบคือการทา pipe หรือเรียกว่า piping ซึ่งสามารถ ทาได้โดยใช้ “|” (vertical bar) จะเป็ นการนาเอา output ของคาสัง่ ทางด้านซ้ายของ | มาป้อนเป็ น input ของคาสัง่ ทางด้านขวาของ | การใช้งาน piping เป็ นการใช้งานที่นิยมใช้กนั มาก เนื่ องจากสามารถ เรียกใช้โปรแกรมหลายตัวช่วยกันจัดเป็ นผลลัพธ์ที่เราต้องการ ตัวอย่าง : ต้องการหาบรรทัดที่มีคาว่า root ในแฟ้ มข้อมูล /etc/passwd cat /etc/passwd | grep root Help ใน Linux เนื่ องด้วยคาสัง่ ใน Linux นั้นมีมากมาย Linux จึงมี help ช่วยเหลือ เอาไว้ให้ คาสัง่ help ใน Linux คือ “man” (manual) ตัวอย่าง : อยากดู help ของคาสัง่ ls man ls แบบฝึ กหัด จากแฟ้ มข้อมูล /etc/passwd จงเขียนคาสัง่ Linux เพื่อ username, home directory, และ shell โดยให้ผลลัพธ์บนั ทึก ในแฟ้ มข้อมูลชื่อ exo1 แสดงเฉพาะ userID โดยให้เรียกตัวเลขจากน้อยไปมาก บันทึกผลลัพธ์ใน แฟ้ มข้อมูลชื่อ exo2 แสดงเฉพาะ username ของ username ที่ขึ้นต้นด้วย s พร้อมเรียงข้อมูล แล้วบันทึกผลลัพธ์ในแฟ้ มข้อมูลชื่อ exo3 แสดงจานวนของ username ที่มี username ลงท้ายด้วย er แล้วบันทึก ผลลัพธ์ในแฟ้ มข้อมูลชื่อ exo4 แสดง