Unix / Linux - คู่มือฉบับย่อ
Unix คืออะไร?
ระบบปฏิบัติการ Unix คือชุดของโปรแกรมที่ทำหน้าที่เชื่อมโยงระหว่างคอมพิวเตอร์และผู้ใช้
โปรแกรมคอมพิวเตอร์ที่จัดสรรทรัพยากรระบบและประสานงานรายละเอียดทั้งหมดของภายในของคอมพิวเตอร์เรียกว่า operating system หรือ kernel.
ผู้ใช้สื่อสารกับเคอร์เนลผ่านโปรแกรมที่เรียกว่า shell. เชลล์เป็นตัวแปลบรรทัดคำสั่ง แปลคำสั่งที่ป้อนโดยผู้ใช้และแปลงเป็นภาษาที่เคอร์เนลเข้าใจ
Unix ได้รับการพัฒนาขึ้นในปี พ.ศ. 2512 โดยกลุ่มพนักงานของ AT&T Ken Thompson, Dennis Ritchie, Douglas McIlroy และ Joe Ossanna ที่ Bell Labs
มี Unix หลากหลายรูปแบบในตลาด Solaris Unix, AIX, HP Unix และ BSD เป็นตัวอย่างบางส่วน ลินุกซ์ยังเป็นรสชาติของ Unix ซึ่งสามารถใช้ได้อย่างอิสระ
หลายคนสามารถใช้คอมพิวเตอร์ Unix ได้ในเวลาเดียวกัน ด้วยเหตุนี้ Unix จึงเรียกว่าระบบผู้ใช้หลายคน
ผู้ใช้ยังสามารถเรียกใช้หลายโปรแกรมในเวลาเดียวกัน ด้วยเหตุนี้ Unix จึงเป็นสภาพแวดล้อมแบบมัลติทาสก์
สถาปัตยกรรม Unix
นี่คือแผนภาพพื้นฐานของระบบ Unix -
แนวคิดหลักที่รวม Unix ทุกเวอร์ชันคือพื้นฐานสี่ประการต่อไปนี้ -
Kernel- เคอร์เนลเป็นหัวใจของระบบปฏิบัติการ มันโต้ตอบกับฮาร์ดแวร์และงานส่วนใหญ่เช่นการจัดการหน่วยความจำการตั้งเวลางานและการจัดการไฟล์
Shell- เชลล์คือยูทิลิตี้ที่ประมวลผลคำขอของคุณ เมื่อคุณพิมพ์คำสั่งที่เทอร์มินัลของคุณเชลล์จะตีความคำสั่งและเรียกโปรแกรมที่คุณต้องการ เชลล์ใช้ไวยากรณ์มาตรฐานสำหรับคำสั่งทั้งหมด C Shell, Bourne Shell และ Korn Shell เป็นเชลล์ที่มีชื่อเสียงที่สุดซึ่งมีให้เลือกใช้กับ Unix ส่วนใหญ่
Commands and Utilities - มีคำสั่งและยูทิลิตี้ต่างๆที่คุณสามารถใช้ในกิจกรรมประจำวันของคุณ cp, mv, cat และ grepฯลฯ เป็นตัวอย่างบางส่วนของคำสั่งและยูทิลิตี้ มีอยู่มากกว่า 250 คำสั่งมาตรฐานบวกอื่น ๆ อีกมากมายให้ผ่าน 3 ถซอฟต์แวร์ของบุคคลที่ คำสั่งทั้งหมดมาพร้อมกับตัวเลือกต่างๆ
Files and Directories- ข้อมูลทั้งหมดของ Unix จัดเป็นไฟล์ ไฟล์ทั้งหมดจะถูกจัดเป็นไดเร็กทอรี ไดเรกทอรีเหล่านี้จะถูกจัดระเบียบเพิ่มเติมให้เป็นโครงสร้างที่เหมือนต้นไม้ที่เรียกว่าไฟล์filesystem.
การบูตระบบ
หากคุณมีคอมพิวเตอร์ที่ติดตั้งระบบปฏิบัติการ Unix คุณก็ต้องเปิดระบบเพื่อให้ใช้งานได้
ทันทีที่คุณเปิดระบบระบบจะเริ่มการบูตและในที่สุดระบบจะแจ้งให้คุณล็อกอินเข้าสู่ระบบซึ่งเป็นกิจกรรมเพื่อเข้าสู่ระบบและใช้สำหรับกิจกรรมประจำวันของคุณ
เข้าสู่ระบบ Unix
เมื่อคุณเชื่อมต่อกับระบบ Unix เป็นครั้งแรกคุณมักจะเห็นข้อความแจ้งดังต่อไปนี้ -
login:
เพื่อเข้าสู่ระบบ
เตรียม userid (รหัสผู้ใช้) และรหัสผ่านให้พร้อม ติดต่อผู้ดูแลระบบของคุณหากคุณยังไม่มี
พิมพ์ userid ของคุณที่พร้อมต์ล็อกอินจากนั้นกด ENTER. userid ของคุณคือcase-sensitiveดังนั้นโปรดพิมพ์ให้ตรงตามที่ผู้ดูแลระบบของคุณสั่ง
พิมพ์รหัสผ่านของคุณที่พรอมต์รหัสผ่านจากนั้นกด ENTER. รหัสผ่านของคุณยังต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก
หากคุณระบุรหัสผู้ใช้และรหัสผ่านที่ถูกต้องคุณจะได้รับอนุญาตให้เข้าสู่ระบบ อ่านข้อมูลและข้อความที่ปรากฏบนหน้าจอซึ่งมีดังต่อไปนี้
login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$
คุณจะได้รับพรอมต์คำสั่ง (บางครั้งเรียกว่า $prompt) ที่คุณพิมพ์คำสั่งทั้งหมดของคุณ ตัวอย่างเช่นหากต้องการตรวจสอบปฏิทินคุณต้องพิมพ์ไฟล์cal คำสั่งดังนี้ -
$ cal June 2009 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 $
เปลี่ยนรหัสผ่าน
ระบบ Unix ทั้งหมดต้องใช้รหัสผ่านเพื่อช่วยให้แน่ใจว่าไฟล์และข้อมูลของคุณยังคงเป็นของคุณเองและระบบนั้นปลอดภัยจากแฮกเกอร์และแคร็กเกอร์ ต่อไปนี้เป็นขั้นตอนในการเปลี่ยนรหัสผ่านของคุณ -
Step 1 - ในการเริ่มต้นให้พิมพ์รหัสผ่านที่พรอมต์คำสั่งดังที่แสดงด้านล่าง
Step 2 - ป้อนรหัสผ่านเก่าของคุณซึ่งเป็นรหัสผ่านที่คุณใช้อยู่
Step 3- พิมพ์รหัสผ่านใหม่ของคุณ รักษารหัสผ่านของคุณให้ซับซ้อนเพียงพอเสมอเพื่อให้ไม่มีใครคาดเดาได้ แต่อย่าลืมว่าคุณจำได้
Step 4 - คุณต้องตรวจสอบรหัสผ่านโดยพิมพ์อีกครั้ง
$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $
Note- เราได้เพิ่มเครื่องหมายดอกจัน (*) ไว้ที่นี่เพื่อแสดงตำแหน่งที่คุณต้องป้อนรหัสผ่านปัจจุบันและรหัสผ่านใหม่ไม่เช่นนั้นในระบบของคุณ ไม่แสดงอักขระใด ๆ เมื่อคุณพิมพ์
รายการไดเรกทอรีและไฟล์
ข้อมูลทั้งหมดใน Unix จัดเป็นไฟล์ ไฟล์ทั้งหมดจัดเป็นไดเร็กทอรี ไดเร็กทอรีเหล่านี้จัดเป็นโครงสร้างแบบต้นไม้ที่เรียกว่าระบบไฟล์
คุณสามารถใช้ไฟล์ lsคำสั่งเพื่อแสดงรายการไฟล์หรือไดเรกทอรีทั้งหมดที่มีอยู่ในไดเร็กทอรี ต่อไปนี้เป็นตัวอย่างการใช้งานls คำสั่งด้วย -l ตัวเลือก
$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $
ที่นี่รายการเริ่มต้นด้วย d.....เป็นตัวแทนของไดเรกทอรี ตัวอย่างเช่น uml, univ และ urlspedia เป็นไดเร็กทอรีและรายการที่เหลือคือไฟล์
คุณคือใคร?
ในขณะที่คุณเข้าสู่ระบบคุณอาจเต็มใจที่จะทราบ: Who am Iเหรอ?
วิธีที่ง่ายที่สุดในการค้นหาว่า "คุณคือใคร" คือเข้าสู่ไฟล์ whoami คำสั่ง -
$ whoami amrood $
ลองใช้กับระบบของคุณ คำสั่งนี้แสดงชื่อบัญชีที่เชื่อมโยงกับการเข้าสู่ระบบปัจจุบัน คุณสามารถลองwho am i คำสั่งเช่นกันเพื่อรับข้อมูลเกี่ยวกับตัวคุณ
ใครเข้าสู่ระบบ?
บางครั้งคุณอาจสนใจที่จะรู้ว่าใครเป็นผู้ลงชื่อเข้าใช้คอมพิวเตอร์ในเวลาเดียวกัน
มีคำสั่งสามคำสั่งเพื่อให้คุณได้รับข้อมูลนี้ตามจำนวนที่คุณต้องการทราบเกี่ยวกับผู้ใช้รายอื่น: users, whoและ w.
$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu ttyp2 Oct 4 09:08 (calliope)
qadir ttyp4 Oct 8 12:09 (dent)
$
ลองใช้ไฟล์ wคำสั่งบนระบบของคุณเพื่อตรวจสอบผลลัพธ์ รายการนี้แสดงข้อมูลที่เกี่ยวข้องกับผู้ใช้ที่ล็อกอินเข้าสู่ระบบ
ออกจากระบบ
เมื่อคุณเสร็จสิ้นเซสชันของคุณคุณต้องออกจากระบบ เพื่อให้แน่ใจว่าไม่มีใครเข้าถึงไฟล์ของคุณ
To log out
เพียงพิมพ์ไฟล์ logout คำสั่งที่พรอมต์คำสั่งและระบบจะล้างข้อมูลทุกอย่างและทำลายการเชื่อมต่อ
ปิดระบบ
วิธีที่สอดคล้องที่สุดในการปิดระบบ Unix อย่างถูกต้องผ่านทางบรรทัดคำสั่งคือการใช้คำสั่งต่อไปนี้ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | halt ทำให้ระบบล่มทันที |
2 | init 0 ปิดระบบโดยใช้สคริปต์ที่กำหนดไว้ล่วงหน้าเพื่อซิงโครไนซ์และล้างระบบก่อนปิดระบบ |
3 | init 6 รีบูตระบบโดยการปิดระบบอย่างสมบูรณ์จากนั้นรีสตาร์ท |
4 | poweroff ปิดระบบโดยการปิดเครื่อง |
5 | reboot รีบูตระบบ |
6 | shutdown ปิดระบบ |
โดยทั่วไปคุณจะต้องเป็นผู้ใช้ขั้นสูงหรือรูท (บัญชีที่มีสิทธิพิเศษที่สุดในระบบ Unix) เพื่อปิดระบบ อย่างไรก็ตามในกล่อง Unix แบบสแตนด์อโลนหรือที่เป็นของส่วนตัวผู้ใช้ระดับผู้ดูแลระบบและผู้ใช้ทั่วไปบางครั้งสามารถทำได้
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการจัดการไฟล์ใน Unix ข้อมูลทั้งหมดใน Unix จัดเป็นไฟล์ ไฟล์ทั้งหมดจัดเป็นไดเร็กทอรี ไดเร็กทอรีเหล่านี้จัดเป็นโครงสร้างแบบต้นไม้ที่เรียกว่าระบบไฟล์
เมื่อคุณทำงานกับ Unix ไม่ทางใดก็ทางหนึ่งคุณจะใช้เวลาส่วนใหญ่ในการทำงานกับไฟล์ บทช่วยสอนนี้จะช่วยให้คุณเข้าใจวิธีสร้างและลบไฟล์คัดลอกและเปลี่ยนชื่อสร้างลิงก์ไปยังไฟล์เหล่านั้น ฯลฯ
ใน Unix มีไฟล์พื้นฐานสามประเภท -
Ordinary Files- ไฟล์ธรรมดาคือไฟล์ในระบบที่มีข้อมูลข้อความหรือโปรแกรมคำสั่ง ในบทช่วยสอนนี้คุณจะดูการทำงานกับไฟล์ธรรมดา
Directories- ไดเรกทอรีจัดเก็บทั้งไฟล์พิเศษและไฟล์ธรรมดา สำหรับผู้ใช้ที่คุ้นเคยกับ Windows หรือ Mac OS ไดเรกทอรี Unix จะเทียบเท่ากับโฟลเดอร์
Special Files- ไฟล์พิเศษบางไฟล์ให้การเข้าถึงฮาร์ดแวร์เช่นฮาร์ดไดรฟ์ไดรฟ์ซีดีรอมโมเด็มและอะแดปเตอร์อีเทอร์เน็ต ไฟล์พิเศษอื่น ๆ คล้ายกับนามแฝงหรือทางลัดและช่วยให้คุณสามารถเข้าถึงไฟล์เดียวโดยใช้ชื่ออื่น
รายชื่อไฟล์
ในการแสดงรายการไฟล์และไดเร็กทอรีที่จัดเก็บในไดเร็กทอรีปัจจุบันให้ใช้คำสั่งต่อไปนี้ -
$ls
นี่คือผลลัพธ์ตัวอย่างของคำสั่งด้านบน -
$ls
bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
คำสั่ง ls รองรับไฟล์ -l ตัวเลือกที่จะช่วยให้คุณได้รับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ในรายการ -
$ls -l
total 1962188
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
นี่คือข้อมูลเกี่ยวกับคอลัมน์ในรายการทั้งหมด -
First Column- แสดงถึงประเภทไฟล์และสิทธิ์ที่กำหนดให้กับไฟล์ ด้านล่างนี้คือคำอธิบายของไฟล์ทุกประเภท
Second Column - แสดงจำนวนบล็อกหน่วยความจำที่นำมาโดยไฟล์หรือไดเร็กทอรี
Third Column- แสดงถึงเจ้าของไฟล์ นี่คือผู้ใช้ Unix ที่สร้างไฟล์นี้
Fourth Column- แสดงถึงกลุ่มของเจ้าของ ผู้ใช้ Unix ทุกคนจะมีกลุ่มที่เกี่ยวข้อง
Fifth Column - แสดงขนาดไฟล์เป็นไบต์
Sixth Column - แสดงวันที่และเวลาที่สร้างหรือแก้ไขไฟล์นี้เป็นครั้งสุดท้าย
Seventh Column - แสดงถึงไฟล์หรือชื่อไดเร็กทอรี
ใน ls -l ตัวอย่างรายการไฟล์ทุกบรรทัดเริ่มต้นด้วยไฟล์ d, -, หรือ l. อักขระเหล่านี้ระบุประเภทของไฟล์ที่อยู่ในรายการ
ซีเนียร์ | คำนำหน้าและคำอธิบาย |
---|---|
1 | - ไฟล์ทั่วไปเช่นไฟล์ข้อความ ASCII ไฟล์ปฏิบัติการไบนารีหรือฮาร์ดลิงก์ |
2 | b บล็อกไฟล์พิเศษ บล็อกไฟล์อุปกรณ์อินพุต / เอาต์พุตเช่นฮาร์ดไดรฟ์ทางกายภาพ |
3 | c ไฟล์พิเศษของอักขระ ไฟล์อุปกรณ์อินพุต / เอาต์พุตดิบเช่นฮาร์ดไดรฟ์จริง |
4 | d ไฟล์ไดเร็กทอรีที่มีรายชื่อไฟล์และไดเร็กทอรีอื่น ๆ |
5 | l ไฟล์ลิงค์สัญลักษณ์ ลิงก์บนไฟล์ทั่วไป |
6 | p ท่อชื่อ. กลไกสำหรับการสื่อสารระหว่างกระบวนการ |
7 | s ซ็อกเก็ตที่ใช้สำหรับการสื่อสารระหว่างกระบวนการ |
Metacharacters
Metacharacters มีความหมายพิเศษใน Unix ตัวอย่างเช่น,* และ ?เป็น metacharacters เราใช้* เพื่อให้ตรงกับอักขระ 0 ตัวขึ้นไปเครื่องหมายคำถาม (?) จับคู่กับอักขระเดี่ยว
ตัวอย่างเช่น -
$ls ch*.doc
แสดงไฟล์ทั้งหมดชื่อที่ขึ้นต้นด้วย ch และลงท้ายด้วย .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
ที่นี่ *ทำงานเป็นอักขระเมตาที่ตรงกับอักขระใด ๆ หากคุณต้องการแสดงไฟล์ทั้งหมดที่ลงท้ายด้วยเพียง.docจากนั้นคุณสามารถใช้คำสั่งต่อไปนี้ -
$ls *.doc
ไฟล์ที่ซ่อนอยู่
ไฟล์ที่มองไม่เห็นคือหนึ่งอักขระตัวแรกคือจุดหรืออักขระจุด (.) โปรแกรม Unix (รวมถึงเชลล์) ใช้ไฟล์เหล่านี้ส่วนใหญ่เพื่อจัดเก็บข้อมูลการกำหนดค่า
ตัวอย่างทั่วไปของไฟล์ที่ซ่อนอยู่ ได้แก่ ไฟล์ -
.profile - สคริปต์การเริ่มต้น Bourne shell (sh)
.kshrc - สคริปต์การเริ่มต้น Korn เชลล์ (ksh)
.cshrc - สคริปต์การเริ่มต้น C เชลล์ (csh)
.rhosts - ไฟล์คอนฟิกูเรชันเชลล์ระยะไกล
หากต้องการแสดงรายการไฟล์ที่มองไม่เห็นให้ระบุไฟล์ -a ตัวเลือกในการ ls -
$ ls -a
. .profile docs lib test_results
.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
Single dot (.) - นี่แสดงถึงไดเร็กทอรีปัจจุบัน
Double dot (..) - แสดงถึงไดเร็กทอรีหลัก
การสร้างไฟล์
คุณสามารถใช้ไฟล์ viโปรแกรมแก้ไขเพื่อสร้างไฟล์ธรรมดาบนระบบ Unix ใด ๆ คุณต้องให้คำสั่งต่อไปนี้ -
$ vi filename
คำสั่งดังกล่าวจะเปิดไฟล์ที่มีชื่อไฟล์ที่กำหนด ตอนนี้กดปุ่มiเพื่อเข้าสู่โหมดแก้ไข เมื่อคุณอยู่ในโหมดแก้ไขคุณสามารถเริ่มเขียนเนื้อหาของคุณในไฟล์ได้ตามโปรแกรมต่อไปนี้ -
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
เมื่อคุณทำโปรแกรมเสร็จแล้วให้ทำตามขั้นตอนต่อไปนี้ -
กดปุ่ม esc เพื่อออกจากโหมดแก้ไข
กดสองปุ่ม Shift + ZZ ออกมาจากไฟล์อย่างสมบูรณ์
ตอนนี้คุณจะมีไฟล์ที่สร้างด้วย filename ในไดเร็กทอรีปัจจุบัน
$ vi filename $
การแก้ไขไฟล์
คุณสามารถแก้ไขไฟล์ที่มีอยู่โดยใช้ไฟล์ viบรรณาธิการ. เราจะพูดถึงวิธีการเปิดไฟล์ที่มีอยู่โดยย่อ -
$ vi filename
เมื่อเปิดไฟล์แล้วคุณสามารถเข้าสู่โหมดแก้ไขได้โดยกดปุ่ม iจากนั้นคุณสามารถดำเนินการต่อโดยแก้ไขไฟล์ หากคุณต้องการย้ายมาที่นี่และอยู่ภายในไฟล์ก่อนอื่นคุณต้องออกจากโหมดแก้ไขโดยกดปุ่มEsc. หลังจากนี้คุณสามารถใช้ปุ่มต่อไปนี้เพื่อย้ายภายในไฟล์ -
l เพื่อเลื่อนไปทางด้านขวา
h เพื่อเลื่อนไปทางด้านซ้าย
k เพื่อย้ายกลับหัวในไฟล์
j เพื่อเลื่อนลงในไฟล์
ดังนั้นเมื่อใช้ปุ่มด้านบนคุณจะสามารถวางเคอร์เซอร์ได้ทุกที่ที่คุณต้องการแก้ไข เมื่อคุณอยู่ในตำแหน่งแล้วคุณสามารถใช้ไฟล์iกุญแจสำคัญที่จะเข้ามาในโหมดแก้ไข เมื่อคุณแก้ไขไฟล์เสร็จแล้วให้กดEsc และสุดท้ายสองปุ่ม Shift + ZZ ออกมาจากไฟล์อย่างสมบูรณ์
แสดงเนื้อหาของไฟล์
คุณสามารถใช้ไฟล์ catคำสั่งเพื่อดูเนื้อหาของไฟล์ ต่อไปนี้เป็นตัวอย่างง่ายๆเพื่อดูเนื้อหาของไฟล์ที่สร้างด้านบน -
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
คุณสามารถแสดงหมายเลขบรรทัดโดยใช้ไฟล์ -b ตัวเลือกพร้อมกับ cat คำสั่งดังนี้ -
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I'm going to save this content in this file.
$
การนับคำในไฟล์
คุณสามารถใช้ไฟล์ wcคำสั่งเพื่อรับจำนวนบรรทัดคำและอักขระทั้งหมดที่มีอยู่ในไฟล์ ต่อไปนี้เป็นตัวอย่างง่ายๆเพื่อดูข้อมูลเกี่ยวกับไฟล์ที่สร้างด้านบน -
$ wc filename
2 19 103 filename
$
นี่คือรายละเอียดของทั้งสี่คอลัมน์ -
First Column - แสดงจำนวนบรรทัดทั้งหมดในไฟล์
Second Column - แสดงจำนวนคำทั้งหมดในไฟล์
Third Column- แสดงจำนวนไบต์ทั้งหมดในไฟล์ นี่คือขนาดจริงของไฟล์
Fourth Column - แสดงชื่อไฟล์
คุณสามารถให้ไฟล์ได้หลายไฟล์และรับข้อมูลเกี่ยวกับไฟล์เหล่านั้นพร้อมกัน ต่อไปนี้เป็นไวยากรณ์ง่ายๆ -
$ wc filename1 filename2 filename3
การคัดลอกไฟล์
ในการทำสำเนาไฟล์ให้ใช้ไฟล์ cpคำสั่ง ไวยากรณ์พื้นฐานของคำสั่งคือ -
$ cp source_file destination_file
ต่อไปนี้เป็นตัวอย่างในการสร้างสำเนาของไฟล์ที่มีอยู่ filename.
$ cp filename copyfile
$
ตอนนี้คุณจะพบอีกหนึ่งไฟล์ copyfileในไดเรกทอรีปัจจุบันของคุณ ไฟล์นี้จะเหมือนกับไฟล์ต้นฉบับทุกประการfilename.
การเปลี่ยนชื่อไฟล์
ในการเปลี่ยนชื่อไฟล์ให้ใช้ไฟล์ mvคำสั่ง ต่อไปนี้เป็นไวยากรณ์พื้นฐาน -
$ mv old_file new_file
โปรแกรมต่อไปนี้จะเปลี่ยนชื่อไฟล์ที่มีอยู่ filename ถึง newfile.
$ mv filename newfile $
mvคำสั่งจะย้ายไฟล์ที่มีอยู่ไปยังไฟล์ใหม่อย่างสมบูรณ์ ในกรณีนี้คุณจะพบเฉพาะnewfile ในไดเรกทอรีปัจจุบันของคุณ
การลบไฟล์
ในการลบไฟล์ที่มีอยู่ให้ใช้ไฟล์ rmคำสั่ง ต่อไปนี้เป็นไวยากรณ์พื้นฐาน -
$ rm filename
Caution- ไฟล์อาจมีข้อมูลที่เป็นประโยชน์ ขอแนะนำให้ระมัดระวังขณะใช้สิ่งนี้เสมอDeleteคำสั่ง จะดีกว่าถ้าใช้ไฟล์-i ตัวเลือกพร้อมกับ rm คำสั่ง
ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีการลบไฟล์ที่มีอยู่ทั้งหมด filename.
$ rm filename
$
คุณสามารถลบไฟล์หลายไฟล์ได้พร้อมกันด้วยคำสั่งด้านล่าง -
$ rm filename1 filename2 filename3
$
สตรีม Unix มาตรฐาน
ภายใต้สถานการณ์ปกติโปรแกรม Unix ทุกโปรแกรมจะมีสตรีม (ไฟล์) สามสตรีมที่เปิดไว้เมื่อเริ่มต้น -
stdin- สิ่งนี้เรียกว่าอินพุตมาตรฐานและตัวอธิบายไฟล์ที่เกี่ยวข้องคือ 0 ซึ่งจะแสดงเป็น STDIN ด้วย โปรแกรม Unix จะอ่านอินพุตเริ่มต้นจาก STDIN
stdout- สิ่งนี้เรียกว่าเอาต์พุตมาตรฐานและตัวอธิบายไฟล์ที่เกี่ยวข้องคือ 1 ซึ่งจะแสดงเป็น STDOUT ด้วย โปรแกรม Unix จะเขียนเอาต์พุตเริ่มต้นที่ STDOUT
stderr- สิ่งนี้เรียกว่าข้อผิดพลาดมาตรฐานและตัวอธิบายไฟล์ที่เกี่ยวข้องคือ 2 ซึ่งจะแสดงเป็น STDERR ด้วย โปรแกรม Unix จะเขียนข้อความแสดงข้อผิดพลาดทั้งหมดที่ STDERR
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการจัดการไดเร็กทอรีใน Unix
ไดเร็กทอรีคือไฟล์งานเดี่ยวที่ใช้เก็บชื่อไฟล์และข้อมูลที่เกี่ยวข้อง ไฟล์ทั้งหมดไม่ว่าจะเป็นแบบธรรมดาพิเศษหรือไดเร็กทอรีจะมีอยู่ในไดเร็กทอรี
Unix ใช้โครงสร้างลำดับชั้นในการจัดระเบียบไฟล์และไดเร็กทอรี โครงสร้างนี้มักเรียกว่าโครงสร้างไดเรกทอรี ต้นไม้มีโหนดรากเดียวอักขระสแลช (/) และไดเรกทอรีอื่น ๆ ทั้งหมดจะอยู่ด้านล่าง
โฮมไดเร็กทอรี
ไดเร็กทอรีที่คุณพบเมื่อเข้าสู่ระบบครั้งแรกเรียกว่าโฮมไดเร็กทอรีของคุณ
คุณจะทำงานส่วนใหญ่ในโฮมไดเร็กทอรีและไดเร็กทอรีย่อยที่คุณจะสร้างเพื่อจัดระเบียบไฟล์ของคุณ
คุณสามารถเข้าไปในโฮมไดเร็กทอรีของคุณได้ตลอดเวลาโดยใช้คำสั่งต่อไปนี้ -
$cd ~
$
ที่นี่ ~บ่งชี้โฮมไดเร็กทอรี สมมติว่าคุณต้องไปในโฮมไดเร็กทอรีของผู้ใช้รายอื่นให้ใช้คำสั่งต่อไปนี้ -
$cd ~username
$
ในการไปที่ไดเร็กทอรีสุดท้ายของคุณคุณสามารถใช้คำสั่งต่อไปนี้ -
$cd -
$
ชื่อพา ธ สัมบูรณ์ / สัมพัทธ์
ไดเร็กทอรีถูกจัดเรียงตามลำดับชั้นโดยมีรูท (/) อยู่ด้านบน ตำแหน่งของไฟล์ใด ๆ ภายในลำดับชั้นอธิบายโดยชื่อพา ธ
องค์ประกอบของชื่อพา ธ ถูกคั่นด้วย / ชื่อพา ธ เป็นค่าสัมบูรณ์หากอธิบายเกี่ยวกับรูทดังนั้นชื่อพา ธ สัมบูรณ์จะเริ่มต้นด้วย a /
ต่อไปนี้เป็นตัวอย่างบางส่วนของชื่อไฟล์ที่สมบูรณ์
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
ชื่อพา ธ ยังสามารถสัมพันธ์กับไดเร็กทอรีการทำงานปัจจุบันของคุณ ชื่อพา ธ สัมพัทธ์ไม่เคยขึ้นต้นด้วย / เมื่อเทียบกับโฮมไดเร็กทอรีของผู้ใช้ amrood ชื่อพา ธ บางชื่ออาจมีลักษณะเช่นนี้ -
chem/notes
personal/res
ในการกำหนดตำแหน่งที่คุณอยู่ภายในลำดับชั้นของระบบไฟล์เมื่อใดก็ได้ให้ป้อนคำสั่ง pwd เพื่อพิมพ์ไดเร็กทอรีการทำงานปัจจุบัน -
$pwd
/user0/home/amrood
$
รายชื่อไดเรกทอรี
ในการแสดงรายการไฟล์ในไดเร็กทอรีคุณสามารถใช้ไวยากรณ์ต่อไปนี้ -
$ls dirname
ต่อไปนี้เป็นตัวอย่างเพื่อแสดงรายการไฟล์ทั้งหมดที่มีอยู่ใน /usr/local ไดเรกทอรี -
$ls /usr/local
X11 bin gimp jikes sbin
ace doc include lib share
atalk etc info man ami
การสร้างไดเรกทอรี
ตอนนี้เราจะเข้าใจวิธีการสร้างไดเรกทอรี ไดเร็กทอรีถูกสร้างขึ้นโดยคำสั่งต่อไปนี้ -
$mkdir dirname
ที่นี่ไดเร็กทอรีคือชื่อพา ธ สัมบูรณ์หรือสัมพัทธ์ของไดเร็กทอรีที่คุณต้องการสร้าง ตัวอย่างเช่นคำสั่ง -
$mkdir mydir $
สร้างไดเร็กทอรี mydirในไดเร็กทอรีปัจจุบัน นี่คืออีกตัวอย่างหนึ่ง -
$mkdir /tmp/test-dir $
คำสั่งนี้สร้างไดเร็กทอรี test-dir ใน /tmpไดเรกทอรี mkdir คำสั่งไม่สร้างเอาต์พุตหากสร้างไดเร็กทอรีที่ร้องขอได้สำเร็จ
หากคุณให้มากกว่าหนึ่งไดเร็กทอรีบนบรรทัดคำสั่ง mkdirสร้างไดเรกทอรีแต่ละรายการ ตัวอย่างเช่น -
$mkdir docs pub $
สร้างไดเร็กทอรี docs และ pub ภายใต้ไดเร็กทอรีปัจจุบัน
การสร้างไดเรกทอรีหลัก
ตอนนี้เราจะเข้าใจวิธีสร้างไดเรกทอรีหลัก บางครั้งเมื่อคุณต้องการสร้างไดเร็กทอรีไดเร็กทอรีหลักหรือไดเร็กทอรีอาจไม่มีอยู่ ในกรณีนี้,mkdir ออกข้อความแสดงข้อผิดพลาดดังนี้ -
$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $
ในกรณีเช่นนี้คุณสามารถระบุไฟล์ -p ตัวเลือกสำหรับ mkdirคำสั่ง สร้างไดเรกทอรีที่จำเป็นทั้งหมดสำหรับคุณ ตัวอย่างเช่น -
$mkdir -p /tmp/amrood/test $
คำสั่งดังกล่าวสร้างไดเร็กทอรีหลักที่จำเป็นทั้งหมด
การลบไดเรกทอรี
สามารถลบไดเรกทอรีโดยใช้ไฟล์ rmdir คำสั่งดังนี้ -
$rmdir dirname $
Note - ในการลบไดเร็กทอรีตรวจสอบให้แน่ใจว่าว่างซึ่งหมายความว่าไม่ควรมีไฟล์หรือไดเร็กทอรีย่อยใด ๆ ในไดเร็กทอรีนี้
คุณสามารถลบไดเร็กทอรีทีละหลายรายการดังนี้ -
$rmdir dirname1 dirname2 dirname3 $
คำสั่งดังกล่าวจะลบไดเร็กทอรี dirname1, dirname2 และ dirname3 หากว่างเปล่า rmdir คำสั่งไม่ก่อให้เกิดเอาต์พุตหากทำได้สำเร็จ
การเปลี่ยนไดเรกทอรี
คุณสามารถใช้ไฟล์ cdคำสั่งทำมากกว่าแค่เปลี่ยนเป็นโฮมไดเร็กทอรี คุณสามารถใช้เพื่อเปลี่ยนเป็นไดเร็กทอรีใดก็ได้โดยระบุพา ธ สัมบูรณ์หรือสัมพัทธ์ที่ถูกต้อง ไวยากรณ์เป็นไปตามที่ระบุด้านล่าง -
$cd dirname $
ที่นี่ dirnameคือชื่อของไดเร็กทอรีที่คุณต้องการเปลี่ยน ตัวอย่างเช่นคำสั่ง -
$cd /usr/local/bin $
การเปลี่ยนแปลงไดเร็กทอรี /usr/local/bin. จากไดเร็กทอรีนี้คุณสามารถcd ไปยังไดเร็กทอรี /usr/home/amrood โดยใช้เส้นทางสัมพัทธ์ต่อไปนี้ -
$cd ../../home/amrood $
เปลี่ยนชื่อไดเรกทอรี
mv (move)คำสั่งสามารถใช้เพื่อเปลี่ยนชื่อไดเร็กทอรี ไวยากรณ์มีดังนี้ -
$mv olddir newdir $
คุณสามารถเปลี่ยนชื่อไดเร็กทอรี mydir ถึง yourdir ดังต่อไปนี้ -
$mv mydir yourdir $
ไดเรกทอรี (dot) และ .. (dot dot)
filename .(จุด) แสดงถึงไดเร็กทอรีการทำงานปัจจุบัน และfilename .. (dot dot) แสดงถึงไดเร็กทอรีหนึ่งระดับเหนือไดเร็กทอรีการทำงานปัจจุบันซึ่งมักเรียกว่าไดเร็กทอรีหลัก
หากเราป้อนคำสั่งเพื่อแสดงรายการไดเร็กทอรี / ไฟล์การทำงานปัจจุบันและใช้ไฟล์ -a option เพื่อแสดงรายการไฟล์ทั้งหมดและไฟล์ -l option เพื่อให้รายชื่อยาวเราจะได้รับผลดังต่อไปนี้
$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการอนุญาตไฟล์และโหมดการเข้าถึงใน Unix การเป็นเจ้าของไฟล์เป็นองค์ประกอบสำคัญของ Unix ที่มีวิธีการที่ปลอดภัยในการจัดเก็บไฟล์ ทุกไฟล์ใน Unix มีคุณสมบัติดังต่อไปนี้ -
Owner permissions - สิทธิ์ของเจ้าของเป็นตัวกำหนดว่าเจ้าของไฟล์สามารถดำเนินการใดในไฟล์ได้
Group permissions - สิทธิ์ของกลุ่มจะกำหนดสิ่งที่ผู้ใช้ซึ่งเป็นสมาชิกของกลุ่มที่เป็นสมาชิกของไฟล์สามารถดำเนินการกับไฟล์ได้
Other (world) permissions - สิทธิ์สำหรับผู้อื่นระบุว่าผู้ใช้รายอื่นสามารถดำเนินการใดในไฟล์ได้บ้าง
ตัวบ่งชี้การอนุญาต
ขณะใช้งาน ls -l คำสั่งจะแสดงข้อมูลต่างๆที่เกี่ยวข้องกับการอนุญาตไฟล์ดังนี้ -
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
ในที่นี้คอลัมน์แรกแสดงถึงโหมดการเข้าถึงที่แตกต่างกันเช่นสิทธิ์ที่เกี่ยวข้องกับไฟล์หรือไดเร็กทอรี
สิทธิ์จะถูกแบ่งออกเป็นกลุ่มละสามตำแหน่งและแต่ละตำแหน่งในกลุ่มหมายถึงสิทธิ์เฉพาะตามลำดับนี้: read (r), write (w), execute (x) -
อักขระสามตัวแรก (2-4) แสดงถึงสิทธิ์สำหรับเจ้าของไฟล์ ตัวอย่างเช่น,-rwxr-xr-- แสดงว่าเจ้าของมีสิทธิ์อ่าน (r) เขียน (w) และดำเนินการ (x)
กลุ่มที่สองของอักขระสามตัว (5-7) ประกอบด้วยสิทธิ์สำหรับกลุ่มที่ไฟล์นั้นอยู่ ตัวอย่างเช่น,-rwxr-xr-- แสดงว่ากลุ่มมีสิทธิ์อ่าน (r) และดำเนินการ (x) แต่ไม่มีสิทธิ์เขียน
กลุ่มสุดท้ายของอักขระสามตัว (8-10) แสดงถึงสิทธิ์สำหรับคนอื่น ๆ ตัวอย่างเช่น,-rwxr-xr-- แสดงว่ามี read (r) อนุญาตเท่านั้น
โหมดการเข้าถึงไฟล์
สิทธิ์ของไฟล์เป็นด่านแรกในการรักษาความปลอดภัยของระบบ Unix หน่วยการสร้างพื้นฐานของสิทธิ์ Unix คือไฟล์read, writeและ execute สิทธิ์ซึ่งได้อธิบายไว้ด้านล่าง -
อ่าน
ให้ความสามารถในการอ่านเช่นดูเนื้อหาของไฟล์
เขียน
ให้ความสามารถในการแก้ไขหรือลบเนื้อหาของไฟล์
ดำเนินการ
ผู้ใช้ที่มีสิทธิ์ในการดำเนินการสามารถเรียกใช้ไฟล์เป็นโปรแกรมได้
โหมดการเข้าถึงไดเรกทอรี
โหมดการเข้าถึงไดเร็กทอรีจะแสดงรายการและจัดระเบียบในลักษณะเดียวกับไฟล์อื่น ๆ มีข้อแตกต่างบางประการที่ต้องกล่าวถึง -
อ่าน
การเข้าถึงไดเร็กทอรีหมายความว่าผู้ใช้สามารถอ่านเนื้อหาได้ ผู้ใช้สามารถดูไฟล์filenames ภายในไดเร็กทอรี
เขียน
การเข้าถึงหมายถึงผู้ใช้สามารถเพิ่มหรือลบไฟล์จากไดเร็กทอรี
ดำเนินการ
การเรียกใช้ไดเร็กทอรีไม่สมเหตุสมผลดังนั้นให้คิดว่านี่เป็นการอนุญาตในการข้ามผ่าน
ผู้ใช้ต้องมี execute เข้าถึงไฟล์ bin ไดเร็กทอรีเพื่อดำเนินการ ls หรือ cd คำสั่ง
การเปลี่ยนสิทธิ์
ในการเปลี่ยนไฟล์หรือสิทธิ์ไดเร็กทอรีคุณใช้ไฟล์ chmod(เปลี่ยนโหมด) คำสั่ง มีสองวิธีในการใช้ chmod - โหมดสัญลักษณ์และโหมดสัมบูรณ์
ใช้ chmod ใน Symbolic Mode
วิธีที่ง่ายที่สุดสำหรับผู้เริ่มต้นในการแก้ไขสิทธิ์ของไฟล์หรือไดเร็กทอรีคือการใช้โหมดสัญลักษณ์ ด้วยสิทธิ์เชิงสัญลักษณ์คุณสามารถเพิ่มลบหรือระบุชุดสิทธิ์ที่คุณต้องการโดยใช้ตัวดำเนินการในตารางต่อไปนี้
ซีเนียร์ | ตัวดำเนินการ Chmod และคำอธิบาย |
---|---|
1 | + เพิ่มสิทธิ์ที่กำหนดให้กับไฟล์หรือไดเร็กทอรี |
2 | - ลบสิทธิ์ที่กำหนดออกจากไฟล์หรือไดเร็กทอรี |
3 | = ตั้งค่าการอนุญาตที่กำหนด |
นี่คือตัวอย่างการใช้ testfile. วิ่งls -1 บนไฟล์ทดสอบแสดงว่าสิทธิ์ของไฟล์มีดังนี้ -
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
จากนั้นแต่ละตัวอย่าง chmod คำสั่งจากตารางก่อนหน้านี้ถูกรันบนไฟล์ทดสอบตามด้วย ls –lคุณจึงสามารถเห็นการเปลี่ยนแปลงการอนุญาต -
$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
นี่คือวิธีที่คุณสามารถรวมคำสั่งเหล่านี้ไว้ในบรรทัดเดียว -
$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
ใช้ chmod ด้วยสิทธิ์แบบสัมบูรณ์
วิธีที่สองในการแก้ไขสิทธิ์ด้วยคำสั่ง chmod คือการใช้ตัวเลขเพื่อระบุชุดสิทธิ์แต่ละชุดสำหรับไฟล์
สิทธิ์แต่ละรายการจะได้รับการกำหนดค่าดังที่แสดงในตารางต่อไปนี้และผลรวมของสิทธิ์แต่ละชุดจะระบุตัวเลขสำหรับชุดนั้น
จำนวน | การเป็นตัวแทนของการอนุญาต Octal | อ้างอิง |
---|---|---|
0 | ไม่ได้รับอนุญาต | --- |
1 | ดำเนินการอนุญาต | --x |
2 | เขียนอนุญาต | -w- |
3 | สิทธิ์ดำเนินการและเขียน: 1 (ดำเนินการ) + 2 (เขียน) = 3 | -wx |
4 | อ่านสิทธิ์ | r-- |
5 | อ่านและดำเนินการอนุญาต: 4 (อ่าน) + 1 (ดำเนินการ) = 5 | rx |
6 | สิทธิ์ในการอ่านและเขียน: 4 (อ่าน) + 2 (เขียน) = 6 | rw- |
7 | สิทธิ์ทั้งหมด: 4 (อ่าน) + 2 (เขียน) + 1 (ดำเนินการ) = 7 | rwx |
นี่คือตัวอย่างการใช้ testfile วิ่งls -1 บนไฟล์ทดสอบแสดงว่าสิทธิ์ของไฟล์มีดังนี้ -
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
จากนั้นแต่ละตัวอย่าง chmod คำสั่งจากตารางก่อนหน้านี้ถูกรันบนไฟล์ทดสอบตามด้วย ls –lคุณจึงสามารถเห็นการเปลี่ยนแปลงการอนุญาต -
$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
การเปลี่ยนเจ้าของและกลุ่ม
ในขณะที่สร้างบัญชีบน Unix จะกำหนดไฟล์ owner ID และก group IDให้กับผู้ใช้แต่ละคน การอนุญาตทั้งหมดที่กล่าวถึงข้างต้นยังได้รับมอบหมายตามเจ้าของและกลุ่ม
มีคำสั่งสองคำสั่งเพื่อเปลี่ยนเจ้าของและกลุ่มของไฟล์ -
chown - chown คำสั่งย่อมาจาก "change owner" และใช้เพื่อเปลี่ยนเจ้าของไฟล์
chgrp - chgrp คำสั่งย่อมาจาก "change group" และใช้เพื่อเปลี่ยนกลุ่มของไฟล์
การเปลี่ยนความเป็นเจ้าของ
chownคำสั่งเปลี่ยนความเป็นเจ้าของไฟล์ ไวยากรณ์พื้นฐานมีดังนี้ -
$ chown user filelist
ค่าของผู้ใช้อาจเป็นได้ทั้ง name of a user บนระบบหรือ user id (uid) ของผู้ใช้ในระบบ
ตัวอย่างต่อไปนี้จะช่วยให้คุณเข้าใจแนวคิด -
$ chown amrood testfile $
เปลี่ยนเจ้าของไฟล์ที่กำหนดให้เป็นผู้ใช้ amrood.
NOTE - ผู้ใช้ขั้นสูงรูทมีความสามารถที่ไม่ จำกัด ในการเปลี่ยนความเป็นเจ้าของไฟล์ใด ๆ แต่ผู้ใช้ทั่วไปสามารถเปลี่ยนความเป็นเจ้าของเฉพาะไฟล์ที่พวกเขาเป็นเจ้าของได้
การเปลี่ยนความเป็นเจ้าของกลุ่ม
chgrpคำสั่งเปลี่ยนความเป็นเจ้าของกลุ่มของไฟล์ ไวยากรณ์พื้นฐานมีดังนี้ -
$ chgrp group filelist
ค่าของกลุ่มสามารถเป็นไฟล์ name of a group ในระบบหรือ the group ID (GID) ของกลุ่มบนระบบ
ตัวอย่างต่อไปนี้ช่วยให้คุณเข้าใจแนวคิด -
$ chgrp special testfile
$
เปลี่ยนกลุ่มของไฟล์ที่กำหนดเป็น special กลุ่ม.
การอนุญาตไฟล์ SUID และ SGID
บ่อยครั้งเมื่อมีการเรียกใช้คำสั่งคำสั่งนั้นจะต้องดำเนินการด้วยสิทธิพิเศษเพื่อให้งานสำเร็จ
ตัวอย่างเช่นเมื่อคุณเปลี่ยนรหัสผ่านด้วยไฟล์ passwd รหัสผ่านใหม่ของคุณจะถูกเก็บไว้ในไฟล์ /etc/shadow.
ในฐานะผู้ใช้ทั่วไปคุณไม่มี read หรือ writeเข้าถึงไฟล์นี้ด้วยเหตุผลด้านความปลอดภัย แต่เมื่อคุณเปลี่ยนรหัสผ่านคุณจะต้องมีสิทธิ์ในการเขียนไฟล์นี้ ซึ่งหมายความว่าpasswd โปรแกรมต้องให้สิทธิ์เพิ่มเติมแก่คุณเพื่อให้คุณสามารถเขียนลงไฟล์ได้ /etc/shadow.
สิทธิ์เพิ่มเติมจะมอบให้กับโปรแกรมผ่านกลไกที่เรียกว่า Set User ID (SUID) และ Set Group ID (SGID) บิต
เมื่อคุณรันโปรแกรมที่เปิดใช้งานบิต SUID คุณจะได้รับสิทธิ์ของเจ้าของโปรแกรมนั้น โปรแกรมที่ไม่มีชุดบิต SUID จะทำงานโดยได้รับอนุญาตจากผู้ใช้ที่เริ่มโปรแกรม
เป็นกรณีที่มี SGID เช่นกัน โดยปกติโปรแกรมจะดำเนินการโดยใช้สิทธิ์กลุ่มของคุณ แต่กลุ่มของคุณจะถูกเปลี่ยนเฉพาะสำหรับโปรแกรมนี้เป็นเจ้าของกลุ่มของโปรแกรม
บิต SUID และ SGID จะปรากฏเป็นตัวอักษร "s"หากมีการอนุญาต SUID"s" บิตจะอยู่ในบิตการอนุญาตที่เจ้าของ execute การอนุญาตตามปกติอยู่
ตัวอย่างเช่นคำสั่ง -
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
แสดงว่าบิต SUID ถูกตั้งค่าและคำสั่งนั้นเป็นของรูท อักษรตัวใหญ่S ในตำแหน่งดำเนินการแทนตัวพิมพ์เล็ก s แสดงว่าไม่ได้ตั้งค่าบิตดำเนินการ
หากเปิดใช้งานบิตเหนียวบนไดเร็กทอรีไฟล์จะถูกลบออกก็ต่อเมื่อคุณเป็นหนึ่งในผู้ใช้ต่อไปนี้ -
- เจ้าของสารบบเหนียว
- เจ้าของไฟล์ที่กำลังลบออก
- ผู้ใช้ขั้นสูงรูท
ในการตั้งค่าบิต SUID และ SGID สำหรับไดเร็กทอรีใด ๆ ให้ลองใช้คำสั่งต่อไปนี้ -
$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับสภาพแวดล้อม Unix แนวคิด Unix ที่สำคัญคือไฟล์environmentซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม บางโปรแกรมถูกกำหนดโดยระบบคนอื่น ๆ โดยคุณ แต่คนอื่น ๆ โดยเชลล์หรือโปรแกรมใด ๆ ที่โหลดโปรแกรมอื่น
ตัวแปรคือสตริงอักขระที่เรากำหนดค่า ค่าที่กำหนดอาจเป็นตัวเลขข้อความชื่อไฟล์อุปกรณ์หรือข้อมูลประเภทอื่น ๆ
ตัวอย่างเช่นอันดับแรกเราตั้งค่าตัวแปร TEST จากนั้นเราเข้าถึงค่าโดยใช้ echo คำสั่ง -
$TEST="Unix Programming" $echo $TEST
จะให้ผลลัพธ์ดังต่อไปนี้
Unix Programming
โปรดสังเกตว่าตัวแปรสภาพแวดล้อมถูกตั้งค่าโดยไม่ใช้ $ลงชื่อเข้าใช้ แต่ในขณะที่เข้าถึงเราใช้เครื่องหมาย $ เป็นคำนำหน้า ตัวแปรเหล่านี้ยังคงรักษาค่าไว้จนกว่าเราจะออกมาจากเปลือก
เมื่อคุณเข้าสู่ระบบเชลล์จะผ่านเฟสที่เรียกว่า initializationเพื่อตั้งค่าสภาพแวดล้อม โดยปกติจะเป็นกระบวนการสองขั้นตอนที่เกี่ยวข้องกับเชลล์อ่านไฟล์ต่อไปนี้ -
- /etc/profile
- profile
กระบวนการมีดังนี้ -
เชลล์ตรวจสอบเพื่อดูว่าไฟล์ /etc/profile มีอยู่
ถ้ามีอยู่เชลล์จะอ่านมัน มิฉะนั้นไฟล์นี้จะถูกข้ามไป ไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น
เชลล์ตรวจสอบเพื่อดูว่าไฟล์ .profileมีอยู่ในโฮมไดเร็กทอรีของคุณ โฮมไดเร็กทอรีของคุณคือไดเร็กทอรีที่คุณเริ่มต้นหลังจากที่คุณเข้าสู่ระบบ
ถ้ามีอยู่เชลล์จะอ่านมัน มิฉะนั้นเชลล์จะข้ามไป ไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น
ทันทีที่อ่านไฟล์ทั้งสองนี้เชลล์จะแสดงพร้อมต์ -
$
นี่คือพรอมต์ที่คุณสามารถป้อนคำสั่งเพื่อให้ดำเนินการได้
Note - ขั้นตอนการเริ่มต้นเชลล์ที่มีรายละเอียดที่นี่ใช้ได้กับทุกคน Bourne พิมพ์เชลล์ แต่ไฟล์เพิ่มเติมบางไฟล์ถูกใช้โดย bash และ ksh.
ไฟล์. profile
ไฟล์ /etc/profile ได้รับการดูแลโดยผู้ดูแลระบบของเครื่อง Unix ของคุณและมีข้อมูลการเตรียมใช้งานเชลล์ที่ผู้ใช้ทุกคนต้องการในระบบ
ไฟล์ .profileอยู่ภายใต้การควบคุมของคุณ คุณสามารถเพิ่มข้อมูลการปรับแต่งเชลล์ลงในไฟล์นี้ได้มากเท่าที่คุณต้องการ ชุดข้อมูลขั้นต่ำที่คุณต้องกำหนดค่าประกอบด้วย -
- ประเภทของเครื่องปลายทางที่คุณใช้
- รายชื่อไดเร็กทอรีที่ใช้ค้นหาคำสั่ง
- รายการตัวแปรที่มีผลต่อรูปลักษณ์ของเครื่องปลายทางของคุณ
คุณสามารถตรวจสอบไฟล์ .profileมีอยู่ในโฮมไดเร็กทอรีของคุณ เปิดโดยใช้ตัวแก้ไข vi และตรวจสอบตัวแปรทั้งหมดที่กำหนดไว้สำหรับสภาพแวดล้อมของคุณ
การตั้งค่าประเภทเทอร์มินัล
โดยปกติแล้วประเภทของเทอร์มินัลที่คุณใช้จะได้รับการกำหนดค่าโดยอัตโนมัติโดยไฟล์ login หรือ gettyโปรแกรม บางครั้งกระบวนการกำหนดค่าอัตโนมัติคาดเดาเทอร์มินัลของคุณไม่ถูกต้อง
หากเทอร์มินัลของคุณตั้งค่าไม่ถูกต้องผลลัพธ์ของคำสั่งอาจดูแปลก ๆ หรือคุณอาจไม่สามารถโต้ตอบกับเชลล์ได้อย่างถูกต้อง
เพื่อให้แน่ใจว่าไม่ใช่กรณีนี้ผู้ใช้ส่วนใหญ่ตั้งค่าเทอร์มินัลเป็นตัวส่วนร่วมต่ำสุดด้วยวิธีต่อไปนี้ -
$TERM=vt100 $
การตั้งค่า PATH
เมื่อคุณพิมพ์คำสั่งใด ๆ บนพรอมต์คำสั่งเชลล์จะต้องค้นหาคำสั่งก่อนที่จะดำเนินการได้
ตัวแปร PATH ระบุตำแหน่งที่เชลล์ควรค้นหาคำสั่ง โดยปกติตัวแปร Path จะถูกตั้งค่าดังนี้ -
$PATH=/bin:/usr/bin $
ที่นี่แต่ละรายการคั่นด้วยอักขระโคลอน (:)เป็นไดเรกทอรี หากคุณร้องขอให้เชลล์ดำเนินการคำสั่งและไม่พบในไดเร็กทอรีใด ๆ ที่ระบุในตัวแปร PATH ข้อความที่คล้ายกับต่อไปนี้จะปรากฏขึ้น -
$hello hello: not found $
มีตัวแปรเช่น PS1 และ PS2 ซึ่งจะกล่าวถึงในหัวข้อถัดไป
ตัวแปร PS1 และ PS2
อักขระที่เชลล์แสดงเป็นพรอมต์คำสั่งของคุณจะถูกเก็บไว้ในตัวแปร PS1 คุณสามารถเปลี่ยนตัวแปรนี้ให้เป็นอะไรก็ได้ที่คุณต้องการ ทันทีที่คุณเปลี่ยนมันจะถูกใช้โดยเชลล์ตั้งแต่จุดนั้นเป็นต้นไป
ตัวอย่างเช่นหากคุณออกคำสั่ง -
$PS1='=>'
=>
=>
=>
ข้อความแจ้งของคุณจะกลายเป็น => เพื่อตั้งค่าของPS1 เพื่อให้แสดงไดเร็กทอรีการทำงานออกคำสั่ง -
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
ผลลัพธ์ของคำสั่งนี้คือพร้อมต์จะแสดงชื่อผู้ใช้ของผู้ใช้ชื่อเครื่อง (ชื่อโฮสต์) และไดเร็กทอรีการทำงาน
มีค่อนข้างน้อย escape sequencesที่สามารถใช้เป็นอาร์กิวเมนต์ค่าสำหรับ PS1; พยายาม จำกัด ตัวเองให้อยู่ในภาวะวิกฤตที่สุดเพื่อไม่ให้ข้อความแจ้งข้อมูลท่วมท้นคุณ
ซีเนียร์ | ลำดับและคำอธิบาย Escape |
---|---|
1 | \t เวลาปัจจุบันแสดงเป็น HH: MM: SS |
2 | \d วันที่ปัจจุบันแสดงเป็น Weekday Month Date |
3 | \n ขึ้นบรรทัดใหม่ |
4 | \s สภาพแวดล้อมเชลล์ปัจจุบัน |
5 | \W ไดเร็กทอรีการทำงาน |
6 | \w เส้นทางแบบเต็มของไดเร็กทอรีการทำงาน |
7 | \u ชื่อผู้ใช้ของผู้ใช้ปัจจุบัน |
8 | \h ชื่อโฮสต์ของเครื่องปัจจุบัน |
9 | \# หมายเลขคำสั่งของคำสั่งปัจจุบัน เพิ่มขึ้นเมื่อป้อนคำสั่งใหม่ |
10 | \$ ถ้า UID ที่มีประสิทธิภาพคือ 0 (นั่นคือถ้าคุณล็อกอินด้วย root) ให้จบพร้อมท์ด้วยอักขระ # มิฉะนั้นให้ใช้เครื่องหมาย $ |
คุณสามารถทำการเปลี่ยนแปลงได้ด้วยตัวเองทุกครั้งที่คุณเข้าสู่ระบบหรือคุณสามารถทำการเปลี่ยนแปลงโดยอัตโนมัติใน PS1 โดยเพิ่มลงใน .profile ไฟล์.
เมื่อคุณออกคำสั่งที่ไม่สมบูรณ์เชลล์จะแสดงพรอมต์รองและรอให้คุณทำคำสั่งเสร็จแล้วกด Enter อีกครั้ง.
พรอมต์รองเริ่มต้นคือ > (เครื่องหมายที่มากกว่า) แต่สามารถเปลี่ยนแปลงได้โดยการกำหนด PS2 ตัวแปรเชลล์ -
ต่อไปนี้เป็นตัวอย่างที่ใช้พรอมต์รองเริ่มต้น -
$ echo "this is a > test" this is a test $
ตัวอย่างด้านล่างกำหนด PS2 ใหม่ด้วยพรอมต์ที่กำหนดเอง -
$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$
ตัวแปรสภาพแวดล้อม
ต่อไปนี้เป็นรายการบางส่วนของตัวแปรสภาพแวดล้อมที่สำคัญ ตัวแปรเหล่านี้ได้รับการตั้งค่าและเข้าถึงตามที่ระบุไว้ด้านล่าง -
ซีเนียร์ | ตัวแปรและคำอธิบาย |
---|---|
1 | DISPLAY มีตัวระบุสำหรับการแสดงผลที่ X11 โปรแกรมควรใช้โดยค่าเริ่มต้น |
2 | HOME ระบุโฮมไดเร็กทอรีของผู้ใช้ปัจจุบัน: อาร์กิวเมนต์ดีฟอลต์สำหรับ cd built-in คำสั่ง |
3 | IFS บ่งชี้ Internal Field Separator ที่ใช้โดย parser สำหรับการแยกคำหลังจากการขยาย |
4 | LANG LANG ขยายเป็นภาษาของระบบเริ่มต้น สามารถใช้ LC_ALL เพื่อลบล้างสิ่งนี้ได้ ตัวอย่างเช่นหากค่าของมันคือpt_BRจากนั้นภาษาจะถูกตั้งค่าเป็น (บราซิล) โปรตุเกสและภาษาเป็นบราซิล |
5 | LD_LIBRARY_PATH ระบบ Unix ที่มีตัวเชื่อมโยงแบบไดนามิกมีรายการไดเร็กทอรีที่มีการแบ่งสีซึ่งตัวเชื่อมโยงแบบไดนามิกควรค้นหาวัตถุที่แบ่งใช้เมื่อสร้างอิมเมจกระบวนการหลังจาก exec ก่อนที่จะค้นหาในไดเร็กทอรีอื่น |
6 | PATH ระบุเส้นทางการค้นหาสำหรับคำสั่ง เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งเชลล์จะค้นหาคำสั่ง |
7 | PWD ระบุไดเร็กทอรีการทำงานปัจจุบันตามที่กำหนดโดยคำสั่ง cd |
8 | RANDOM สร้างจำนวนเต็มที่สุ่มระหว่าง 0 ถึง 32,767 ในแต่ละครั้งที่มีการอ้างอิง |
9 | SHLVL เพิ่มขึ้นทีละครั้งในแต่ละครั้งที่เริ่มต้นการทุบตี ตัวแปรนี้มีประโยชน์สำหรับการพิจารณาว่าคำสั่ง exit ในตัวจะสิ้นสุดเซสชันปัจจุบันหรือไม่ |
10 | TERM หมายถึงประเภทการแสดงผล |
11 | TZ หมายถึงเขตเวลา สามารถใช้ค่าเช่น GMT, AST และอื่น ๆ |
12 | UID ขยายเป็น ID ผู้ใช้ที่เป็นตัวเลขของผู้ใช้ปัจจุบันเริ่มต้นเมื่อเชลล์เริ่มทำงาน |
ต่อไปนี้เป็นตัวอย่างตัวอย่างที่แสดงตัวแปรสภาพแวดล้อม -
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการพิมพ์และอีเมลเป็นยูทิลิตี้พื้นฐานของ Unix จนถึงตอนนี้เราได้พยายามทำความเข้าใจระบบปฏิบัติการ Unix และลักษณะของคำสั่งพื้นฐานแล้ว ในบทนี้เราจะเรียนรู้ยูทิลิตี้ Unix ที่สำคัญบางอย่างที่สามารถใช้ในชีวิตประจำวันของเรา
การพิมพ์ไฟล์
ก่อนที่คุณจะพิมพ์ไฟล์ในระบบ Unix คุณอาจต้องฟอร์แมตใหม่เพื่อปรับระยะขอบเน้นคำบางคำและอื่น ๆ ไฟล์ส่วนใหญ่สามารถพิมพ์ได้โดยไม่ต้องฟอร์แมตใหม่ แต่งานพิมพ์ดิบอาจไม่น่าสนใจเท่าไหร่
Unix หลายเวอร์ชันมีการจัดรูปแบบข้อความที่มีประสิทธิภาพสองรูปแบบ nroff และ troff.
คำสั่ง pr
prคำสั่งทำการฟอร์แมตไฟล์เล็กน้อยบนหน้าจอเทอร์มินัลหรือสำหรับเครื่องพิมพ์ ตัวอย่างเช่นหากคุณมีรายชื่อยาว ๆ ในไฟล์คุณสามารถจัดรูปแบบชื่อบนหน้าจอเป็นสองคอลัมน์ขึ้นไป
ต่อไปนี้เป็นไวยากรณ์สำหรับ pr คำสั่ง -
pr option(s) filename(s)
prเปลี่ยนรูปแบบของไฟล์บนหน้าจอหรือบนสำเนาที่พิมพ์เท่านั้น มันไม่ได้แก้ไขไฟล์ต้นฉบับ ตารางต่อไปนี้แสดงรายการบางส่วนpr ตัวเลือก -
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -k ผลิต k คอลัมน์ของผลลัพธ์ |
2 | -d เพิ่มช่องว่างให้กับเอาต์พุตสองเท่า (ไม่ใช่ทั้งหมด pr รุ่น) |
3 | -h "header" นำรายการถัดไปเป็นส่วนหัวของรายงาน |
4 | -t กำจัดการพิมพ์ส่วนหัวและระยะขอบบน / ล่าง |
5 | -l PAGE_LENGTH ตั้งค่าความยาวของหน้าเป็น PAGE_LENGTH (66) บรรทัด จำนวนบรรทัดข้อความเริ่มต้นคือ 56 |
6 | -o MARGIN ออฟเซ็ตแต่ละบรรทัดด้วยช่องว่าง MARGIN (ศูนย์) |
7 | -w PAGE_WIDTH ตั้งค่าความกว้างของหน้าเป็น PAGE_WIDTH (72) อักขระสำหรับเอาต์พุตหลายคอลัมน์ข้อความเท่านั้น |
ก่อนใช้ prนี่คือเนื้อหาของไฟล์ตัวอย่างชื่ออาหาร
$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $
มาใช้ไฟล์ prคำสั่งเพื่อสร้างรายงานสองคอลัมน์ด้วยส่วนหัวร้านอาหาร -
$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $
คำสั่ง lp และ lpr
คำสั่ง lp หรือ lprพิมพ์ไฟล์ลงบนกระดาษตรงข้ามกับการแสดงผลบนหน้าจอ เมื่อคุณพร้อมสำหรับการจัดรูปแบบโดยใช้ไฟล์pr คุณสามารถใช้คำสั่งเหล่านี้เพื่อพิมพ์ไฟล์ของคุณบนเครื่องพิมพ์ที่เชื่อมต่อกับคอมพิวเตอร์ของคุณ
ผู้ดูแลระบบของคุณอาจตั้งค่าเครื่องพิมพ์เริ่มต้นที่ไซต์ของคุณ ในการพิมพ์ไฟล์ชื่อfood บนเครื่องพิมพ์เริ่มต้นให้ใช้ไฟล์ lp หรือ lpr คำสั่งดังตัวอย่างต่อไปนี้ -
$lp food request id is laserp-525 (1 file) $
lp คำสั่งแสดง ID ที่คุณสามารถใช้เพื่อยกเลิกงานพิมพ์หรือตรวจสอบสถานะได้
หากคุณกำลังใช้ไฟล์ lp คุณสามารถใช้ -nNumตัวเลือกในการพิมพ์จำนวนสำเนา พร้อมกับคำสั่งlpr, คุณสามารถใช้ได้ -Num สำหรับสิ่งเดียวกัน
หากมีเครื่องพิมพ์หลายเครื่องเชื่อมต่อกับเครือข่ายที่ใช้ร่วมกันคุณสามารถเลือกเครื่องพิมพ์โดยใช้ -dprinter ตัวเลือกพร้อมกับคำสั่ง lp และเพื่อจุดประสงค์เดียวกันคุณสามารถใช้ -Pprinterตัวเลือกพร้อมกับคำสั่ง lpr เครื่องพิมพ์นี่คือชื่อเครื่องพิมพ์
คำสั่ง lpstat และ lpq
lpstat คำสั่งแสดงสิ่งที่อยู่ในคิวเครื่องพิมพ์: ID คำขอ, เจ้าของ, ขนาดไฟล์, เมื่องานถูกส่งไปพิมพ์และสถานะของคำขอ
ใช้ lpstat -oหากคุณต้องการดูคำขอเอาต์พุตทั้งหมดนอกเหนือจากของคุณเอง คำขอจะแสดงตามลำดับที่จะพิมพ์ -
$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $
lpq ให้ข้อมูลที่แตกต่างจาก lpstat -o -
$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $
บรรทัดแรกจะแสดงสถานะเครื่องพิมพ์ หากเครื่องพิมพ์ถูกปิดใช้งานหรือกระดาษหมดคุณอาจเห็นข้อความที่แตกต่างกันในบรรทัดแรกนี้
คำสั่งยกเลิกและ lprm
cancel คำสั่งยุติการร้องขอการพิมพ์จากไฟล์ lp command. lprm คำสั่งยุติทั้งหมด lpr requests. คุณสามารถระบุ ID ของคำขอ (แสดงโดย lp หรือ lpq) หรือชื่อเครื่องพิมพ์
$cancel laserp-575 request "laserp-575" cancelled $
หากต้องการยกเลิกคำขอใด ๆ ที่กำลังพิมพ์อยู่ไม่ว่าจะเป็น ID ใดก็ตามเพียงป้อนยกเลิกและชื่อเครื่องพิมพ์ -
$cancel laserp request "laserp-573" cancelled $
lprmคำสั่งจะยกเลิกงานที่ใช้งานอยู่หากเป็นของคุณ มิฉะนั้นคุณสามารถให้หมายเลขงานเป็นอาร์กิวเมนต์หรือใช้ไฟล์dash (-) เพื่อลบงานทั้งหมดของคุณ -
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
lprm คำสั่งจะบอกชื่อไฟล์จริงที่ลบออกจากคิวเครื่องพิมพ์
การส่งอีเมล
คุณใช้คำสั่ง Unix mail เพื่อส่งและรับเมล นี่คือไวยากรณ์ในการส่งอีเมล -
$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
นี่คือตัวเลือกที่สำคัญที่เกี่ยวข้องกับคำสั่งเมล
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -s ระบุหัวเรื่องบนบรรทัดรับคำสั่ง |
2 | -c ส่งสำเนาคาร์บอนไปยังรายชื่อผู้ใช้ รายชื่อควรเป็นรายชื่อที่คั่นด้วยจุลภาค |
3 | -b ส่งสำเนาตาบอดไปยังรายการ รายชื่อควรเป็นรายชื่อที่คั่นด้วยจุลภาค |
ต่อไปนี้เป็นตัวอย่างในการส่งข้อความทดสอบไปที่ [email protected]
$mail -s "Test Message" [email protected]
จากนั้นคุณจะต้องพิมพ์ข้อความของคุณตามด้วย "control-D"ที่จุดเริ่มต้นของบรรทัด หากต้องการหยุดเพียงพิมพ์จุด(.) ดังต่อไปนี้ -
Hi,
This is a test
.
Cc:
คุณสามารถส่งไฟล์ที่สมบูรณ์โดยใช้ไฟล์ redirect < operator ดังต่อไปนี้ -
$mail -s "Report 05/06/07" [email protected] < demo.txt
ในการตรวจสอบอีเมลขาเข้าในระบบ Unix ของคุณคุณเพียงพิมพ์อีเมลดังนี้ -
$mail
no email
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับท่อและตัวกรองใน Unix คุณสามารถเชื่อมต่อสองคำสั่งเข้าด้วยกันเพื่อให้เอาต์พุตจากโปรแกรมหนึ่งกลายเป็นอินพุตของโปรแกรมถัดไป คำสั่งสองคำสั่งขึ้นไปเชื่อมต่อในลักษณะนี้ในรูปแบบท่อ
ในการทำท่อให้ใส่แถบแนวตั้ง (|) บนบรรทัดคำสั่งระหว่างสองคำสั่ง
เมื่อโปรแกรมรับอินพุตจากโปรแกรมอื่นโปรแกรมจะดำเนินการบางอย่างกับอินพุตนั้นและเขียนผลลัพธ์ไปยังเอาต์พุตมาตรฐาน จะเรียกว่าfilter.
คำสั่ง grep
คำสั่ง grep ค้นหาไฟล์หรือไฟล์สำหรับบรรทัดที่มีรูปแบบที่แน่นอน ไวยากรณ์คือ -
$grep pattern file(s)
ชื่อ "grep" มาจากคำสั่ง ed (โปรแกรมแก้ไขบรรทัด Unix) g/re/p ซึ่งหมายความว่า "ค้นหานิพจน์ทั่วไปทั่วโลกและพิมพ์ทุกบรรทัดที่มี"
นิพจน์ทั่วไปเป็นข้อความธรรมดา (เช่นคำ) และ / หรืออักขระพิเศษที่ใช้สำหรับการจับคู่รูปแบบ
การใช้ grep ที่ง่ายที่สุดคือการมองหารูปแบบที่ประกอบด้วยคำเดียว สามารถใช้ในไพพ์เพื่อให้ส่งเฉพาะบรรทัดของอินพุตไฟล์ที่มีสตริงที่กำหนดไปยังเอาต์พุตมาตรฐาน หากคุณไม่ให้ชื่อไฟล์ grep เพื่ออ่านมันจะอ่านอินพุตมาตรฐาน นั่นคือวิธีการทำงานของโปรแกรมกรองทั้งหมด -
$ls -l | grep "Aug"
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
มีตัวเลือกมากมายที่คุณสามารถใช้ร่วมกับไฟล์ grep คำสั่ง -
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -v พิมพ์เส้นทั้งหมดที่ไม่ตรงกับรูปแบบ |
2 | -n พิมพ์บรรทัดที่ตรงกันและหมายเลขบรรทัด |
3 | -l พิมพ์เฉพาะชื่อไฟล์ที่มีบรรทัดตรงกัน (ตัวอักษร "l") |
4 | -c พิมพ์เฉพาะจำนวนบรรทัดที่ตรงกัน |
5 | -i จับคู่ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก |
ตอนนี้ให้เราใช้นิพจน์ทั่วไปที่บอกให้ grep ค้นหาบรรทัดด้วย "carol"ตามด้วยศูนย์หรืออักขระอื่น ๆ ที่ย่อในนิพจน์ทั่วไปว่า ". *") จากนั้นตามด้วย "ส.ค. " −
ที่นี่เรากำลังใช้ไฟล์ -i ตัวเลือกในการค้นหาแบบไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ -
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
คำสั่ง sort
sortคำสั่งจัดเรียงบรรทัดของข้อความตามตัวอักษรหรือตัวเลข ตัวอย่างต่อไปนี้จัดเรียงบรรทัดในไฟล์อาหาร -
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
sortคำสั่งจัดเรียงบรรทัดของข้อความตามตัวอักษรตามค่าเริ่มต้น มีตัวเลือกมากมายที่ควบคุมการเรียงลำดับ -
ซีเนียร์ | คำอธิบาย |
---|---|
1 | -n จัดเรียงตามตัวเลข (เช่น 10 จะเรียงตามหลัง 2) โดยไม่สนใจช่องว่างและแท็บ |
2 | -r กลับลำดับของการจัดเรียง |
3 | -f จัดเรียงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเข้าด้วยกัน |
4 | +x ละเว้นก่อน x เมื่อทำการเรียงลำดับ |
อาจมีการเชื่อมโยงคำสั่งมากกว่าสองคำสั่งเข้ากับไพพ์ นำตัวอย่างท่อก่อนหน้านี้โดยใช้grepเราสามารถจัดเรียงไฟล์ที่แก้ไขเพิ่มเติมในเดือนสิงหาคมตามลำดับขนาด
ไปป์ต่อไปนี้ประกอบด้วยคำสั่ง ls, grepและ sort -
$ls -l | grep "Aug" | sort +4n
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
$
ไปป์นี้จะจัดเรียงไฟล์ทั้งหมดในไดเร็กทอรีของคุณที่แก้ไขในเดือนสิงหาคมตามลำดับขนาดและพิมพ์บนหน้าจอเทอร์มินัล ตัวเลือกการเรียงลำดับ + 4n จะข้ามฟิลด์สี่ฟิลด์ (ฟิลด์ถูกคั่นด้วยช่องว่าง) จากนั้นเรียงลำดับบรรทัดตามลำดับตัวเลข
คำสั่ง pg และอื่น ๆ
โดยปกติคุณสามารถบีบอัดเอาต์พุตแบบยาวได้บนหน้าจอ แต่ถ้าคุณเรียกใช้ข้อความผ่านมากขึ้นหรือใช้ไฟล์ pgคำสั่งเป็นตัวกรอง การแสดงผลจะหยุดลงเมื่อหน้าจอเต็มไปด้วยข้อความ
สมมติว่าคุณมีรายชื่อไดเร็กทอรีแบบยาว เพื่อให้ง่ายต่อการอ่านรายชื่อที่เรียงลำดับให้ไพพ์เอาต์พุตผ่านmore ดังต่อไปนี้ -
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
หน้าจอจะเต็มเมื่อหน้าจอเต็มไปด้วยข้อความที่ประกอบด้วยบรรทัดที่เรียงตามลำดับของขนาดไฟล์ ที่ด้านล่างของหน้าจอคือไฟล์more พร้อมท์ซึ่งคุณสามารถพิมพ์คำสั่งเพื่อเลื่อนผ่านข้อความที่เรียงลำดับ
เมื่อคุณทำหน้าจอนี้เสร็จแล้วคุณสามารถใช้คำสั่งใด ๆ ที่ระบุไว้ในการอภิปรายของโปรแกรมเพิ่มเติม
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการจัดการกระบวนการใน Unix เมื่อคุณรันโปรแกรมบนระบบ Unix ของคุณระบบจะสร้างสภาพแวดล้อมพิเศษสำหรับโปรแกรมนั้น สภาพแวดล้อมนี้มีทุกสิ่งที่จำเป็นสำหรับระบบในการรันโปรแกรมราวกับว่าไม่มีโปรแกรมอื่นกำลังทำงานอยู่บนระบบ
เมื่อใดก็ตามที่คุณออกคำสั่งใน Unix คำสั่งนั้นจะสร้างหรือเริ่มกระบวนการใหม่ เมื่อคุณลองใช้ไฟล์lsคำสั่งเพื่อแสดงรายการเนื้อหาไดเร็กทอรีคุณเริ่มกระบวนการ กระบวนการพูดง่ายๆคือตัวอย่างของโปรแกรมที่กำลังทำงานอยู่
ระบบปฏิบัติการติดตามกระบวนการผ่านหมายเลข ID ห้าหลักที่เรียกว่า pid หรือ process ID. แต่ละกระบวนการในระบบมีลักษณะเฉพาะpid.
ในที่สุด Pids ก็ทำซ้ำเนื่องจากตัวเลขที่เป็นไปได้ทั้งหมดถูกใช้จนหมดและ pid ถัดไปจะหมุนหรือเริ่มใหม่ ในช่วงเวลาใดก็ตามไม่มีสองกระบวนการที่มี pid เดียวกันอยู่ในระบบเนื่องจากเป็น pid ที่ Unix ใช้เพื่อติดตามแต่ละกระบวนการ
การเริ่มต้นกระบวนการ
เมื่อคุณเริ่มกระบวนการ (รันคำสั่ง) มีสองวิธีที่คุณสามารถรันได้ -
- กระบวนการเบื้องหน้า
- กระบวนการเบื้องหลัง
กระบวนการเบื้องหน้า
ตามค่าเริ่มต้นทุกกระบวนการที่คุณเริ่มทำงานในส่วนหน้า รับข้อมูลจากแป้นพิมพ์และส่งเอาต์พุตไปที่หน้าจอ
คุณสามารถเห็นสิ่งนี้เกิดขึ้นได้ด้วยไฟล์ lsคำสั่ง หากคุณต้องการแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบันของคุณคุณสามารถใช้คำสั่งต่อไปนี้ -
$ls ch*.doc
สิ่งนี้จะแสดงไฟล์ทั้งหมดโดยชื่อที่ขึ้นต้นด้วย ch และลงท้ายด้วย .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
กระบวนการทำงานในเบื้องหน้าผลลัพธ์จะถูกส่งไปที่หน้าจอของฉันและหากไฟล์ ls คำสั่งต้องการอินพุตใด ๆ (ซึ่งไม่ได้ทำ) มันรอจากแป้นพิมพ์
ในขณะที่โปรแกรมกำลังทำงานอยู่เบื้องหน้าและใช้เวลานานไม่มีคำสั่งอื่นใดที่สามารถรันได้ (เริ่มกระบวนการอื่น ๆ ) เนื่องจากพรอมต์จะไม่พร้อมใช้งานจนกว่าโปรแกรมจะประมวลผลเสร็จและออกมา
กระบวนการเบื้องหลัง
กระบวนการพื้นหลังทำงานโดยไม่ต้องเชื่อมต่อกับแป้นพิมพ์ของคุณ หากกระบวนการพื้นหลังต้องการการป้อนข้อมูลด้วยแป้นพิมพ์ใด ๆ ก็จะรอ
ข้อดีของการรันกระบวนการในเบื้องหลังคือคุณสามารถรันคำสั่งอื่น ๆ คุณไม่ต้องรอจนกว่าจะเสร็จสมบูรณ์เพื่อเริ่มต้นใหม่!
วิธีที่ง่ายที่สุดในการเริ่มกระบวนการพื้นหลังคือการเพิ่มเครื่องหมายและ (&) ในตอนท้ายของคำสั่ง
$ls ch*.doc &
ซึ่งจะแสดงไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วย ch และลงท้ายด้วย .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
ที่นี่ถ้า ls คำสั่งต้องการอินพุตใด ๆ (ซึ่งมันไม่ได้) มันจะเข้าสู่สถานะหยุดจนกว่าเราจะย้ายไปที่เบื้องหน้าและให้ข้อมูลจากแป้นพิมพ์
บรรทัดแรกประกอบด้วยข้อมูลเกี่ยวกับกระบวนการเบื้องหลัง - หมายเลขงานและรหัสกระบวนการ คุณจำเป็นต้องทราบหมายเลขงานเพื่อจัดการระหว่างพื้นหลังและฉากหน้า
กดปุ่ม Enter และคุณจะเห็นสิ่งต่อไปนี้ -
[1] + Done ls ch*.doc &
$
บรรทัดแรกบอกคุณว่าไฟล์ lsกระบวนการพื้นหลังคำสั่งเสร็จสิ้นเรียบร้อยแล้ว อย่างที่สองคือพร้อมต์สำหรับคำสั่งอื่น
รายชื่อกระบวนการทำงาน
ง่ายต่อการดูกระบวนการของคุณเองโดยเรียกใช้ไฟล์ ps (สถานะกระบวนการ) คำสั่งดังนี้ -
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
หนึ่งในแฟล็กที่ใช้บ่อยที่สุดสำหรับ ps คือ -f (f สำหรับตัวเต็ม) ซึ่งให้ข้อมูลเพิ่มเติมดังที่แสดงในตัวอย่างต่อไปนี้ -
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
นี่คือคำอธิบายของฟิลด์ทั้งหมดที่แสดงโดย ps -f คำสั่ง -
ซีเนียร์ | คอลัมน์และคำอธิบาย |
---|---|
1 | UID ID ผู้ใช้ที่กระบวนการนี้เป็นของ (บุคคลที่เรียกใช้) |
2 | PID รหัสกระบวนการ |
3 | PPID รหัสกระบวนการหลัก (ID ของกระบวนการที่เริ่มต้น) |
4 | C การใช้งาน CPU ของกระบวนการ |
5 | STIME เวลาเริ่มดำเนินการ |
6 | TTY ประเภทเทอร์มินัลที่เกี่ยวข้องกับกระบวนการ |
7 | TIME เวลาของ CPU ที่ดำเนินการโดยกระบวนการ |
8 | CMD คำสั่งที่เริ่มต้นกระบวนการนี้ |
มีตัวเลือกอื่น ๆ ที่สามารถใช้ร่วมกับ ps คำสั่ง -
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -a แสดงข้อมูลเกี่ยวกับผู้ใช้ทั้งหมด |
2 | -x แสดงข้อมูลเกี่ยวกับกระบวนการที่ไม่มีเทอร์มินัล |
3 | -u แสดงข้อมูลเพิ่มเติมเช่นอ็อพชัน -f |
4 | -e แสดงข้อมูลเพิ่มเติม |
การหยุดกระบวนการ
การสิ้นสุดกระบวนการสามารถทำได้หลายวิธี บ่อยครั้งจากคำสั่งบนคอนโซลการส่งการกดแป้น CTRL + C (อักขระขัดจังหวะเริ่มต้น) จะออกจากคำสั่ง สิ่งนี้ใช้ได้เมื่อกระบวนการทำงานในโหมดเบื้องหน้า
หากกระบวนการทำงานอยู่เบื้องหลังคุณควรรับ Job ID โดยใช้ไฟล์ psคำสั่ง หลังจากนั้นคุณสามารถใช้ไฟล์kill คำสั่งเพื่อฆ่ากระบวนการดังต่อไปนี้ -
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
ที่นี่ kill คำสั่งยกเลิก first_oneกระบวนการ. หากกระบวนการละเว้นคำสั่ง kill ปกติคุณสามารถใช้kill -9 ตามด้วยรหัสกระบวนการดังต่อไปนี้ -
$kill -9 6738
Terminated
กระบวนการของผู้ปกครองและเด็ก
กระบวนการยูนิกซ์แต่ละกระบวนการมีหมายเลข ID สองหมายเลขที่กำหนดให้: รหัสกระบวนการ (pid) และรหัสกระบวนการหลัก (ppid) กระบวนการผู้ใช้แต่ละคนในระบบมีกระบวนการหลัก
คำสั่งส่วนใหญ่ที่คุณรันมีเชลล์เป็นพาเรนต์ ตรวจสอบไฟล์ps -f ตัวอย่างที่คำสั่งนี้แสดงรายการทั้ง ID กระบวนการและ ID กระบวนการหลัก
กระบวนการซอมบี้และเด็กกำพร้า
โดยปกติเมื่อกระบวนการย่อยถูกฆ่ากระบวนการพาเรนต์จะได้รับการอัพเดตผ่านไฟล์ SIGCHLDสัญญาณ. จากนั้นผู้ปกครองสามารถทำงานอื่น ๆ หรือรีสตาร์ทลูกใหม่ได้ตามต้องการ อย่างไรก็ตามบางครั้งกระบวนการหลักจะถูกฆ่าก่อนที่ลูกของมันจะถูกฆ่า ในกรณีนี้ "พาเรนต์ของกระบวนการทั้งหมด"initจะกลายเป็น PPID ใหม่ (รหัสกระบวนการหลัก) ในบางกรณีกระบวนการเหล่านี้เรียกว่ากระบวนการเด็กกำพร้า
เมื่อกระบวนการถูกฆ่า a ps รายชื่ออาจยังคงแสดงกระบวนการด้วยไฟล์ Zสถานะ. นี่คือซอมบี้หรือกระบวนการที่ตายแล้ว กระบวนการนี้ตายและไม่ได้ใช้ กระบวนการเหล่านี้แตกต่างจากกระบวนการเด็กกำพร้า พวกเขาดำเนินการเสร็จสิ้นแล้ว แต่ยังคงพบรายการในตารางกระบวนการ
กระบวนการ Daemon
Daemons เป็นกระบวนการเบื้องหลังที่เกี่ยวข้องกับระบบซึ่งมักจะทำงานโดยได้รับอนุญาตจากการร้องขอรูทและเซอร์วิสจากกระบวนการอื่น ๆ
ภูตไม่มีเทอร์มินัลควบคุม ไม่สามารถเปิดได้/dev/tty. ถ้าคุณทำ"ps -ef" และดูที่ไฟล์ tty ฟิลด์ภูตทั้งหมดจะมีไฟล์ ? สำหรับ tty.
เพื่อความถูกต้อง daemon คือกระบวนการที่ทำงานอยู่เบื้องหลังโดยปกติจะรอให้บางสิ่งเกิดขึ้นซึ่งสามารถทำงานได้ ตัวอย่างเช่นดีมอนเครื่องพิมพ์รอคำสั่งพิมพ์
หากคุณมีโปรแกรมที่เรียกร้องให้มีการประมวลผลที่ยาวนานคุณควรทำให้เป็น daemon และเรียกใช้ในพื้นหลัง
คำสั่งด้านบน
top คำสั่งเป็นเครื่องมือที่มีประโยชน์มากสำหรับการแสดงกระบวนการอย่างรวดเร็วโดยเรียงตามเกณฑ์ต่างๆ
เป็นเครื่องมือวินิจฉัยเชิงโต้ตอบที่อัปเดตบ่อยครั้งและแสดงข้อมูลเกี่ยวกับหน่วยความจำกายภาพและเสมือนการใช้งาน CPU ค่าเฉลี่ยโหลดและกระบวนการที่วุ่นวายของคุณ
นี่คือไวยากรณ์ง่ายๆในการเรียกใช้คำสั่งด้านบนและดูสถิติการใช้งาน CPU ตามกระบวนการต่างๆ -
$top
รหัสงานเทียบกับรหัสกระบวนการ
พื้นหลังและกระบวนการที่ถูกระงับมักจะถูกจัดการผ่าน job number (job ID). หมายเลขนี้แตกต่างจาก ID กระบวนการและถูกใช้เนื่องจากสั้นกว่า
นอกจากนี้งานอาจประกอบด้วยหลายกระบวนการที่ทำงานเป็นชุดหรือพร้อมกันในเวลาเดียวกัน การใช้ ID งานนั้นง่ายกว่าการติดตามแต่ละกระบวนการ
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับยูทิลิตี้การสื่อสารเครือข่ายใน Unix เมื่อคุณทำงานในสภาพแวดล้อมแบบกระจายคุณจำเป็นต้องสื่อสารกับผู้ใช้ระยะไกลและคุณต้องเข้าถึงเครื่อง Unix ระยะไกลด้วย
มียูทิลิตี้ Unix หลายตัวที่ช่วยให้ผู้ใช้คำนวณในสภาพแวดล้อมแบบกระจายเครือข่าย บทนี้แสดงรายการบางส่วน
ยูทิลิตี้ ping
pingคำสั่งส่งคำขอเสียงสะท้อนไปยังโฮสต์ที่มีอยู่บนเครือข่าย เมื่อใช้คำสั่งนี้คุณสามารถตรวจสอบว่าโฮสต์ระยะไกลของคุณตอบสนองได้ดีหรือไม่
คำสั่ง ping มีประโยชน์สำหรับสิ่งต่อไปนี้ -
- การติดตามและแยกปัญหาฮาร์ดแวร์และซอฟต์แวร์
- การกำหนดสถานะของเครือข่ายและโฮสต์ต่างประเทศต่างๆ
- การทดสอบการวัดและการจัดการเครือข่าย
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์ง่ายๆในการใช้คำสั่ง ftp -
$ping hostname or ip-address
คำสั่งดังกล่าวเริ่มพิมพ์การตอบกลับทุกวินาที หากต้องการออกจากคำสั่งคุณสามารถยกเลิกได้โดยการกดCNTRL + C คีย์
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างเพื่อตรวจสอบความพร้อมใช้งานของโฮสต์ที่มีอยู่บนเครือข่าย -
$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $
หากไม่มีโฮสต์คุณจะได้รับผลลัพธ์ต่อไปนี้ -
$ping giiiiiigle.com ping: unknown host giiiiigle.com $
ยูทิลิตี้ ftp
ที่นี่ ftp หมายถึง File Tเรียกค่าไถ่ Protocol ยูทิลิตี้นี้ช่วยให้คุณอัปโหลดและดาวน์โหลดไฟล์จากคอมพิวเตอร์เครื่องหนึ่งไปยังคอมพิวเตอร์เครื่องอื่น
ยูทิลิตี้ ftp มีชุดคำสั่งที่เหมือน Unix ของตัวเอง คำสั่งเหล่านี้ช่วยให้คุณทำงานต่างๆเช่น -
เชื่อมต่อและล็อกอินเข้าสู่โฮสต์ระยะไกล
นำทางไดเรกทอรี
แสดงรายการเนื้อหาไดเรกทอรี
ใส่และรับไฟล์
โอนไฟล์เป็น ascii, ebcdic หรือ binary.
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์ง่ายๆในการใช้คำสั่ง ftp -
$ftp hostname or ip-address
คำสั่งดังกล่าวจะแจ้งให้คุณป้อน ID ล็อกอินและรหัสผ่าน เมื่อคุณได้รับการรับรองความถูกต้องคุณสามารถเข้าถึงโฮมไดเร็กทอรีของบัญชีล็อกอินและคุณจะสามารถใช้คำสั่งต่างๆได้
ตารางต่อไปนี้แสดงรายการคำสั่งที่สำคัญบางคำ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | put filename อัปโหลดชื่อไฟล์จากเครื่องภายในไปยังเครื่องระยะไกล |
2 | get filename ดาวน์โหลดชื่อไฟล์จากเครื่องระยะไกลไปยังเครื่องภายใน |
3 | mput file list อัปโหลดไฟล์มากกว่าหนึ่งไฟล์จากเครื่องภายในไปยังเครื่องระยะไกล |
4 | mget file list ดาวน์โหลดมากกว่าหนึ่งไฟล์จากเครื่องระยะไกลไปยังเครื่องภายใน |
5 | prompt off ปิดการแจ้งเตือน ตามค่าเริ่มต้นคุณจะได้รับแจ้งให้อัปโหลดหรือดาวน์โหลดไฟล์โดยใช้mput หรือ mget คำสั่ง |
6 | prompt on เปิดพรอมต์ |
7 | dir แสดงรายการไฟล์ทั้งหมดที่มีอยู่ในไดเร็กทอรีปัจจุบันของเครื่องระยะไกล |
8 | cd dirname เปลี่ยนไดเร็กทอรีเป็น dirname บนเครื่องรีโมต |
9 | lcd dirname เปลี่ยนไดเร็กทอรีเป็น dirname บนเครื่องโลคัล |
10 | quit ช่วยออกจากระบบจากการเข้าสู่ระบบปัจจุบัน |
ควรสังเกตว่าไฟล์ทั้งหมดจะถูกดาวน์โหลดหรืออัปโหลดไปยังหรือจากไดเรกทอรีปัจจุบัน หากคุณต้องการอัปโหลดไฟล์ของคุณในไดเร็กทอรีใดไดเร็กทอรีคุณต้องเปลี่ยนเป็นไดเร็กทอรีนั้นก่อนจากนั้นอัปโหลดไฟล์ที่ต้องการ
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างเพื่อแสดงการทำงานของคำสั่งสองสามคำสั่ง -
$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail
drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc
drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff
drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin
drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl
-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out
drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public
drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f
-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c
-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift
-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list
-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$
Telnet Utility
มีหลายครั้งที่เราจำเป็นต้องเชื่อมต่อกับเครื่อง Unix ระยะไกลและทำงานบนเครื่องนั้นจากระยะไกล Telnet เป็นยูทิลิตี้ที่อนุญาตให้ผู้ใช้คอมพิวเตอร์ในไซต์หนึ่งทำการเชื่อมต่อเข้าสู่ระบบจากนั้นทำงานบนคอมพิวเตอร์ที่ไซต์อื่น
เมื่อคุณเข้าสู่ระบบโดยใช้ Telnet คุณสามารถทำกิจกรรมทั้งหมดบนเครื่องที่เชื่อมต่อจากระยะไกลได้ ต่อไปนี้เป็นตัวอย่างของเซสชัน Telnet -
C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.
login: amrood
amrood's Password:
*****************************************************
* *
* *
* WELCOME TO AMROOD.COM *
* *
* *
*****************************************************
Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009
Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10
{ do your work }
$ logout
Connection closed.
C:>
ยูทิลิตี้นิ้ว
fingerคำสั่งแสดงข้อมูลเกี่ยวกับผู้ใช้บนโฮสต์ที่กำหนด โฮสต์สามารถเป็นแบบโลคัลหรือรีโมตก็ได้
ระบบอาจปิดการใช้นิ้วในระบบอื่นด้วยเหตุผลด้านความปลอดภัย
ต่อไปนี้เป็นไวยากรณ์ง่ายๆในการใช้คำสั่งนิ้ว -
ตรวจสอบผู้ใช้ที่ล็อกอินทั้งหมดบนเครื่องท้องถิ่น -
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
รับข้อมูลเกี่ยวกับผู้ใช้เฉพาะที่มีอยู่ในเครื่องท้องถิ่น -
$ finger amrood
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
ตรวจสอบผู้ใช้ที่ล็อกอินทั้งหมดบนเครื่องระยะไกล -
$ finger @avtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
รับข้อมูลเกี่ยวกับผู้ใช้เฉพาะที่มีอยู่ในเครื่องระยะไกล -
$ finger [email protected]
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
ในบทนี้เราจะเข้าใจว่าตัวแก้ไข vi ทำงานอย่างไรใน Unix มีหลายวิธีในการแก้ไขไฟล์ใน Unix การแก้ไขไฟล์โดยใช้โปรแกรมแก้ไขข้อความที่เน้นหน้าจอviเป็นวิธีที่ดีที่สุดวิธีหนึ่ง ตัวแก้ไขนี้ช่วยให้คุณสามารถแก้ไขบรรทัดในบริบทกับบรรทัดอื่น ๆ ในไฟล์
เวอร์ชันปรับปรุงของตัวแก้ไข vi ซึ่งเรียกว่า VIMยังมีวางจำหน่ายแล้ว ที่นี่ VIM ย่อมาจากVi IMพิสูจน์แล้ว.
โดยทั่วไปถือว่าเป็นมาตรฐานโดยพฤตินัยในโปรแกรมแก้ไข Unix เนื่องจาก -
โดยปกติจะมีให้บริการในระบบ Unix ทุกรสชาติ
การใช้งานมีความคล้ายคลึงกันมากทั่วทั้งกระดาน
ต้องใช้ทรัพยากรน้อยมาก
เป็นมิตรกับผู้ใช้มากกว่าโปรแกรมแก้ไขอื่น ๆ เช่นไฟล์ ed หรือ ex.
คุณสามารถใช้ไฟล์ viโปรแกรมแก้ไขเพื่อแก้ไขไฟล์ที่มีอยู่หรือสร้างไฟล์ใหม่ตั้งแต่ต้น คุณยังสามารถใช้โปรแกรมแก้ไขนี้เพื่ออ่านไฟล์ข้อความ
เริ่มตัวแก้ไข vi
ตารางต่อไปนี้แสดงคำสั่งพื้นฐานในการใช้ตัวแก้ไข vi -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | vi filename สร้างไฟล์ใหม่หากไม่มีอยู่แล้วมิฉะนั้นจะเปิดไฟล์ที่มีอยู่ |
2 | vi -R filename เปิดไฟล์ที่มีอยู่ในโหมดอ่านอย่างเดียว |
3 | view filename เปิดไฟล์ที่มีอยู่ในโหมดอ่านอย่างเดียว |
ต่อไปนี้เป็นตัวอย่างในการสร้างไฟล์ใหม่ testfile หากไม่มีอยู่ในไดเร็กทอรีการทำงานปัจจุบัน -
$vi testfile
คำสั่งดังกล่าวจะสร้างผลลัพธ์ต่อไปนี้ -
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
คุณจะสังเกตเห็นไฟล์ tilde(~) ในแต่ละบรรทัดต่อจากเคอร์เซอร์ เครื่องหมายทิลเดคือเส้นที่ไม่ได้ใช้ หากบรรทัดไม่ขึ้นต้นด้วยเครื่องหมายทิลเดอร์และดูเหมือนจะว่างเปล่าแสดงว่ามีช่องว่างแท็บขึ้นบรรทัดใหม่หรืออักขระที่ไม่สามารถดูได้อื่น ๆ
ตอนนี้คุณมีไฟล์ที่เปิดอยู่ 1 ไฟล์เพื่อเริ่มทำงาน ก่อนที่จะดำเนินการต่อไปโปรดให้เราเข้าใจแนวคิดสำคัญบางประการ
โหมดการทำงาน
ในขณะที่ทำงานกับตัวแก้ไข vi เรามักจะเจอสองโหมดต่อไปนี้ -
Command mode- โหมดนี้ช่วยให้คุณสามารถทำงานด้านการดูแลระบบเช่นการบันทึกไฟล์การดำเนินการคำสั่งการเลื่อนเคอร์เซอร์การตัด (การดึง) และการวางบรรทัดหรือคำตลอดจนการค้นหาและการแทนที่ ในโหมดนี้สิ่งที่คุณพิมพ์จะถูกตีความเป็นคำสั่ง
Insert mode- โหมดนี้ช่วยให้คุณสามารถแทรกข้อความลงในไฟล์ได้ ทุกสิ่งที่พิมพ์ในโหมดนี้จะถูกตีความว่าเป็นอินพุตและวางไว้ในไฟล์
vi มักจะเริ่มต้นในรูปแบบ command mode. ในการป้อนข้อความคุณต้องอยู่ในโหมดแทรกซึ่งเพียงแค่พิมพ์i. ในการออกจากโหมดแทรกให้กดปุ่มEsc ซึ่งจะนำคุณกลับไปที่โหมดคำสั่ง
Hint- หากคุณไม่แน่ใจว่าคุณอยู่ในโหมดใดให้กดปุ่ม Esc สองครั้ง สิ่งนี้จะนำคุณไปสู่โหมดคำสั่ง คุณเปิดไฟล์โดยใช้ตัวแก้ไข vi เริ่มต้นด้วยการพิมพ์อักขระบางตัวจากนั้นเข้าสู่โหมดคำสั่งเพื่อทำความเข้าใจความแตกต่าง
ออกจาก vi
คำสั่งให้ออกจาก vi คือ :q. เมื่ออยู่ในโหมดคำสั่งพิมพ์โคลอนและ 'q' ตามด้วย return หากไฟล์ของคุณได้รับการแก้ไขไม่ว่าด้วยวิธีใดตัวแก้ไขจะเตือนคุณถึงเรื่องนี้และไม่อนุญาตให้คุณออกจากระบบ หากต้องการละเว้นข้อความนี้คำสั่งให้ออกจาก vi โดยไม่บันทึกคือ:q!. วิธีนี้ช่วยให้คุณออกจาก vi ได้โดยไม่ต้องบันทึกการเปลี่ยนแปลงใด ๆ
คำสั่งในการบันทึกเนื้อหาของโปรแกรมแก้ไขคือ :w. คุณสามารถรวมคำสั่งด้านบนกับคำสั่งเลิกหรือใช้:wq และการกลับมา.
วิธีที่ง่ายที่สุด save your changes and exit viอยู่กับคำสั่ง ZZ เมื่อคุณอยู่ในโหมดคำสั่งพิมพ์ZZ. ZZ คำสั่งทำงานในลักษณะเดียวกับไฟล์ :wq คำสั่ง
หากคุณต้องการระบุ / ระบุชื่อเฉพาะสำหรับไฟล์คุณสามารถทำได้โดยระบุไว้หลังไฟล์ :w. ตัวอย่างเช่นหากคุณต้องการบันทึกไฟล์ที่คุณกำลังใช้งานเป็นชื่อไฟล์อื่นที่เรียกว่าfilename2คุณจะพิมพ์ :w filename2 และการกลับมา.
การย้ายภายในไฟล์
หากต้องการย้ายไปมาภายในไฟล์โดยไม่กระทบกับข้อความของคุณคุณต้องอยู่ในโหมดคำสั่ง (กด Esc สองครั้ง) ตารางต่อไปนี้แสดงรายการคำสั่งสองสามคำที่คุณสามารถใช้เพื่อเลื่อนไปทีละอักขระ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | k เลื่อนเคอร์เซอร์ขึ้นหนึ่งบรรทัด |
2 | j เลื่อนเคอร์เซอร์ลงหนึ่งบรรทัด |
3 | h เลื่อนเคอร์เซอร์ไปทางซ้ายหนึ่งตำแหน่งอักขระ |
4 | l เลื่อนเคอร์เซอร์ไปทางขวาหนึ่งตำแหน่งอักขระ |
จำเป็นต้องพิจารณาประเด็นต่อไปนี้เพื่อย้ายภายในไฟล์ -
vi เป็นกรณี ๆ ไป คุณต้องใส่ใจกับการใช้อักษรตัวพิมพ์ใหญ่เมื่อใช้คำสั่ง
คำสั่งส่วนใหญ่ใน vi สามารถนำหน้าด้วยจำนวนครั้งที่คุณต้องการให้การดำเนินการเกิดขึ้น ตัวอย่างเช่น,2j เลื่อนเคอร์เซอร์สองบรรทัดไปที่ตำแหน่งเคอร์เซอร์
มีวิธีอื่น ๆ อีกมากมายในการย้ายไฟล์ใน vi จำไว้ว่าคุณต้องอยู่ในโหมดคำสั่ง (press Esc twice). ตารางต่อไปนี้แสดงคำสั่งสองสามคำสั่งเพื่อย้ายไปรอบ ๆ ไฟล์ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | 0 or | วางเคอร์เซอร์ที่จุดเริ่มต้นของบรรทัด |
2 | $ วางเคอร์เซอร์ไว้ที่ท้ายบรรทัด |
3 | w วางเคอร์เซอร์ไปที่คำถัดไป |
4 | b วางเคอร์เซอร์ไปที่คำก่อนหน้า |
5 | ( วางเคอร์เซอร์ไปที่จุดเริ่มต้นของประโยคปัจจุบัน |
6 | ) วางเคอร์เซอร์ไปที่จุดเริ่มต้นของประโยคถัดไป |
7 | E ย้ายไปที่ส่วนท้ายของคำที่คั่นว่าง |
8 | { ย้ายย่อหน้ากลับ |
9 | } ย้ายย่อหน้าไปข้างหน้า |
10 | [[ ย้ายส่วนกลับ |
11 | ]] ย้ายส่วนไปข้างหน้า |
12 | n| ย้ายไปที่คอลัมน์ n ในบรรทัดปัจจุบัน |
13 | 1G ย้ายไปที่บรรทัดแรกของไฟล์ |
14 | G ย้ายไปที่บรรทัดสุดท้ายของไฟล์ |
15 | nG ย้ายไปที่ไฟล์ nth บรรทัดของไฟล์ |
16 | :n ย้ายไปที่ไฟล์ nth บรรทัดของไฟล์ |
17 | fc เลื่อนไปที่ c |
18 | Fc ย้ายกลับไปที่ c |
19 | H ย้ายไปที่ด้านบนสุดของหน้าจอ |
20 | nH ย้ายไปที่ไฟล์ nth เส้นจากด้านบนของหน้าจอ |
21 | M เลื่อนไปตรงกลางหน้าจอ |
22 | L ย้ายไปที่ด้านล่างของหน้าจอ |
23 | nL ย้ายไปที่ไฟล์ nth เส้นจากด้านล่างของหน้าจอ |
24 | :x โคลอนตามด้วยตัวเลขจะวางตำแหน่งเคอร์เซอร์บนหมายเลขบรรทัดที่แสดงโดย x |
คำสั่งควบคุม
คำสั่งต่อไปนี้สามารถใช้กับ Control Key เพื่อทำหน้าที่ตามที่กำหนดในตารางด้านล่าง -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | CTRL+d เลื่อนไปข้างหน้า 1/2 หน้าจอ |
2 | CTRL+f เลื่อนไปข้างหน้าหนึ่งแบบเต็มหน้าจอ |
3 | CTRL+u เลื่อนไปข้างหลัง 1/2 หน้าจอ |
4 | CTRL+b เลื่อนไปข้างหลังหนึ่งแบบเต็มหน้าจอ |
5 | CTRL+e เลื่อนหน้าจอขึ้นหนึ่งบรรทัด |
6 | CTRL+y เลื่อนหน้าจอลงหนึ่งบรรทัด |
7 | CTRL+u เลื่อนหน้าจอขึ้น 1/2 หน้า |
8 | CTRL+d เลื่อนหน้าจอลง 1/2 หน้า |
9 | CTRL+b เลื่อนหน้าจอขึ้นหนึ่งหน้า |
10 | CTRL+f เลื่อนหน้าจอลงหนึ่งหน้า |
11 | CTRL+I วาดหน้าจอใหม่ |
การแก้ไขไฟล์
ในการแก้ไขไฟล์คุณต้องอยู่ในโหมดแทรก มีหลายวิธีในการเข้าสู่โหมดแทรกจากโหมดคำสั่ง -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | i แทรกข้อความก่อนตำแหน่งเคอร์เซอร์ปัจจุบัน |
2 | I แทรกข้อความที่จุดเริ่มต้นของบรรทัดปัจจุบัน |
3 | a แทรกข้อความหลังตำแหน่งเคอร์เซอร์ปัจจุบัน |
4 | A แทรกข้อความที่ท้ายบรรทัดปัจจุบัน |
5 | o สร้างบรรทัดใหม่สำหรับการป้อนข้อความด้านล่างตำแหน่งเคอร์เซอร์ |
6 | O สร้างบรรทัดใหม่สำหรับการป้อนข้อความเหนือตำแหน่งเคอร์เซอร์ |
การลบอักขระ
นี่คือรายการคำสั่งที่สำคัญซึ่งสามารถใช้เพื่อลบอักขระและบรรทัดในไฟล์ที่เปิดอยู่ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | x ลบอักขระที่อยู่ใต้ตำแหน่งเคอร์เซอร์ |
2 | X ลบอักขระก่อนตำแหน่งเคอร์เซอร์ |
3 | dw ลบจากตำแหน่งเคอร์เซอร์ปัจจุบันไปยังคำถัดไป |
4 | d^ ลบจากตำแหน่งเคอร์เซอร์ปัจจุบันไปที่จุดเริ่มต้นของบรรทัด |
5 | d$ ลบจากตำแหน่งเคอร์เซอร์ปัจจุบันไปยังจุดสิ้นสุดของบรรทัด |
6 | D ลบจากตำแหน่งเคอร์เซอร์ไปยังจุดสิ้นสุดของบรรทัดปัจจุบัน |
7 | dd ลบบรรทัดที่เคอร์เซอร์เปิดอยู่ |
ตามที่กล่าวไว้ข้างต้นคำสั่งส่วนใหญ่ใน vi สามารถนำหน้าด้วยจำนวนครั้งที่คุณต้องการให้การดำเนินการเกิดขึ้น ตัวอย่างเช่น,2x ลบอักขระสองตัวภายใต้ตำแหน่งเคอร์เซอร์และ 2dd ลบสองบรรทัดที่เคอร์เซอร์เปิดอยู่
ขอแนะนำให้ฝึกคำสั่งก่อนที่จะดำเนินการต่อไป
เปลี่ยนคำสั่ง
คุณยังมีความสามารถในการเปลี่ยนตัวอักษรคำหรือบรรทัดใน vi โดยไม่ต้องลบออก นี่คือคำสั่งที่เกี่ยวข้อง -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | cc ลบเนื้อหาของบรรทัดทิ้งให้คุณอยู่ในโหมดแทรก |
2 | cw เปลี่ยนคำที่เคอร์เซอร์เปิดอยู่จากเคอร์เซอร์เป็นตัวพิมพ์เล็ก w ท้ายคำ |
3 | r แทนที่อักขระภายใต้เคอร์เซอร์ vi กลับสู่โหมดคำสั่งหลังจากป้อนการแทนที่ |
4 | R เขียนทับอักขระหลายตัวที่ขึ้นต้นด้วยอักขระที่อยู่ใต้เคอร์เซอร์ คุณต้องใช้Esc เพื่อหยุดการเขียนทับ |
5 | s แทนที่อักขระปัจจุบันด้วยอักขระที่คุณพิมพ์ หลังจากนั้นคุณจะอยู่ในโหมดแทรก |
6 | S ลบบรรทัดที่เคอร์เซอร์เปิดอยู่และแทนที่ด้วยข้อความใหม่ หลังจากป้อนข้อความใหม่แล้ว vi จะยังคงอยู่ในโหมดแทรก |
คัดลอกและวางคำสั่ง
คุณสามารถคัดลอกบรรทัดหรือคำจากที่หนึ่งจากนั้นนำไปวางที่อื่นโดยใช้คำสั่งต่อไปนี้ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | yy คัดลอกบรรทัดปัจจุบัน |
2 | yw คัดลอกคำปัจจุบันจากอักขระที่เคอร์เซอร์ w ตัวพิมพ์เล็กเปิดอยู่จนกระทั่งสิ้นสุดคำ |
3 | p วางข้อความที่คัดลอกไว้หลังเคอร์เซอร์ |
4 | P วางข้อความที่ดึงไว้ก่อนเคอร์เซอร์ |
คำสั่งขั้นสูง
มีคำสั่งขั้นสูงบางคำสั่งที่ทำให้การแก้ไขในแต่ละวันง่ายขึ้นและช่วยให้ใช้ vi ได้อย่างมีประสิทธิภาพมากขึ้น -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | J เข้าร่วมบรรทัดปัจจุบันกับบรรทัดถัดไป จำนวนคำสั่ง j รวมหลายบรรทัด |
2 | << เลื่อนบรรทัดปัจจุบันไปทางซ้ายด้วยความกว้างหนึ่งกะ |
3 | >> เลื่อนบรรทัดปัจจุบันไปทางขวาด้วยความกว้างหนึ่งกะ |
4 | ~ สลับกรณีของอักขระใต้เคอร์เซอร์ |
5 | ^G กดปุ่ม Ctrl และ G พร้อมกันเพื่อแสดงชื่อไฟล์และสถานะปัจจุบัน |
6 | U คืนค่าบรรทัดปัจจุบันกลับสู่สถานะเดิมก่อนที่เคอร์เซอร์จะเข้าสู่บรรทัด |
7 | u ซึ่งจะช่วยยกเลิกการเปลี่ยนแปลงล่าสุดที่ทำในไฟล์ การพิมพ์ "u" อีกครั้งจะทำการเปลี่ยนแปลงอีกครั้ง |
8 | J เข้าร่วมบรรทัดปัจจุบันกับบรรทัดถัดไป จำนวนรวมเข้าด้วยกันหลายบรรทัด |
9 | :f แสดงตำแหน่งปัจจุบันในไฟล์เป็น% และชื่อไฟล์จำนวนไฟล์ทั้งหมด |
10 | :f filename เปลี่ยนชื่อไฟล์ปัจจุบันเป็นชื่อไฟล์ |
11 | :w filename เขียนลงใน filename |
12 | :e filename เปิดไฟล์อื่นที่มีชื่อไฟล์ |
13 | :cd dirname เปลี่ยนไดเร็กทอรีการทำงานปัจจุบันเป็น dirname |
14 | :e # สลับระหว่างสองไฟล์ที่เปิดอยู่ |
15 | :n ในกรณีที่คุณเปิดไฟล์หลายไฟล์โดยใช้ vi ให้ใช้ :n เพื่อไปยังไฟล์ถัดไปในซีรีส์ |
16 | :p ในกรณีที่คุณเปิดไฟล์หลายไฟล์โดยใช้ vi ให้ใช้ :p เพื่อไปยังไฟล์ก่อนหน้าในซีรีส์ |
17 | :N ในกรณีที่คุณเปิดไฟล์หลายไฟล์โดยใช้ vi ให้ใช้ :N เพื่อไปยังไฟล์ก่อนหน้าในซีรีส์ |
18 | :r file อ่านไฟล์และแทรกไว้หลังบรรทัดปัจจุบัน |
19 | :nr file อ่านไฟล์และแทรกไว้หลังบรรทัด n. |
การค้นหาคำและอักขระ
ตัวแก้ไข vi มีการค้นหาสองประเภท: string และ character. สำหรับการค้นหาสตริงไฟล์/ และ ?ใช้คำสั่ง เมื่อคุณเริ่มคำสั่งเหล่านี้คำสั่งที่เพิ่งพิมพ์จะแสดงในบรรทัดสุดท้ายของหน้าจอซึ่งคุณจะพิมพ์สตริงที่ต้องการค้นหา
คำสั่งทั้งสองนี้แตกต่างกันเฉพาะในทิศทางที่การค้นหาเกิดขึ้น -
/ คำสั่งค้นหาไปข้างหน้า (ลง) ในไฟล์
? คำสั่งค้นหาย้อนหลัง (ขึ้นไป) ในไฟล์
n และ Nคำสั่งทำซ้ำคำสั่งค้นหาก่อนหน้าในทิศทางเดียวกันหรือในทิศทางตรงกันข้ามตามลำดับ อักขระบางตัวมีความหมายพิเศษ อักขระเหล่านี้ต้องนำหน้าด้วยแบ็กสแลช (\) ที่จะรวมเป็นส่วนหนึ่งของนิพจน์การค้นหา
ซีเนียร์ | ตัวละครและคำอธิบาย |
---|---|
1 | ^ ค้นหาที่จุดเริ่มต้นของบรรทัด (ใช้ที่จุดเริ่มต้นของนิพจน์การค้นหา) |
2 | . จับคู่อักขระเดี่ยว |
3 | * จับคู่อักขระก่อนหน้าเป็นศูนย์หรือมากกว่า |
4 | $ ท้ายบรรทัด (ใช้ต่อท้ายนิพจน์การค้นหา) |
5 | [ เริ่มชุดของนิพจน์ที่ตรงกันหรือไม่ตรงกัน |
6 | < สิ่งนี้ใส่ไว้ในนิพจน์ที่มีเครื่องหมายแบ็กสแลชเพื่อค้นหาคำลงท้ายหรือจุดเริ่มต้นของคำ |
7 | > สิ่งนี้ช่วยให้เห็น<คำอธิบายตัวละครด้านบน |
การค้นหาอักขระจะค้นหาภายในหนึ่งบรรทัดเพื่อค้นหาอักขระที่ป้อนหลังจากคำสั่ง f และ F คำสั่งค้นหาอักขระในบรรทัดปัจจุบันเท่านั้น f ค้นหาไปข้างหน้าและ F ค้นหาไปข้างหลังและเคอร์เซอร์จะเลื่อนไปยังตำแหน่งของอักขระที่พบ
t และ T คำสั่งค้นหาอักขระในบรรทัดปัจจุบันเท่านั้น แต่สำหรับ tเคอร์เซอร์จะเลื่อนไปยังตำแหน่งก่อนอักขระและ T ค้นหาเส้นย้อนกลับไปยังตำแหน่งหลังอักขระ
ตั้งค่าคำสั่ง
คุณสามารถเปลี่ยนรูปลักษณ์ของหน้าจอ vi ได้โดยใช้สิ่งต่อไปนี้ :setคำสั่ง เมื่อคุณอยู่ในโหมดคำสั่งพิมพ์:set ตามด้วยคำสั่งใด ๆ ต่อไปนี้
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | :set ic ละเว้นกรณีเมื่อค้นหา |
2 | :set ai ตั้งค่าการเยื้องอัตโนมัติ |
3 | :set noai ยกเลิกการตั้งค่าการเยื้องอัตโนมัติ |
4 | :set nu แสดงเส้นที่มีหมายเลขบรรทัดทางด้านซ้าย |
5 | :set sw ตั้งค่าความกว้างของแท็บซอฟต์แวร์ ตัวอย่างเช่นคุณจะตั้งค่า shift width เป็น 4 ด้วยคำสั่งนี้ -:set sw = 4 |
6 | :set ws หากตั้งค่าwrapscanไว้และไม่พบคำที่ด้านล่างของไฟล์ก็จะลองค้นหาที่จุดเริ่มต้น |
7 | :set wm หากตัวเลือกนี้มีค่ามากกว่าศูนย์ตัวแก้ไขจะ "ตัดคำ" โดยอัตโนมัติ ตัวอย่างเช่นหากต้องการตั้งค่าขอบตัดเป็นสองอักขระคุณต้องพิมพ์สิ่งนี้::set wm = 2 |
8 | :set ro เปลี่ยนประเภทไฟล์เป็น "อ่านอย่างเดียว" |
9 | :set term พิมพ์ประเภทเทอร์มินัล |
10 | :set bf ละทิ้งอักขระควบคุมจากอินพุต |
กำลังรันคำสั่ง
vi มีความสามารถในการรันคำสั่งจากภายในเอดิเตอร์ ในการรันคำสั่งคุณจะต้องไปที่โหมดคำสั่งและพิมพ์เท่านั้น:! คำสั่ง
ตัวอย่างเช่นหากคุณต้องการตรวจสอบว่ามีไฟล์อยู่หรือไม่ก่อนที่คุณจะพยายามบันทึกไฟล์ด้วยชื่อไฟล์นั้นคุณสามารถพิมพ์ได้ :! ls และคุณจะเห็นผลลัพธ์ของ ls บนหน้าจอ.
คุณสามารถกดแป้นใดก็ได้ (หรือลำดับการหลีกเลี่ยงของคำสั่ง) เพื่อกลับไปที่เซสชัน vi ของคุณ
การแทนที่ข้อความ
คำสั่งการแทนที่ (:s/) ช่วยให้คุณสามารถแทนที่คำหรือกลุ่มคำภายในไฟล์ของคุณได้อย่างรวดเร็ว ต่อไปนี้เป็นไวยากรณ์ที่จะแทนที่ข้อความ -
:s/search/replace/g
gย่อมาจากทั่วโลก ผลลัพธ์ของคำสั่งนี้คือเหตุการณ์ทั้งหมดในบรรทัดของเคอร์เซอร์มีการเปลี่ยนแปลง
ประเด็นสำคัญที่ควรทราบ
ประเด็นต่อไปนี้จะเพิ่มความสำเร็จของคุณด้วย vi -
คุณต้องอยู่ในโหมดคำสั่งเพื่อใช้คำสั่ง (กด Esc สองครั้งเมื่อใดก็ได้เพื่อให้แน่ใจว่าคุณอยู่ในโหมดคำสั่ง)
คุณต้องระมัดระวังกับคำสั่ง สิ่งเหล่านี้คำนึงถึงตัวพิมพ์เล็กและใหญ่
คุณต้องอยู่ในโหมดแทรกเพื่อป้อนข้อความ
ก Shellให้คุณมีอินเทอร์เฟซสำหรับระบบ Unix รวบรวมข้อมูลจากคุณและรันโปรแกรมตามอินพุตนั้น เมื่อโปรแกรมทำงานเสร็จสิ้นโปรแกรมจะแสดงผลลัพธ์ของโปรแกรมนั้น
เชลล์เป็นสภาพแวดล้อมที่เราสามารถรันคำสั่งโปรแกรมและเชลล์สคริปต์ของเรา มีรสชาติที่แตกต่างกันของเปลือกเช่นเดียวกับระบบปฏิบัติการที่มีรสชาติที่แตกต่างกัน แต่ละรสชาติของเชลล์มีชุดคำสั่งและฟังก์ชันที่รู้จักเป็นของตัวเอง
เชลล์พรอมต์
พรอมต์ $ซึ่งเรียกว่า command promptออกโดยเชลล์ ในขณะที่แสดงพรอมต์คุณสามารถพิมพ์คำสั่ง
เชลล์อ่านข้อมูลของคุณหลังจากที่คุณกด Enter. กำหนดคำสั่งที่คุณต้องการดำเนินการโดยดูที่คำแรกของข้อมูลที่คุณป้อน คำคือชุดอักขระที่ไม่ขาดตอน ช่องว่างและแท็บแยกคำ
ต่อไปนี้เป็นตัวอย่างง่ายๆของไฟล์ date คำสั่งซึ่งแสดงวันที่และเวลาปัจจุบัน -
$date
Thu Jun 25 08:30:19 MST 2009
คุณสามารถปรับแต่งพรอมต์คำสั่งของคุณโดยใช้ตัวแปรสภาพแวดล้อม PS1 ที่อธิบายไว้ในบทช่วยสอนสิ่งแวดล้อม
ประเภทเชลล์
ใน Unix มีเชลล์สองประเภทใหญ่ ๆ -
Bourne shell - หากคุณใช้เชลล์ประเภทบอร์นไฟล์ $ อักขระคือพรอมต์เริ่มต้น
C shell - หากคุณใช้เชลล์ชนิด C อักขระ% คือพรอมต์เริ่มต้น
Bourne Shell มีหมวดหมู่ย่อยดังต่อไปนี้ -
- เปลือกบอร์น (sh)
- เปลือกหอย (ksh)
- บอร์นอีกครั้งเชลล์ (ทุบตี)
- POSIX เชลล์ (sh)
เปลือกชนิด C ที่แตกต่างกันมีดังนี้ -
- C เชลล์ (csh)
- TENEX / TOPS C เชลล์ (tcsh)
เปลือก Unix ดั้งเดิมเขียนขึ้นในช่วงกลางทศวรรษ 1970 โดย Stephen R.Bourne ขณะที่เขาอยู่ที่ AT&T Bell Labs ในรัฐนิวเจอร์ซีย์
บอร์นเชลล์เป็นเชลล์ตัวแรกที่ปรากฏบนระบบยูนิกซ์ดังนั้นจึงเรียกว่า "เชลล์"
บอร์นเชลล์มักจะติดตั้งเป็นไฟล์ /bin/shใน Unix เกือบทุกเวอร์ชัน ด้วยเหตุนี้จึงเป็นเชลล์ทางเลือกสำหรับการเขียนสคริปต์ที่สามารถใช้ได้กับ Unix เวอร์ชันต่างๆ
ในบทนี้เราจะกล่าวถึงแนวคิดของเชลล์ส่วนใหญ่ที่มีพื้นฐานมาจาก Borne Shell
เชลล์สคริปต์
แนวคิดพื้นฐานของเชลล์สคริปต์คือรายการคำสั่งซึ่งแสดงรายการตามลำดับการดำเนินการ เชลล์สคริปต์ที่ดีจะมีความคิดเห็นนำหน้าด้วย# ลงชื่ออธิบายขั้นตอน
มีการทดสอบตามเงื่อนไขเช่นค่า A มากกว่าค่า B ลูปช่วยให้เราผ่านข้อมูลจำนวนมากไฟล์เพื่ออ่านและจัดเก็บข้อมูลและตัวแปรในการอ่านและจัดเก็บข้อมูลและสคริปต์อาจรวมถึงฟังก์ชัน
เรากำลังจะเขียนสคริปต์มากมายในส่วนถัดไป มันจะเป็นไฟล์ข้อความง่ายๆที่เราจะใส่คำสั่งทั้งหมดของเราและโครงสร้างที่จำเป็นอื่น ๆ อีกหลายอย่างที่บอกสภาพแวดล้อมเชลล์ว่าต้องทำอะไรและควรทำเมื่อใด
ทั้งสคริปต์เชลล์และฟังก์ชันถูกตีความ ซึ่งหมายความว่าไม่มีการคอมไพล์
สคริปต์ตัวอย่าง
สมมติว่าเราสร้างไฟล์ test.shสคริปต์ หมายเหตุสคริปต์ทั้งหมดจะมีนามสกุล.shส่วนขยาย. ก่อนที่คุณจะเพิ่มสิ่งอื่นในสคริปต์ของคุณคุณต้องแจ้งเตือนระบบว่าเชลล์สคริปต์กำลังเริ่มทำงาน ซึ่งทำได้โดยใช้ไฟล์shebangสร้าง. ตัวอย่างเช่น -
#!/bin/sh
สิ่งนี้บอกระบบว่าคำสั่งที่ตามมาจะถูกดำเนินการโดย Bourne เชลล์ เรียกว่า Shebang เพราะ#สัญลักษณ์เรียกว่าแฮและ! สัญลักษณ์ที่เรียกว่าปัง
ในการสร้างสคริปต์ที่มีคำสั่งเหล่านี้คุณต้องใส่บรรทัด shebang ก่อนแล้วจึงเพิ่มคำสั่ง -
#!/bin/bash
pwd
ls
ความคิดเห็นของเชลล์
คุณสามารถใส่ความคิดเห็นของคุณในสคริปต์ของคุณได้ดังนี้ -
#!/bin/bash
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls
บันทึกเนื้อหาข้างต้นและทำให้สคริปต์ทำงานได้ -
$chmod +x test.sh
ขณะนี้เชลล์สคริปต์พร้อมที่จะดำเนินการแล้ว -
$./test.sh
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
/home/amrood
index.htm unix-basic_utilities.htm unix-directories.htm
test.sh unix-communication.htm unix-environment.htm
Note - ในการรันโปรแกรมที่มีอยู่ในไดเร็กทอรีปัจจุบันให้ใช้ ./program_name
สคริปต์เชลล์แบบขยาย
เชลล์สคริปต์มีโครงสร้างที่จำเป็นหลายอย่างที่บอกสภาพแวดล้อมเชลล์ว่าต้องทำอะไรและควรทำเมื่อใด แน่นอนว่าสคริปต์ส่วนใหญ่ซับซ้อนกว่าสคริปต์ข้างต้น
เชลล์คือภาษาโปรแกรมจริงพร้อมตัวแปรโครงสร้างควบคุมและอื่น ๆ ไม่ว่าสคริปต์จะซับซ้อนแค่ไหนก็ยังคงเป็นเพียงรายการคำสั่งที่ดำเนินการตามลำดับ
สคริปต์ต่อไปนี้ใช้ read คำสั่งที่รับอินพุตจากแป้นพิมพ์และกำหนดให้เป็นค่าของตัวแปร PERSON และสุดท้ายจะพิมพ์บน STDOUT
#!/bin/sh
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
นี่คือตัวอย่างการรันสคริปต์ -
$./test.sh What is your name? Zara Ali Hello, Zara Ali $
ในบทนี้เราจะเรียนรู้วิธีการใช้ตัวแปรเชลล์ใน Unix ตัวแปรคือสตริงอักขระที่เรากำหนดค่า ค่าที่กำหนดอาจเป็นตัวเลขข้อความชื่อไฟล์อุปกรณ์หรือข้อมูลประเภทอื่น ๆ
ตัวแปรไม่ใช่อะไรมากไปกว่าตัวชี้ไปยังข้อมูลจริง เชลล์ช่วยให้คุณสร้างกำหนดและลบตัวแปรได้
ชื่อตัวแปร
ชื่อของตัวแปรสามารถมีได้เฉพาะตัวอักษร (a ถึง z หรือ A ถึง Z) ตัวเลข (0 ถึง 9) หรืออักขระขีดล่าง (_)
ตามแบบแผนตัวแปรเปลือก Unix จะมีชื่อเป็น UPPERCASE
ตัวอย่างต่อไปนี้เป็นชื่อตัวแปรที่ถูกต้อง -
_ALI
TOKEN_A
VAR_1
VAR_2
ต่อไปนี้เป็นตัวอย่างของชื่อตัวแปรที่ไม่ถูกต้อง -
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
เหตุผลที่คุณไม่สามารถใช้อักขระอื่นเช่น !, *, หรือ - คืออักขระเหล่านี้มีความหมายพิเศษสำหรับเชลล์
การกำหนดตัวแปร
ตัวแปรถูกกำหนดดังนี้ -
variable_name=variable_value
ตัวอย่างเช่น -
NAME="Zara Ali"
ตัวอย่างข้างต้นกำหนดตัวแปร NAME และกำหนดค่า "Zara Ali" ให้ เรียกว่าตัวแปรประเภทนี้scalar variables. ตัวแปรสเกลาร์สามารถเก็บได้ครั้งละหนึ่งค่าเท่านั้น
Shell ช่วยให้คุณสามารถจัดเก็บค่าที่คุณต้องการในตัวแปร ตัวอย่างเช่น -
VAR1="Zara Ali"
VAR2=100
การเข้าถึงค่า
ในการเข้าถึงค่าที่เก็บไว้ในตัวแปรให้นำหน้าชื่อด้วยเครื่องหมายดอลลาร์ ($) -
ตัวอย่างเช่นสคริปต์ต่อไปนี้จะเข้าถึงค่าของตัวแปรที่กำหนด NAME และพิมพ์บน STDOUT -
#!/bin/sh
NAME="Zara Ali"
echo $NAME
สคริปต์ด้านบนจะสร้างค่าต่อไปนี้ -
Zara Ali
ตัวแปรอ่านอย่างเดียว
เชลล์จัดเตรียมวิธีทำเครื่องหมายตัวแปรว่าอ่านอย่างเดียวโดยใช้คำสั่งอ่านอย่างเดียว หลังจากตัวแปรถูกทำเครื่องหมายเป็นแบบอ่านอย่างเดียวแล้วจะไม่สามารถเปลี่ยนแปลงค่าได้
ตัวอย่างเช่นสคริปต์ต่อไปนี้สร้างข้อผิดพลาดขณะพยายามเปลี่ยนค่าของ NAME -
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
สคริปต์ด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
/bin/sh: NAME: This variable is read only.
การยกเลิกการตั้งค่าตัวแปร
การยกเลิกการตั้งค่าหรือการลบตัวแปรจะทำให้เชลล์ลบตัวแปรออกจากรายการตัวแปรที่ติดตาม เมื่อคุณยกเลิกการตั้งค่าตัวแปรคุณจะไม่สามารถเข้าถึงค่าที่เก็บไว้ในตัวแปรได้
ต่อไปนี้เป็นไวยากรณ์เพื่อยกเลิกการตั้งค่าตัวแปรที่กำหนดโดยใช้ unset คำสั่ง -
unset variable_name
คำสั่งดังกล่าวจะยกเลิกการตั้งค่าของตัวแปรที่กำหนดไว้ นี่คือตัวอย่างง่ายๆที่แสดงให้เห็นว่าคำสั่งทำงานอย่างไร -
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
ตัวอย่างข้างต้นไม่พิมพ์อะไรเลย คุณไม่สามารถใช้คำสั่ง unset เพื่อunset ตัวแปรที่ทำเครื่องหมาย readonly.
ประเภทตัวแปร
เมื่อเชลล์ทำงานมีตัวแปรหลักสามประเภท -
Local Variables- ตัวแปรโลคัลคือตัวแปรที่มีอยู่ภายในอินสแตนซ์ปัจจุบันของเชลล์ ไม่สามารถใช้ได้กับโปรแกรมที่เริ่มต้นโดยเชลล์ ตั้งค่าไว้ที่พรอมต์คำสั่ง
Environment Variables- ตัวแปรสภาพแวดล้อมพร้อมใช้งานสำหรับกระบวนการย่อยของเชลล์ บางโปรแกรมต้องการตัวแปรสภาพแวดล้อมเพื่อให้ทำงานได้อย่างถูกต้อง โดยปกติเชลล์สคริปต์จะกำหนดเฉพาะตัวแปรสภาพแวดล้อมที่ต้องการโดยโปรแกรมที่รัน
Shell Variables- ตัวแปรเชลล์เป็นตัวแปรพิเศษที่กำหนดโดยเชลล์และเชลล์ต้องการเพื่อให้ทำงานได้อย่างถูกต้อง ตัวแปรเหล่านี้บางตัวเป็นตัวแปรสภาพแวดล้อมในขณะที่ตัวแปรอื่น ๆ เป็นตัวแปรท้องถิ่น
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับตัวแปรพิเศษใน Unix ในบทก่อนหน้าของเราเราเข้าใจวิธีระมัดระวังเมื่อเราใช้อักขระที่ไม่ใช่ตัวเลขและตัวเลขในชื่อตัวแปร เนื่องจากอักขระเหล่านั้นถูกใช้ในชื่อของตัวแปร Unix พิเศษ ตัวแปรเหล่านี้สงวนไว้สำหรับฟังก์ชันเฉพาะ
ตัวอย่างเช่นไฟล์ $ อักขระแสดงหมายเลขรหัสกระบวนการหรือ PID ของเชลล์ปัจจุบัน -
$echo $$
คำสั่งดังกล่าวเขียน PID ของเชลล์ปัจจุบัน -
29949
ตารางต่อไปนี้แสดงตัวแปรพิเศษจำนวนหนึ่งที่คุณสามารถใช้ในเชลล์สคริปต์ของคุณ -
ซีเนียร์ | ตัวแปรและคำอธิบาย |
---|---|
1 | $0 ชื่อไฟล์ของสคริปต์ปัจจุบัน |
2 | $n ตัวแปรเหล่านี้สอดคล้องกับอาร์กิวเมนต์ที่เรียกใช้สคริปต์ ที่นี่n เป็นเลขฐานสิบบวกที่ตรงกับตำแหน่งของอาร์กิวเมนต์ (อาร์กิวเมนต์แรกคือ $1, the second argument is $2 และอื่น ๆ ) |
3 | $# จำนวนอาร์กิวเมนต์ที่ระบุให้กับสคริปต์ |
4 | $* อาร์กิวเมนต์ทั้งหมดจะถูกยกมาสองครั้ง หากสคริปต์ได้รับสองอาร์กิวเมนต์$* is equivalent to $1 $ 2. |
5 | $@ อาร์กิวเมนต์ทั้งหมดจะถูกยกมาสองครั้ง หากสคริปต์ได้รับสองอาร์กิวเมนต์$@ is equivalent to $1 $ 2. |
6 | $? สถานะการออกของคำสั่งสุดท้ายที่ดำเนินการ |
7 | $$ หมายเลขกระบวนการของเชลล์ปัจจุบัน สำหรับเชลล์สคริปต์นี่คือ ID กระบวนการที่พวกเขากำลังดำเนินการ |
8 | $! หมายเลขกระบวนการของคำสั่งพื้นหลังสุดท้าย |
อาร์กิวเมนต์บรรทัดคำสั่ง
อาร์กิวเมนต์บรรทัดคำสั่ง $1, $2, $3, ...$9 คือพารามิเตอร์ตำแหน่งโดยมี $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... $ 9 เป็นอาร์กิวเมนต์ของคำสั่ง
สคริปต์ต่อไปนี้ใช้ตัวแปรพิเศษต่างๆที่เกี่ยวข้องกับบรรทัดคำสั่ง -
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
นี่คือตัวอย่างการทำงานสำหรับสคริปต์ด้านบน -
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
พารามิเตอร์พิเศษ $* and $@
มีพารามิเตอร์พิเศษที่อนุญาตให้เข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมดพร้อมกัน $* และ $@ ทั้งสองจะทำหน้าที่เหมือนกันเว้นแต่จะอยู่ในเครื่องหมายคำพูดคู่ "".
ทั้งสองพารามิเตอร์ระบุอาร์กิวเมนต์บรรทัดคำสั่ง อย่างไรก็ตาม "$*" special parameter takes the entire list as one argument with spaces between and the "$พารามิเตอร์พิเศษ @ "ใช้ทั้งรายการและแยกออกเป็นอาร์กิวเมนต์แยกกัน
เราสามารถเขียนเชลล์สคริปต์ดังที่แสดงด้านล่างเพื่อประมวลผลอาร์กิวเมนต์บรรทัดคำสั่งที่ไม่ทราบจำนวนด้วยไฟล์ $* or $@ พารามิเตอร์พิเศษ -
#!/bin/sh
for TOKEN in $* do echo $TOKEN
done
นี่คือตัวอย่างการทำงานสำหรับสคริปต์ด้านบน -
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note - ที่นี่ do...done เป็นลูปประเภทหนึ่งที่จะกล่าวถึงในบทช่วยสอนถัดไป
ออกจากสถานะ
$? ตัวแปรแสดงสถานะการออกของคำสั่งก่อนหน้า
สถานะการออกเป็นค่าตัวเลขที่ส่งคืนโดยทุกคำสั่งเมื่อเสร็จสิ้น ตามกฎแล้วคำสั่งส่วนใหญ่จะส่งคืนสถานะการออกเป็น 0 หากทำสำเร็จและ 1 หากทำไม่สำเร็จ
คำสั่งบางคำสั่งส่งคืนสถานะการออกเพิ่มเติมด้วยเหตุผลบางประการ ตัวอย่างเช่นคำสั่งบางคำสั่งจะแยกความแตกต่างระหว่างประเภทของข้อผิดพลาดและจะส่งคืนค่าการออกที่หลากหลายขึ้นอยู่กับประเภทของความล้มเหลวเฉพาะ
ต่อไปนี้เป็นตัวอย่างของคำสั่งที่ประสบความสำเร็จ -
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $
ในบทนี้เราจะพูดถึงวิธีการใช้เชลล์อาร์เรย์ใน Unix ตัวแปรเชลล์มีความสามารถเพียงพอที่จะเก็บค่าเดียว ตัวแปรเหล่านี้เรียกว่าตัวแปรสเกลาร์
เชลล์รองรับตัวแปรประเภทอื่นที่เรียกว่า array variable. ซึ่งสามารถเก็บค่าได้หลายค่าในเวลาเดียวกัน อาร์เรย์เป็นวิธีการจัดกลุ่มชุดของตัวแปร แทนที่จะสร้างชื่อใหม่สำหรับแต่ละตัวแปรที่จำเป็นคุณสามารถใช้ตัวแปรอาร์เรย์เดียวที่เก็บตัวแปรอื่น ๆ ทั้งหมด
กฎการตั้งชื่อทั้งหมดที่กล่าวถึงสำหรับตัวแปรเชลล์จะใช้ได้ในขณะที่ตั้งชื่ออาร์เรย์
การกำหนดค่าอาร์เรย์
ความแตกต่างระหว่างตัวแปรอาร์เรย์และตัวแปรสเกลาร์สามารถอธิบายได้ดังนี้
สมมติว่าคุณพยายามแทนชื่อนักเรียนหลาย ๆ คนเป็นชุดของตัวแปร ตัวแปรแต่ละตัวเป็นตัวแปรสเกลาร์ดังนี้ -
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
เราสามารถใช้อาร์เรย์เดียวเพื่อเก็บรายชื่อที่กล่าวมาทั้งหมด ต่อไปนี้เป็นวิธีที่ง่ายที่สุดในการสร้างตัวแปรอาร์เรย์ สิ่งนี้ช่วยกำหนดค่าให้กับดัชนีตัวใดตัวหนึ่ง
array_name[index]=value
ที่นี่array_nameคือชื่อของอาร์เรย์ดัชนีคือดัชนีของรายการในอาร์เรย์ที่คุณต้องการตั้งค่าและค่าคือค่าที่คุณต้องการตั้งค่าสำหรับรายการนั้น
ดังตัวอย่างคำสั่งต่อไปนี้ -
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
หากคุณกำลังใช้ไฟล์ ksh เชลล์นี่คือไวยากรณ์ของการเริ่มต้นอาร์เรย์ -
set -A array_name value1 value2 ... valuen
หากคุณกำลังใช้ไฟล์ bash เชลล์นี่คือไวยากรณ์ของการเริ่มต้นอาร์เรย์ -
array_name=(value1 ... valuen)
การเข้าถึงค่าอาร์เรย์
หลังจากคุณตั้งค่าตัวแปรอาร์เรย์แล้วคุณจะเข้าถึงได้ดังนี้ -
${array_name[index]}
ที่นี่array_nameคือชื่อของอาร์เรย์และดัชนีคือดัชนีของค่าที่จะเข้าถึง ต่อไปนี้เป็นตัวอย่างเพื่อทำความเข้าใจแนวคิด -
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
ตัวอย่างข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
$./test.sh
First Index: Zara
Second Index: Qadir
คุณสามารถเข้าถึงรายการทั้งหมดในอาร์เรย์ด้วยวิธีใดวิธีหนึ่งดังต่อไปนี้ -
${array_name[*]} ${array_name[@]}
ที่นี่ array_name คือชื่อของอาร์เรย์ที่คุณสนใจตัวอย่างต่อไปนี้จะช่วยให้คุณเข้าใจแนวคิด -
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"
ตัวอย่างข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
มีตัวดำเนินการต่างๆที่รองรับโดยแต่ละเชลล์ เราจะพูดถึงรายละเอียดเกี่ยวกับ Bourne shell (เชลล์เริ่มต้น) ในบทนี้
ตอนนี้เราจะพูดถึงตัวดำเนินการต่อไปนี้ -
- ตัวดำเนินการเลขคณิต
- ตัวดำเนินการเชิงสัมพันธ์
- ตัวดำเนินการบูลีน
- ตัวดำเนินการสตริง
- ตัวดำเนินการทดสอบไฟล์
Bourne shell ไม่มีกลไกใด ๆ ในการดำเนินการทางคณิตศาสตร์อย่างง่าย แต่ใช้โปรแกรมภายนอกด้วยเช่นกัน awk หรือ expr.
ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มตัวเลขสองตัว -
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
สคริปต์ด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
Total value : 4
ต้องพิจารณาประเด็นต่อไปนี้ในขณะที่เพิ่ม -
ต้องมีช่องว่างระหว่างตัวดำเนินการและนิพจน์ ตัวอย่างเช่น 2 + 2 ไม่ถูกต้อง ควรเขียนเป็น 2 + 2
นิพจน์ที่สมบูรณ์ควรอยู่ระหว่าง ‘ ‘เรียกว่า backtick
ตัวดำเนินการเลขคณิต
Bourne Shell รองรับตัวดำเนินการทางคณิตศาสตร์ต่อไปนี้
สมมติตัวแปร a ถือ 10 และตัวแปร b ถือ 20 แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
+ (เพิ่มเติม) | เพิ่มค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ | `expr $a + $b` จะให้ 30 |
- (การลบ) | ลบตัวถูกดำเนินการทางขวามือออกจากตัวถูกดำเนินการด้านซ้าย | `expr $a - $b` จะให้ -10 |
* (การคูณ) | คูณค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ | `expr $a \* $b` จะให้ 200 |
/ (แผนก) | แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวามือ | `expr $b / $a` จะให้ 2 |
% (โมดูลัส) | หารตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวามือและส่งคืนส่วนที่เหลือ | `expr $b % $a` จะให้ 0 |
= (การมอบหมายงาน) | กำหนดตัวถูกดำเนินการด้านขวาในตัวถูกดำเนินการด้านซ้าย | a = $ b จะกำหนดค่าของ b ใน a |
== (ความเท่าเทียมกัน) | เปรียบเทียบตัวเลขสองตัวหากทั้งสองเหมือนกันจะส่งกลับจริง | [$ a == $ b] จะแสดงผลเท็จ |
! = (ไม่เท่าเทียมกัน) | เปรียบเทียบตัวเลขสองตัวหากทั้งสองต่างกันจะส่งกลับจริง | [$ a! = $ b] จะคืนค่าจริง |
เป็นสิ่งสำคัญมากที่ต้องเข้าใจว่านิพจน์เงื่อนไขทั้งหมดควรอยู่ภายในวงเล็บปีกกาที่มีช่องว่างรอบ ๆ ตัวอย่างเช่น [ $a == $b ] ถูกต้องในขณะที่ [$a==$b] ไม่ถูกต้อง
การคำนวณทางคณิตศาสตร์ทั้งหมดทำได้โดยใช้จำนวนเต็มยาว
ตัวดำเนินการเชิงสัมพันธ์
Bourne Shell สนับสนุนตัวดำเนินการเชิงสัมพันธ์ต่อไปนี้ที่เฉพาะเจาะจงสำหรับค่าตัวเลข ตัวดำเนินการเหล่านี้ใช้ไม่ได้กับค่าสตริงเว้นแต่ค่าจะเป็นตัวเลข
ตัวอย่างเช่นตัวดำเนินการต่อไปนี้จะตรวจสอบความสัมพันธ์ระหว่าง 10 ถึง 20 และระหว่าง "10" และ "20" แต่ไม่อยู่ระหว่าง "สิบ" และ "ยี่สิบ"
สมมติตัวแปร a ถือ 10 และตัวแปร b ถือ 20 แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
-eq | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [$ a -eq $ b] ไม่เป็นความจริง |
-ne | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง | [$ a -ne $ b] เป็นจริง |
-gt | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [$ a -gt $ b] ไม่เป็นความจริง |
-lt | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [$ a -lt $ b] เป็นจริง |
-ge | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [$ a -ge $ b] ไม่เป็นความจริง |
-le | ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [$ a -le $ b] เป็นจริง |
เป็นสิ่งสำคัญมากที่จะต้องเข้าใจว่านิพจน์เงื่อนไขทั้งหมดควรอยู่ในเครื่องหมายวงเล็บเหลี่ยมโดยมีช่องว่างรอบ ๆ ตัวอย่างเช่น,[ $a <= $b ] ถูกต้องในขณะที่ [$a <= $b] ไม่ถูกต้อง
ตัวดำเนินการบูลีน
ตัวดำเนินการบูลีนต่อไปนี้ได้รับการสนับสนุนโดย Bourne Shell
สมมติตัวแปร a ถือ 10 และตัวแปร b ถือ 20 แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
! | นี่คือการปฏิเสธเชิงตรรกะ สิ่งนี้จะเปลี่ยนเงื่อนไขจริงเป็นเท็จและในทางกลับกัน | [! เท็จ] เป็นจริง |
-o | นี่เป็นตรรกะ OR. หากตัวถูกดำเนินการข้อใดข้อหนึ่งเป็นจริงเงื่อนไขจะกลายเป็นจริง | [$ a -lt 20 -o $ b -gt 100] เป็นจริง |
-a | นี่เป็นตรรกะ AND. หากตัวถูกดำเนินการทั้งสองเป็นจริงเงื่อนไขนั้นจะกลายเป็นจริงหรือเป็นเท็จ | [$ a -lt 20 -a $ b -gt 100] เป็นเท็จ |
ตัวดำเนินการสตริง
ตัวดำเนินการสตริงต่อไปนี้ได้รับการสนับสนุนโดย Bourne Shell
สมมติตัวแปร a ถือ "abc" และตัวแปร b ถือ "efg" แล้ว -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
= | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [$ a = $ b] ไม่เป็นความจริง |
!= | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง | [$ a! = $ b] เป็นจริง |
-z | ตรวจสอบว่าขนาดตัวถูกดำเนินการสตริงที่กำหนดเป็นศูนย์หรือไม่ ถ้าความยาวเป็นศูนย์มันจะส่งกลับจริง | [-z $ a] ไม่เป็นความจริง |
-n | ตรวจสอบว่าขนาดตัวถูกดำเนินการสตริงที่กำหนดไม่ใช่ศูนย์หรือไม่ ถ้ามันเป็นความยาวที่ไม่ใช่ศูนย์มันจะส่งกลับจริง | [-n $ a] ไม่ใช่เท็จ |
str | ตรวจสอบว่า strไม่ใช่สตริงว่าง ถ้าว่างเปล่าก็จะส่งกลับเท็จ | [$ a] ไม่ใช่เท็จ |
ตัวดำเนินการทดสอบไฟล์
เรามีตัวดำเนินการไม่กี่ตัวที่สามารถใช้เพื่อทดสอบคุณสมบัติต่างๆที่เกี่ยวข้องกับไฟล์ Unix
สมมติตัวแปร file มีชื่อไฟล์ที่มีอยู่ "test" ซึ่งมีขนาด 100 ไบต์และมี read, write และ execute อนุญาตเมื่อ -
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
-b file | ตรวจสอบว่าไฟล์เป็นไฟล์พิเศษของบล็อกหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-b $ file] เป็นเท็จ |
-c file | ตรวจสอบว่าไฟล์เป็นไฟล์พิเศษของอักขระหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-c $ file] เป็นเท็จ |
-d file | ตรวจสอบว่าไฟล์เป็นไดเร็กทอรีหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-d $ file] ไม่เป็นความจริง |
-f file | ตรวจสอบว่าไฟล์เป็นไฟล์ธรรมดาเมื่อเทียบกับไดเร็กทอรีหรือไฟล์พิเศษ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-f $ file] เป็นจริง |
-g file | ตรวจสอบว่าไฟล์มีชุดบิต ID กลุ่ม (SGID) หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-g $ file] เป็นเท็จ |
-k file | ตรวจสอบว่าไฟล์มีการตั้งค่าบิตเหนียวหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-k $ file] เป็นเท็จ |
-p file | ตรวจสอบว่าไฟล์เป็นไปป์ที่มีชื่อหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-p $ file] เป็นเท็จ |
-t file | ตรวจสอบว่า File descriptor เปิดอยู่และเชื่อมโยงกับเทอร์มินัลหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-t $ file] เป็นเท็จ |
-u file | ตรวจสอบว่าไฟล์มีชุดบิต Set User ID (SUID) หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-u $ file] เป็นเท็จ |
-r file | ตรวจสอบว่าไฟล์สามารถอ่านได้หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-r $ file] เป็นจริง |
-w file | ตรวจสอบว่าไฟล์สามารถเขียนได้หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-w $ file] เป็นจริง |
-x file | ตรวจสอบว่าไฟล์สามารถเรียกใช้งานได้หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-x $ file] เป็นจริง |
-s file | ตรวจสอบว่าไฟล์มีขนาดมากกว่า 0 หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง | [-s $ file] เป็นจริง |
-e file | ตรวจสอบว่ามีไฟล์อยู่หรือไม่ เป็นจริงแม้ว่าไฟล์จะเป็นไดเร็กทอรี แต่มีอยู่ | [-e $ file] เป็นจริง |
C ตัวดำเนินการเชลล์
ลิงค์ต่อไปนี้จะให้แนวคิดสั้น ๆ เกี่ยวกับ C Shell Operators -
C ตัวดำเนินการเชลล์
กรณ์เชลล์โอเปอเรเตอร์
ลิงก์ต่อไปนี้จะช่วยให้คุณเข้าใจ Korn Shell Operators -
กรณ์เชลล์โอเปอเรเตอร์
ในบทนี้เราจะเข้าใจการตัดสินใจของเชลล์ใน Unix ในขณะที่เขียนเชลล์สคริปต์อาจมีสถานการณ์ที่คุณจำเป็นต้องใช้หนึ่งเส้นทางจากสองเส้นทางที่กำหนด ดังนั้นคุณต้องใช้ประโยชน์จากคำสั่งเงื่อนไขที่ช่วยให้โปรแกรมของคุณสามารถตัดสินใจได้อย่างถูกต้องและดำเนินการอย่างถูกต้อง
Unix Shell สนับสนุนคำสั่งเงื่อนไขซึ่งใช้เพื่อดำเนินการต่างๆตามเงื่อนไขที่แตกต่างกัน ตอนนี้เราจะเข้าใจคำแถลงการตัดสินใจสองข้อที่นี่ -
if...else คำให้การ
case...esac คำให้การ
คำสั่ง if ... else
ข้อความอื่นเป็นคำสั่งในการตัดสินใจที่มีประโยชน์ซึ่งสามารถใช้เพื่อเลือกตัวเลือกจากชุดตัวเลือกที่กำหนด
Unix Shell รองรับรูปแบบ if…else คำสั่ง -
- ถ้า ... คำสั่ง fi
- if ... else ... คำสั่ง fi
- ถ้า ... elif ... else ... คำสั่ง fi
คำสั่ง if ส่วนใหญ่ตรวจสอบความสัมพันธ์โดยใช้ตัวดำเนินการเชิงสัมพันธ์ที่กล่าวถึงในบทก่อนหน้า
กรณี ... คำชี้แจงของ esac
คุณสามารถใช้หลาย if...elifงบเพื่อดำเนินการสาขาหลายทาง อย่างไรก็ตามนี่ไม่ใช่ทางออกที่ดีที่สุดเสมอไปโดยเฉพาะอย่างยิ่งเมื่อสาขาทั้งหมดขึ้นอยู่กับค่าของตัวแปรเดียว
Unix Shell รองรับ case...esac คำสั่งที่จัดการกับสถานการณ์นี้อย่างแท้จริงและทำได้อย่างมีประสิทธิภาพมากกว่าการทำซ้ำ if...elif งบ
มีเพียงรูปแบบเดียวเท่านั้น case...esac คำสั่งซึ่งได้อธิบายไว้อย่างละเอียดที่นี่ -
- กรณี ... คำสั่ง esac
case...esac คำสั่งใน Unix shell นั้นคล้ายกับไฟล์ switch...case คำสั่งที่เรามีในภาษาโปรแกรมอื่น ๆ เช่น C หรือ C++ และ PERLฯลฯ
ในบทนี้เราจะพูดถึงเชลล์ลูปใน Unix ลูปเป็นเครื่องมือการเขียนโปรแกรมที่มีประสิทธิภาพที่ช่วยให้คุณดำเนินการชุดคำสั่งซ้ำ ๆ ในบทนี้เราจะตรวจสอบประเภทของลูปต่อไปนี้สำหรับโปรแกรมเมอร์เชลล์ -
- ห่วง while
- สำหรับลูป
- วนจน
- ลูปเลือก
คุณจะใช้ลูปที่แตกต่างกันตามสถานการณ์ ตัวอย่างเช่นไฟล์whileลูปรันคำสั่งที่กำหนดจนกว่าเงื่อนไขที่กำหนดจะยังคงเป็นจริง ที่until วนซ้ำดำเนินการจนกว่าเงื่อนไขที่กำหนดจะกลายเป็นจริง
เมื่อคุณมีการฝึกเขียนโปรแกรมที่ดีคุณจะได้รับความเชี่ยวชาญและด้วยเหตุนี้ให้เริ่มใช้ลูปที่เหมาะสมตามสถานการณ์ ที่นี่while และ for ลูปมีให้บริการในภาษาโปรแกรมอื่น ๆ ส่วนใหญ่เช่น C, C++ และ PERLฯลฯ
ห่วงทำรัง
ลูปทั้งหมดสนับสนุนแนวคิดการซ้อนกันซึ่งหมายความว่าคุณสามารถใส่ลูปหนึ่งในอีกลูปที่คล้ายกันหรือต่างกันก็ได้ การทำรังนี้สามารถทำได้ไม่ จำกัด จำนวนครั้งตามความต้องการของคุณ
นี่คือตัวอย่างของการทำรัง whileวน. ลูปอื่น ๆ สามารถซ้อนกันได้ตามข้อกำหนดการเขียนโปรแกรมในลักษณะที่คล้ายกัน -
ทำรังในขณะที่ลูป
เป็นไปได้ที่จะใช้ while loop เป็นส่วนหนึ่งของร่างกายของอีกอันในขณะที่วนซ้ำ
ไวยากรณ์
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
ตัวอย่าง
นี่คือตัวอย่างง่ายๆของการทำรังแบบวนซ้ำ เพิ่มลูปการนับถอยหลังอีกอันในลูปที่คุณเคยนับถึงเก้า -
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
b=`expr $b - 1` done echo a=`expr $a + 1`
done
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ สิ่งสำคัญคือต้องสังเกตว่าecho -nทำงานที่นี่ ที่นี่-n ตัวเลือกช่วยให้ echo หลีกเลี่ยงการพิมพ์อักขระบรรทัดใหม่
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
ในบทนี้เราจะพูดถึงการควบคุมวงเปลือกใน Unix จนถึงตอนนี้คุณได้ดูการสร้างลูปและทำงานกับลูปเพื่อทำงานต่าง ๆ ให้สำเร็จ บางครั้งคุณต้องหยุดการวนซ้ำหรือข้ามการวนซ้ำ
ในบทนี้เราจะเรียนรู้ต่อไปนี้สองคำสั่งที่ใช้ในการควบคุมเชลล์ลูป −
break คำให้การ
continue คำให้การ
ห่วงที่ไม่มีที่สิ้นสุด
ลูปทั้งหมดมีอายุการใช้งาน จำกัด และจะออกมาเมื่อเงื่อนไขเป็นเท็จหรือจริงขึ้นอยู่กับลูป
การวนซ้ำอาจดำเนินต่อไปตลอดกาลหากไม่ตรงตามเงื่อนไขที่ต้องการ ลูปที่ดำเนินการตลอดไปโดยไม่ยุติการดำเนินการเป็นจำนวนครั้งไม่สิ้นสุด ด้วยเหตุนี้ลูปดังกล่าวจึงเรียกว่าลูปไม่มีที่สิ้นสุด
ตัวอย่าง
นี่คือตัวอย่างง่ายๆที่ใช้ไฟล์ while วนซ้ำเพื่อแสดงตัวเลขศูนย์ถึงเก้า -
#!/bin/sh
a=10
until [ $a -lt 10 ] do echo $a
a=`expr $a + 1`
done
วนซ้ำนี้ตลอดไปเพราะ a ตลอดเวลา greater than หรือ equal to 10 และต้องไม่น้อยกว่า 10
คำชี้แจงการแบ่ง
breakคำสั่งใช้เพื่อยุติการดำเนินการของลูปทั้งหมดหลังจากเสร็จสิ้นการดำเนินการทุกบรรทัดของโค้ดจนถึงคำสั่ง break จากนั้นจะลดขั้นตอนลงไปที่โค้ดหลังจากสิ้นสุดลูป
ไวยากรณ์
ดังต่อไปนี้ break คำสั่งใช้เพื่อออกมาจากลูป -
break
คำสั่ง break ยังสามารถใช้เพื่อออกจากลูปที่ซ้อนกันโดยใช้รูปแบบนี้ -
break n
ที่นี่ n ระบุไฟล์ nth ล้อมรอบไปยังทางออกจาก
ตัวอย่าง
นี่คือตัวอย่างง่ายๆที่แสดงให้เห็นว่าลูปสิ้นสุดทันทีที่ a กลายเป็น 5 -
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
0
1
2
3
4
5
นี่คือตัวอย่างง่ายๆของการซ้อนสำหรับลูป สคริปต์นี้แตกออกจากทั้งสองลูป ifvar1 equals 2 และ var2 equals 0 -
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
fi
done
done
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ ในวงในคุณมีคำสั่ง break พร้อมอาร์กิวเมนต์ 2 สิ่งนี้บ่งชี้ว่าหากตรงตามเงื่อนไขคุณควรแยกออกจากวงนอกและท้ายที่สุดก็ออกจากวงในเช่นกัน
1 0
1 5
คำสั่งต่อ
continue คำสั่งคล้ายกับ break คำสั่งยกเว้นว่าจะทำให้การวนซ้ำปัจจุบันของลูปออกแทนที่จะเป็นลูปทั้งหมด
คำสั่งนี้มีประโยชน์เมื่อเกิดข้อผิดพลาด แต่คุณต้องการพยายามดำเนินการวนซ้ำครั้งถัดไปของลูป
ไวยากรณ์
continue
เช่นเดียวกับคำสั่ง break อาร์กิวเมนต์จำนวนเต็มสามารถมอบให้กับคำสั่งต่อเพื่อข้ามคำสั่งจากลูปที่ซ้อนกัน
continue n
ที่นี่ n ระบุไฟล์ nth ล้อมรอบเพื่อดำเนินการต่อจาก
ตัวอย่าง
ลูปต่อไปนี้ใช้ประโยชน์จากไฟล์ continue คำสั่งที่ส่งกลับจากคำสั่งดำเนินการต่อและเริ่มประมวลผลคำสั่งถัดไป -
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2` if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Substitution คืออะไร?
เชลล์ทำการแทนที่เมื่อพบนิพจน์ที่มีอักขระพิเศษอย่างน้อยหนึ่งตัว
ตัวอย่าง
ในที่นี้ค่าการพิมพ์ของตัวแปรจะถูกแทนที่ด้วยค่าของตัวแปร ในเวลาเดียวกัน,"\n" ถูกแทนที่ด้วยบรรทัดใหม่ -
#!/bin/sh
a=10
echo -e "Value of a is $a \n"
คุณจะได้รับผลดังต่อไปนี้ ที่นี่-e อ็อพชันเปิดใช้งานการตีความแบ็กสแลช Escape
Value of a is 10
ต่อไปนี้เป็นผลลัพธ์ที่ไม่มี -e ตัวเลือก -
Value of a is 10\n
ต่อไปนี้เป็นลำดับการหลีกเลี่ยงซึ่งสามารถใช้ในคำสั่ง echo -
ซีเนียร์ | Escape & Description |
---|---|
1 | \\ แบ็กสแลช |
2 | \a การแจ้งเตือน (BEL) |
3 | \b backspace |
4 | \c ปราบปรามการขึ้นบรรทัดใหม่ต่อท้าย |
5 | \f ฟีดรูปแบบ |
6 | \n บรรทัดใหม่ |
7 | \r การกลับรถ |
8 | \t แท็บแนวนอน |
9 | \v แท็บแนวตั้ง |
คุณสามารถใช้ไฟล์ -E ตัวเลือกในการปิดใช้งานการตีความเครื่องหมายแบ็กสแลช Escape (ค่าเริ่มต้น)
คุณสามารถใช้ไฟล์ -n ตัวเลือกในการปิดใช้งานการแทรกบรรทัดใหม่
การแทนที่คำสั่ง
การทดแทนคำสั่งคือกลไกที่เชลล์ดำเนินการชุดคำสั่งที่กำหนดจากนั้นแทนที่เอาต์พุตของคำสั่งนั้นแทนคำสั่ง
ไวยากรณ์
การทดแทนคำสั่งจะดำเนินการเมื่อกำหนดคำสั่งเป็น -
`command`
เมื่อดำเนินการแทนคำสั่งตรวจสอบให้แน่ใจว่าคุณใช้ backquote ไม่ใช่อักขระเครื่องหมายคำพูดเดี่ยว
ตัวอย่าง
โดยทั่วไปการทดแทนคำสั่งจะใช้เพื่อกำหนดเอาต์พุตของคำสั่งให้กับตัวแปร แต่ละตัวอย่างต่อไปนี้แสดงให้เห็นถึงการทดแทนคำสั่ง -
#!/bin/sh
DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Date is Thu Jul 2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul 2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15
การทดแทนตัวแปร
การทดแทนตัวแปรทำให้โปรแกรมเมอร์เชลล์สามารถจัดการกับค่าของตัวแปรตามสถานะของมัน
นี่คือตารางต่อไปนี้สำหรับการเปลี่ยนตัวที่เป็นไปได้ทั้งหมด -
ซีเนียร์ | แบบฟอร์มและคำอธิบาย |
---|---|
1 | ${var} แทนค่าของvar |
2 | ${var:-word} ถ้าvarเป็นโมฆะหรือไม่ได้ตั้งค่าคำจะถูกแทนที่ด้วยvar. ค่าของvarไม่เปลี่ยนแปลง |
3 | ${var:=word} ถ้าvarเป็นโมฆะหรือไม่ได้ตั้งค่าvarจะถูกตั้งค่าเป็นword. |
4 | ${var:?message} หากvarเป็นค่าว่างหรือไม่ได้ตั้งค่าข้อความจะถูกพิมพ์เป็นข้อผิดพลาดมาตรฐาน ตรวจสอบว่าตัวแปรตั้งค่าถูกต้อง |
5 | ${var:+word} หากตั้งค่าvar คำจะถูกแทนที่ด้วย var ค่าของvarไม่เปลี่ยนแปลง |
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างเพื่อแสดงสถานะต่างๆของการทดแทนข้างต้น -
#!/bin/sh
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับกลไกการเสนอราคาเชลล์ เราจะเริ่มต้นด้วยการพูดคุยเกี่ยวกับ metacharacters
Metacharacters
Unix Shell นำเสนอ metacharacters ต่างๆที่มีความหมายพิเศษในขณะที่ใช้ใน Shell Script ใด ๆ และทำให้เกิดการสิ้นสุดของคำเว้นแต่จะยกมา
ตัวอย่างเช่น, ? จับคู่กับอักขระเดี่ยวในขณะที่แสดงรายการไฟล์ในไดเร็กทอรีและไฟล์ *จับคู่อักขระมากกว่าหนึ่งตัว นี่คือรายการของอักขระพิเศษเชลล์ส่วนใหญ่ (เรียกอีกอย่างว่าอักขระเมตาคาแร็กเตอร์) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
อาจมีการยกตัวอักษร (กล่าวคือสร้างขึ้นเพื่อให้เป็นของตัวเอง) โดยนำหน้าด้วย a \.
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีการพิมพ์ไฟล์ * หรือก ? -
#!/bin/sh
echo Hello; Word
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Hello
./test.sh: line 2: Word: command not found
shell returned 127
ตอนนี้ให้เราลองใช้อักขระที่ยกมา -
#!/bin/sh
echo Hello\; Word
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Hello; Word
$ เครื่องหมายเป็นหนึ่งในอักขระเมตาดังนั้นจึงต้องยกมาเพื่อหลีกเลี่ยงการจัดการพิเศษโดยเชลล์ -
#!/bin/sh
echo "I have \$1200"
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
I have $1200
ตารางต่อไปนี้แสดงการเสนอราคาสี่รูปแบบ -
ซีเนียร์ | ใบเสนอราคาและคำอธิบาย |
---|---|
1 | Single quote อักขระพิเศษทั้งหมดระหว่างเครื่องหมายคำพูดเหล่านี้จะสูญเสียความหมายพิเศษ |
2 | Double quote อักขระพิเศษระหว่างเครื่องหมายคำพูดเหล่านี้จะสูญเสียความหมายพิเศษไปด้วยข้อยกเว้นเหล่านี้ -
|
3 | Backslash อักขระใด ๆ ที่อยู่ถัดจากแบ็กสแลชทันทีจะสูญเสียความหมายพิเศษไป |
4 | Back quote สิ่งใดก็ตามที่อยู่ระหว่างเครื่องหมายคำพูดย้อนกลับจะถือว่าเป็นคำสั่งและจะถูกดำเนินการ |
คำคมเดียว
พิจารณาคำสั่ง echo ที่มีอักขระเชลล์พิเศษจำนวนมาก -
echo <-$1500.**>; (update?) [y|n]
การใส่แบ็กสแลชไว้หน้าอักขระพิเศษแต่ละตัวนั้นน่าเบื่อและทำให้อ่านยาก -
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
มีวิธีง่ายๆในการอ้างอิงอักขระกลุ่มใหญ่ ใส่เครื่องหมายคำพูดเดี่ยว (') ที่จุดเริ่มต้นและตอนท้ายของสตริง -
echo '<-$1500.**>; (update?) [y|n]'
อักขระที่อยู่ในเครื่องหมายคำพูดเดียวจะถูกยกมาเหมือนกับว่าแบ็กสแลชอยู่ข้างหน้าอักขระแต่ละตัว ด้วยสิ่งนี้คำสั่ง echo จะแสดงในลักษณะที่เหมาะสม
หากเครื่องหมายคำพูดเดียวปรากฏขึ้นภายในสตริงที่จะส่งออกคุณไม่ควรใส่ทั้งสตริงไว้ในเครื่องหมายคำพูดเดียว แต่คุณควรนำหน้าด้วยเครื่องหมายแบ็กสแลช (\) ดังนี้ -
echo 'It\'s Shell Programming
คำคมคู่
พยายามรันเชลล์สคริปต์ต่อไปนี้ เชลล์สคริปต์นี้ใช้ประโยชน์จากเครื่องหมายคำพูดเดียว -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
นี่ไม่ใช่สิ่งที่ต้องแสดง เห็นได้ชัดว่าเครื่องหมายคำพูดเดี่ยวป้องกันการแทนที่ตัวแปร หากคุณต้องการแทนที่ค่าตัวแปรและเพื่อให้เครื่องหมายจุลภาคกลับด้านทำงานตามที่คาดไว้คุณจะต้องใส่คำสั่งของคุณในเครื่องหมายคำพูดคู่ดังนี้ -
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
ZARA owes <-$1500.**>; [ as of (07/02) ]
เครื่องหมายคำพูดคู่นำความหมายพิเศษของอักขระทั้งหมดออกไปยกเว้นต่อไปนี้ -
$ สำหรับการทดแทนพารามิเตอร์
Backquotes สำหรับการทดแทนคำสั่ง
\$ เพื่อเปิดใช้งานเครื่องหมายดอลลาร์ตามตัวอักษร
\` เพื่อเปิดใช้งาน backquotes ตามตัวอักษร
\" เพื่อเปิดใช้งานเครื่องหมายคำพูดคู่แบบฝัง
\\ เพื่อเปิดใช้แบ็กสแลชแบบฝัง
อื่น ๆ ทั้งหมด \ อักขระเป็นตัวอักษร (ไม่ใช่พิเศษ)
อักขระที่อยู่ในเครื่องหมายคำพูดเดียวจะถูกยกมาเหมือนกับว่าแบ็กสแลชอยู่ข้างหน้าอักขระแต่ละตัว สิ่งนี้ช่วยให้คำสั่ง echo แสดงอย่างถูกต้อง
หากเครื่องหมายคำพูดเดียวปรากฏขึ้นภายในสตริงที่จะส่งออกคุณไม่ควรใส่ทั้งสตริงไว้ในเครื่องหมายคำพูดเดียว แต่คุณควรนำหน้าด้วยเครื่องหมายแบ็กสแลช (\) ดังนี้ -
echo 'It\'s Shell Programming'
Backquotes
การใส่คำสั่ง Shell ใด ๆ ระหว่าง backquotes รันคำสั่ง
ไวยากรณ์
นี่คือไวยากรณ์ง่ายๆในการใส่ Shell command อยู่ระหว่าง backquotes -
var=`command`
ตัวอย่าง
date คำสั่งถูกดำเนินการในตัวอย่างต่อไปนี้และผลลัพธ์ที่ได้จะถูกเก็บไว้ในตัวแปร DATA
DATE=`date`
echo "Current Date: $DATE"
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
Current Date: Thu Jul 2 05:28:45 MST 2009
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการเปลี่ยนเส้นทางอินพุต / เอาต์พุตของเชลล์ คำสั่งระบบ Unix ส่วนใหญ่รับอินพุตจากเทอร์มินัลของคุณและส่งผลลัพธ์ที่ได้กลับไปที่เทอร์มินัลของคุณ โดยปกติคำสั่งจะอ่านอินพุตจากอินพุตมาตรฐานซึ่งจะเป็นเทอร์มินัลของคุณตามค่าเริ่มต้น ในทำนองเดียวกันคำสั่งมักจะเขียนเอาต์พุตไปยังเอาต์พุตมาตรฐานซึ่งเป็นเทอร์มินัลของคุณอีกครั้งตามค่าเริ่มต้น
การเปลี่ยนทิศทางเอาต์พุต
ผลลัพธ์จากคำสั่งโดยปกติมีไว้สำหรับเอาต์พุตมาตรฐานสามารถเปลี่ยนไปยังไฟล์แทนได้อย่างง่ายดาย ความสามารถนี้เรียกว่าการเปลี่ยนเส้นทางเอาต์พุต
หากไฟล์สัญกรณ์> ต่อท้ายคำสั่งใด ๆ ที่ปกติเขียนเอาต์พุตไปยังเอาต์พุตมาตรฐานเอาต์พุตของคำสั่งนั้นจะถูกเขียนลงในไฟล์แทนเทอร์มินัลของคุณ
ตรวจสอบสิ่งต่อไปนี้ who คำสั่งที่เปลี่ยนทิศทางผลลัพธ์ทั้งหมดของคำสั่งในไฟล์ผู้ใช้
$ who > users
สังเกตว่าไม่มีเอาต์พุตปรากฏที่เทอร์มินัล เนื่องจากเอาต์พุตถูกเปลี่ยนทิศทางจากอุปกรณ์เอาต์พุตมาตรฐานเริ่มต้น (เทอร์มินัล) ไปยังไฟล์ที่ระบุ คุณสามารถตรวจสอบไฟล์ผู้ใช้เพื่อดูเนื้อหาทั้งหมด -
$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$
หากคำสั่งมีเอาต์พุตที่เปลี่ยนทิศทางไปยังไฟล์และไฟล์นั้นมีข้อมูลบางส่วนอยู่แล้วข้อมูลนั้นจะสูญหายไป ลองพิจารณาตัวอย่างต่อไปนี้ -
$ echo line 1 > users
$ cat users line 1 $
คุณสามารถใช้ >> ตัวดำเนินการเพื่อต่อท้ายผลลัพธ์ในไฟล์ที่มีอยู่ดังนี้ -
$ echo line 2 >> users $ cat users
line 1
line 2
$
การเปลี่ยนทิศทางอินพุต
เช่นเดียวกับที่เอาต์พุตของคำสั่งสามารถเปลี่ยนเส้นทางไปยังไฟล์ได้ดังนั้นอินพุตของคำสั่งจึงสามารถเปลี่ยนเส้นทางจากไฟล์ได้ ในฐานะที่เป็นgreater-than character > ใช้สำหรับการเปลี่ยนทิศทางเอาต์พุตไฟล์ less-than character < ใช้เพื่อเปลี่ยนทิศทางอินพุตของคำสั่ง
คำสั่งที่โดยปกติรับอินพุตจากอินพุตมาตรฐานสามารถมีการเปลี่ยนทิศทางอินพุตจากไฟล์ในลักษณะนี้ ตัวอย่างเช่นในการนับจำนวนบรรทัดในไฟล์ที่ผู้ใช้สร้างขึ้นด้านบนคุณสามารถดำเนินการคำสั่งดังต่อไปนี้ -
$ wc -l users
2 users
$
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้ คุณสามารถนับจำนวนบรรทัดในไฟล์ได้โดยเปลี่ยนเส้นทางอินพุตมาตรฐานของไฟล์wcคำสั่งจากผู้ใช้ไฟล์-
$ wc -l < users
2
$
โปรดสังเกตว่ามีความแตกต่างในเอาต์พุตที่สร้างโดยคำสั่ง wc สองรูปแบบ ในกรณีแรกชื่อของผู้ใช้ไฟล์จะแสดงพร้อมกับจำนวนบรรทัด ในกรณีที่สองมันไม่ใช่
ในกรณีแรก wc รู้ว่ากำลังอ่านอินพุตจากผู้ใช้ไฟล์ ในกรณีที่สองจะรู้เพียงว่ากำลังอ่านอินพุตจากอินพุตมาตรฐานดังนั้นจึงไม่แสดงชื่อไฟล์
เอกสารที่นี่
ก here document ใช้เพื่อเปลี่ยนทิศทางอินพุตไปยังเชลล์สคริปต์หรือโปรแกรมแบบโต้ตอบ
เราสามารถรันโปรแกรมแบบโต้ตอบภายในเชลล์สคริปต์โดยไม่ต้องดำเนินการกับผู้ใช้โดยการจัดหาอินพุตที่จำเป็นสำหรับโปรแกรมโต้ตอบหรือเชลล์สคริปต์แบบโต้ตอบ
แบบฟอร์มทั่วไปสำหรับไฟล์ here เอกสารคือ -
command << delimiter
document
delimiter
ที่นี่เชลล์ตีความไฟล์ <<ตัวดำเนินการเป็นคำสั่งในการอ่านอินพุตจนกว่าจะพบบรรทัดที่มีตัวคั่นที่ระบุ บรรทัดอินพุตทั้งหมดจนถึงบรรทัดที่มีตัวคั่นจะถูกป้อนเข้าในอินพุตมาตรฐานของคำสั่ง
ตัวคั่นบอกเชลล์ว่า hereเอกสารเสร็จสมบูรณ์ หากไม่มีมันเชลล์จะอ่านอินพุตตลอดไป ตัวคั่นต้องเป็นคำเดียวที่ไม่มีช่องว่างหรือแท็บ
ต่อไปนี้เป็นอินพุตของคำสั่ง wc -l เพื่อนับจำนวนบรรทัดทั้งหมด -
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
คุณสามารถใช้ไฟล์ here document เพื่อพิมพ์หลายบรรทัดโดยใช้สคริปต์ของคุณดังนี้ -
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
สคริปต์ต่อไปนี้รันเซสชันด้วย vi แก้ไขข้อความและบันทึกอินพุตในไฟล์ test.txt.
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
หากคุณเรียกใช้สคริปต์นี้โดย vim ทำหน้าที่เป็น vi คุณจะเห็นผลลัพธ์ดังต่อไปนี้ -
$ sh test.sh Vim: Warning: Input is not from a terminal $
หลังจากเรียกใช้สคริปต์คุณจะเห็นสิ่งต่อไปนี้เพิ่มลงในไฟล์ test.txt -
$ cat test.txt This file was created automatically from a shell script $
ทิ้งเอาต์พุต
บางครั้งคุณจะต้องดำเนินการคำสั่ง แต่คุณไม่ต้องการให้ผลลัพธ์แสดงบนหน้าจอ ในกรณีเช่นนี้คุณสามารถละทิ้งเอาต์พุตได้โดยเปลี่ยนเส้นทางไปยังไฟล์/dev/null -
$ command > /dev/null
คำสั่งนี่คือชื่อของคำสั่งที่คุณต้องการเรียกใช้ ไฟล์/dev/null เป็นไฟล์พิเศษที่จะละทิ้งอินพุตทั้งหมดโดยอัตโนมัติ
หากต้องการละทิ้งทั้งเอาต์พุตของคำสั่งและเอาต์พุตข้อผิดพลาดให้ใช้การเปลี่ยนเส้นทางมาตรฐานเพื่อเปลี่ยนเส้นทาง STDERR ถึง STDOUT -
$ command > /dev/null 2>&1
ที่นี่ 2 แสดงถึง STDERR และ 1 แสดงถึง STDOUT. คุณสามารถแสดงข้อความบน STDERR ได้โดยเปลี่ยนเส้นทาง STDOUT ไปยัง STDERR ดังนี้ -
$ echo message 1>&2
คำสั่งการเปลี่ยนเส้นทาง
ต่อไปนี้เป็นรายการคำสั่งทั้งหมดที่คุณสามารถใช้สำหรับการเปลี่ยนเส้นทาง -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | pgm > file เอาต์พุตของ pgm ถูกเปลี่ยนเส้นทางไปยังไฟล์ |
2 | pgm < file โปรแกรม pgm อ่านอินพุตจากไฟล์ |
3 | pgm >> file เอาต์พุตของ pgm ถูกผนวกเข้ากับไฟล์ |
4 | n > file เอาต์พุตจากสตรีมพร้อมตัวบอก n เปลี่ยนเส้นทางไปยังไฟล์ |
5 | n >> file เอาต์พุตจากสตรีมพร้อมตัวบอก n ต่อท้ายไฟล์ |
6 | n >& m ผสานเอาต์พุตจากสตรีม n กับสตรีม m |
7 | n <& m รวมอินพุตจากสตรีม n กับสตรีม m |
8 | << tag อินพุตมาตรฐานมาจากที่นี่ผ่านแท็กถัดไปที่จุดเริ่มต้นของบรรทัด |
9 | | รับเอาต์พุตจากโปรแกรมหรือกระบวนการหนึ่งและส่งไปยังอีกโปรแกรมหนึ่ง |
โปรดสังเกตว่า file descriptor 0 ปกติเป็นอินพุตมาตรฐาน (STDIN) 1 คือเอาต์พุตมาตรฐาน (STDOUT) และ 2 เป็นเอาต์พุตข้อผิดพลาดมาตรฐาน (STDERR)
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับฟังก์ชันเชลล์ ฟังก์ชั่นช่วยให้คุณสามารถแบ่งฟังก์ชันการทำงานโดยรวมของสคริปต์ออกเป็นส่วนย่อยทางตรรกะที่มีขนาดเล็กลงซึ่งสามารถเรียกให้ทำงานแต่ละอย่างได้เมื่อจำเป็น
การใช้ฟังก์ชันเพื่อทำงานซ้ำ ๆ เป็นวิธีที่ยอดเยี่ยมในการสร้าง code reuse. นี่เป็นส่วนสำคัญของหลักการเขียนโปรแกรมเชิงวัตถุสมัยใหม่
ฟังก์ชันเชลล์คล้ายกับรูทีนย่อยโพรซีเดอร์และฟังก์ชันในภาษาโปรแกรมอื่น ๆ
การสร้างฟังก์ชัน
ในการประกาศฟังก์ชันเพียงใช้ไวยากรณ์ต่อไปนี้ -
function_name () {
list of commands
}
ชื่อฟังก์ชันของคุณคือ function_nameและนั่นคือสิ่งที่คุณจะใช้เรียกมันจากที่อื่นในสคริปต์ของคุณ ชื่อฟังก์ชันต้องตามด้วยวงเล็บตามด้วยรายการคำสั่งที่อยู่ภายในวงเล็บปีกกา
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงการใช้ฟังก์ชัน -
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้ -
$./test.sh
Hello World
ส่งผ่านพารามิเตอร์ไปยังฟังก์ชัน
คุณสามารถกำหนดฟังก์ชันที่จะรับพารามิเตอร์ขณะเรียกใช้ฟังก์ชัน พารามิเตอร์เหล่านี้จะแสดงโดย$1, $2 และอื่น ๆ
ต่อไปนี้เป็นตัวอย่างที่เราส่งพารามิเตอร์สองตัวZaraและAliจากนั้นเราจับและพิมพ์พารามิเตอร์เหล่านี้ในฟังก์ชัน
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
}
# Invoke your function
Hello Zara Ali
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
$./test.sh
Hello World Zara Ali
การคืนค่าจากฟังก์ชัน
หากคุณรันไฟล์ exit คำสั่งจากภายในฟังก์ชันผลของมันไม่เพียง แต่ยุติการทำงานของฟังก์ชันเท่านั้น แต่ยังรวมถึงโปรแกรมเชลล์ที่เรียกฟังก์ชันด้วย
หากคุณต้องการยุติการทำงานของฟังก์ชันแทนก็มีวิธีที่จะออกมาจากฟังก์ชันที่กำหนดไว้
ขึ้นอยู่กับสถานการณ์คุณสามารถส่งคืนค่าใด ๆ จากฟังก์ชันของคุณโดยใช้ return คำสั่งที่มีไวยากรณ์ดังนี้ -
return code
ที่นี่ code อาจเป็นอะไรก็ได้ที่คุณเลือกที่นี่ แต่แน่นอนว่าคุณควรเลือกสิ่งที่มีความหมายหรือเป็นประโยชน์ในบริบทของสคริปต์ของคุณโดยรวม
ตัวอย่าง
ฟังก์ชันต่อไปนี้จะคืนค่า 10 -
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?
echo "Return value is $ret"
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
$./test.sh
Hello World Zara Ali
Return value is 10
ฟังก์ชันที่ซ้อนกัน
อีกหนึ่งคุณสมบัติที่น่าสนใจของฟังก์ชั่นคือสามารถเรียกตัวเองและฟังก์ชันอื่น ๆ ฟังก์ชันที่เรียกตัวเองเรียกว่า arecursive function.
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการซ้อนกันของสองฟังก์ชัน -
#!/bin/sh
# Calling one function from another
number_one () {
echo "This is the first function speaking..."
number_two
}
number_two () {
echo "This is now the second function speaking..."
}
# Calling function one.
number_one
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -
This is the first function speaking...
This is now the second function speaking...
ฟังก์ชั่นโทรจากพร้อมท์
คุณสามารถใส่คำจำกัดความสำหรับฟังก์ชันที่ใช้บ่อยในไฟล์ .profile. คำจำกัดความเหล่านี้จะพร้อมใช้งานเมื่อใดก็ตามที่คุณเข้าสู่ระบบและคุณสามารถใช้ได้ที่พรอมต์คำสั่ง
หรือคุณสามารถจัดกลุ่มคำจำกัดความในไฟล์เช่น test.shจากนั้นเรียกใช้ไฟล์ในเชลล์ปัจจุบันโดยพิมพ์ -
$. test.sh
สิ่งนี้มีผลทำให้เกิดฟังก์ชันที่กำหนดไว้ภายใน test.sh ที่จะอ่านและกำหนดให้กับเชลล์ปัจจุบันดังนี้ -
$ number_one
This is the first function speaking...
This is now the second function speaking...
$
ในการลบนิยามของฟังก์ชันออกจากเชลล์ให้ใช้คำสั่ง unset กับ .fตัวเลือก คำสั่งนี้ยังใช้เพื่อลบนิยามของตัวแปรไปยังเชลล์
$ unset -f function_name
คำสั่ง Unix ทั้งหมดมาพร้อมกับอ็อพชันที่เป็นทางเลือกและจำเป็นมากมาย เป็นเรื่องปกติมากที่จะลืมไวยากรณ์ที่สมบูรณ์ของคำสั่งเหล่านี้
เนื่องจากไม่มีใครสามารถจำทุกคำสั่ง Unix และตัวเลือกทั้งหมดได้เราจึงมีความช่วยเหลือออนไลน์เพื่อลดปัญหานี้ตั้งแต่ตอนที่ Unix อยู่ในขั้นตอนการพัฒนา
Unix เวอร์ชัน Help files ถูกเรียก man pages. หากมีชื่อคำสั่งและคุณไม่แน่ใจว่าจะใช้อย่างไร Man Pages ช่วยคุณได้ทุกขั้นตอน
ไวยากรณ์
นี่คือคำสั่งง่ายๆที่ช่วยให้คุณได้รับรายละเอียดของคำสั่ง Unix ใด ๆ ในขณะที่ทำงานกับระบบ -
$man command
ตัวอย่าง
สมมติว่ามีคำสั่งที่ต้องการให้คุณได้รับความช่วยเหลือ สมมติว่าคุณต้องการทราบเกี่ยวกับpwd จากนั้นคุณต้องใช้คำสั่งต่อไปนี้ -
$man pwd
คำสั่งดังกล่าวช่วยให้คุณมีข้อมูลที่สมบูรณ์เกี่ยวกับไฟล์ pwdคำสั่ง ลองด้วยตัวเองที่พรอมต์คำสั่งเพื่อรับรายละเอียดเพิ่มเติม
คุณสามารถรับรายละเอียดทั้งหมดได้ที่ man สั่งเองโดยใช้คำสั่งต่อไปนี้ -
$man man
ส่วนหน้าคน
โดยทั่วไปหน้า Man จะแบ่งออกเป็นส่วน ๆ ซึ่งโดยทั่วไปจะแตกต่างกันไปตามความต้องการของผู้เขียน ตารางต่อไปนี้แสดงรายการส่วนทั่วไป -
ซีเนียร์ | ส่วนและคำอธิบาย |
---|---|
1 | NAME ชื่อของคำสั่ง |
2 | SYNOPSIS พารามิเตอร์การใช้งานทั่วไปของคำสั่ง |
3 | DESCRIPTION อธิบายสิ่งที่คำสั่งทำ |
4 | OPTIONS อธิบายอาร์กิวเมนต์หรือตัวเลือกทั้งหมดของคำสั่ง |
5 | SEE ALSO แสดงรายการคำสั่งอื่น ๆ ที่เกี่ยวข้องโดยตรงกับคำสั่งใน man page หรือใกล้เคียงกับฟังก์ชันการทำงาน |
6 | BUGS อธิบายปัญหาหรือจุดบกพร่องที่ทราบซึ่งมีอยู่กับคำสั่งหรือเอาต์พุต |
7 | EXAMPLES ตัวอย่างการใช้งานทั่วไปที่ช่วยให้ผู้อ่านทราบถึงวิธีการใช้คำสั่ง |
8 | AUTHORS ผู้เขียน man page / command |
สรุปได้ว่า man page เป็นแหล่งข้อมูลที่สำคัญและเป็นช่องทางแรกของการค้นคว้าเมื่อคุณต้องการข้อมูลเกี่ยวกับคำสั่งหรือไฟล์ในระบบ Unix
คำสั่งเชลล์ที่มีประโยชน์
ลิงค์ต่อไปนี้จะแสดงรายการคำสั่ง Unix Shell ที่สำคัญที่สุดและใช้บ่อยมาก
หากคุณไม่ทราบวิธีใช้คำสั่งใด ๆ ให้ใช้ man page เพื่อดูรายละเอียดทั้งหมดเกี่ยวกับคำสั่ง
นี่คือรายการUnix Shell - คำสั่งที่เป็นประโยชน์
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับนิพจน์ทั่วไปกับ SED ใน Unix
นิพจน์ทั่วไปคือสตริงที่สามารถใช้เพื่ออธิบายลำดับอักขระต่างๆ นิพจน์ทั่วไปถูกใช้โดยคำสั่ง Unix ต่างๆรวมถึงed, sed, awk, grepและในขอบเขตที่ จำกัด มากขึ้น vi.
ที่นี่ SED หมายถึง stream editor. ตัวแก้ไขที่เน้นสตรีมนี้สร้างขึ้นเพื่อเรียกใช้สคริปต์โดยเฉพาะ ดังนั้นอินพุตทั้งหมดที่คุณป้อนเข้าไปจะผ่านและไปที่ STDOUT และจะไม่เปลี่ยนไฟล์อินพุต
เรียกเสน่ห์
ก่อนที่จะเริ่มต้นโปรดตรวจสอบให้แน่ใจว่าเรามีสำเนาของไฟล์ /etc/passwd ไฟล์ข้อความที่จะใช้งานได้ sed.
ดังที่ได้กล่าวไว้ก่อนหน้านี้ sed สามารถเรียกใช้โดยการส่งข้อมูลผ่านไปป์ดังต่อไปนี้ -
$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression = script
...............................
cat คำสั่งทิ้งเนื้อหาของ /etc/passwd ถึง sedผ่านท่อเข้าไปในช่องว่างรูปแบบของ sed พื้นที่รูปแบบคือบัฟเฟอร์การทำงานภายในที่ sed ใช้สำหรับการดำเนินการ
ไวยากรณ์ทั่วไป sed
ต่อไปนี้เป็นไวยากรณ์ทั่วไปสำหรับ sed -
/pattern/action
ที่นี่ pattern เป็นนิพจน์ทั่วไปและ actionเป็นหนึ่งในคำสั่งที่กำหนดในตารางต่อไปนี้ ถ้าpattern ถูกละไว้ action ดำเนินการสำหรับทุกบรรทัดตามที่เราได้เห็นข้างต้น
จำเป็นต้องใช้อักขระสแลช (/) ที่ล้อมรอบรูปแบบเนื่องจากใช้เป็นตัวคั่น
ซีเนียร์ | ช่วงและคำอธิบาย |
---|---|
1 | p พิมพ์บรรทัด |
2 | d ลบบรรทัด |
3 | s/pattern1/pattern2/ แทนที่การเกิดขึ้นครั้งแรกของ pattern1 ด้วย pattern2 |
การลบบรรทัดทั้งหมดด้วย sed
ตอนนี้เราจะเข้าใจวิธีการลบบรรทัดทั้งหมดด้วย sed วิงวอนอีกครั้ง; แต่ตอนนี้ sed ควรใช้ไฟล์editing command delete lineแสดงด้วยตัวอักษรเดี่ยว d -
$ cat /etc/passwd | sed 'd' $
แทนที่จะเรียก sed โดยการส่งไฟล์ผ่านไพพ์ sed สามารถสั่งให้อ่านข้อมูลจากไฟล์ได้ดังตัวอย่างต่อไปนี้
คำสั่งต่อไปนี้จะเหมือนกับในตัวอย่างก่อนหน้านี้ทุกประการโดยไม่มีคำสั่ง cat -
$ sed -e 'd' /etc/passwd $
ที่อยู่ sed
Sed ยังรองรับที่อยู่ ที่อยู่คือตำแหน่งเฉพาะในไฟล์หรือช่วงที่ควรใช้คำสั่งแก้ไขเฉพาะ เมื่อ sed ไม่พบแอดเดรสมันจะดำเนินการกับทุกบรรทัดในไฟล์
คำสั่งต่อไปนี้จะเพิ่มแอดเดรสพื้นฐานให้กับคำสั่ง sed ที่คุณใช้อยู่ -
$ cat /etc/passwd | sed '1d' |more 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 games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
สังเกตว่าหมายเลข 1 จะถูกเพิ่มก่อน delete editคำสั่ง คำสั่งนี้สั่งให้ sed ดำเนินการคำสั่งแก้ไขในบรรทัดแรกของไฟล์ ในตัวอย่างนี้ sed จะลบบรรทัดแรกของ/etc/password และพิมพ์ไฟล์ที่เหลือ
ช่วงที่อยู่ sed
ตอนนี้เราจะเข้าใจวิธีการทำงานกับ the sed address ranges. แล้วถ้าคุณต้องการลบมากกว่าหนึ่งบรรทัดออกจากไฟล์ล่ะ? คุณสามารถระบุช่วงที่อยู่ด้วย sed ดังต่อไปนี้ -
$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
คำสั่งดังกล่าวจะถูกนำไปใช้กับทุกบรรทัดตั้งแต่ 1 ถึง 5 ซึ่งจะลบห้าบรรทัดแรก
ลองใช้ช่วงที่อยู่ต่อไปนี้ -
ซีเนียร์ | ช่วงและคำอธิบาย |
---|---|
1 | '4,10d' สายที่เริ่มต้นจาก 4 วันจนถึง 10 วันจะถูกลบออก |
2 | '10,4d' เพียง 10 THสายจะถูกลบออกเพราะ sed ไม่ทำงานในทิศทางตรงกันข้าม |
3 | '4,+5d' สิ่งนี้จะจับคู่บรรทัดที่ 4 ในไฟล์ลบบรรทัดนั้นลบห้าบรรทัดถัดไปจากนั้นหยุดการลบและพิมพ์ส่วนที่เหลือ |
4 | '2,5!d' ลบทุกอย่างยกเว้นนี้เริ่มต้นจาก 2 ครั้งจนถึง 5 THบรรทัด |
5 | '1~3d' สิ่งนี้จะลบบรรทัดแรกก้าวข้ามสามบรรทัดถัดไปจากนั้นลบบรรทัดที่สี่ Sed ยังคงใช้รูปแบบนี้ต่อไปจนจบไฟล์ |
6 | '2~2d' สิ่งนี้บอกให้ sed ลบบรรทัดที่สองก้าวข้ามบรรทัดถัดไปลบบรรทัดถัดไปและทำซ้ำจนกว่าจะถึงจุดสิ้นสุดของไฟล์ |
7 | '4,10p' สายที่เริ่มต้นตั้งแต่ 4 วันจนถึง 10 ปีบริบูรณ์จะพิมพ์ |
8 | '4,d' สิ่งนี้สร้างข้อผิดพลาดทางไวยากรณ์ |
9 | ',10d' นอกจากนี้ยังจะสร้างข้อผิดพลาดทางไวยากรณ์ |
Note - ขณะใช้ไฟล์ p คุณควรใช้ไฟล์ -nตัวเลือกเพื่อหลีกเลี่ยงการพิมพ์บรรทัดซ้ำ ๆ ตรวจสอบความแตกต่างระหว่างสองคำสั่งต่อไปนี้ -
$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'
คำสั่งเปลี่ยนตัว
คำสั่งการแทนที่แสดงโดย sจะแทนที่สตริงที่คุณระบุด้วยสตริงอื่น ๆ ที่คุณระบุ
ในการแทนที่สตริงหนึ่งด้วยอีกสตริงหนึ่ง sed จำเป็นต้องมีข้อมูลว่าสตริงแรกสิ้นสุดที่ใดและสตริงการแทนที่เริ่มต้น สำหรับสิ่งนี้เราดำเนินการต่อด้วยการเพิ่มสายอักขระทั้งสองด้วยเครื่องหมายทับ (/) ตัวละคร
คำสั่งต่อไปนี้แทนที่เหตุการณ์แรกบนบรรทัดของสตริง root ด้วยสตริง amrood.
$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................
เป็นสิ่งสำคัญมากที่จะต้องสังเกตว่าสิ่งยั่วยวนจะทดแทนเฉพาะเหตุการณ์แรกในบรรทัดเท่านั้น หากรูทสตริงเกิดขึ้นมากกว่าหนึ่งครั้งในบรรทัดจะมีการแทนที่การจับคู่แรกเท่านั้น
เพื่อให้ sed ดำเนินการแทนที่ส่วนกลางให้เพิ่มตัวอักษร g ท้ายคำสั่งดังนี้ -
$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
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
...........................
ธงเปลี่ยนตัว
มีแฟล็กที่มีประโยชน์อื่น ๆ อีกมากมายที่สามารถส่งผ่านได้นอกเหนือจาก g แฟล็กและคุณสามารถระบุได้มากกว่าหนึ่งครั้ง
ซีเนียร์ | ตั้งค่าสถานะและคำอธิบาย |
---|---|
1 | g แทนที่การแข่งขันทั้งหมดไม่ใช่แค่นัดแรก |
2 | NUMBER แทนที่เพียงจำนวนวันแข่งขัน |
3 | p หากมีการทดแทนให้พิมพ์ช่องว่างรูปแบบ |
4 | w FILENAME หากทำการแทนที่แล้วให้เขียนผลลัพธ์ไปที่ FILENAME |
5 | I or i จับคู่ในลักษณะที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ |
6 | M or m นอกเหนือจากพฤติกรรมปกติของอักขระนิพจน์ทั่วไปพิเศษ ^ และ $, this flag causes ^ to match the empty string after a newline and $ เพื่อจับคู่สตริงว่างก่อนขึ้นบรรทัดใหม่ |
การใช้ตัวคั่นสตริงทางเลือก
สมมติว่าคุณต้องทำการแทนที่สตริงที่มีอักขระสแลชไปข้างหน้า ในกรณีนี้คุณสามารถระบุตัวคั่นอื่นได้โดยระบุอักขระที่กำหนดไว้หลังs.
$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
ในตัวอย่างข้างต้นเราได้ใช้ : เป็น delimiter แทนที่จะใช้เครื่องหมายทับ / เพราะเราพยายามค้นหา /root แทนที่จะเป็นรากธรรมดา
แทนที่ด้วย Empty Space
ใช้สตริงการแทนที่ว่างเพื่อลบสตริงรูทจากไฟล์ /etc/passwd ไฟล์ทั้งหมด -
$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
การทดแทนที่อยู่
หากคุณต้องการแทนที่สตริง sh ด้วยสตริง quiet เฉพาะในบรรทัดที่ 10 คุณสามารถระบุได้ดังนี้ -
$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
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
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet
ในทำนองเดียวกันหากต้องการทำการแทนที่ช่วงที่อยู่คุณสามารถทำสิ่งต่อไปนี้ -
$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
ดังที่คุณเห็นจากเอาต์พุตห้าบรรทัดแรกมีสตริง sh เปลี่ยนไปเป็น quietแต่เส้นที่เหลือไม่ถูกแตะต้อง
คำสั่งจับคู่
คุณจะใช้ไฟล์ p ตัวเลือกพร้อมกับ -n ตัวเลือกในการพิมพ์บรรทัดที่ตรงกันทั้งหมดดังนี้ -
$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
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
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
การใช้นิพจน์ทั่วไป
ในขณะที่จับคู่รูปแบบคุณสามารถใช้นิพจน์ทั่วไปซึ่งให้ความยืดหยุ่นมากขึ้น
ตรวจสอบตัวอย่างต่อไปนี้ซึ่งตรงกับบรรทัดทั้งหมดที่ขึ้นต้นด้วยdaemonแล้วลบออก -
$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/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
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
ต่อไปนี้เป็นตัวอย่างที่ลบบรรทัดทั้งหมดที่ลงท้ายด้วย sh -
$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync
ตารางต่อไปนี้แสดงอักขระพิเศษสี่ตัวที่มีประโยชน์มากในนิพจน์ทั่วไป
ซีเนียร์ | ตัวละครและคำอธิบาย |
---|---|
1 | ^ ตรงกับจุดเริ่มต้นของบรรทัด |
2 | $ ตรงกับจุดสิ้นสุดของบรรทัด |
3 | . จับคู่อักขระเดี่ยวใด ๆ |
4 | * จับคู่อักขระก่อนหน้าเป็นศูนย์หรือมากกว่า |
5 | [chars] จับคู่อักขระใด ๆ ที่ระบุในตัวอักษรโดยที่อักขระเป็นลำดับของอักขระ คุณสามารถใช้อักขระ - เพื่อระบุช่วงของอักขระ |
จับคู่อักขระ
ดูนิพจน์เพิ่มเติมเพื่อสาธิตการใช้งาน metacharacters. ตัวอย่างเช่นรูปแบบต่อไปนี้ -
ซีเนียร์ | นิพจน์และคำอธิบาย |
---|---|
1 | /a.c/ จับคู่บรรทัดที่มีสตริงเช่น a+c, a-c, abc, matchและ a3c |
2 | /a*c/ จับคู่สตริงเดียวกันพร้อมกับสตริงเช่น ace, yaccและ arctic |
3 | /[tT]he/ จับคู่สตริง The และ the |
4 | /^$/ จับคู่บรรทัดว่าง |
5 | /^.*$/ จับคู่ทั้งบรรทัดไม่ว่าจะเป็นอะไรก็ตาม |
6 | / */ จับคู่ช่องว่างอย่างน้อยหนึ่งช่อง |
7 | /^$/ ตรงกัน blank เส้น |
ตารางต่อไปนี้แสดงชุดอักขระที่ใช้บ่อย -
ซีเนียร์ | ตั้งค่าและคำอธิบาย |
---|---|
1 | [a-z] จับคู่อักษรตัวพิมพ์เล็กตัวเดียว |
2 | [A-Z] จับคู่อักษรตัวพิมพ์ใหญ่ตัวเดียว |
3 | [a-zA-Z] ตรงกับตัวอักษรเดียว |
4 | [0-9] จับคู่หมายเลขเดียว |
5 | [a-zA-Z0-9] จับคู่ตัวอักษรหรือตัวเลขตัวเดียว |
คีย์เวิร์ดคลาสตัวละคร
คำหลักพิเศษบางคำสามารถใช้ได้โดยทั่วไป regexpsโดยเฉพาะยูทิลิตี้ GNU ที่ใช้ regexps. สิ่งเหล่านี้มีประโยชน์มากสำหรับการทำให้นิพจน์ทั่วไปลดความซับซ้อนและเพิ่มความสามารถในการอ่าน
ตัวอย่างเช่นตัวละคร a through z และตัวละคร A through Zประกอบเป็นคลาสอักขระหนึ่งตัวที่มีคีย์เวิร์ด [[:alpha:]]
การใช้คีย์เวิร์ดคลาสอักขระตัวอักษรคำสั่งนี้จะพิมพ์เฉพาะบรรทัดเหล่านั้นในไฟล์ /etc/syslog.conf ไฟล์ที่ขึ้นต้นด้วยตัวอักษร -
$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
ตารางต่อไปนี้เป็นรายการคีย์เวิร์ดคลาสอักขระที่มีอยู่ทั้งหมดใน GNU sed
ซีเนียร์ | คลาสตัวละครและคำอธิบาย |
---|---|
1 | [[:alnum:]] ตัวอักษรและตัวเลข [az AZ 0-9] |
2 | [[:alpha:]] ตามตัวอักษร [az AZ] |
3 | [[:blank:]] อักขระว่าง (ช่องว่างหรือแท็บ) |
4 | [[:cntrl:]] ควบคุมอักขระ |
5 | [[:digit:]] หมายเลข [0-9] |
6 | [[:graph:]] อักขระที่มองเห็นได้ (ไม่รวมช่องว่าง) |
7 | [[:lower:]] อักษรตัวพิมพ์เล็ก [az] |
8 | [[:print:]] อักขระที่พิมพ์ได้ (อักขระที่ไม่สามารถควบคุมได้) |
9 | [[:punct:]] อักขระเครื่องหมายวรรคตอน |
10 | [[:space:]] ช่องว่าง |
11 | [[:upper:]] อักษรตัวพิมพ์ใหญ่ [AZ] |
12 | [[:xdigit:]] เลขฐานสิบหก [0-9 AF AF] |
Aampersand อ้างอิง
sed metacharacter &แสดงถึงเนื้อหาของรูปแบบที่ตรงกัน ตัวอย่างเช่นสมมติว่าคุณมีไฟล์ชื่อphone.txt เต็มไปด้วยหมายเลขโทรศัพท์ดังต่อไปนี้ -
5555551212
5555551213
5555551214
6665551215
6665551216
7775551217
คุณต้องการสร้างไฟล์ area code(สามหลักแรก) ล้อมรอบด้วยวงเล็บเพื่อให้อ่านง่ายขึ้น ในการทำเช่นนี้คุณสามารถใช้อักขระแทนที่เครื่องหมายและ -
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217
ในส่วนของรูปแบบคุณกำลังจับคู่ 3 หลักแรกแล้วใช้ & คุณกำลังแทนที่ 3 หลักเหล่านั้นด้วยรอบ parentheses.
การใช้คำสั่ง sed หลายคำสั่ง
คุณสามารถใช้คำสั่ง sed หลายคำสั่งในคำสั่ง sed เดียวดังนี้ -
$ sed -e 'command1' -e 'command2' ... -e 'commandN' files
ที่นี่ command1 ผ่าน commandNเป็นคำสั่ง sed ของประเภทที่กล่าวถึงก่อนหน้านี้ คำสั่งเหล่านี้ใช้กับแต่ละบรรทัดในรายการไฟล์ที่กำหนดโดยไฟล์
โดยใช้กลไกเดียวกันเราสามารถเขียนตัวอย่างหมายเลขโทรศัพท์ด้านบนได้ดังนี้ -
$ sed -e 's/^[[:digit:]]\{3\}/(&)/g' \
-e 's/)[[:digit:]]\{3\}/&-/g' phone.txt
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
Note - ในตัวอย่างข้างต้นแทนที่จะใช้คีย์เวิร์ดคลาสอักขระซ้ำ [[:digit:]] สามครั้งเราแทนที่ด้วย \{3\}ซึ่งหมายความว่านิพจน์ทั่วไปก่อนหน้าจะถูกจับคู่สามครั้ง เรายังได้ใช้\ เพื่อให้บรรทัดแตกและสิ่งนี้จะต้องถูกลบออกก่อนที่จะรันคำสั่ง
ย้อนกลับการอ้างอิง
ampersand metacharacterมีประโยชน์ แต่มีประโยชน์มากกว่านั้นคือความสามารถในการกำหนดพื้นที่เฉพาะในนิพจน์ทั่วไป พื้นที่พิเศษเหล่านี้สามารถใช้เป็นข้อมูลอ้างอิงในสตริงการแทนที่ของคุณ ด้วยการกำหนดส่วนเฉพาะของนิพจน์ทั่วไปคุณสามารถอ้างอิงกลับไปยังส่วนเหล่านั้นด้วยอักขระอ้างอิงพิเศษ
ทำ back referencesคุณต้องกำหนดภูมิภาคก่อนจากนั้นอ้างอิงกลับไปที่ภูมิภาคนั้น ในการกำหนดภูมิภาคให้คุณแทรกbackslashed parenthesesในแต่ละภูมิภาคที่น่าสนใจ พื้นที่แรกที่คุณล้อมรอบด้วยแบ็กสแลชจะถูกอ้างอิงโดย\1ภาคที่สองโดย \2และอื่น ๆ
สมมติ phone.txt มีข้อความดังนี้ -
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
ลองใช้คำสั่งต่อไปนี้ -
$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \
code: \1 Second: \2 Third: \3/'
Area code: (555) Second: 555- Third: 1212
Area code: (555) Second: 555- Third: 1213
Area code: (555) Second: 555- Third: 1214
Area code: (666) Second: 555- Third: 1215
Area code: (666) Second: 555- Third: 1216
Area code: (777) Second: 555- Third: 1217
Note - ในตัวอย่างข้างต้นนิพจน์ทั่วไปแต่ละรายการภายในวงเล็บจะถูกอ้างอิงกลับโดย \1, \2และอื่น ๆ เราได้ใช้\เพื่อให้เส้นแบ่งที่นี่ สิ่งนี้ควรถูกลบออกก่อนที่จะรันคำสั่ง
ระบบไฟล์คือชุดไฟล์โลจิคัลบนพาร์ติชันหรือดิสก์ พาร์ติชันเป็นที่เก็บข้อมูลและสามารถขยายฮาร์ดไดรฟ์ทั้งหมดได้หากต้องการ
ฮาร์ดไดรฟ์ของคุณสามารถมีพาร์ติชันต่างๆซึ่งโดยปกติจะมีระบบไฟล์เดียวเช่นระบบไฟล์เดียวที่มีไฟล์ /file system หรืออื่น ๆ ที่มีไฟล์ /home file system.
ระบบไฟล์เดียวต่อพาร์ติชันช่วยให้สามารถบำรุงรักษาและจัดการระบบไฟล์ที่แตกต่างกันได้
ทุกอย่างใน Unix ถือเป็นไฟล์รวมถึงอุปกรณ์ทางกายภาพเช่น DVD-ROM อุปกรณ์ USB และฟล็อปปี้ดิสก์
โครงสร้างไดเรกทอรี
Unix ใช้โครงสร้างระบบไฟล์แบบลำดับชั้นเหมือนกับต้นไม้กลับหัวโดยมีรูท (/) ที่ฐานของระบบไฟล์และไดเร็กทอรีอื่น ๆ ทั้งหมดที่แพร่กระจายจากที่นั่น
ระบบไฟล์ Unix คือชุดของไฟล์และไดเร็กทอรีที่มีคุณสมบัติดังต่อไปนี้ -
มีไดเรกทอรีราก (/) ที่มีไฟล์และไดเร็กทอรีอื่น ๆ
ไฟล์หรือไดเร็กทอรีแต่ละไฟล์ถูกระบุโดยไม่ซ้ำกันโดยใช้ชื่อไดเร็กทอรีที่อยู่และตัวระบุที่ไม่ซ้ำกันโดยทั่วไปเรียกว่า inode.
ตามแบบแผนไดเร็กทอรีรากมีนามสกุล inode จำนวน 2 และ lost+found ไดเร็กทอรีมีไฟล์ inode จำนวน 3. หมายเลขไอโหนด0 และ 1ไม่ได้ใช้ หมายเลขไอโหนดของไฟล์สามารถมองเห็นได้โดยการระบุไฟล์-i option ถึง ls command.
มันมีอยู่ในตัว ไม่มีการอ้างอิงระหว่างระบบไฟล์หนึ่งกับอีกระบบหนึ่ง
ไดเร็กทอรีมีวัตถุประสงค์เฉพาะและโดยทั่วไปจะมีข้อมูลประเภทเดียวกันเพื่อให้ค้นหาไฟล์ได้ง่าย ต่อไปนี้เป็นไดเร็กทอรีที่มีอยู่ใน Unix เวอร์ชันหลัก -
ซีเนียร์ | ไดเรกทอรีและคำอธิบาย |
---|---|
1 | / นี่คือไดเร็กทอรีรากซึ่งควรมีเฉพาะไดเร็กทอรีที่จำเป็นในระดับบนสุดของโครงสร้างไฟล์ |
2 | /bin นี่คือที่ตั้งของไฟล์ปฏิบัติการ ไฟล์เหล่านี้พร้อมใช้งานสำหรับผู้ใช้ทุกคน |
3 | /dev นี่คือไดรเวอร์อุปกรณ์ |
4 | /etc คำสั่งไดเร็กทอรี Supervisor ไฟล์คอนฟิกูเรชันไฟล์คอนฟิกูเรชันดิสก์รายชื่อผู้ใช้ที่ถูกต้องกลุ่มอีเธอร์เน็ตโฮสต์ที่ที่จะส่งข้อความสำคัญ |
5 | /lib ประกอบด้วยไฟล์ไลบรารีที่แบ่งใช้และบางครั้งไฟล์อื่น ๆ ที่เกี่ยวข้องกับเคอร์เนล |
6 | /boot มีไฟล์สำหรับการบูตระบบ |
7 | /home มีโฮมไดเร็กทอรีสำหรับผู้ใช้และบัญชีอื่น ๆ |
8 | /mnt ใช้เพื่อเมานต์ระบบไฟล์ชั่วคราวอื่น ๆ เช่น cdrom และ floppy สำหรับ CD-ROM ไดรฟ์และ floppy diskette driveตามลำดับ |
9 | /proc ประกอบด้วยกระบวนการทั้งหมดที่ทำเครื่องหมายเป็นไฟล์โดย process number หรือข้อมูลอื่น ๆ ที่เป็นพลวัตของระบบ |
10 | /tmp เก็บไฟล์ชั่วคราวที่ใช้ระหว่างบู๊ตระบบ |
11 | /usr ใช้เพื่อวัตถุประสงค์เบ็ดเตล็ดและผู้ใช้หลายคนสามารถใช้ได้ รวมคำสั่งการดูแลระบบไฟล์ที่ใช้ร่วมกันไฟล์ไลบรารีและอื่น ๆ |
12 | /var โดยทั่วไปจะมีไฟล์ที่มีความยาวผันแปรเช่นไฟล์บันทึกและไฟล์พิมพ์และไฟล์ประเภทอื่น ๆ ที่อาจมีจำนวนข้อมูลที่แปรผัน |
13 | /sbin มีไฟล์ไบนารี (เรียกใช้งานได้) โดยปกติสำหรับการดูแลระบบ ตัวอย่างเช่น,fdisk และ ifconfig ประโยชน์ |
14 | /kernel มีไฟล์เคอร์เนล |
การนำทางระบบไฟล์
เมื่อคุณเข้าใจพื้นฐานของระบบไฟล์แล้วคุณสามารถเริ่มนำทางไปยังไฟล์ที่คุณต้องการได้ คำสั่งต่อไปนี้ใช้เพื่อนำทางระบบ -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | cat filename แสดงชื่อไฟล์ |
2 | cd dirname ย้ายคุณไปยังไดเร็กทอรีที่ระบุ |
3 | cp file1 file2 คัดลอกไฟล์ / ไดเร็กทอรีหนึ่งไฟล์ไปยังตำแหน่งที่ระบุ |
4 | file filename ระบุประเภทไฟล์ (ไบนารีข้อความ ฯลฯ ) |
5 | find filename dir ค้นหาไฟล์ / ไดเร็กทอรี |
6 | head filename แสดงจุดเริ่มต้นของไฟล์ |
7 | less filename เรียกดูไฟล์จากจุดสิ้นสุดหรือจุดเริ่มต้น |
8 | ls dirname แสดงเนื้อหาของไดเร็กทอรีที่ระบุ |
9 | mkdir dirname สร้างไดเร็กทอรีที่ระบุ |
10 | more filename เรียกดูไฟล์ตั้งแต่ต้นจนจบ |
11 | mv file1 file2 ย้ายตำแหน่งของหรือเปลี่ยนชื่อไฟล์ / ไดเร็กทอรี |
12 | pwd แสดงไดเร็กทอรีปัจจุบันที่ผู้ใช้อยู่ |
13 | rm filename ลบไฟล์ |
14 | rmdir dirname ลบไดเร็กทอรี |
15 | tail filename แสดงจุดสิ้นสุดของไฟล์ |
16 | touch filename สร้างไฟล์เปล่าหรือแก้ไขไฟล์ที่มีอยู่หรือแอตทริบิวต์ |
17 | whereis filename แสดงตำแหน่งของไฟล์ |
18 | which filename แสดงตำแหน่งของไฟล์หากอยู่ใน PATH ของคุณ |
คุณสามารถใช้Manpage Helpเพื่อตรวจสอบไวยากรณ์ที่สมบูรณ์สำหรับแต่ละคำสั่งที่กล่าวถึงที่นี่
คำสั่ง df
วิธีแรกในการจัดการพื้นที่พาร์ติชันของคุณคือการใช้ไฟล์ df (disk free)คำสั่ง คำสั่งdf -k (disk free) แสดงไฟล์ disk space usage in kilobytesดังที่แสดงด้านล่าง -
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
ไดเร็กทอรีบางรายการเช่น /devicesแสดง 0 ในคอลัมน์ kbytes ใช้แล้วและประโยชน์รวมทั้ง 0% สำหรับความจุ สิ่งเหล่านี้เป็นระบบไฟล์พิเศษ (หรือเสมือน) และแม้ว่าพวกมันจะอยู่บนดิสก์ภายใต้ / แต่พวกมันก็ไม่กินเนื้อที่ดิสก์
df -kโดยทั่วไปเอาต์พุตจะเหมือนกันในระบบ Unix ทั้งหมด นี่คือสิ่งที่มักจะมี -
ซีเนียร์ | คอลัมน์และคำอธิบาย |
---|---|
1 | Filesystem ชื่อระบบไฟล์ฟิสิคัล |
2 | kbytes พื้นที่รวมกิโลไบต์ที่มีอยู่ในสื่อบันทึกข้อมูล |
3 | used พื้นที่ทั้งหมดที่ใช้เป็นกิโลไบต์ (โดยไฟล์) |
4 | avail กิโลไบต์ทั้งหมดพร้อมใช้งาน |
5 | capacity เปอร์เซ็นต์ของพื้นที่ทั้งหมดที่ใช้โดยไฟล์ |
6 | Mounted on สิ่งที่ระบบไฟล์ติดตั้งอยู่ |
คุณสามารถใช้ไฟล์ -h (human readable) option เพื่อแสดงผลลัพธ์ในรูปแบบที่แสดงขนาดด้วยสัญกรณ์ที่เข้าใจง่ายขึ้น
คำสั่ง du
du (disk usage) command ช่วยให้คุณสามารถระบุไดเร็กทอรีเพื่อแสดงการใช้พื้นที่ดิสก์บนไดเร็กทอรีเฉพาะ
คำสั่งนี้มีประโยชน์หากคุณต้องการกำหนดว่าไดเร็กทอรีหนึ่ง ๆ ใช้พื้นที่เท่าใด คำสั่งต่อไปนี้แสดงจำนวนบล็อกที่ใช้โดยแต่ละไดเร็กทอรี บล็อกเดียวอาจใช้เวลา 512 ไบต์หรือ 1 กิโลไบต์ขึ้นอยู่กับระบบของคุณ
$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $
-h ตัวเลือกช่วยให้เข้าใจผลลัพธ์ได้ง่ายขึ้น -
$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $
การติดตั้งระบบไฟล์
ต้องติดตั้งระบบไฟล์เพื่อให้ระบบสามารถใช้งานได้ หากต้องการดูว่ามีอะไรติดตั้งอยู่ (พร้อมให้ใช้งาน) บนระบบของคุณให้ใช้คำสั่งต่อไปนี้ -
$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $
/mntไดเร็กทอรีตามแบบแผน Unix คือตำแหน่งที่เมาท์ชั่วคราว (เช่นไดรฟ์ CDROM ไดรฟ์เครือข่ายระยะไกลและฟล็อปปี้ดิสก์ไดรฟ์) หากคุณต้องการเมานต์ระบบไฟล์คุณสามารถใช้คำสั่ง mount โดยใช้ไวยากรณ์ต่อไปนี้ -
mount -t file_system_type device_to_mount directory_to_mount_to
ตัวอย่างเช่นหากคุณต้องการติดตั้งไฟล์ CD-ROM ไปยังไดเร็กทอรี /mnt/cdromคุณสามารถพิมพ์ -
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
สิ่งนี้ถือว่าอุปกรณ์ซีดีรอมของคุณถูกเรียก /dev/cdrom และที่คุณต้องการติดตั้ง /mnt/cdrom. อ้างอิงถึงหน้า mount man สำหรับข้อมูลเฉพาะเพิ่มเติมหรือประเภท mount-h ที่บรรทัดคำสั่งสำหรับข้อมูลความช่วยเหลือ
หลังจากติดตั้งแล้วคุณสามารถใช้คำสั่ง cd เพื่อนำทางระบบไฟล์ที่มีอยู่ใหม่ผ่านจุดเมาท์ที่คุณเพิ่งสร้างขึ้น
การยกเลิกการต่อเชื่อมระบบไฟล์
ในการยกเลิกการต่อเชื่อม (ลบ) ระบบไฟล์ออกจากระบบของคุณให้ใช้ไฟล์ umount คำสั่งโดยระบุจุดต่อเชื่อมหรืออุปกรณ์
ตัวอย่างเช่น, to unmount cdromใช้คำสั่งต่อไปนี้ -
$ umount /dev/cdrom
mount command ช่วยให้คุณสามารถเข้าถึงระบบไฟล์ของคุณได้ แต่ในระบบ Unix ที่ทันสมัยที่สุดไฟล์ automount function ทำให้ผู้ใช้มองไม่เห็นกระบวนการนี้และไม่ต้องมีการแทรกแซงใด ๆ
โควต้าผู้ใช้และกลุ่ม
โควต้าของผู้ใช้และกลุ่มจัดเตรียมกลไกที่จำนวนพื้นที่ที่ใช้โดยผู้ใช้คนเดียวหรือผู้ใช้ทั้งหมดภายในกลุ่มเฉพาะสามารถ จำกัด ได้ตามค่าที่กำหนดโดยผู้ดูแลระบบ
โควต้าทำงานประมาณสองขีด จำกัด ที่อนุญาตให้ผู้ใช้ดำเนินการบางอย่างหากจำนวนพื้นที่หรือจำนวนบล็อกดิสก์เริ่มเกินขีด จำกัด ที่ผู้ดูแลระบบกำหนดไว้ -
Soft Limit - หากผู้ใช้เกินขีด จำกัด ที่กำหนดไว้จะมีช่วงเวลาผ่อนผันที่อนุญาตให้ผู้ใช้เพิ่มพื้นที่ว่างได้
Hard Limit - เมื่อถึงขีด จำกัด ฮาร์ดโดยไม่คำนึงถึงระยะเวลาผ่อนผันจะไม่สามารถจัดสรรไฟล์หรือบล็อกเพิ่มเติมได้
มีคำสั่งจำนวนมากในการจัดการโควต้า -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | quota แสดงการใช้งานดิสก์และขีด จำกัด สำหรับผู้ใช้กลุ่ม |
2 | edquota นี่คือตัวแก้ไขโควต้า ผู้ใช้หรือโควต้ากลุ่มสามารถแก้ไขได้โดยใช้คำสั่งนี้ |
3 | quotacheck สแกนระบบไฟล์สำหรับการใช้งานดิสก์สร้างตรวจสอบและซ่อมแซมไฟล์โควต้า |
4 | setquota นี่คือตัวแก้ไขโควต้าบรรทัดคำสั่ง |
5 | quotaon สิ่งนี้จะประกาศให้ระบบทราบว่าควรเปิดใช้งานโควต้าดิสก์ในระบบไฟล์อย่างน้อยหนึ่งระบบ |
6 | quotaoff สิ่งนี้จะประกาศให้ระบบทราบว่าควรปิดการใช้งานโควต้าดิสก์สำหรับระบบไฟล์อย่างน้อยหนึ่งระบบ |
7 | repquota สิ่งนี้จะพิมพ์สรุปการใช้งานดิสก์และโควต้าสำหรับระบบไฟล์ที่ระบุ |
คุณสามารถใช้Manpage Helpเพื่อตรวจสอบไวยากรณ์ที่สมบูรณ์สำหรับแต่ละคำสั่งที่กล่าวถึงที่นี่
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการดูแลระบบผู้ใช้ใน Unix
มีบัญชีสามประเภทในระบบ Unix -
บัญชีรูท
นี้เรียกอีกอย่างว่า superuserและจะมีการควบคุมระบบอย่างสมบูรณ์และไม่มีข้อ จำกัด superuser สามารถรันคำสั่งใด ๆ โดยไม่มีข้อ จำกัด ควรถือว่าผู้ใช้รายนี้เป็นผู้ดูแลระบบ
บัญชีระบบ
บัญชีระบบเป็นบัญชีที่จำเป็นสำหรับการทำงานของส่วนประกอบเฉพาะของระบบเช่นบัญชีอีเมลและ sshdบัญชี โดยปกติบัญชีเหล่านี้จำเป็นสำหรับฟังก์ชันเฉพาะบางอย่างในระบบของคุณและการแก้ไขใด ๆ ก็ตามอาจส่งผลเสียต่อระบบ
บัญชีผู้ใช้
บัญชีผู้ใช้ให้การเข้าถึงระบบแบบโต้ตอบสำหรับผู้ใช้และกลุ่มผู้ใช้ โดยทั่วไปผู้ใช้ทั่วไปจะถูกกำหนดให้กับบัญชีเหล่านี้และโดยปกติจะมีการ จำกัด การเข้าถึงไฟล์ระบบและไดเร็กทอรีที่สำคัญ
Unix สนับสนุนแนวคิดของบัญชีกลุ่มซึ่งจัดกลุ่มบัญชีจำนวนหนึ่งอย่างมีเหตุผล ทุกบัญชีจะเป็นส่วนหนึ่งของบัญชีกลุ่มอื่น กลุ่ม Unix มีบทบาทสำคัญในการจัดการสิทธิ์ของไฟล์และการจัดการกระบวนการ
การจัดการผู้ใช้และกลุ่ม
มีไฟล์การดูแลระบบผู้ใช้หลักสี่ไฟล์ -
/etc/passwd- เก็บข้อมูลบัญชีผู้ใช้และรหัสผ่าน ไฟล์นี้เก็บข้อมูลส่วนใหญ่เกี่ยวกับบัญชีในระบบ Unix
/etc/shadow- ถือรหัสผ่านที่เข้ารหัสของบัญชีที่เกี่ยวข้อง ไม่ใช่ทุกระบบที่รองรับไฟล์นี้
/etc/group - ไฟล์นี้มีข้อมูลกลุ่มสำหรับแต่ละบัญชี
/etc/gshadow - ไฟล์นี้มีข้อมูลบัญชีกลุ่มที่ปลอดภัย
ตรวจสอบไฟล์ด้านบนทั้งหมดโดยใช้ไฟล์ cat คำสั่ง
ตารางต่อไปนี้แสดงรายการคำสั่งที่พร้อมใช้งานในระบบ Unix ส่วนใหญ่เพื่อสร้างและจัดการบัญชีและกลุ่ม -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | useradd เพิ่มบัญชีในระบบ |
2 | usermod แก้ไขแอตทริบิวต์ของบัญชี |
3 | userdel ลบบัญชีออกจากระบบ |
4 | groupadd เพิ่มกลุ่มในระบบ |
5 | groupmod แก้ไขแอตทริบิวต์ของกลุ่ม |
6 | groupdel ลบกลุ่มออกจากระบบ |
คุณสามารถใช้Manpage Helpเพื่อตรวจสอบไวยากรณ์ที่สมบูรณ์สำหรับแต่ละคำสั่งที่กล่าวถึงที่นี่
สร้างกลุ่ม
ตอนนี้เราจะเข้าใจวิธีสร้างกลุ่ม สำหรับสิ่งนี้เราจำเป็นต้องสร้างกลุ่มก่อนที่จะสร้างบัญชีมิฉะนั้นเราสามารถใช้ประโยชน์จากกลุ่มที่มีอยู่ในระบบของเราได้ เรามีกลุ่มทั้งหมดที่ระบุไว้ใน/etc/groups ไฟล์.
กลุ่มเริ่มต้นทั้งหมดเป็นกลุ่มเฉพาะของบัญชีระบบและไม่แนะนำให้ใช้กับบัญชีธรรมดา ดังนั้นต่อไปนี้เป็นไวยากรณ์ในการสร้างบัญชีกลุ่มใหม่ -
groupadd [-g gid [-o]] [-r] [-f] groupname
ตารางต่อไปนี้แสดงรายการพารามิเตอร์ -
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -g GID ค่าตัวเลขของ ID ของกลุ่ม |
2 | -o ตัวเลือกนี้อนุญาตให้เพิ่มกลุ่มด้วย GID ที่ไม่ซ้ำกัน |
3 | -r แฟล็กนี้สั่ง groupadd เพื่อเพิ่มบัญชีระบบ |
4 | -f ตัวเลือกนี้ทำให้ออกจากสถานะสำเร็จหากมีกลุ่มที่ระบุอยู่แล้ว ด้วย -g หากมี GID ที่ระบุอยู่แล้วจะมีการเลือก GID อื่น ๆ (เฉพาะ) |
5 | groupname ชื่อกลุ่มจริงที่จะสร้าง |
หากคุณไม่ได้ระบุพารามิเตอร์ใด ๆ ระบบจะใช้ค่าเริ่มต้น
ตัวอย่างต่อไปนี้สร้างกลุ่มนักพัฒนาที่มีค่าดีฟอลต์ซึ่งเป็นที่ยอมรับสำหรับผู้ดูแลระบบส่วนใหญ่
$ groupadd developers
ปรับเปลี่ยนกลุ่ม
หากต้องการแก้ไขกลุ่มให้ใช้ไฟล์ groupmod ไวยากรณ์ -
$ groupmod -n new_modified_group_name old_group_name
ในการเปลี่ยนชื่อกลุ่ม developer_2 เป็น developer ให้พิมพ์ -
$ groupmod -n developer developer_2
นี่คือวิธีที่คุณจะเปลี่ยน GID ทางการเงินเป็น 545 -
$ groupmod -g 545 developer
ลบกลุ่ม
ตอนนี้เราจะเข้าใจวิธีการลบกลุ่ม ในการลบกลุ่มที่มีอยู่สิ่งที่คุณต้องมีคือไฟล์groupdel command และ group name. ในการลบกลุ่มการเงินคำสั่งคือ -
$ groupdel developer
ซึ่งจะลบเฉพาะกลุ่มเท่านั้นไม่ใช่ไฟล์ที่เกี่ยวข้องกับกลุ่มนั้น ไฟล์ยังคงสามารถเข้าถึงได้โดยเจ้าของไฟล์
สร้างบัญชี
ให้เราดูวิธีสร้างบัญชีใหม่ในระบบ Unix ของคุณ ต่อไปนี้เป็นไวยากรณ์ในการสร้างบัญชีของผู้ใช้ -
useradd -d homedir -g groupname -m -s shell -u userid accountname
ตารางต่อไปนี้แสดงรายการพารามิเตอร์ -
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -d homedir ระบุโฮมไดเร็กทอรีสำหรับบัญชี |
2 | -g groupname ระบุบัญชีกลุ่มสำหรับบัญชีนี้ |
3 | -m สร้างโฮมไดเร็กทอรีหากไม่มีอยู่ |
4 | -s shell ระบุเชลล์เริ่มต้นสำหรับบัญชีนี้ |
5 | -u userid คุณสามารถระบุรหัสผู้ใช้สำหรับบัญชีนี้ |
6 | accountname ชื่อบัญชีจริงที่จะสร้าง |
หากคุณไม่ได้ระบุพารามิเตอร์ใด ๆ ระบบจะใช้ค่าเริ่มต้น useradd คำสั่งปรับเปลี่ยน /etc/passwd, /etc/shadowและ /etc/group ไฟล์และสร้างโฮมไดเร็กทอรี
ต่อไปนี้เป็นตัวอย่างที่สร้างบัญชี mcmohdตั้งค่าโฮมไดเร็กทอรีเป็น /home/mcmohd และกลุ่มเป็น developers. ผู้ใช้รายนี้จะกำหนด Korn Shell ให้
$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd
ก่อนที่จะออกคำสั่งด้านบนตรวจสอบให้แน่ใจว่าคุณได้สร้างกลุ่มนักพัฒนาโดยใช้ไฟล์groupadd คำสั่ง
เมื่อสร้างบัญชีแล้วคุณสามารถตั้งรหัสผ่านโดยใช้ไฟล์ passwd คำสั่งดังนี้ -
$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
เมื่อคุณพิมพ์ passwd accountnameจะให้ตัวเลือกในการเปลี่ยนรหัสผ่านหากคุณเป็น superuser มิฉะนั้นคุณสามารถเปลี่ยนเพียงรหัสผ่านของคุณโดยใช้คำสั่งเดียวกัน แต่ไม่ต้องระบุชื่อบัญชีของคุณ
แก้ไขบัญชี
usermodคำสั่งช่วยให้คุณสามารถเปลี่ยนแปลงบัญชีที่มีอยู่ได้จากบรรทัดคำสั่ง มันใช้อาร์กิวเมนต์เดียวกับuseradd คำสั่งบวกอาร์กิวเมนต์ -l ซึ่งอนุญาตให้คุณเปลี่ยนชื่อบัญชี
ตัวอย่างเช่นในการเปลี่ยนชื่อบัญชี mcmohd ถึง mcmohd20 และหากต้องการเปลี่ยนโฮมไดเร็กทอรีคุณจะต้องออกคำสั่งต่อไปนี้ -
$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20
ลบบัญชี
userdelคำสั่งสามารถใช้เพื่อลบผู้ใช้ที่มีอยู่ นี่เป็นคำสั่งที่อันตรายมากหากไม่ใช้ด้วยความระมัดระวัง
มีอาร์กิวเมนต์หรืออ็อพชันเดียวที่ใช้ได้สำหรับคำสั่ง .rสำหรับการลบโฮมไดเร็กทอรีและไฟล์เมลของบัญชี
ตัวอย่างเช่นหากต้องการลบบัญชีmcmohd20ให้ใช้คำสั่งต่อไปนี้ -
$ userdel -r mcmohd20
หากคุณต้องการเก็บโฮมไดเร็กทอรีไว้เพื่อวัตถุประสงค์ในการสำรองข้อมูลให้ละเว้นไฟล์ -rตัวเลือก คุณสามารถลบโฮมไดเร็กทอรีได้ตามต้องการในภายหลัง
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับประสิทธิภาพของระบบใน Unix
เราจะแนะนำให้คุณรู้จักกับเครื่องมือฟรีสองสามอย่างที่มีไว้เพื่อตรวจสอบและจัดการประสิทธิภาพบนระบบ Unix เครื่องมือเหล่านี้ยังให้แนวทางในการวินิจฉัยและแก้ไขปัญหาประสิทธิภาพการทำงานในสภาพแวดล้อม Unix
Unix มีประเภททรัพยากรหลัก ๆ ต่อไปนี้ที่ต้องตรวจสอบและปรับแต่ง -
CPU
Memory
Disk space
Communications lines
I/O Time
Network Time
Applications programs
ส่วนประกอบประสิทธิภาพ
ตารางต่อไปนี้แสดงส่วนประกอบหลัก 5 ส่วนที่ใช้เวลาของระบบ -
ซีเนียร์ | ส่วนประกอบและคำอธิบาย |
---|---|
1 | User State CPU ระยะเวลาจริงที่ CPU ใช้ในการรันโปรแกรมของผู้ใช้ในสถานะผู้ใช้ รวมถึงเวลาที่ใช้ในการเรียกใช้ไลบรารี แต่ไม่รวมเวลาที่ใช้ในเคอร์เนลในนามของมัน |
2 | System State CPU นี่คือระยะเวลาที่ CPU ใช้ในสถานะของระบบในนามของโปรแกรมนี้ ทั้งหมดI/O routinesต้องการบริการเคอร์เนล โปรแกรมเมอร์สามารถส่งผลต่อค่านี้ได้โดยบล็อกการถ่ายโอน I / O |
3 | I/O Time and Network Time นี่คือระยะเวลาที่ใช้ในการย้ายข้อมูลและให้บริการคำขอ I / O |
4 | Virtual Memory Performance ซึ่งรวมถึงการสลับบริบทและการแลกเปลี่ยน |
5 | Application Program เวลาที่ใช้ในการรันโปรแกรมอื่น - เมื่อระบบไม่ให้บริการแอปพลิเคชันนี้เนื่องจากแอปพลิเคชันอื่นมี CPU อยู่ |
เครื่องมือประสิทธิภาพ
Unix มีเครื่องมือสำคัญต่อไปนี้ในการวัดและปรับแต่งประสิทธิภาพของระบบ Unix -
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | nice/renice รันโปรแกรมที่มีการปรับเปลี่ยนลำดับความสำคัญของการจัดกำหนดการ |
2 | netstat พิมพ์การเชื่อมต่อเครือข่ายตารางเส้นทางสถิติอินเทอร์เฟซการเชื่อมต่อปลอมและการเป็นสมาชิกแบบหลายผู้รับ |
3 | time ช่วยเวลาคำสั่งง่ายๆหรือให้การใช้ทรัพยากร |
4 | uptime นี่คือค่าเฉลี่ยการโหลดระบบ |
5 | ps รายงานสแนปชอตของกระบวนการปัจจุบัน |
6 | vmstat รายงานสถิติหน่วยความจำเสมือน |
7 | gprof แสดงข้อมูลโปรไฟล์กราฟการโทร |
8 | prof อำนวยความสะดวกในการจัดทำโปรไฟล์กระบวนการ |
9 | top แสดงงานระบบ |
คุณสามารถใช้Manpage Helpเพื่อตรวจสอบไวยากรณ์ที่สมบูรณ์สำหรับแต่ละคำสั่งที่กล่าวถึงที่นี่
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการเข้าสู่ระบบใน Unix
ระบบ Unix มีระบบบันทึกที่ยืดหยุ่นและมีประสิทธิภาพซึ่งช่วยให้คุณสามารถบันทึกเกือบทุกอย่างที่คุณสามารถจินตนาการได้จากนั้นจัดการบันทึกเพื่อดึงข้อมูลที่คุณต้องการ
Unix หลายเวอร์ชันมีสิ่งอำนวยความสะดวกการบันทึกสำหรับวัตถุประสงค์ทั่วไปที่เรียกว่า syslog. แต่ละโปรแกรมที่จำเป็นต้องมีการบันทึกข้อมูลให้ส่งข้อมูลไปที่ syslog
Unix syslogเป็นสิ่งอำนวยความสะดวกในการบันทึกระบบที่เหมือนกันซึ่งกำหนดค่าโฮสต์ได้ ระบบใช้กระบวนการบันทึกระบบส่วนกลางที่รันโปรแกรม/etc/syslogd หรือ /etc/syslog.
การทำงานของผู้บันทึกระบบค่อนข้างตรงไปตรงมา โปรแกรมจะส่งรายการบันทึกไปยังsyslogdซึ่งให้คำปรึกษากับไฟล์คอนฟิกูเรชัน/etc/syslogd.conf หรือ /etc/syslog และเมื่อพบรายการที่ตรงกันให้เขียนข้อความบันทึกไปยังไฟล์บันทึกที่ต้องการ
มีคำศัพท์พื้นฐานเกี่ยวกับ syslog สี่คำที่คุณควรเข้าใจ -
ซีเนียร์ | ข้อกำหนดและคำอธิบาย |
---|---|
1 | Facility ตัวระบุที่ใช้อธิบายแอปพลิเคชันหรือกระบวนการที่ส่งข้อความบันทึก ตัวอย่างเช่นเมลเคอร์เนลและ ftp |
2 | Priority ตัวบ่งชี้ความสำคัญของข้อความ ระดับถูกกำหนดไว้ภายใน syslog เป็นแนวทางตั้งแต่การดีบักข้อมูลไปจนถึงเหตุการณ์สำคัญ |
3 | Selector การรวมกันของสิ่งอำนวยความสะดวกและระดับอย่างน้อยหนึ่งอย่าง เมื่อเหตุการณ์ที่เข้ามาตรงกับตัวเลือกการดำเนินการจะดำเนินการ |
4 | Action จะเกิดอะไรขึ้นกับข้อความขาเข้าที่ตรงกับตัวเลือก - การดำเนินการสามารถเขียนข้อความลงในล็อกไฟล์สะท้อนข้อความไปยังคอนโซลหรืออุปกรณ์อื่นเขียนข้อความถึงผู้ใช้ที่ล็อกอินหรือส่งข้อความไปยังเซิร์ฟเวอร์ syslog อื่น |
สิ่งอำนวยความสะดวก Syslog
ตอนนี้เราจะทำความเข้าใจเกี่ยวกับสิ่งอำนวยความสะดวก syslog นี่คือสิ่งอำนวยความสะดวกที่มีให้สำหรับผู้เลือก สิ่งอำนวยความสะดวกบางอย่างอาจไม่มีอยู่ใน Unix ทุกเวอร์ชัน
สิ่งอำนวยความสะดวก | คำอธิบาย |
---|---|
1 | auth กิจกรรมที่เกี่ยวข้องกับการขอชื่อและรหัสผ่าน (getty, su, login) |
2 | authpriv เหมือนกับการรับรองความถูกต้อง แต่บันทึกเป็นไฟล์ที่สามารถอ่านได้โดยผู้ใช้ที่เลือกเท่านั้น |
3 | console ใช้เพื่อบันทึกข้อความที่ส่งไปยังคอนโซลระบบโดยทั่วไป |
4 | cron ข้อความจากตัวกำหนดตารางเวลาระบบ cron |
5 | daemon ดีมอนระบบจับทั้งหมด |
6 | ftp ข้อความที่เกี่ยวข้องกับ ftp daemon |
7 | kern ข้อความเคอร์เนล |
8 | local0.local7 สิ่งอำนวยความสะดวกในท้องถิ่นที่กำหนดไว้ต่อไซต์ |
9 | lpr ข้อความจากระบบการพิมพ์เส้น |
10 | ข้อความที่เกี่ยวข้องกับระบบเมล |
11 | mark เหตุการณ์หลอกใช้เพื่อสร้างการประทับเวลาในล็อกไฟล์ |
12 | news ข้อความที่เกี่ยวข้องกับโปรโตคอลข่าวสารเครือข่าย (nntp) |
13 | ntp ข้อความที่เกี่ยวข้องกับโปรโตคอลเวลาเครือข่าย |
14 | user กระบวนการของผู้ใช้ปกติ |
15 | uucp ระบบย่อย UUCP |
ลำดับความสำคัญของ Syslog
ลำดับความสำคัญของ syslog สรุปไว้ในตารางต่อไปนี้ -
ซีเนียร์ | ลำดับความสำคัญและคำอธิบาย |
---|---|
1 | emerg ภาวะฉุกเฉินเช่นระบบล่มที่ใกล้เข้ามามักจะออกอากาศไปยังผู้ใช้ทุกคน |
2 | alert สภาพที่ควรแก้ไขทันทีเช่นฐานข้อมูลระบบเสียหาย |
3 | crit เงื่อนไขที่สำคัญเช่นข้อผิดพลาดของฮาร์ดแวร์ |
4 | err ข้อผิดพลาดทั่วไป |
5 | Warning คำเตือน |
6 | notice สภาพที่ไม่ใช่ข้อผิดพลาด แต่เป็นไปได้ว่าควรจัดการด้วยวิธีพิเศษ |
7 | info ข้อความให้ข้อมูล |
8 | debug ข้อความที่ใช้เมื่อทำการดีบักโปรแกรม |
9 | none ระดับหลอกใช้เพื่อระบุไม่ให้บันทึกข้อความ |
การรวมกันของสิ่งอำนวยความสะดวกและระดับต่างๆช่วยให้คุณสามารถแยกแยะสิ่งที่บันทึกไว้และข้อมูลนั้นไปที่ใด
ในขณะที่แต่ละโปรแกรมส่งข้อความตามหน้าที่ไปยังผู้บันทึกระบบผู้บันทึกจะทำการตัดสินใจว่าจะติดตามอะไรและจะทิ้งสิ่งใดตามระดับที่กำหนดไว้ในตัวเลือก
เมื่อคุณระบุระดับระบบจะติดตามทุกอย่างในระดับนั้นและสูงกว่า
ไฟล์ /etc/syslog.conf
/etc/syslog.confไฟล์ควบคุมที่บันทึกข้อความ โดยทั่วไปsyslog.conf ไฟล์อาจมีลักษณะเช่นนี้ -
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
แต่ละบรรทัดของไฟล์ประกอบด้วยสองส่วน -
ก message selectorที่ระบุประเภทของข้อความที่จะบันทึก ตัวอย่างเช่นข้อความแสดงข้อผิดพลาดทั้งหมดหรือข้อความการดีบักทั้งหมดจากเคอร์เนล
อัน action fieldที่บอกว่าควรทำอย่างไรกับข้อความ ตัวอย่างเช่นใส่ไว้ในไฟล์หรือส่งข้อความไปยังเทอร์มินัลของผู้ใช้
ต่อไปนี้เป็นประเด็นสำคัญสำหรับการกำหนดค่าข้างต้น -
ตัวเลือกข้อความมีสองส่วน: a facility และ a priority. ตัวอย่างเช่นkern.debugเลือกข้อความดีบักทั้งหมด (ลำดับความสำคัญ) ที่สร้างโดยเคอร์เนล (สิ่งอำนวยความสะดวก)
ตัวเลือกข้อความkern.debugเลือกลำดับความสำคัญทั้งหมดที่มากกว่าการดีบัก
เครื่องหมายดอกจันแทนสิ่งอำนวยความสะดวกหรือลำดับความสำคัญแสดงว่า "ทั้งหมด" ตัวอย่างเช่น,*.debug หมายถึงข้อความดีบักทั้งหมดในขณะที่ kern.* หมายถึงข้อความทั้งหมดที่สร้างโดยเคอร์เนล
คุณยังสามารถใช้ลูกน้ำเพื่อระบุสิ่งอำนวยความสะดวกต่างๆ ตัวเลือกสองตัวขึ้นไปสามารถจัดกลุ่มเข้าด้วยกันได้โดยใช้อัฒภาค
การบันทึกการดำเนินการ
ฟิลด์การดำเนินการระบุหนึ่งในห้าการกระทำ -
บันทึกข้อความไปยังไฟล์หรืออุปกรณ์ ตัวอย่างเช่น,/var/log/lpr.log หรือ /dev/console.
ส่งข้อความถึงผู้ใช้ คุณสามารถระบุชื่อผู้ใช้หลายชื่อโดยคั่นด้วยลูกน้ำ ตัวอย่างเช่น root, amrood
ส่งข้อความถึงผู้ใช้ทุกคน ในกรณีนี้เขตข้อมูลการดำเนินการประกอบด้วยเครื่องหมายดอกจัน ตัวอย่างเช่น, *.
ไพพ์ข้อความไปยังโปรแกรม ในกรณีนี้โปรแกรมจะถูกระบุไว้หลังสัญลักษณ์ท่อ Unix (|)
ส่งข้อความไปยัง syslog บนโฮสต์อื่น ในกรณีนี้ฟิลด์การดำเนินการประกอบด้วยชื่อโฮสต์นำหน้าด้วยเครื่องหมาย at ตัวอย่างเช่น @ tutorialspoint.com
คำสั่งคนตัดไม้
Unix ให้ไฟล์ loggerคำสั่งซึ่งเป็นคำสั่งที่มีประโยชน์อย่างยิ่งในการจัดการกับการบันทึกระบบ logger คำสั่งส่งข้อความการบันทึกไปยัง syslogd daemon และส่งผลให้เกิดการล็อกระบบ
ซึ่งหมายความว่าเราสามารถตรวจสอบจากบรรทัดคำสั่งได้ตลอดเวลา syslogddaemon และการกำหนดค่า คำสั่ง logger จัดเตรียมเมธอดสำหรับการเพิ่มรายการหนึ่งบรรทัดไปยังไฟล์บันทึกระบบจากบรรทัดรับคำสั่ง
รูปแบบของคำสั่งคือ -
logger [-i] [-f file] [-p priority] [-t tag] [message]...
นี่คือรายละเอียดของพารามิเตอร์ -
ซีเนียร์ | ตัวเลือกและคำอธิบาย |
---|---|
1 | -f filename ใช้เนื้อหาของชื่อไฟล์ไฟล์เป็นข้อความในการบันทึก |
2 | -i บันทึก ID กระบวนการของกระบวนการคนตัดไม้กับแต่ละบรรทัด |
3 | -p priority ป้อนข้อความด้วยลำดับความสำคัญที่ระบุ (รายการตัวเลือกที่ระบุ); ลำดับความสำคัญของข้อความสามารถระบุเป็นตัวเลขหรือเป็นคู่ของ facility.priority ลำดับความสำคัญเริ่มต้นคือ user.notice |
4 | -t tag ทำเครื่องหมายแต่ละบรรทัดที่เพิ่มลงในบันทึกด้วยแท็กที่ระบุ |
5 | message อาร์กิวเมนต์สตริงที่มีเนื้อหาเรียงต่อกันตามลำดับที่ระบุคั่นด้วยช่องว่าง |
คุณสามารถใช้Manpage Helpเพื่อตรวจสอบไวยากรณ์ทั้งหมดสำหรับคำสั่งนี้
บันทึกการหมุน
ไฟล์บันทึกมีแนวโน้มที่จะเติบโตอย่างรวดเร็วและใช้พื้นที่ดิสก์จำนวนมาก ในการเปิดใช้งานการหมุนเวียนบันทึกการแจกแจงส่วนใหญ่จะใช้เครื่องมือเช่นnewsyslog หรือ logrotate.
ควรเรียกเครื่องมือเหล่านี้ตามช่วงเวลาที่ใช้บ่อยโดยใช้ cron daemon. ตรวจสอบ man page สำหรับnewsyslogหรือlogrotateสำหรับรายละเอียดเพิ่มเติม
ตำแหน่งบันทึกที่สำคัญ
แอปพลิเคชันระบบทั้งหมดสร้างล็อกไฟล์ในรูปแบบ /var/logและไดเรกทอรีย่อย นี่คือแอปพลิเคชันที่สำคัญบางส่วนและไดเรกทอรีบันทึกที่เกี่ยวข้อง -
ใบสมัคร | ไดเรกทอรี |
---|---|
httpd | / var / log / httpd |
แซมบ้า | / var / log / samba |
cron | / var / log / |
จดหมาย | / var / log / |
mysql | / var / log / |
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับสัญญาณและกับดักใน Unix
สัญญาณคือการขัดจังหวะซอฟต์แวร์ที่ส่งไปยังโปรแกรมเพื่อระบุว่ามีเหตุการณ์สำคัญเกิดขึ้น เหตุการณ์อาจแตกต่างกันไปตั้งแต่คำขอของผู้ใช้ไปจนถึงข้อผิดพลาดในการเข้าถึงหน่วยความจำที่ผิดกฎหมาย สัญญาณบางอย่างเช่นสัญญาณขัดจังหวะแสดงว่าผู้ใช้ขอให้โปรแกรมทำบางสิ่งที่ไม่อยู่ในขั้นตอนการควบคุมตามปกติ
ตารางต่อไปนี้แสดงสัญญาณทั่วไปที่คุณอาจพบและต้องการใช้ในโปรแกรมของคุณ -
ชื่อสัญญาณ | หมายเลขสัญญาณ | คำอธิบาย |
---|---|---|
SIGHUP | 1 | ตรวจพบการวางสายที่เครื่องควบคุมหรือการเสียชีวิตของกระบวนการควบคุม |
ซิกนต์ | 2 | ออกหากผู้ใช้ส่งสัญญาณขัดจังหวะ (Ctrl + C) |
SIGQUIT | 3 | ออกหากผู้ใช้ส่งสัญญาณออก (Ctrl + D) |
SIGFPE | 8 | ออกหากมีการพยายามดำเนินการทางคณิตศาสตร์ที่ผิดกฎหมาย |
ซิกกิล | 9 | หากกระบวนการได้รับสัญญาณนี้จะต้องปิดทันทีและจะไม่ดำเนินการล้างข้อมูลใด ๆ |
SIGALRM | 14 | สัญญาณนาฬิกาปลุก (ใช้สำหรับจับเวลา) |
ซิกเทอร์ม | 15 | สัญญาณการยุติซอฟต์แวร์ (ส่งโดย kill โดยค่าเริ่มต้น) |
รายการสัญญาณ
มีวิธีง่ายๆในการแสดงรายการสัญญาณทั้งหมดที่ระบบของคุณรองรับ เพียงแค่ออกไฟล์kill -l คำสั่งและจะแสดงสัญญาณที่รองรับทั้งหมด -
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
รายการสัญญาณจริงจะแตกต่างกันไประหว่าง Solaris, HP-UX และ Linux
การดำเนินการเริ่มต้น
ทุกสัญญาณมีการดำเนินการเริ่มต้นที่เกี่ยวข้อง การดำเนินการเริ่มต้นสำหรับสัญญาณคือการกระทำที่สคริปต์หรือโปรแกรมดำเนินการเมื่อได้รับสัญญาณ
การดำเนินการเริ่มต้นบางอย่างที่เป็นไปได้คือ -
ยุติกระบวนการ
ไม่สนใจสัญญาณ
แกนถ่ายโอนข้อมูล สิ่งนี้จะสร้างไฟล์ชื่อcore มีภาพหน่วยความจำของกระบวนการเมื่อได้รับสัญญาณ
หยุดกระบวนการ
ดำเนินการต่อตามกระบวนการที่หยุด
การส่งสัญญาณ
มีหลายวิธีในการส่งสัญญาณไปยังโปรแกรมหรือสคริปต์ สิ่งหนึ่งที่พบบ่อยที่สุดคือการที่ผู้ใช้พิมพ์CONTROL-C หรือ INTERRUPT key ในขณะที่สคริปต์กำลังดำเนินการ
เมื่อคุณกดปุ่ม Ctrl+C คีย์ a SIGINT ถูกส่งไปยังสคริปต์และตามสคริปต์การดำเนินการเริ่มต้นที่กำหนดไว้จะสิ้นสุดลง
วิธีอื่น ๆ ทั่วไปในการส่งสัญญาณคือการใช้ kill commandซึ่งเป็นไวยากรณ์ดังต่อไปนี้ -
$ kill -signal pid
ที่นี่ signal เป็นหมายเลขหรือชื่อของสัญญาณที่จะส่งและ pidคือรหัสกระบวนการที่สัญญาณควรถูกส่งไป ตัวอย่างเช่น -
$ kill -1 1001
คำสั่งดังกล่าวจะส่งสัญญาณ HUP หรือวางสายไปยังโปรแกรมที่กำลังทำงานด้วย process ID 1001. ในการส่งสัญญาณฆ่าไปยังกระบวนการเดียวกันให้ใช้คำสั่งต่อไปนี้ -
$ kill -9 1001
สิ่งนี้จะฆ่ากระบวนการที่ทำงานด้วย process ID 1001.
ดักสัญญาณ
เมื่อคุณกดแป้น Ctrl + Cหรือ Break ที่เทอร์มินัลของคุณในระหว่างดำเนินการโปรแกรมเชลล์โดยปกติโปรแกรมนั้นจะถูกยกเลิกทันทีและพร้อมท์คำสั่งของคุณจะกลับมา สิ่งนี้อาจไม่เป็นที่ต้องการเสมอไป ตัวอย่างเช่นคุณอาจทิ้งไฟล์ชั่วคราวไว้มากมายซึ่งจะไม่ได้รับการล้างข้อมูล
การดักจับสัญญาณเหล่านี้ค่อนข้างง่ายและคำสั่ง trap มีไวยากรณ์ต่อไปนี้ -
$ trap commands signals
คำสั่งที่นี่อาจเป็นคำสั่ง Unix ที่ถูกต้องหรือแม้แต่ฟังก์ชันที่ผู้ใช้กำหนดเองและสัญญาณสามารถเป็นรายการสัญญาณจำนวนเท่าใดก็ได้ที่คุณต้องการดักจับ
มีสองการใช้งานทั่วไปสำหรับกับดักในเชลล์สคริปต์ -
- ล้างไฟล์ชั่วคราว
- ไม่สนใจสัญญาณ
การล้างไฟล์ชั่วคราว
ดังตัวอย่างของคำสั่ง trap รายการต่อไปนี้จะแสดงวิธีลบไฟล์บางไฟล์และออกหากมีคนพยายามยกเลิกโปรแกรมจากเทอร์มินัล -
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
จากจุดในโปรแกรมเชลล์ว่ากับดักนี้ถูกเรียกใช้ทั้งสองไฟล์ work1$$ และ dataout$$ จะถูกลบออกโดยอัตโนมัติหากโปรแกรมได้รับสัญญาณหมายเลข 2
ดังนั้นหากผู้ใช้ขัดขวางการทำงานของโปรแกรมหลังจากที่เรียกใช้กับดักนี้คุณสามารถมั่นใจได้ว่าไฟล์ทั้งสองนี้จะถูกล้าง exit คำสั่งที่เป็นไปตาม rm เป็นสิ่งที่จำเป็นเพราะหากไม่มีมันการดำเนินการจะดำเนินต่อไปในโปรแกรม ณ จุดที่ทิ้งไว้เมื่อได้รับสัญญาณ
สัญญาณหมายเลข 1 ถูกสร้างขึ้นสำหรับ hangup. อาจมีคนวางสายโดยเจตนาหรือสายหลุดโดยไม่ได้ตั้งใจ
คุณสามารถแก้ไขกับดักก่อนหน้านี้เพื่อลบไฟล์ที่ระบุสองไฟล์ในกรณีนี้โดยเพิ่มสัญญาณหมายเลข 1 ในรายการสัญญาณ -
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
ตอนนี้ไฟล์เหล่านี้จะถูกลบออกหากสายที่ได้รับการแขวนขึ้นหรือถ้าCtrl + Cที่สำคัญได้รับการกด
คำสั่งที่ระบุเพื่อดักต้องอยู่ในเครื่องหมายคำพูดหากมีคำสั่งมากกว่าหนึ่งคำสั่ง นอกจากนี้โปรดทราบว่าเชลล์จะสแกนบรรทัดคำสั่งในเวลาที่คำสั่ง trap ถูกเรียกใช้งานและเมื่อได้รับสัญญาณรายการใดรายการหนึ่ง
ดังนั้นในตัวอย่างก่อนหน้านี้ค่าของ WORKDIR และ $$จะถูกแทนที่เมื่อคำสั่งกับดักถูกเรียกใช้งาน หากคุณต้องการให้การแทนที่นี้เกิดขึ้นในเวลาที่ได้รับสัญญาณ 1 หรือ 2 คุณสามารถใส่คำสั่งไว้ในเครื่องหมายคำพูดเดี่ยว -
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
ไม่สนใจสัญญาณ
หากคำสั่งที่แสดงรายการสำหรับ trap เป็นโมฆะสัญญาณที่ระบุจะถูกละเว้นเมื่อได้รับ ตัวอย่างเช่นคำสั่ง -
$ trap '' 2
สิ่งนี้ระบุว่าสัญญาณขัดจังหวะจะถูกละเว้น คุณอาจต้องการละเว้นสัญญาณบางอย่างเมื่อดำเนินการที่คุณไม่ต้องการถูกขัดจังหวะ คุณสามารถระบุสัญญาณหลายรายการที่จะละเว้นได้ดังนี้ -
$ trap '' 1 2 3 15
โปรดทราบว่าต้องระบุอาร์กิวเมนต์แรกเพื่อให้สัญญาณถูกละเว้นและไม่เทียบเท่ากับการเขียนสิ่งต่อไปนี้ซึ่งมีความหมายแยกต่างหาก -
$ trap 2
หากคุณเพิกเฉยต่อสัญญาณซับเชลล์ทั้งหมดจะไม่สนใจสัญญาณนั้นด้วย อย่างไรก็ตามหากคุณระบุการดำเนินการที่ต้องดำเนินการกับการรับสัญญาณซับเชลล์ทั้งหมดจะยังคงดำเนินการตามค่าเริ่มต้นเมื่อได้รับสัญญาณนั้น
การรีเซ็ตกับดัก
หลังจากที่คุณได้เปลี่ยนการดำเนินการเริ่มต้นที่จะดำเนินการเมื่อได้รับสัญญาณแล้วคุณสามารถเปลี่ยนกลับได้อีกครั้งโดยใช้กับดักหากคุณเพียงแค่ละเว้นอาร์กิวเมนต์แรก ดังนั้น -
$ trap 1 2
การดำเนินการนี้จะรีเซ็ตการดำเนินการในการรับสัญญาณ 1 หรือ 2 กลับเป็นค่าเริ่มต้น