คำสั่ง Bash พื้นฐาน

แผ่นโกงนี้ครอบคลุม หัวข้อต่อไปนี้: ข้อมูลเบื้องต้นเกี่ยวกับเชลล์ การนำทาง คำสั่งพื้นฐาน ตัวแปรสภาพแวดล้อม ตัวเชื่อมต่อ ไปป์ การเปลี่ยนเส้นทาง I/O การอนุญาต และแป้นพิมพ์ลัด

Bash Shell: บทนำ

เชลล์หรือเชลล์คือโปรแกรมในกรณีของเราที่เรียกว่า "bash" ซึ่งย่อมาจาก Bourne Again Shell เชลล์ยอมรับคำสั่งของคุณและส่งต่อไปยังระบบปฏิบัติการ ในการโต้ตอบกับระบบ เทอร์มินัลจะถูกใช้ เช่น gnome-terminal, eterm, nxterm เป็นต้น

การนำทาง

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

นโยบายความเป็นส่วนตัว

คำสั่ง pwd ย่อมาจาก พิมพ์ไดเร็กทอรีการทำงาน, แสดงผล สถานที่ปัจจุบันในโครงสร้างไดเร็กทอรี

ซีดี

คำสั่ง cd อนุญาตให้คุณเปลี่ยนเป็นไดเร็กทอรีใหม่

mkdir

คำสั่ง mkdir สร้างไดเร็กทอรีใหม่ในไดเร็กทอรีปัจจุบัน

คำสั่งพื้นฐาน

ผู้ชาย

คำสั่ง man แสดงคู่มือคำสั่ง ตัวอย่างเช่น คำสั่งต่อไปนี้จะแสดงข้อมูลทั้งหมดเกี่ยวกับคำสั่ง cat:

$ ผู้ชาย แมว

แมว

คำสั่ง cat อ่านไฟล์ที่ส่งผ่านเป็นอาร์กิวเมนต์ และพิมพ์เนื้อหาไปยังเอาต์พุตมาตรฐาน การส่งผ่านหลายไฟล์เป็นอาร์กิวเมนต์จะพิมพ์เนื้อหาที่ต่อกันของไฟล์ทั้งหมด

เสียงสะท้อน

คำสั่ง echo พิมพ์อาร์กิวเมนต์ไปยังเอาต์พุตมาตรฐาน

$ echo สวัสดีชาวโลก สวัสดีชาวโลก

หากคุณเรียก echo โดยไม่มีอาร์กิวเมนต์ สตริงว่างจะถูกพิมพ์

ศีรษะ

คำสั่ง head อ่าน 10 บรรทัดแรกของข้อความที่ส่งผ่านและส่งออกไปยังไปป์มาตรฐาน จำนวนบรรทัดที่แสดงสามารถเปลี่ยนแปลงได้:

$หัว -50 test.txt

หาง

คำสั่ง tail ทำงานคล้ายกับคำสั่ง head แต่อ่านบรรทัดจากส่วนท้าย:

$ หาง -50 test.txt

คุณยังสามารถดูบรรทัดที่ถูกเพิ่มลงในไฟล์แบบเรียลไทม์โดยใช้แฟล็ก -f:

$ หาง -f test.txt

น้อย

คำสั่ง less ช่วยให้คุณสามารถนำทางผ่านไฟล์หรือข้อความที่ถ่ายโอนได้ทั้งสองทิศทาง

$ test.txt น้อยกว่า $ ps aux | น้อย

เรียนรู้เพิ่มเติมเกี่ยวกับวัตถุประสงค์ของสัญลักษณ์ | จะกล่าวถึงด้านล่างในส่วนประวัติของคำสั่ง

แป้นพิมพ์ลัดทั่วไปคำอธิบาย
ย้ายไปที่ส่วนท้ายของไฟล์
ย้ายไปที่จุดเริ่มต้นของไฟล์
:50 ย้ายไปที่บรรทัดที่ 50 ของไฟล์
ถามออกให้น้อยลง
/คำที่ต้องการค้นหาค้นหาสตริงที่ตรงกับ 'คำค้นหา' ด้านล่าง เส้นปัจจุบัน
/
?คำที่ต้องการค้นหาค้นหาบรรทัดที่ตรงกับ 'คำค้นหา' เหนือบรรทัดปัจจุบัน
? ย้ายไปยังผลการค้นหาที่ตรงกันถัดไป
ขึ้นเลื่อนขึ้นไปหนึ่งบรรทัด
ลงเลื่อนลงหนึ่งบรรทัด
เพจอัพเลื่อนขึ้นหนึ่งหน้า
เลื่อนหน้าลงเลื่อนลงหนึ่งหน้า

จริง

คำสั่ง true จะคืนค่าศูนย์เป็นสถานะเอาต์พุตเสมอเพื่อบ่งชี้ความสำเร็จ

เท็จ

คำสั่ง false จะส่งคืนสถานะเอาต์พุตที่ไม่ใช่ศูนย์เสมอเพื่อบ่งชี้ถึงความล้มเหลว

$?

- เป็นตัวแปรที่มีสถานะเอาต์พุตของการรันคำสั่งล่าสุด สถานะมักจะหมายถึงโค้ดส่งคืนของโปรแกรม 0 หมายถึงการดำเนินการโปรแกรมสำเร็จ ค่าใดๆ ที่มากกว่า 0 แสดงถึงข้อผิดพลาดบางอย่างที่เกิดขึ้นระหว่างการดำเนินการ อย่างไรก็ตาม นี่คือเหตุผลว่าทำไมใน bash 0 จึงถือว่าเป็นจริง และทุกสิ่งที่ไม่ใช่ 0 ถือเป็นเท็จ:

$จริง$เอคโค$? 0 $ เท็จ $ echo $? 1

เกรป

คำสั่ง grep ค้นหาสตริงที่ส่งผ่านเข้ามา ไฟล์ที่ระบุ:

$ cat users.txt ผู้ใช้: รหัสผ่านนักเรียน: 123 ผู้ใช้: รหัสผ่านครู: 321 $ grep "นักเรียน ` file1.txt ผู้ใช้: รหัสผ่านนักเรียน: 123

grep ยังสามารถรับหลายไฟล์และ การแสดงออกปกติเพื่อชี้แจงรูปแบบข้อความ

ประวัติศาสตร์

คำสั่ง history จะแสดงประวัติบรรทัดคำสั่ง โดยปกติแล้วจะใช้ร่วมกับคำสั่ง grep เพื่อค้นหาคำสั่งเฉพาะ ตัวอย่างเช่น โค้ดต่อไปนี้จะค้นหาคำสั่งทั้งหมดที่มีสตริง g++ :

$ประวัติศาสตร์ | grep g++ 155 g++ file1.txt 159 g++ file2.txt

สัญลักษณ์ | ยังใช้ที่นี่ด้วย - นี่คือสิ่งที่เรียกว่าสายพานลำเลียง (ท่อ) ด้วยเหตุนี้คุณจึงสามารถเปลี่ยนเส้นทางเอาต์พุตของคำสั่งหนึ่งไปยังอินพุตของอีกคำสั่งหนึ่งได้ - ดังนั้นในตัวอย่างข้างต้น เรื่องราวทั้งหมดซึ่งใน โหมดปกติเอาต์พุตโดยคำสั่ง history ไปยังเอาต์พุตเทอร์มินัลโดยตรงจะถูกเปลี่ยนเส้นทางไปยัง grep เป็นอินพุต เราจะไม่เห็นผลลัพธ์ของคำสั่ง history แต่เราจะเห็นผลลัพธ์ของคำสั่ง grep

สิ่งนี้อาจเป็นเรื่องยากที่จะเข้าใจโดยไม่ต้องฝึกฝน ดังนั้นให้ทดลองด้วยตัวเองด้วยคำสั่ง ls , history , ps (อธิบายไว้ด้านล่าง) เพื่อเปลี่ยนเส้นทางเอาต์พุตไปที่ grep , sed หรือน้อยกว่า เป็นต้น

ส่งออก

คำสั่งส่งออกตั้งค่าตัวแปรสภาพแวดล้อมเพื่อส่งผ่านไปยังกระบวนการลูก ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถส่งตัวแปรชื่อด้วยค่าของนักเรียน:

$ ส่งออกชื่อ = นักเรียน

ปล

คำสั่ง PS แสดงข้อมูลเกี่ยวกับ กระบวนการทำงานอยู่.

$ ps PID TTY TIME CMD 35346 pts/2 00:00:00 ทุบตี

สี่องค์ประกอบจะถูกส่งออก:

  • รหัสกระบวนการ (PID)
  • ประเภทเทอร์มินัล (TTY)
  • เวลาดำเนินการของกระบวนการ (TIME)
  • ชื่อของคำสั่งที่เริ่มกระบวนการ (CMD)

โอเค

คำสั่ง awk ค้นหาและแทนที่ข้อความในไฟล์โดยใช้รูปแบบที่กำหนด: awk "รูปแบบ (การกระทำ)" test.txt

ตกลง

คำสั่ง wget ดาวน์โหลดไฟล์จากอินเทอร์เน็ตและวางไว้ในไดเร็กทอรีปัจจุบัน

$ wget https://github.com/mikeizbicki/ucr-cs100

nc

ปิง

คำสั่ง ping ทดสอบการเชื่อมต่อเครือข่าย

$ ping google.com PING google.com (74.125.224.34) ข้อมูล 56 (84) ไบต์ 64 ไบต์จาก lax17s01-in-f2.1e100.net (74.125.224.34): icmp_req=1 ttl=57 time=7.82 ms --- สถิติการ ping ของ google.com --- ส่ง 1 แพ็กเก็ต, 1 ได้รับ, สูญเสียแพ็กเก็ต 0% เวลา 8ms rtt ขั้นต่ำ/เฉลี่ย/สูงสุด/mdev = 7.794/8.422/10.792/0.699 ms

สถิติในตอนท้ายแสดงจำนวนการเชื่อมต่อที่เกิดขึ้นก่อนที่คำสั่งจะเสร็จสิ้น และเวลาที่ใช้ในการดำเนินการให้เสร็จสิ้น

คอมไพล์

ตัวแปรสภาพแวดล้อม

ตัวแปรสภาพแวดล้อมเป็นตัวแปรที่มีชื่อซึ่งมีค่าที่ใช้โดยแอปพลิเคชันหนึ่งรายการขึ้นไป

ตัวแปร PATH ประกอบด้วยรายการไดเร็กทอรีที่ระบบค้นหาไฟล์ปฏิบัติการ

ตัวแปร HOME มีเส้นทางไปยังโฮมไดเร็กทอรีของผู้ใช้ปัจจุบัน

ขั้วต่อ

ตัวเชื่อมต่อช่วยให้คุณสามารถรันหลายคำสั่งพร้อมกันได้

$ true && echo สวัสดี สวัสดี $ false || echo สวัสดี สวัสดี $ echo สวัสดี ; ls สวัสดี test.txt file1.txt file2.txt

สายพานลำเลียง

สายพานลำเลียงหรือท่อช่วยให้คุณสามารถเชื่อมต่อช่องอินพุตและเอาต์พุตของทีมต่างๆ ในตัวอย่างต่อไปนี้ ผลลัพธ์ของคำสั่ง ls จะถูกส่งไปที่ head และจะพิมพ์เฉพาะ 10 องค์ประกอบแรกเท่านั้น

$ ls -l | ศีรษะ

การเปลี่ยนเส้นทาง I/O

การเปลี่ยนเส้นทางเอาต์พุต

สัญลักษณ์ > และ >> ใช้สำหรับการเปลี่ยนทิศทางเอาต์พุตมาตรฐาน

ตัวอย่างเช่น โค้ดนี้จะไปป์ ls เอาต์พุตไปที่ไฟล์ แทนที่จะไปที่หน้าจอ:

$ ls > files.txt $ cat files.txt file1.cpp ตัวอย่าง.txt

หากไม่มีไฟล์อยู่ ไฟล์จะถูกสร้างขึ้น และหากมีอยู่ ไฟล์นั้นจะถูกเขียนทับ เพื่อหลีกเลี่ยงการเขียนทับ คุณควรใช้คำสั่ง >> ซึ่งจะผนวกข้อมูลต่อท้ายไฟล์

การเปลี่ยนเส้นทางอินพุต

สำหรับการเปลี่ยนทิศทางเอาต์พุตมาตรฐาน ให้ใช้สัญลักษณ์< . В следующем примере sort берет входные данные из файла, а не с клавиатуры:

$ cat files.txt c b $ เรียงลำดับ< files.txt b c

คำสั่ง sort จะพิมพ์เนื้อหาของไฟล์ไปที่หน้าจอเนื่องจากเราไม่ได้เปลี่ยนเส้นทางเอาต์พุต ซึ่งสามารถทำได้เช่นนี้:

$เรียงลำดับ< files.txt >files_sorted.txt

การเปลี่ยนเส้นทางขั้นสูง

การเพิ่ม & ไปยัง > ทำให้ทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดถูกเปลี่ยนเส้นทาง ตัวอย่างเช่น ไฟล์ test.cpp จะส่งออกบรรทัด stdout ไปที่ cout และบรรทัด stderr ไปที่ cerr

$ g++ test.cpp $ ./a.out >& test.txt $ cat test.txt stdout stderr

หากคุณต้องการส่งออกเฉพาะ ตัวอธิบายไฟล์คุณสามารถกำหนดหมายเลขให้กับ > ได้

ชื่อคำอธิบายคำอธิบาย
มาตรฐาน0 อินพุตมาตรฐาน
มาตรฐาน1 เอาต์พุตมาตรฐาน
stderr2 เอาต์พุตข้อผิดพลาดมาตรฐาน

ตัวอย่างเช่น หากต้องการเปลี่ยนเส้นทาง stderr ไปที่ test.txt คุณจะต้องดำเนินการดังต่อไปนี้:

$ g++ test.cpp $ ./a.out 2> test.txt stdout $ cat test.txt stderr

สิทธิ์การเข้าถึง

คำสั่ง ls -l แสดงข้อมูลจำนวนมากเกี่ยวกับการอนุญาตของแต่ละไฟล์:

โครโมด

คำสั่ง chmod เปลี่ยนการอนุญาตของไฟล์ ต่อไปนี้คือชุดค่าสถานะทั่วไปสำหรับการเปลี่ยนสิทธิ์ของผู้ใช้บางราย:

คุณสามารถเรียก chmod พร้อมคำอธิบายว่าต้องทำอย่างไรกับไฟล์ใดไฟล์หนึ่ง สัญลักษณ์ - หมายถึง การลบสิทธิ์ สัญลักษณ์ + หมายถึง การบวก ตัวอย่างต่อไปนี้จะทำให้เจ้าของและกลุ่มสามารถอ่านและเขียนไฟล์ได้:

$ chmod ug+rw test.txt $ ls -l test.txt -rw-rw ---- กลุ่มผู้ใช้ 1 กลุ่ม 1097374 26 มกราคม 2:48 test.txt

นอกจากนี้ยังสามารถใช้ chmod ได้ด้วย เลขฐานแปดโดยที่ 1 คือ การมีอยู่ของสิทธิ และ 0 คือ การไม่มี:

Rwx = 111 = 7 rw- = 110 = 6 r-x = 101 = 5 r-- = 100 = 4

คำสั่งถัดไปจะทำงานเหมือนกับคำสั่งก่อนหน้า

สถาบันเทคโนโลยีอิเล็กทรอนิกส์แห่งรัฐมอสโก

(มหาวิทยาลัยเทคนิค)

ภาควิชาอิเล็กทรอนิกส์บูรณาการและไมโครซิสเต็มส์

ปฏิบัติการห้องปฏิบัติการ

ตามหลักสูตร:

ระบบปฏิบัติการลินุกซ์

เรียบเรียงโดย: ผู้ช่วยแผนก. IEMS Kozlov A.V.

มอสโก 2550

การประชุมเชิงปฏิบัติการในห้องปฏิบัติการมีไว้สำหรับผู้เชี่ยวชาญด้านวิศวกรรมศาสตร์และเทคโนโลยีที่กำลังศึกษาอยู่ในโปรแกรม Synopsys ปีแรกในทิศทาง 210100.68 เพื่อเชี่ยวชาญระบบปฏิบัติการ Red Hat Enterprise Linux (RHEL) 4.0 นอกจากนี้ยังออกแบบมาสำหรับนักเรียน FreeScale และผู้ใช้ทุกคนที่มีประสบการณ์ระดับเริ่มต้นหรือไม่มี Linux ที่ต้องการเรียนรู้สภาพแวดล้อมคำสั่ง Linux และแอปพลิเคชันหลักที่ผู้ใช้ต้องการเมื่อทำงานกับระบบการออกแบบที่ใช้คอมพิวเตอร์ช่วย

เวิร์กช็อปนี้ประกอบด้วยงานในห้องปฏิบัติการแปดงานที่ช่วยให้ผู้ใช้สามารถเชี่ยวชาญคำสั่งของล่ามคำสั่งได้อย่างมีประสิทธิภาพ ตลอดจนเรียนรู้การเขียนไฟล์แบบค่อยเป็นค่อยไป - สคริปต์ Shell, Gawk, Perl และ Tcl งานในห้องปฏิบัติการแต่ละงานประกอบด้วยส่วนต่างๆ ดังต่อไปนี้: ชื่อ งาน และวัตถุประสงค์ของงาน ข้อมูลทางทฤษฎีมีคำถามควบคุม ตัวอย่างงานห้องปฏิบัติการ ขั้นตอนการปฏิบัติงานในห้องปฏิบัติการ แบบรายงานผลการปฏิบัติงานและรายงานผลการปฏิบัติงานในห้องปฏิบัติการ ไวยากรณ์สำหรับการเขียนคำสั่งในเชลล์ พร้อมด้วยตัวเลือก พารามิเตอร์ การดำเนินการ นิพจน์ และเส้นทางอ็อบเจ็กต์ ได้รับการออกแบบมาสำหรับสภาพแวดล้อมคำสั่ง BASH รายการข้อมูลอ้างอิงมีให้ไว้ในตอนท้ายของการประชุมเชิงปฏิบัติการในห้องปฏิบัติการ

สถาบันวิศวกรรมอิเล็กทรอนิกส์แห่งรัฐมอสโก (มหาวิทยาลัยเทคนิค)

งานห้องปฏิบัติการหมายเลข 1

ในหลักสูตร “ระบบปฏิบัติการ Linux”

การเรียนรู้คำสั่ง bash บน Linux

คำอธิบายเสร็จสมบูรณ์:

โคซลอฟ เอ.วี.

มอสโก 2550

งานห้องปฏิบัติการหมายเลข 1 การศึกษาคำสั่งทุบตีบน Linux

เป้าหมายของการทำงาน : ใช้ล่ามคำสั่ง BASH ฝึกฝนทักษะการทำงานกับคำสั่งในระบบปฏิบัติการ Red Hat Enterprise Linux 4.0

ระยะเวลาการทำงาน - 4 ชั่วโมง

ข้อมูลทางทฤษฎี

ระบบปฏิบัติการ ลินุกซ์ เดิมทีได้รับการพัฒนาให้เป็นแพลตฟอร์มประสิทธิภาพสูงฟรี ยืดหยุ่น มีคุณสมบัติหลากหลาย มีผู้ใช้หลายราย และมีประสิทธิภาพสูง ออกแบบมาเพื่อให้บริการและแก้ไขปัญหาของนักวิทยาศาสตร์ทั่วโลก เนื่องจาก "การมุ่งเน้นทางวิทยาศาสตร์" ในตอนแรกแพลตฟอร์มดังกล่าวไม่มีส่วนต่อประสานกราฟิกแบบขยายซึ่งใช้กันอย่างแพร่หลายในการแก้ปัญหาที่บ้าน - เกมคอมพิวเตอร์, อินเทอร์เน็ต, โปรแกรมเชิงโต้ตอบสำหรับการเชื่อมต่อผู้ใช้ตลอดจนเมื่อแก้ไขปัญหาในสำนักงาน - การทำงาน ด้วยระบบฐานข้อมูล การพล็อตกราฟ และฮิสโตแกรม บ่อยครั้งที่งานของนักวิทยาศาสตร์ที่มีระบบปฏิบัติการ Linux ลดลงเหลือเพียงการโต้ตอบตามปกติของผู้ใช้ (บุคคลที่ทำงานบนคอมพิวเตอร์) กับคอนโซล (หน้าต่างเทอร์มินัลบนหน้าจอมอนิเตอร์พร้อมข้อมูลข้อความ) เพื่อทำความเข้าใจคำสั่งที่ผู้ใช้ป้อนใน Linux ได้รับการพัฒนา ล่ามคำสั่งซึ่งเป็นตัวแปลคำสั่งที่มนุษย์เข้าใจได้เป็นสัญญาณควบคุมที่เคอร์เนลระบบปฏิบัติการเข้าใจได้ ภารกิจหลักของระบบปฏิบัติการคือการเป็นสื่อกลางในการส่งคำสั่งจากบุคคลไปยังคอมพิวเตอร์ และแม้ว่าในปัจจุบันระบบปฏิบัติการ Linux จะถูกนำมาใช้ทุกที่ไม่เพียง แต่ในสถาบัน, ศูนย์การออกแบบ, ศูนย์คอมพิวเตอร์เท่านั้น แต่ยังรวมถึงที่บ้านและที่ทำงานด้วย แต่คอนโซล (เทอร์มินัล windows) ยังคงใช้กันอย่างแพร่หลายและสำหรับหลาย ๆ คนดูเหมือนว่ามีมากกว่านั้น สะดวกเมื่อเทียบกับการทำงานด้วยเมาส์และไอคอน (ไอคอนใน Linux) ในสภาพแวดล้อมแบบกราฟิก

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

ล่ามคำสั่งจำนวนมากได้รับการพัฒนาสำหรับ Linux: เชลล์ Bourne Again (BASH), เชลล์โดเมนสาธารณะ (PDKSH), ล่าม TCSH และ Z-shell แม้ว่า BASH จะเป็นล่ามเริ่มต้น แต่คุณสามารถใช้สภาพแวดล้อมอื่นได้ เพื่อความสะดวกในการทำงานในแต่ละวัน ล่ามคำสั่งเพียงตัวเดียวก็เพียงพอแล้ว Red Hal Linux มีเชลล์หลักทั้งหมด แต่มีการติดตั้งและใช้งานเชลล์ BASH เป็นค่าเริ่มต้น ซึ่งหมายความว่าระบบปฏิบัติการนี้ใช้ BASH เพื่อทำงานที่บรรทัดคำสั่งเว้นแต่จะระบุไว้เป็นอย่างอื่น

บรรทัดคำสั่ง. อินเทอร์เฟซบรรทัดคำสั่ง Linux ประกอบด้วยบรรทัดเดียวที่ป้อนคำสั่งพร้อมตัวเลือกและพารามิเตอร์ ในเชลล์ BASH มักจะทำเครื่องหมายจุดเริ่มต้นของบรรทัดคำสั่ง การเชิญในรูปแบบของเครื่องหมายดอลลาร์ ($); เชลล์ Linux อื่นๆ อาจใช้รูปแบบการแจ้งเตือนที่แตกต่างออกไป เมื่อได้รับแจ้ง ผู้ใช้สามารถป้อนคำสั่งเดียวหรือคำสั่งพร้อมตัวเลือกและพารามิเตอร์ได้ หากผู้ใช้มีขนาดไม่เพียงพอสำหรับพรอมต์คำสั่ง คุณสามารถจำกัดขนาดด้วยอักขระ “/” ได้ ป้อนคำสั่งจากแป้นพิมพ์และป้อนโดยใช้ปุ่ม ตัวอย่างเช่น หากต้องการแสดงวันที่และเวลาของระบบ ผู้ใช้สามารถใช้คำสั่งได้ วันที่ .

$วันที่

ศุกร์ที่ 8 มิ.ย. 15:42:35 น. MSD 2550

หรือตัวอย่างเช่น หากต้องการแสดงปฏิทินพร้อมเดือนปัจจุบัน ให้ใช้คำสั่ง cal

$แคล

กรกฎาคม 2550

ซู โม ตู เรา 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 31

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

ตัวเลือก - เป็นโค้ดตัวเดียวหรือหลายตัวอักษรที่นำหน้าด้วยยัติภังค์ซึ่งปรับเปลี่ยนประเภทของการกระทำที่ดำเนินการโดยคำสั่ง เป็นตัวอย่างคำสั่งพร้อมตัวเลือก เราจะให้คำสั่ง LS - เมื่อใช้โดยไม่มีตัวเลือก คำสั่งนี้จะสร้างรายการไฟล์และไดเร็กทอรีทั้งหมดที่อยู่ในไดเร็กทอรีปัจจุบัน นอกจากชื่อไฟล์ที่มีและไม่มีนามสกุลแล้ว ก็ไม่มีอะไรอื่นในรายการนี้อีก เช่น เมื่อคุณป้อนคำสั่ง LSพร้อมตัวเลือก - ทีม LSสร้างเอาต์พุตข้อมูลทีละบรรทัดสำหรับแต่ละไฟล์ ได้แก่ ขนาด วันที่และเวลา โอกาสสุดท้าย- ในตัวอย่างต่อไปนี้ ผู้ใช้ป้อนคำสั่ง LSพร้อมตัวเลือก - - เครื่องหมายยัติภังค์ก่อนจำเป็นต้องมีตัวเลือก นี่เป็นวิธีที่ระบบ Linux แยกตัวเลือกจากพารามิเตอร์

$ ลส์ -ล

รวม 28

ตัวเลือก -a ช่วยให้คุณสามารถแสดงไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบัน รวมถึงไฟล์ที่เรียกว่า ไฟล์ที่ซ่อนอยู่ไฟล์การกำหนดค่ามักถูกซ่อนไว้ ชื่อไฟล์ที่ซ่อนจะขึ้นต้นด้วยจุดเสมอ ซึ่งเป็นสาเหตุว่าทำไมจึงมักเรียกชื่อไฟล์เหล่านั้น สิ่วไฟล์.ในกรณีส่วนใหญ่ ตัวเลือกจะรวมกัน ในกรณีนี้ จะมีการวางยัติภังค์ทั่วไปหนึ่งรายการไว้หน้ากลุ่มตัวเลือก ตัวอย่างเช่น ตัวเลือก -al จะแสดงข้อมูลเกี่ยวกับไฟล์ทั้งหมดที่อยู่ในไดเร็กทอรีปัจจุบัน รวมถึงไฟล์ที่ซ่อนไว้ ไฟล์ ttt ใหม่จะปรากฏขึ้น

$ ls -อัล

รวม 40

พารามิเตอร์ คือคำที่ป้อนในบรรทัดคำสั่งหลังตัวเลือก คำสั่งการจัดการไฟล์โดยทั่วไปจะใช้ชื่อไฟล์เป็นพารามิเตอร์ ตัวอย่างเช่น หากคุณต้องการข้อมูลเกี่ยวกับไฟล์เดียวเท่านั้น gauss.plx ให้ระบุชื่อไฟล์หลังตัวเลือก -l:

$ ls -l gauss.plx

งานของผู้ใช้เริ่มต้นในสภาพแวดล้อมเชลล์ BASH ซึ่งถูกโหลดตามค่าเริ่มต้น มีความสามารถในการแก้ไขบรรทัดคำสั่งพิเศษซึ่งมีประโยชน์มากเมื่อเรียนรู้ Linux OS ก่อนที่จะดำเนินการคำสั่ง คุณสามารถแก้ไขได้โดยเลื่อนเคอร์เซอร์ข้ามบรรทัดคำสั่ง แล้วแทรกหรือลบอักขระ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำงานกับทีมที่ซับซ้อนมาก การดำเนินการแก้ไขจะช่วยแก้ไขข้อผิดพลาดเมื่อพิมพ์คำสั่ง การใช้ |ขึ้น| คุณสามารถแสดงคำสั่งที่คุณเพิ่งดำเนินการได้ จากนั้นคุณสามารถรันคำสั่งได้อีกครั้ง หรือหลังจากแก้ไขแล้ว ให้รันคำสั่งที่แก้ไขแล้ว คุณสมบัตินี้สะดวกมากเมื่อทำซ้ำการดำเนินการบางอย่างหลายครั้ง เช่น เมื่อแก้ไขอย่างใดอย่างหนึ่ง และ ไฟล์เดียวกัน

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

การสร้างไฟล์และไดเร็กทอรี ใน Linux ไฟล์และไดเร็กทอรีเป็นข้อมูลสองประเภท ดังนั้นการสร้างไฟล์จึงทำได้โดยใช้ ทีมที่แตกต่างกัน- ในการสร้างไดเร็กทอรี (ไดเร็กทอรี, โฟลเดอร์) ให้ใช้คำสั่งที่สงวนไว้ใน Linux mkdir (“make directory” - สร้างไดเร็กทอรี) ในตัวอย่างต่อไปนี้ เราจะสร้างไดเร็กทอรีใหม่ในไดเร็กทอรีปัจจุบัน เมื่อต้องการทำเช่นนี้ ให้ใช้คำสั่ง mkdir และชื่อของไดเร็กทอรีใหม่ โดยคั่นด้วยช่องว่าง

$ mkdir ใหม่

สร้างไดเร็กทอรีแล้ว อย่างไรก็ตาม บางครั้งคุณจำเป็นต้องสร้างโครงสร้างที่ซ้อนกันทั้งหมด เมื่อภายในโฟลเดอร์ที่สร้างไว้แล้ว ควรมีอีกโฟลเดอร์หนึ่ง และภายในนั้นอีกโฟลเดอร์หนึ่ง เป็นต้น เพื่อวัตถุประสงค์เหล่านี้ ตัวเลือกไฟล์แนบ –p จะถูกใช้เป็นส่วนหนึ่งของคำสั่ง mkdir ตัวอย่างต่อไปนี้ใช้คำสั่งเดียวเพื่อสร้างโฟลเดอร์ย่อย: โฟลเดอร์แรก 1 โฟลเดอร์ภายใน 2 และโฟลเดอร์ภายใน 3

$ mkdir -p 1/2/3

คุณสามารถสร้างไฟล์โดยใช้คำสั่งหรือใช้โปรแกรมแก้ไขข้อความ Linux ในตัวและภายนอก เช่น kedit, nedit, gedit และอื่นๆ อย่างไรก็ตาม ตัวแก้ไขที่อยู่ในรายการต้องการการทำงานของเชลล์แบบกราฟิก ซึ่งหมายถึงการทำงานของระบบกราฟิก หากคุณไม่มี คุณสามารถใช้โปรแกรมแก้ไขข้อความได้ เป็นกลุ่มหรือแอนะล็อกที่ไม่ต้องการการทำงานของระบบกราฟิก คุณยังสามารถสร้างไฟล์โดยใช้ตัวจัดการไฟล์ข้อความ เช่น Midnight Commander (คำสั่ง mc) ผู้ใช้ (ผู้ออกแบบ) มักต้องการบันทึก ข้อมูลข้อความซึ่งมาพร้อมกับกระบวนการคำนวณวงจรรวมหรือ ตัวอย่างเช่น พารามิเตอร์ทางไฟฟ้าของอุปกรณ์เซมิคอนดักเตอร์จำลอง นอกจากนี้ยังจำเป็นต้องประมวลผล (ลบ เพิ่ม จัดเรียง แยก) ข้อมูลที่ได้รับ การกระทำดังกล่าวดำเนินการโดยใช้คำสั่ง Linux เช่นกัน คำสั่งที่ง่ายที่สุดในการสร้างไฟล์ข้อความคือคำสั่ง แมว.

คำสั่ง cat ไม่มีอินเทอร์เฟซของตัวเอง ดังนั้นหลังจากป้อนคำสั่ง cat ด้วยสัญลักษณ์การเปลี่ยนเส้นทาง (ดูด้านล่าง) และชื่อของไฟล์ใหม่ คุณสามารถเขียนข้อมูลข้อความได้ทันทีโดยย้ายจากบรรทัดหนึ่งไปอีกบรรทัดหนึ่งโดยใช้ปุ่ม Enter การออกจากโปรแกรมแก้ไข cat (ตัวกรอง) ทำได้โดยใช้คีย์ผสม Ctrl-D ด้านล่างนี้คือตัวอย่างการสร้างไฟล์โดยใช้คำสั่ง cat

$ แมว > ใหม่ _ ไฟล์

ไฟล์ผลลัพธ์จะถูกดูโดยใช้คำสั่ง cat และชื่อไฟล์ที่คั่นด้วยช่องว่าง

$ แมว ใหม่ _ ไฟล์

หรือ ตัวอย่างเช่น การบันทึกข้อมูลข้อความจากคอนโซลเมื่อคำสั่งรัน LSด้วยตัวเลือก -a ในไฟล์ r คุณสามารถใช้ฟังก์ชันการเปลี่ยนเส้นทางข้อมูล (ดูด้านล่าง) และคำสั่งได้ ทีด้วยตัวเลือก -a

$ ls -l | ที-อา อาร์

การคัดลอกไฟล์และไดเร็กทอรีการคัดลอกไฟล์และไดเร็กทอรีดำเนินการโดยใช้คำสั่ง cp หลังจากนั้นวัตถุคัดลอกจะถูกระบุด้วยเส้นทางสัมพัทธ์หรือสัมบูรณ์โดยคั่นด้วยช่องว่างและปลายทางใหม่ของสำเนาของวัตถุนี้คั่นด้วยช่องว่าง ตัวอย่างต่อไปนี้จะคัดลอกไฟล์ gauss.plx จากไดเร็กทอรีปัจจุบันไปยังไดเร็กทอรีย่อย 1 ซึ่งอยู่ในไดเร็กทอรีปัจจุบัน

$ ซีพี เกาส์ . ได้โปรด 1

หากคุณมีสิทธิ์เข้าถึงอ็อบเจ็กต์ Linux (งานห้องปฏิบัติการหมายเลข 2) คุณยังสามารถคัดลอกไฟล์นี้ไปยังผู้ใช้ Alex ซึ่งมีไดเร็กทอรีการทำงานซึ่งมีพาธสัมบูรณ์ /home/alex ต่อไปนี้ โดยใช้คำสั่งต่อไปนี้

$ ซีพี เกาส์ . ได้โปรด / บ้าน / อเล็กซ์

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

$ cp -i gauss.plx /home/alex

ไดเร็กทอรีจะถูกคัดลอกในลักษณะเดียวกับไฟล์ อย่างไรก็ตาม เมื่อคัดลอกไดเร็กทอรีด้วยไฟล์และไดเร็กทอรีย่อย ตัวเลือก –R จะถูกใช้เป็นส่วนหนึ่งของคำสั่ง cp เมื่ออยู่ในไดเร็กทอรี /home/antonk/111 ให้คัดลอกไดเร็กทอรี laba2 ไปยังระดับที่สูงกว่า เช่น ไปยังไดเร็กทอรี /home/antonk จุดสองจุดบ่งบอกถึงระดับลำดับชั้นที่สูงขึ้นไปหนึ่งขั้น

$ ซีพี - ลาบา 2 ..

การเปลี่ยนชื่อและการย้ายไฟล์และไดเร็กทอรีการเปลี่ยนชื่อไฟล์และไดเร็กทอรีดำเนินการโดยใช้คำสั่ง mv หลังจากนั้นระบุวัตถุที่จะเปลี่ยนชื่อโดยคั่นด้วยช่องว่าง และชื่อใหม่ของวัตถุโดยคั่นด้วยช่องว่าง การเปลี่ยนชื่อไดเร็กทอรีเกิดขึ้นในลักษณะเดียวกับไฟล์ มาเปลี่ยนชื่อไฟล์ gauss.plx เป็นไฟล์ใหม่ชื่อ gauss2.plx หากไฟล์ที่มีชื่อเดียวกันกับชื่อใหม่ของไฟล์ที่เปลี่ยนชื่อมีอยู่แล้วในไดเร็กทอรีนี้ ไฟล์นั้นจะถูกเขียนทับด้วยเนื้อหาของไฟล์ที่เปลี่ยนชื่อ เพื่อป้องกันสิ่งนี้ ให้ใช้ตัวเลือก –i ด้วย อย่างไรก็ตามบน Linux ไม่จำเป็นต้องใช้ส่วนขยาย ใช้เพื่อเชื่อมโยงไฟล์และโปรแกรมปฏิบัติการเท่านั้น

$ mv –i gauss.plx gauss2.plx

การลบไฟล์และไดเร็กทอรีการลบไฟล์และไดเร็กทอรีใน Linux ทำได้โดยใช้คำสั่ง rm โดยระบุชื่อของไฟล์ที่จะลบ โดยคั่นด้วยช่องว่าง - ระวังเมื่อใช้งานคำสั่งนี้คุณอาจลบข้อมูลที่จำเป็นได้ เช่นเดียวกับคำสั่ง cp ให้ใช้ตัวเลือก –i ร่วมกับคำสั่ง rm คำสั่งที่มีตัวเลือกนี้จะขอการยืนยันเพื่อลบแต่ละไฟล์และไดเร็กทอรี ในตัวอย่างต่อไปนี้ เราจะลบไฟล์ เกาส์ 2. ได้โปรด , ขอคำยืนยันการลบ .

RM –ฉัน gauss2.plx

สัญลักษณ์แทน บางครั้งเมื่อทำงานกับตัวแปลคำสั่ง คุณจำเป็นต้องค้นหาหรือจับคู่ไฟล์โดยใช้รูปแบบ ตัวอย่างเช่น คุณทราบเพียงอักษรตัวแรกของชื่อไฟล์ และต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรีการทำงานที่ขึ้นต้นด้วยตัวอักษรนั้น หรือคุณทราบลำดับของตัวอักษรหลายตัวในชื่อหรือนามสกุลของไฟล์ และคุณจำเป็นต้องค้นหามันจากไฟล์อื่นๆ หลายร้อยไฟล์ ในกรณีนี้ คุณต้องใช้อักขระพิเศษของ Linux ล่ามคำสั่งใช้ชุดข้อมูล อักขระพิเศษเรียกว่าไวด์การ์ด ซึ่งสามารถใช้ค้นหาไฟล์ จับคู่ไฟล์ และสร้างรายการชื่อไฟล์ได้ อักขระเหล่านี้ ได้แก่ เครื่องหมายดอกจัน เครื่องหมายคำถาม และวงเล็บเหลี่ยม (*, ?, ) เมื่อได้รับชื่อไฟล์บางส่วนแล้ว ตัวแปลคำสั่งจะใช้อักขระเหล่านี้เป็นเทมเพลตเพื่อค้นหาและสร้างรายชื่อไฟล์ที่ตรวจพบ พารามิเตอร์ที่มีชื่อไฟล์ที่ไม่เข้าเกณฑ์จะถูกแทนที่ด้วยรายการชื่อไฟล์ที่ตรงกัน รายชื่อนี้สามารถใช้เป็นพารามิเตอร์ในคำสั่งที่ทำงานบนหลายไฟล์ได้ (เช่น LS- ไวด์การ์ดตัวแปลคำสั่งแสดงอยู่ในตาราง 1.

ตารางที่ 1. อักขระพิเศษของเชลล์

สัญลักษณ์ทั่วไป

วัตถุประสงค์

การแยกคำสั่งในบรรทัดคำสั่งเดียว

"ทีม"

การดำเนินการคำสั่ง

เปรียบเทียบกับคลาสของอักขระที่เป็นไปได้ในชื่อไฟล์

กำหนดอักขระถัดไปเป็นแบบพิเศษ ใช้เพื่อระบุอักขระควบคุม

การไพพ์เอาต์พุตมาตรฐานของคำสั่งหนึ่งเป็นอินพุตสำหรับคำสั่งอื่น

การรันคำสั่งในเบื้องหลัง

คำสั่งสำหรับการทำงานกับรายการคำสั่งที่ป้อนไว้ก่อนหน้านี้

สัญลักษณ์แทน

ผลการสมัคร

จับคู่อักขระใดๆ ที่ตั้งค่าไว้ในชื่อไฟล์

ตรงกับข้อใดข้อหนึ่ง ตัวละครที่แยกจากกันในชื่อไฟล์

สัญลักษณ์การเปลี่ยนเส้นทาง

ผลการสมัคร

เปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์หรืออุปกรณ์ ในกรณีนี้ หากไม่มีไฟล์อยู่ ไฟล์จะถูกสร้างขึ้น แต่หากมีไฟล์อยู่ ไฟล์นั้นจะถูกเขียนทับ

เครื่องหมายอัศเจรีย์จะทำให้ไฟล์ถูกเขียนทับหากมีอยู่ สัญลักษณ์นี้จะแทนที่ตัวเลือกที่ป้องกันการเขียนทับ ไฟล์ที่มีอยู่

เปลี่ยนเส้นทาง อินพุตมาตรฐานจากไฟล์หรืออุปกรณ์ไปยังโปรแกรม

เปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์หรืออุปกรณ์ โดยผนวกเอาต์พุตต่อท้ายไฟล์

สัญลักษณ์การเปลี่ยนเส้นทาง

ผลลัพธ์ของการใช้เอาต์พุตข้อความแสดงข้อผิดพลาดมาตรฐาน

เปลี่ยนเส้นทางและผนวกเอาต์พุตข้อผิดพลาดมาตรฐานไปยังไฟล์หรืออุปกรณ์

เปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดมาตรฐานไปยังอินพุตมาตรฐาน

เปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดมาตรฐานไปยังไฟล์หรืออุปกรณ์

ไพพ์เอาต์พุตข้อผิดพลาดมาตรฐานไปยังอินพุตของคำสั่งอื่น

ตัวอย่างเช่น เครื่องหมายดอกจัน (*) สามารถใช้เพื่ออ้างถึงไฟล์ที่ชื่อขึ้นต้นหรือลงท้ายด้วยอักขระเฉพาะเจาะจง ตัวอย่างนี้แสดงวิธีการใช้เครื่องหมายดอกจัน (*) ร่วมกับอักขระใดๆ

$ls

docl doc2 เอกสาร เอกสาร mydoc วันจันทร์ วันอังคาร

แสดงรายการไฟล์ทั้งหมดในไดเร็กทอรีการทำงาน

$ ls เอกสาร*

เอกสาร docl doc2

ตัวอย่างนี้แสดงให้เห็นว่าเราใช้เครื่องหมายดอกจันเพื่อ "กรอง" ชื่อไฟล์ที่ไม่ได้ขึ้นต้นด้วยตัวอักษรผสม "doc" เฉพาะชื่อไฟล์ที่มีคำว่า “doc” รวมกันเท่านั้นที่จะแสดง ในกรณีนี้ ไฟล์ที่เหลือจะไม่ถูกลบ แต่จะไม่แสดงให้ผู้ใช้เห็น

$ ls *วัน

วันจันทร์ ที วันอังคาร

ที่นี่เราได้แสดงชื่อไฟล์ที่ลงท้ายด้วยการรวม "วัน"

$ LS [ ภูเขา ] * *

วันจันทร์ วันอังคาร

และที่นี่เราได้แสดงชื่อของไฟล์ที่มีอักขระตัวแรกคือตัวอักษร "m" หรือ "t" อักขระที่ตามมาจะเป็นตัวอักษรที่กำหนดเองจากนั้นตัวอักษร "d" และอักขระที่กำหนดเองอีกครั้ง

โปรดใช้ความระมัดระวังเมื่อใช้เครื่องหมายดอกจันกับคำสั่ง rm เนื่องจากอาจทำให้ข้อมูลสูญหายได้ คำสั่งต่อไปนี้จะลบเนื้อหาทั้งหมดของโฟลเดอร์ปัจจุบัน

RM *

$ ls *วัน

docl doc2 เอกสาร

เครื่องหมายคำถาม (?) หมายถึงอักขระที่ไม่ระบุเพียงตัวเดียวในชื่อไฟล์

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

อย่าหลงไปกับความสะดวกสบายของอินเทอร์เฟซแบบกราฟิกและประมาทบรรทัดคำสั่ง ประการแรก งานธุรการหลายอย่างสามารถทำได้จากที่นั่นเท่านั้น ประการที่สอง บรรทัดคำสั่งเป็นวิธีที่สะดวกที่สุดในการทำให้ขั้นตอนตามปกติเป็นแบบอัตโนมัติ คำสั่งใน Linux คือทุกสิ่งที่สามารถดำเนินการได้: ไฟล์ปฏิบัติการ, คำสั่งเชลล์ในตัว, นามแฝงของคำสั่ง, ฟังก์ชันที่ผู้ใช้กำหนด, ไฟล์สคริปต์ (สคริปต์) - ลำดับคำสั่งที่เตรียมไว้ล่วงหน้าในรูปแบบข้อความ

ดังนั้น, ล่ามคำสั่งเป็นโปรแกรมที่มีคำสั่งในตัว มีสภาพแวดล้อมที่แปรผันได้เอง และยังอนุญาตให้คุณดำเนินการคำสั่งภายนอกที่มีอยู่ในระบบได้

เชลล์ยอมรับคำสั่งที่ผู้ใช้ป้อน ประมวลผลอาร์กิวเมนต์หากจำเป็น ออกคำสั่งเพื่อดำเนินการ ยอมรับค่าที่ส่งคืน และดำเนินการบางอย่างโดยขึ้นอยู่กับค่าเหล่านั้น นอกจากนี้ เชลล์ยังมีภาษาการเขียนโปรแกรมในตัว (ภาษาคำสั่ง) ที่ให้คุณเขียนสคริปต์คำสั่งแบบแยกย่อยที่ซับซ้อนได้ เป็นภาษาคำสั่งที่แยกความแตกต่างของเชลล์ออกจากกัน และเป็นภาษาที่ผู้ใช้เลือกใช้เชลล์เป็นหลัก

Linux เป็นระบบปฏิบัติการที่มีลักษณะคล้าย Unix เดิมที Linux ได้รับการพัฒนาโดย Linus Torvalds ที่มหาวิทยาลัยเฮลซิงกิ (ฟินแลนด์) โดยใช้ Minix ซึ่งเป็นระบบ UNIX ขนาดเล็กที่สร้างโดย Andry Tanenbaum แต่แรก การพัฒนาลินุกซ์เกี่ยวข้องกับปัญหาการสลับงานในโหมดป้องกันสำหรับ 80386 เป็นหลัก และ Linus "เริ่มคิดอย่างจริงจังเกี่ยวกับแนวคิดที่คลั่งไคล้ในการทำให้ Minix ดีกว่าตัวมันเอง"

เชลล์คำสั่งมีอยู่แล้วในระบบ UNIX มันคือ “เชลล์เป้าหมาย” (เชลล์เป้าหมายหรือเพียงแค่เชลล์) หลังจากนั้นไม่นาน ระบบ UNIX ก็ได้พัฒนา C เชลล์ ซึ่งใช้ไวยากรณ์ที่แตกต่างกัน ซึ่งค่อนข้างชวนให้นึกถึงไวยากรณ์ของภาษาการเขียนโปรแกรม C

ล่ามคำสั่งจำนวนมากได้รับการพัฒนาสำหรับ Linux ค่าเริ่มต้นคือ "Bash" ซึ่งพัฒนาขึ้นมา เปลือกตามและเรียกกันว่า "เปลือกใหม่แห่งบอร์น" (Bourne Again Shell) ดังนั้น Bash จึงเป็นวิวัฒนาการของเชลล์รุ่นก่อน โดยเพิ่มคุณสมบัติที่มีประโยชน์มากมายที่มีอยู่ในเชลล์ C บางส่วน เนื่องจาก Bash ถือได้ว่าเป็นส่วนเสริมของไวยากรณ์เชลล์เก่า ดังนั้นโปรแกรมใดๆ ที่เขียนด้วยเชลล์ Bourne แบบเก่าที่ดีจึงควรทำงานใน Bash ได้

อย่างไรก็ตาม ควรสังเกตว่า Linux OS ไม่ใช่ระบบ UNIX เนื่องจากโค้ดของมันถูกเขียนใหม่ทั้งหมด เริ่มแรกโดย Linus ต่อมาด้วยความช่วยเหลือจากโปรแกรมเมอร์ UNIX และผู้ที่ชื่นชอบจากอินเทอร์เน็ต ผู้ที่มีทักษะและความสามารถเพียงพอที่จะพัฒนา ระบบ.

เคอร์เนลลีนุกซ์ไม่ได้ใช้โค้ดจาก UNIX หรือแหล่งลิขสิทธิ์อื่นใดและส่วนใหญ่ โปรแกรมลินุกซ์พัฒนาโดยโครงการ GNU ของมูลนิธิซอฟต์แวร์เสรีในเคมบริดจ์ แมสซาชูเซตส์ แต่โปรแกรมเมอร์ทั่วโลกก็มีส่วนสนับสนุนเช่นกัน

นี่คือเชลล์ Linux ที่พบบ่อยที่สุด:

  • บอร์นเชลล์ - บอร์นเชลล์ มาตรฐานสำหรับระบบที่คล้าย UNIX หลายระบบ;
  • bash - เชลล์ Bourne Again, "เชลล์ Bourne ใหม่" (ใช้เป็นค่าเริ่มต้นบน Linux);
  • csh - C เชลล์, เชลล์ C: ไวยากรณ์ของภาษาคำสั่งนั้นคล้ายกับไวยากรณ์ของภาษา C;
  • tcsh - เชลล์ C เล็ก ๆ , เชลล์ C ขั้นต่ำ;
  • pdksh - โดเมนสาธารณะ Korn เชลล์, Korn เชลล์สาธารณะ;
  • sash - เชลล์แบบสแตนด์อโลนสามารถใช้ได้เมื่อไม่มีไลบรารีซอฟต์แวร์

รายการโปรแกรมเชลล์ทั้งหมดที่ติดตั้งบนระบบจะอยู่ในไฟล์ /etc/shells

เชลล์เริ่มต้นสำหรับผู้ใช้แต่ละรายที่เปิดใช้งานเมื่อเขาล็อกออนเข้าสู่ระบบถูกระบุไว้ในไฟล์ /etc/passwd อาจไม่จำเป็นต้องทุบตี โดยทั่วไปผู้ดูแลระบบสามารถห้ามผู้ใช้บางรายไม่ให้เข้าสู่ระบบโดยการระบุ /sbin/nologin เป็น “เชลล์” ที่ถูกโหลดหลังจากการลงทะเบียน หรือแม้แต่ระบุสคริปต์ที่ออกแบบมาเป็นพิเศษเพื่อให้คุณสามารถดูบันทึกได้ เป็นต้น

หากต้องการแก้ไขไฟล์ /etc/passwd ใน Linux จะมีคำสั่งพิเศษ vipw ซึ่งจะตรวจสอบความถูกต้องของการแก้ไข (คำสั่งนี้มีให้สำหรับผู้ดูแลระบบเท่านั้น)

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

ในเชลล์ใดๆ คุณสามารถรันสคริปต์คำสั่งที่ประกอบด้วยคำสั่งจากเชลล์อื่นได้ โดยบรรทัดแรกของแต่ละสคริปต์จะมีการระบุว่าควรจะเรียกใช้เชลล์ใด และเชลล์ปัจจุบันจะรันกระบวนการย่อยที่ระบุ

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

2. การแยกวิเคราะห์บรรทัดคำสั่ง ฟังก์ชันทุบตีที่เลือก

ล่ามที่ได้รับบรรทัดคำสั่งแล้วจะทำการเปลี่ยนแปลงหลายอย่างโดยใช้ฟังก์ชันอันทรงพลัง ได้แก่:

  1. ขยายนามแฝงเพื่อการเข้าถึงคำสั่งทั่วไปอย่างรวดเร็ว
  2. ขยายอักขระเมตาหรือไวด์การ์ด (*, ?, [, ], ~, (, )) เพื่อค้นหาไฟล์โดยใช้รูปแบบชื่อ
  3. ทดแทนตัวแปรที่เชลล์สามารถใช้ได้
  4. เปลี่ยนเส้นทางเอาต์พุตของคำสั่งหนึ่งเป็นอินพุตไปยังคำสั่งอื่นโดยใช้ไปป์
  5. ดำเนินการรวมคำสั่ง
  6. ดำเนินการคำสั่งหากเป็นคำสั่งล่ามในตัว หรือเริ่มกระบวนการหากคำสั่งนั้นเป็นคำสั่งภายนอก
  7. เปลี่ยนเส้นทาง I/O มาตรฐาน

หากต้องการใช้งานสามฟังก์ชันสุดท้าย คุณต้องใช้ตัวดำเนินการพิเศษ ลองดูฟังก์ชันทั้งหมดที่ระบุไว้

2.1. ชื่อเล่น

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

ตัวอย่างเช่น:

$export HELLO="Hello from Environmental! " # space must be Escape with quotes

ตัวแปรสภาพแวดล้อม

สภาพแวดล้อมคือชุดของตัวแปรที่มีค่าที่สามารถเปลี่ยนพฤติกรรมของเชลล์ได้

เมื่อเชลล์เริ่มทำงาน มันจะตั้งค่าตัวแปรสภาพแวดล้อมหลายอย่างสำหรับตัวมันเอง ชื่อของพวกเขาเป็นมาตรฐาน โปรแกรมและสคริปต์สามารถขอค่านิยมแทนที่จะพยายามค้นหาข้อมูลที่ต้องการด้วยตนเอง

ด้วยวิธีนี้ ตัวแปลคำสั่งจะกำหนดตัวแปรสภาพแวดล้อมที่ใช้ในเซสชันปัจจุบัน แต่ละคำสั่งใหม่ที่ป้อนจะถูกเรียกใช้จริงเป็นกระบวนการย่อยของกระบวนการหลัก ซึ่งใน ในกรณีนี้มีการใช้ล่ามคำสั่ง bash ตัวแปรสภาพแวดล้อมแตกต่างจากตัวแปรปกติ หัวข้อตัวแปรพร้อมใช้งานสำหรับทั้งกระบวนการหลักและรอง การตรวจหาตัวแปรสภาพแวดล้อมโดยอัตโนมัติเกิดขึ้นหลังจากการพิสูจน์ตัวตนผู้ใช้ในระบบ หากกระบวนการพิสูจน์ตัวตนเสร็จสมบูรณ์ โปรแกรมล็อกอินจะพิจารณาจากไฟล์ /etc/passwd ว่าตัวแปลคำสั่งใดที่จะใช้ในเซสชันของผู้ใช้ หลังจากกำหนดตัวแปลคำสั่งแล้ว เซสชันจะได้รับการกำหนดค่าตามไฟล์การกำหนดค่าที่แสดงด้านล่าง

ไฟล์การกำหนดค่าคำอธิบาย
/etc/profile

กำหนดตัวแปรสภาพแวดล้อมสำหรับผู้ใช้ทั้งหมดบนระบบ ไฟล์นี้จะดำเนินการเมื่อเข้าสู่ระบบครั้งแรกและมีตัวแปรสภาพแวดล้อมพื้นฐาน เช่น ตัวแปรค้นหาตำแหน่งคำสั่ง PATH ตัวแปรชื่อโฮสต์ HOSTNAME และตัวแปรขนาดประวัติคำสั่ง HISTSIZE นอกจากนี้ ไฟล์นี้สร้างตัวแปรสภาพแวดล้อมเพิ่มเติมจากไฟล์คอนฟิกูเรชันที่อยู่ในไดเร็กทอรี /etc/profile.d

/etc/bashrc

ดำเนินการสำหรับผู้ใช้ทุกคนทุกครั้งที่เริ่ม bash shell ไฟล์นี้กำหนดค่าของตัวแปร PS1 รวมถึงนามแฝงของคำสั่งเพิ่มเติม นามแฝงคือชื่อคำสั่งหรือลำดับของคำสั่งที่กำหนดให้สั้นลงและกำหนดโดยพลการ ซึ่งช่วยให้คุณสามารถดำเนินการลำดับคำสั่งที่ซับซ้อนได้โดยไม่ต้องป้อนคำสั่งจากแป้นพิมพ์ แต่โดยการเรียกคำสั่งเหล่านั้นโดยการเรียกนามแฝงที่เกี่ยวข้อง ตัวแปรที่กำหนดในไฟล์นี้อาจ "ถูกกำหนดใหม่โดยสิ่งที่คล้ายกัน ไฟล์ผู้ใช้-/.bashrc ซึ่งมีลำดับความสำคัญสูงกว่า

-/.bashprofile

ใช้เป็นไฟล์ที่มีการตั้งค่าผู้ใช้แต่ละราย ดำเนินการเพียงครั้งเดียวเมื่อผู้ใช้เข้าสู่ระบบ นอกจากนี้ ไฟล์นี้ยังรันไฟล์ -/.bashrc

~/.bashrc

ไฟล์นี้มีตัวแปรสภาพแวดล้อมและนามแฝงที่ตั้งค่าโดยผู้ใช้ จะดำเนินการทุกครั้งที่ผู้ใช้เข้าสู่ระบบหรือเมื่อมีการเปิดเซสชันทุบตีใหม่ ไฟล์นี้เหมาะที่สุดสำหรับการกำหนดตัวแปรผู้ใช้และนามแฝง

~/.bash_logout

ไฟล์นี้จะถูกดำเนินการทุกครั้งที่คุณออกจากระบบหรือสิ้นสุดเซสชันล่าสุดของล่ามทุบตี ตามค่าเริ่มต้น ไฟล์นี้มีคำสั่งให้ล้างหน้าจอเทอร์มินัล

/etc/inputrc

ไฟล์นี้มีคำอธิบายการตีความการใช้คีย์ผสมต่างๆ และยังมีคีย์ผสมพิเศษ การกดที่ทำให้เกิดการดำเนินการตามคำสั่งที่ระบุ

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

ส่งออก AB=/usr/dog/contagious/ringbearer/grind

ใน ในตัวอย่างนี้ตัวแปรสภาพแวดล้อมชั่วคราว AB ได้รับการกำหนดเส้นทางไปยังไดเร็กทอรีที่อยู่ค่อนข้าง "ลึก" ในลำดับชั้นไดเร็กทอรีของระบบไฟล์ คำสั่งส่งออกระบุถึงความจำเป็นในการส่งออกค่าของตัวแปร AB ไปยังเชลล์เพื่อให้พร้อมใช้งานสำหรับเชลล์อื่นที่อาจเปิดภายในเซสชันปัจจุบันกับระบบ ตอนนี้สามารถเข้าถึงไดเร็กทอรีด้านบนได้โดยดำเนินการคำสั่ง cd $AB

ข้อเสียเปรียบเพียงอย่างเดียวของตัวแปรสภาพแวดล้อมชั่วคราวคือตัวแปรเหล่านี้จะถูกทำลายโดยอัตโนมัติเมื่อเซสชันปัจจุบันกับระบบสิ้นสุดลง ในการสร้างตัวแปรสภาพแวดล้อมแบบถาวร (ตรงข้ามกับชั่วคราว) จะต้องเพิ่มตัวแปรนั้นลงในไฟล์การกำหนดค่าเชลล์ file.bashrc

หากต้องการเปลี่ยนไฟล์คอนฟิกูเรชัน /etc/profile และ /etc/bashrc คุณต้องเป็น root

ผู้ใช้ทั่วไปสามารถแก้ไขไฟล์คอนฟิกูเรชัน ~/.bash_profile, ~/.bashrc และ ~/.bash_Iogout ที่อยู่ในโฮมไดเร็กทอรีของตนได้ ไฟล์การกำหนดค่าเหล่านี้สามารถกำหนดค่าเพื่อตั้งค่าตัวแปรสภาพแวดล้อมของคุณโดยใช้คำสั่งส่งออก และสามารถใช้ได้ในเซสชันใดก็ได้

ตัวแปรสภาพแวดล้อมที่เปลี่ยนแปลงบ่อยที่สุดตัวหนึ่งคือตัวแปร PATH คุณยังสามารถแทนที่หรือขยายตัวแปรสภาพแวดล้อม PATH ในไฟล์กำหนดค่า ~/.bashrc ได้

ในตัวอย่างนี้ ตัวแปร PATH จะมีค่าปัจจุบันบวกโฮมไดเร็กตอรี่เป็นพาธการค้นหาสำหรับไฟล์ที่ปฏิบัติการได้

เพื่อให้การเปลี่ยนแปลงเหล่านี้ถูกนำไปใช้ในสภาพแวดล้อมของเชลล์ปัจจุบัน คุณต้องรันคำสั่ง source .bashrc

ตัวแปรสภาพแวดล้อมของเชลล์ที่พบบ่อยที่สุดคือ:

  • BASH - มีพาธแบบเต็มไปยังคำสั่ง bash (โดยทั่วไปคือ /bin/bash)
  • BASH_VERSION - หมายเลขเวอร์ชัน Bash
  • DIRSTACK - อาร์เรย์ที่มีค่าสแต็กไดเร็กทอรีปัจจุบัน
  • บรรณาธิการ- โปรแกรมแก้ไขข้อความค่าเริ่มต้น.
  • EUID - ตัวระบุที่มีประสิทธิภาพที่เป็นตัวเลขของผู้ใช้ปัจจุบัน
  • FUNCNAME - ชื่อ ฟังก์ชั่นปัจจุบันในสคริปต์
  • GROUPS - อาร์เรย์ที่มีรายการกลุ่มที่ผู้ใช้ปัจจุบันเป็นสมาชิก
  • HISTFILE - ตำแหน่งของไฟล์ประวัติคำสั่ง โดยทั่วไป ประวัติคำสั่งจะถูกจัดเก็บไว้ในไฟล์ ~/.bash_history
  • HISTFILESIZE - จำนวนบรรทัดคำสั่งที่สามารถจัดเก็บไว้ในไฟล์ประวัติ หลังจากถึงจำนวนนี้แล้ว บรรทัดคำสั่งใหม่จะถูกป้อนลงในประวัติโดยการลบบรรทัดคำสั่งที่เก่าที่สุด ตามค่าเริ่มต้น ขนาดของรายการคำสั่งที่ใช้ล่าสุดคือ 1,000 บรรทัด
  • บ้าน - โฮมไดเร็กตอรี่ผู้ใช้
  • HOSTNAME - ชื่อของคอมพิวเตอร์เครื่องนี้ (โหนด)
  • HOSTTYPE - ประเภทคอมพิวเตอร์
  • LANG - ภาษาเริ่มต้นปัจจุบัน
  • LC_CTYPE เป็นตัวแปรภายในที่กำหนดการเข้ารหัสอักขระ
  • MAIL - ตำแหน่งไฟล์กล่องจดหมาย อีเมลผู้ใช้ โดยทั่วไปจะเป็นไฟล์ที่อยู่ในไดเร็กทอรี /var/spool/mail ซึ่งมีชื่อเหมือนกัน ชื่อการลงทะเบียนผู้ใช้
  • MAILCHECK - ช่วงเวลาเป็นนาทีระหว่างการตรวจสอบเมล
  • OLDPWD - ไดเร็กทอรีที่เป็นปัจจุบันจนกระทั่งไดเร็กทอรีถูกแก้ไขครั้งล่าสุด
  • OSTYPE - ระบบปฏิบัติการปัจจุบัน
  • PATH - รายการไดเร็กทอรีที่คั่นด้วยโคลอนเพื่อค้นหาไฟล์ปฏิบัติการ ลำดับการค้นหาชื่อไดเร็กทอรีมีความสำคัญอย่างยิ่ง เมื่อดำเนินการคำสั่ง ไดเร็กทอรีที่อยู่ในตัวแปรนี้จะถูกตรวจสอบตามลำดับจากซ้ายไปขวา ดังนั้น เมื่อดำเนินการคำสั่ง foo ที่อยู่ในไดเร็กทอรี /bin และ /usr/bin คำสั่งที่อยู่ในไดเร็กทอรี /bin จะถูกดำเนินการ หากต้องการรันคำสั่ง foo ที่อยู่ในไดเร็กทอรี /usr/bin ในสถานการณ์ที่คล้ายกัน คุณต้องระบุพาธแบบเต็มไปยังคำสั่งนี้ หรือเปลี่ยนลำดับของชื่อไดเร็กทอรีในตัวแปรสภาพแวดล้อม PATH ต้องระบุไดเร็กทอรีการค้นหาปัจจุบันอย่างชัดเจน (".") เชลล์จะไม่ค้นหาไดเร็กทอรีปัจจุบันตามค่าเริ่มต้น การค้นหาโปรแกรมเริ่มต้นในไดเร็กทอรีปัจจุบันอาจเป็นอันตรายได้เนื่องจากมีความเป็นไปได้ที่จะรันโปรแกรมที่เป็นอันตรายโดยไม่ได้ตั้งใจ ดังนั้นตัวแปร PATH มักจะถูกเตรียมใช้งานโดยไม่มี "" หากต้องการเพิ่มเส้นทางไปยังคำสั่งของคุณเองหรือเชลล์สคริปต์ไปยังตัวแปร PATH คุณควรวางไว้ในไดเร็กทอรีย่อย /bin ของโฮมไดเร็กตอรี่ของคุณ ซึ่งจะถูกเพิ่มลงในตัวแปร PATH โดยอัตโนมัติ คำสั่งที่ปฏิบัติการไม่ได้ทั้งหมดจะอยู่ในไดเร็กทอรีที่แสดงอยู่ในตัวแปรสภาพแวดล้อม PATH คำสั่งบางคำสั่งถูกสร้างขึ้นโดยตรงในเชลล์ คำสั่งอื่นๆ สามารถกำหนดใหม่ได้โดยใช้นามแฝง โดยอนุญาตให้แทนที่คำสั่งที่มีพารามิเตอร์ที่มีความซับซ้อนแทบใดๆ (ในแง่ของไวยากรณ์) ด้วยชื่อง่ายๆ เพียงชื่อเดียว นอกจากนี้ยังสามารถสร้างฟังก์ชันที่เก็บลำดับคำสั่งทั้งหมดได้อีกด้วย
  • PPID- หมายเลขประจำตัวกระบวนการที่สอดคล้องกับคำสั่งที่เรียกใช้เชลล์ปัจจุบัน (เช่น กระบวนการที่สร้างเชลล์)
  • PS1, PS2, PS3, PS4 - ตัวแปรที่กำหนดประเภทของเชลล์พร้อมต์

    ตัวแปร PS1 และ PS2 ตั้งค่าพรอมต์เชลล์หลักและรอง

    พรอมต์รอง (PS2) จะปรากฏขึ้นหากคุณกดปุ่ม Enter โดยไม่ได้ป้อนคำสั่งทางไวยากรณ์ให้เสร็จสิ้น

    ตัวแปรนี้มีพร้อมต์รองที่เกิดขึ้นเมื่อแก้ไขข้อความหลายบรรทัดหรือการป้อนคำสั่งที่ไม่สมบูรณ์ โดยค่าเริ่มต้นจะแสดงเป็น >

    พีเอส3. ตัวแปรนี้มีพรอมต์ปรากฏอยู่ เลือกคำสั่งใช้เพื่อจัดระเบียบเมนูคอนโซลแบบโต้ตอบ ตามค่าเริ่มต้น พรอมต์ PS3 ในคำสั่ง select คือ #?

    พีเอส4. ตัวแปรนี้ใช้เป็นหลักเมื่อทำการดีบักเชลล์สคริปต์ และโดยค่าเริ่มต้นจะมีค่าสตริง "++"

    ตัวอย่างเช่น การรันคำสั่งเพื่อรับข้อมูล DNS:

    #nslookup >

  • PWD - ไดเร็กทอรีการทำงานปัจจุบันของผู้ใช้ ค่านี้จะเปลี่ยนแปลงทุกครั้งที่คุณเปลี่ยนเป็นไดเร็กทอรีอื่นโดยใช้คำสั่ง cd
  • SECONDS - เวลารันสคริปต์ (เป็นวินาที)
  • SHELL - ล่ามคำสั่งปัจจุบัน
  • SHELLOPTS - รายการตัวเลือกล่ามที่เปิดใช้งาน
  • SHLVL - จำนวนครั้งที่สำเนาใหม่ของตัวแปลคำสั่งถูกเรียกใช้
  • UID - ตัวระบุตัวเลขของผู้ใช้ปัจจุบัน
  • USER - ชื่อผู้ใช้ปัจจุบัน
  • $# - จำนวนพารามิเตอร์ทั้งหมดที่ส่งไปยังสคริปต์
  • $* - อาร์กิวเมนต์ทั้งหมดจะไม่ถูกส่งไปยังสคริปต์ (ส่งออกเป็นบรรทัด)
  • $@ - เหมือนกับอันก่อนหน้า แต่พารามิเตอร์จะแสดงในคอลัมน์
  • - - PID ของกระบวนการสุดท้ายที่ทำงานอยู่เบื้องหลัง
  • $$ - PID ของสคริปต์นั้นเอง

หากต้องการดูค่าของตัวแปรทั้งหมดในเซสชันปัจจุบัน ทั้งที่คุณกำหนดและที่อยู่ในสภาพแวดล้อม ให้ออกคำสั่ง set โดยไม่มีพารามิเตอร์หรือ env printenv

คุณสามารถลบตัวแปรด้วยคำสั่ง unset

2.4. การทดแทนและการจัดระเบียบปฏิสัมพันธ์ระหว่างคำสั่ง

การทดแทนค่าตัวแปรสภาพแวดล้อมเซสชันปัจจุบันกับระบบสามารถทำได้โดยใช้เครื่องหมายดอลลาร์ ($) เมตาอักขระ เป็นผลให้เชลล์แทนที่ชื่อตัวแปรด้วยค่าของมันโดยอัตโนมัติ ตัวอย่างเช่น,

การแทนที่ผลลัพธ์ของนิพจน์ทางคณิตศาสตร์

มีรูปแบบวากยสัมพันธ์สองรูปแบบสำหรับการแทนที่ผลลัพธ์ของนิพจน์ทางคณิตศาสตร์: $[expression] และ $((expression)) ตัวอย่างเช่น,

echo "ฉันอายุ $ ปี"

การทดแทนคำสั่ง

การทดแทนคำสั่งช่วยให้คุณใช้เอาต์พุตของคำสั่งหนึ่งบนบรรทัดคำสั่งที่มีคำสั่งอื่นได้ สามารถใช้สอง รูปแบบทางเลือกการทดแทน: $(command) หรือ `command` (backquotes เดียว) ตัวอย่างเช่น,

การขยายอักขระตัวหนอน

อักขระตัวหนอน (~) ช่วยให้คุณป้อนชื่อไดเร็กทอรีได้อย่างรวดเร็ว

~ ชื่อของโฮมไดเร็กตอรี่ของผู้ใช้ ~/subdirectory ชื่อของหนึ่งในไดเร็กทอรีย่อยในโฮมไดเร็กตอรี่ของผู้ใช้ ~+ ชื่อของไดเร็กทอรีปัจจุบัน ~- ชื่อของไดเร็กทอรีก่อนหน้า

การเปิดเผยข้อมูล วงเล็บปีกกา

เมื่อใช้เครื่องหมายปีกกา คุณสามารถป้อนคำสั่งเดียวแทนคำสั่งประเภทเดียวกันหลายคำสั่งได้ วงเล็บจะต้องมีรายการ ซึ่งองค์ประกอบจะต้องคั่นด้วยเครื่องหมายจุลภาค ล่ามจะอ่านองค์ประกอบทีละรายการและสร้างคำสั่งแยกกันกับแต่ละองค์ประกอบ จากนั้นจึงดำเนินการ เช่น คำสั่ง

ค่าใช้จ่าย mkdir/(ม.ค.,ก.พ.,มี.ค.) เท่ากับ ค่าใช้จ่าย mkdir/ม.ค. ค่าใช้จ่าย mkdir/ก.พ. ค่าใช้จ่าย mkdir/มี.ค.

ช่อง

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

แมว /etc/passwd | เรียงลำดับ | หัว -3

ลำดับและกลุ่มคำสั่ง

การใช้ลำดับคำสั่งและกลุ่มทำให้คุณสามารถป้อนหลายคำสั่งในบรรทัดเดียวได้

command1;command2 ดำเนินการคำสั่ง 1 ก่อน จากนั้นจึงคำสั่ง 2 (command1;command2) Run สำเนาแยกต่างหากล่ามที่จะรันคำสั่ง 1 และ 2 ตามลำดับ ( command1;command2) รันคำสั่ง 1 และ 2 ตามลำดับในล่ามปัจจุบัน command1 && command2 รันคำสั่ง 2 เฉพาะเมื่อคำสั่ง 1 เสร็จสมบูรณ์ command1 || command2 ดำเนินการคำสั่ง 2 เฉพาะเมื่อคำสั่ง 1 ล้มเหลว

ผลลัพธ์ของการดำเนินการคำสั่งใดๆ (นั่นคือ ผลลัพธ์ของการยุติกระบวนการที่เกี่ยวข้อง) คือโค้ดทางออก การสำเร็จที่สำเร็จมีรหัส 0 รหัสการสำเร็จที่ไม่สำเร็จ 1 ค่ารหัสการสำเร็จถูกกำหนดให้กับตัวแปรที่กำหนดไว้ล่วงหน้าหรือไม่ (เครื่องหมายคำถาม) ตัวอย่างเช่น echo $?

ดำเนินการคำสั่งอีกครั้ง

เชลล์มีสิ่งอำนวยความสะดวกที่ช่วยให้คุณสามารถเรียกคืนคำสั่งก่อนหน้าและแก้ไขได้ ประวัติคำสั่งเชลล์คือรายการคำสั่งที่ใช้ก่อนหน้านี้ รายการนี้สามารถดูได้โดยใช้คำสั่ง history

หลังจากที่คุณป้อนบรรทัดคำสั่งแล้ว เชลล์จะวางไว้ในประวัติคำสั่ง รายการคำสั่งที่ใช้ก่อนหน้านี้จะถูกเก็บไว้ในไฟล์ซึ่งช่วยให้คุณสามารถเรียกใช้บรรทัดคำสั่งที่ต้องการได้ตลอดเวลาเพื่อดำเนินการใหม่ หลังจากเรียก command line อีกครั้งก็สามารถแก้ไขได้ ประวัติคำสั่งจะถูกจัดเก็บไว้ในไฟล์ .bash_history ซึ่งอยู่ในโฮมไดเร็กตอรี่ของผู้ใช้ ตามค่าเริ่มต้น เชลล์คำสั่งสามารถ "จดจำ" ได้สูงสุด 1,000 บรรทัดคำสั่ง

หากต้องการดูรายการคำสั่งที่ใช้ก่อนหน้านี้ ให้รันคำสั่ง history สามารถใช้ได้โดยไม่มีพารามิเตอร์หรือใช้ร่วมกับพารามิเตอร์ที่ให้คุณระบุจำนวนคำสั่งที่จะแสดง แต่ละบรรทัดคำสั่งจะมีหมายเลขของตนเองในประวัติคำสั่ง

ไวยากรณ์การขยายประวัติ: !n ดำเนินการตามหมายเลขคำสั่งที่กำหนด!! ดำเนินการคำสั่งก่อนหน้า!string ดำเนินการคำสั่งล่าสุดที่เริ่มต้นด้วยสตริงที่กำหนด!?string? ดำเนินการคำสั่งล่าสุดที่มีสตริงที่กำหนด

แทนที่จะดำเนินการบรรทัดคำสั่งที่มีอยู่ในประวัติคำสั่งโดยตรง คุณสามารถเรียกบรรทัดดังกล่าวเพื่อแก้ไขในภายหลังได้ ใช้ปุ่มเคอร์เซอร์ "ลูกศรขึ้น" และ "ลูกศรลง"สำหรับ การดูทีละขั้นตอนประวัติคำสั่งและการเลือกบรรทัดคำสั่งที่ต้องการ

3. ทุบตีในตัว

สามารถรับรายการบิวด์อิน bash เชลล์ได้โดยใช้คำสั่ง help หรือพบได้ใน man page ในส่วนคำสั่ง SHELL BUILTIN

ต่อไปนี้เป็นคำสั่งในตัวที่มีประโยชน์:

  • echo [ข้อโต้แย้ง] - พิมพ์ข้อโต้แย้งไปที่หน้าจอ
  • เปิดใช้งาน - ทำให้เชลล์เรียกใช้งานไฟล์ปฏิบัติการที่มีชื่อเดียวกันแทนที่จะเป็นคำสั่งบิวด์อิน มีประโยชน์ถ้าคุณมีสคริปต์ของคุณเองชื่อเหมือน echo
  • eval [อาร์กิวเมนต์] - สร้างคำสั่งได้ทันทีจากอาร์กิวเมนต์ที่ระบุและส่งไปดำเนินการ
  • ให้ - ประเมินการแสดงออก
  • - อ่านและรันคำสั่งที่มีอยู่ในไฟล์ ใช้เพื่อกำหนดตัวแปรผู้ใช้ และฟังก์ชั่น
  • basename - เน้นชื่อท้องถิ่น
  • expr - การประเมินนิพจน์
  • อ่าน - ป้อนค่าของตัวแปร
  • shift - เลื่อนรายการพารามิเตอร์
  • ทดสอบ - ทดสอบสภาพ
คำสั่งในตัวอื่นๆ ทำหน้าที่เป็นคำแนะนำในภาษาคำสั่ง bash

บนระบบปฏิบัติการ Linux ส่วนใหญ่ bash จะเป็นล่ามบรรทัดคำสั่งเริ่มต้น หากต้องการกำหนดล่ามปัจจุบัน ให้ป้อนคำสั่งต่อไปนี้:

$ ก้อง $SHELL
/bin/ทุบตี

ตัวอย่างนี้ใช้ล่ามบรรทัดคำสั่ง ทุบตี. มีล่ามคำสั่งอื่นๆ อีกมากมาย หากต้องการเปิดใช้งานล่ามอื่น คุณสามารถป้อนชื่อของมันที่บรรทัดคำสั่ง (ksh, tcsh, csh, sh, bash ฯลฯ)

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

การตรวจสอบความพร้อมของสินค้าที่คุณสนใจล่ามบรรทัดคำสั่ง

ที่สุด ด้วยวิธีง่ายๆหากต้องการตรวจสอบความพร้อมใช้งานของล่ามคำสั่งที่สนใจ ให้ป้อนชื่อบนบรรทัดคำสั่ง หากล่ามเริ่มแล้ว ล่ามก็พร้อมใช้งาน

มีสาเหตุหลายประการในการเลือกกระสุนสำรอง

  • นิสัยในการทำงาน ระบบยูนิกซ์ System V (ส่วนใหญ่ใช้ ksh เป็นค่าเริ่มต้น) หรือ Sun Microsystems และระบบที่ใช้ Berkeley UNIX อื่นๆ (ซึ่งมักใช้ csh) ในกรณีนี้การใช้ล่ามเหล่านี้บรรทัดคำสั่งจะสะดวกยิ่งขึ้น
  • ความจำเป็นในการเรียกใช้สคริปต์ที่สร้างขึ้นสำหรับล่ามคำสั่งเฉพาะ
  • ความสามารถของเชลล์ทางเลือกอาจจะดีกว่า เช่น สมาชิกกลุ่มคนหนึ่ง ผู้ใช้ลินุกซ์ชอบที่จะใช้ ksh เพราะเขาไม่ชอบวิธีที่ bash สร้างนามแฝง

แม้ว่าผู้ใช้ส่วนใหญ่จะชอบทำงานในเชลล์เดียว แต่ทักษะที่ได้รับจะช่วยให้พวกเขาเรียนรู้ที่จะทำงานในเชลล์อื่นได้ล่าม บรรทัดคำสั่ง โดยดูคู่มืออ้างอิงเป็นครั้งคราว (เช่น การใช้คำสั่ง manbash) คนส่วนใหญ่ใช้ bash เพราะไม่มีเหตุผลที่จะเปลี่ยนไปใช้ล่ามอื่น

ใช้ Bash และ ch

ชื่อ bash เป็นตัวย่อสำหรับ Bourne Again SHell ตัวย่อนี้บ่งชี้ว่า bash สืบทอดล่าม Bourneshell (คำสั่ง sh) ซึ่งสร้างโดย Steve Bourne จาก AT&TBell Labs Brian Fox จาก Free Software Foundation ได้สร้าง bash โดยเป็นส่วนหนึ่งของโครงการ GNU ต่อมาการพัฒนาก็ตกไปอยู่ในมือของ Chet Ramey ที่ Case Western Reserve University

ล่าม bash มีคุณสมบัติที่พัฒนาขึ้นสำหรับล่าม sh และ ksh ใน UNIX เวอร์ชันแรกๆ รวมถึงคุณสมบัติจำนวนหนึ่งของล่าม csh

คุณสามารถคาดหวังได้ว่าบนระบบ Linux ส่วนใหญ่ ยกเว้นระบบพิเศษ (เช่น ระบบที่ฝังหรือบูตจากไดรฟ์ภายนอก) bash Interpreter จะถูกใช้งานเป็นค่าเริ่มต้น ในระบบพิเศษ อาจจำเป็นต้องใช้ล่ามคำสั่งที่มีขนาดเล็กกว่า ซึ่งแสดงถึงความสามารถที่จำกัดด้วย

ตัวอย่างส่วนใหญ่ในเรื่องนี้บทความออกแบบมาเพื่อการใช้งานทุบตี

ล่าม bash สามารถทำงานได้ โหมดต่างๆความเข้ากันได้โดยเลียนแบบพฤติกรรมของเชลล์อื่น มันสามารถเลียนแบบพฤติกรรมของเชลล์เป้าหมาย (sh) หรือเชลล์ที่เป็นไปตามมาตรฐาน POSK (bash -โพซิกส์)

เป็นผลให้ bash มีแนวโน้มที่จะสามารถอ่านไฟล์การกำหนดค่าและเรียกใช้สคริปต์ที่เขียนขึ้นสำหรับเชลล์อื่นโดยเฉพาะได้สำเร็จ

ระบบปฏิบัติการ Linux ที่ให้มาทั้งหมดใช้ตัวแปล bash เป็นค่าเริ่มต้น ยกเว้นระบบปฏิบัติการที่บูตมา สื่อที่ถอดออกได้ซึ่งจะใช้ค่าเริ่มต้น ล่ามเถ้า.

การใช้ tcsh (และล่าม csh รุ่นก่อนหน้า)

ล่ามคำสั่ง tcsh เป็นการใช้งานโอเพ่นซอร์สของล่าม Cshell (csh) ล่าม csh ถูกสร้างขึ้นโดย Bill Joy และใช้เป็นค่าเริ่มต้นบนระบบ Berkeley UNIX เกือบทั้งหมด (ระบบดังกล่าวเผยแพร่โดย Sun Microsystems)

คุณลักษณะหลายอย่างของ csh เช่น การแก้ไขบรรทัดคำสั่ง และวิธีการจัดการประวัติคำสั่ง ได้ถูกนำไปใช้ใน tcsh และเชลล์อื่นๆ เช่นเดียวกับที่คำสั่ง sh รันล่าม bash ในโหมดที่เข้ากันได้กับ sh คำสั่ง csh จะรันล่าม tcsh ในโหมดที่เข้ากันได้กับ csh

การใช้ล่ามเถ้า

Ash Interpreter เป็นเวอร์ชันน้ำหนักเบาของ Berkeley UNIX sh libre มันไม่ได้มีมากมาย ฟังก์ชั่นพื้นฐานและไม่มีคุณสมบัติเช่นประวัติคำสั่ง

ล่ามเถ้าเหมาะอย่างยิ่งสำหรับใช้ในระบบฝังตัวที่มีข้อจำกัด ทรัพยากรระบบ- บนระบบปฏิบัติการ FedoraCore 4 ตัวแปล Ash จะมีลำดับความสำคัญน้อยกว่าตัวแปล bash

การใช้ zsh

ล่าม zsh เป็นอีกหนึ่งโคลนของล่าม sh เป็นไปตาม POSIX (เช่น bash) แต่มีคุณสมบัติอื่น ๆ รวมถึงการตรวจสอบการสะกดและแนวทางที่แตกต่างในการแก้ไขบรรทัดคำสั่ง ล่าม zsh เป็นล่ามเริ่มต้นในระบบปฏิบัติการ MacOS X รุ่นแรก ๆ แต่ระบบสมัยใหม่ใช้ล่าม bash เป็นค่าเริ่มต้น

ส่วนนี้ครอบคลุมหัวข้อต่อไปนี้:

  • การโต้ตอบกับเชลล์และคำสั่ง
  • คำสั่งและลำดับคำสั่ง
  • การกำหนด การใช้ และการส่งออกตัวแปรสภาพแวดล้อม
  • ประวัติคำสั่งและเครื่องมือแก้ไข
  • การรันคำสั่งทั้งในและนอกตัวแปรสภาพแวดล้อม PATH
  • การใช้การทดแทนคำสั่ง
  • การใช้คำสั่งแบบวนซ้ำกับแผนผังไดเร็กทอรี
  • การใช้ man page (help) เพื่อค้นหาข้อมูลเกี่ยวกับคำสั่ง

ในส่วนนี้จะอธิบายคุณสมบัติพื้นฐานบางอย่างของ bash shell เน้นเป็นพิเศษไปที่ความสามารถที่จำเป็นสำหรับการรับรอง ล่ามคำสั่งมีสภาพแวดล้อมที่หลากหลาย และเราสนับสนุนให้สำรวจตนเองเพิ่มเติม โดยทีมงาน ล่าม UNIXและมีหนังสือหลายเล่มที่เขียนบน Linux และโดยเฉพาะทุบตี

ล่ามคำสั่งทุบตี

ล่าม ทุบตีหนึ่งในล่ามหลายตัวที่มีอยู่บน Linux เรียกอีกอย่างว่า บีของเรา- ได้รับ เพื่อเป็นเกียรติแก่ Stephen Bourne ผู้สร้าง เวอร์ชันต้นล่าม ( /bin/sh).Bash เข้ากันได้กับ sh เป็นหลัก แต่มีการปรับปรุงมากมาย ทั้งในด้านฟังก์ชันการทำงานและความสามารถในการเขียนโปรแกรม ประกอบด้วยความสามารถของล่าม Korn (ksh) และ C (csh) และได้รับการออกแบบให้เป็นล่ามที่สอดคล้องกับ POSIX

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

ล่ามประกอบด้วย ในตัวคำสั่งเช่น cd, break และ exec คำสั่งอื่นๆ คือ ภายนอก.

ล่ามยังใช้สามมาตรฐาน ไหลฉัน/โอ:

  • มาตรฐานนี้ กระแสมาตรฐานป้อนข้อมูลซึ่งจัดให้มีอินพุตสำหรับคำสั่ง
  • มาตรฐานนี้ เอาต์พุตมาตรฐานซึ่งแสดงผลลัพธ์ของคำสั่งในหน้าต่างเทอร์มินัล
  • stderrนี้ กระแสข้อผิดพลาดมาตรฐานซึ่งแสดงข้อผิดพลาดที่เกิดขึ้นเมื่อรันคำสั่ง

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

หากคุณใช้ระบบ Linux โดยไม่มี GUI หรือคุณเปิดหน้าต่างเทอร์มินัลขึ้นมา โหมดกราฟิกคุณจะเห็นพรอมต์คำสั่งคล้ายกับรายการ 1

รายการ 1. ตัวอย่างการแจ้งเตือนผู้ใช้ทั่วไป

$
เอียน@lyrebird:~>
$

หากคุณเข้าสู่ระบบในฐานะ root (หรือ superuser) ข้อความแจ้งของคุณอาจมีลักษณะเหมือน Listing 2

รายการ 2 ตัวอย่างคำเชิญสำหรับ ผู้ใช้รูทหรือผู้ใช้ขั้นสูง

#
ไลร์เบิร์ด:~ #
#

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

ข้อกำหนดบางประการของคู่มือนี้

คู่มือการสอบของ DeveloperWorks LPI 101 และ 102 มีโค้ดตัวอย่างจากระบบ Linux จริง โดยใช้พร้อมต์เริ่มต้นสำหรับระบบเหล่านั้น ในกรณีของเรา พรอมต์รูทจะขึ้นต้นด้วย # ดังนั้นคุณจึงสามารถแยกความแตกต่างจากพรอมต์ได้ ผู้ใช้ทั่วไปซึ่งขึ้นต้นด้วยเครื่องหมาย $ ข้อตกลงนี้เหมือนกับที่ใช้ในหนังสือเกี่ยวกับเรื่องนี้ ดูที่พรอมต์ของเชลล์ในแต่ละตัวอย่างอย่างละเอียด

คำสั่งและลำดับ

คุณอยู่ในตัวแปลคำสั่ง มาดูกันว่าคุณสามารถทำอะไรได้บ้างตอนนี้ หน้าที่หลักของล่ามคำสั่งคือการรันคำสั่งของคุณโดยที่คุณโต้ตอบกับระบบ Linux บนระบบ Linux (และ UNIX) คำสั่งจะประกอบด้วยชื่อคำสั่ง ตัวเลือก และพารามิเตอร์ คำสั่งบางคำสั่งไม่มีทั้งตัวเลือกหรือพารามิเตอร์ คำสั่งอื่นมีตัวเลือกแต่ไม่มีพารามิเตอร์ ในขณะที่คำสั่งอื่นๆ ไม่มีทั้งตัวเลือกหรือพารามิเตอร์

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

ทีมเอคโค่

คำสั่ง echo จะพิมพ์รายการอาร์กิวเมนต์ไปยังเทอร์มินัลตามที่แสดงในรายการที่ 3

รายการ 3 ตัวอย่างของคำสั่ง echo

$ เสียงสะท้อนคำ
คำ
$ echo และประโยค
และข้อเสนอ
$ echo ช่องว่างหายไปไหน?
พื้นที่หายไปไหน?
$ echo "ช่องว่างมาที่นี่" #และแสดงความคิดเห็น
และนี่คือช่องว่าง

ในตัวอย่างที่สามของรายการ 3 ช่องว่างทั้งหมดระหว่างคำในเอาต์พุตคำสั่งจะมีขนาดเท่ากัน หนึ่งช่องว่าง เพื่อหลีกเลี่ยงปัญหานี้ คุณจะต้องใส่สตริงในเครื่องหมายคำพูด โดยใช้เครื่องหมายคำพูดคู่ (“) หรือเครื่องหมายคำพูดเดี่ยว (') Bash ใช้อักขระตัวคั่น เช่น ช่องว่าง แถบ และสัญลักษณ์ บรรทัดใหม่เพื่อแยกสตริงอินพุตออกเป็นโทเค็น ซึ่งจะถูกส่งต่อไปยังทีมของคุณ การปิดสตริงในเครื่องหมายคำพูดจะระงับการแยก และทำให้เป็นโทเค็นเดียว ในตัวอย่างข้างต้น แต่ละโทเค็นหลังชื่อคำสั่งคือพารามิเตอร์ ดังนั้นเราจึงมีพารามิเตอร์ 1, 2, 4 และ 1 ตามลำดับ

คำสั่ง echo มีหลายตัวเลือก โดยทั่วไปแล้ว echo จะเพิ่มอักขระขึ้นบรรทัดใหม่หลังเอาต์พุต ใช้ตัวเลือก -n เพื่อไม่ให้เพิ่มอักขระขึ้นบรรทัดใหม่ ใช้ตัวเลือก -e เพื่อให้คำสั่งตีความลำดับการหลีกเลี่ยง

ลำดับการหลีกและการขึ้นบรรทัดใหม่

มีปัญหาเล็กน้อยเมื่อใช้แบ็กสแลชในทุบตี เมื่ออักขระแบ็กสแลช (\) ไม่ได้ถูกยกมา ตัวอักขระนั้นจะทำหน้าที่เป็นลำดับการหลีกเลี่ยงสำหรับ bash โดยคงความหมายของอักขระตัวถัดไป นี่เป็นสิ่งจำเป็นสำหรับอักขระเมตาพิเศษซึ่งเราจะดูในภายหลัง มีข้อยกเว้นประการหนึ่งสำหรับกฎนี้: แบ็กสแลชตามด้วยการขึ้นบรรทัดใหม่ทำให้ bash กลืนอักขระทั้งสองตัวและถือว่าลำดับเป็นคำขอต่อเนื่องของบรรทัด สิ่งนี้มีประโยชน์เมื่อแยกบรรทัดยาว โดยเฉพาะในสคริปต์

เพื่อให้ลำดับที่อธิบายไว้ข้างต้นได้รับการประมวลผลอย่างถูกต้องโดยคำสั่ง echo หรือหนึ่งในคำสั่งอื่นๆ ที่ใช้อักขระควบคุมการหลีกที่คล้ายกัน คุณต้องอ้างอิงลำดับการหลีกเลี่ยง หรือรวมไว้ในสตริงที่ยกมา หรือใช้แบ็กสแลชอื่นเพื่อรับ ถูกต้อง การตีความสัญลักษณ์ รายการ 4 มีตัวอย่างการใช้งาน \.

รายการ 4 ตัวอย่างการใช้เสียงสะท้อน

$ echo -n ไม่มีการขึ้นบรรทัดใหม่
ไม่มีการขึ้นบรรทัดใหม่$ echo -e "ไม่มีการขึ้นบรรทัดใหม่\c"
ไม่มีบรรทัดใหม่$ echo "บรรทัดที่คุณคลิก
> ใส่รหัส"
บรรทัดที่คุณคลิก
ใส่รหัส
$ echo -e "ขึ้นบรรทัดใหม่ด้วยอักขระหลีก"
สตริงที่มีอักขระหลีก
บรรทัดใหม่
$ echo "ขึ้นบรรทัดด้วยอักขระหลีกขึ้นบรรทัดใหม่ แต่ไม่มีตัวเลือก -e"
สตริงที่มีอักขระหลีกขึ้นบรรทัดใหม่ แต่ไม่มีตัวเลือก -e
$ echo -e MetaCharacters พร้อม double\\n\\tbackslash
Metaตัวละครที่มีสองเท่า
แบ็กสแลช
$ echo แบ็กสแลช \
> ตามด้วย Enter \
> ทำหน้าที่เป็นการร้องขอให้ดำเนินการต่อบรรทัด
แบ็กสแลชที่ตามด้วย Enter ทำหน้าที่เป็นคำขอเพื่อดำเนินการต่อบรรทัด

โปรดทราบว่า bash จะแสดงพรอมต์พิเศษ (>) เมื่อคุณพิมพ์สตริงด้วยเครื่องหมายคำพูดที่ไม่สิ้นสุด บรรทัดอินพุตของคุณตัดไปที่บรรทัดที่สองและมีอักขระขึ้นบรรทัดใหม่

ทุบตี meta character และคำสั่งควบคุม

Bash มีอักขระหลายตัวที่เมื่อไม่มีเครื่องหมายคำพูด จะทำหน้าที่แยกสตริงอินพุตออกเป็นคำด้วย นอกจากช่องว่างแล้ว สัญลักษณ์ดังกล่าวได้แก่ '|', '&', ';', '(', ')', '<’, и ‘>- เราจะพูดถึงสัญลักษณ์เหล่านี้บางส่วนโดยละเอียดในส่วนอื่นๆ ของคู่มือนี้ ในตอนนี้ โปรดทราบว่าหากคุณต้องการรวมอักขระเมตาเป็นส่วนหนึ่งของข้อความ คุณจะต้องอยู่ในเครื่องหมายคำพูดหรือนำหน้าด้วยแบ็กสแลช (\) ดังในรายการที่ 4

บรรทัดใหม่และอักขระ meta ที่เกี่ยวข้องหรือคู่ของอักขระ meta ยังทำหน้าที่เป็นคำสั่งควบคุม สัญลักษณ์ดังกล่าวคือ '||', '&&', '&', ';', ';;', '|' '(', และ ')'. คำสั่งควบคุมบางส่วนช่วยให้คุณสามารถสร้างลำดับหรือรายการคำสั่งได้

ลำดับคำสั่งที่ง่ายที่สุดประกอบด้วยสองคำสั่งที่คั่นด้วยเครื่องหมายอัฒภาค (;) แต่ละคำสั่งถัดไปจะถูกดำเนินการหลังจากคำสั่งก่อนหน้า ในสภาพแวดล้อมการเขียนโปรแกรมใดๆ คำสั่งจะส่งคืนโค้ดที่ระบุว่าโปรแกรมเสร็จสมบูรณ์ตามปกติหรือล้มเหลว โดยทั่วไปคำสั่ง Linux จะคืนค่า 0 หากสำเร็จ และไม่เป็นศูนย์หากไม่สำเร็จ คุณสามารถดำเนินการประมวลผลแบบมีเงื่อนไขได้โดยใช้ตัวดำเนินการควบคุม && และ || หากคุณแยกสองคำสั่งด้วยตัวดำเนินการควบคุม && คำสั่งที่สองจะถูกดำเนินการก็ต่อเมื่อคำสั่งแรกคืนค่าศูนย์เท่านั้น หากคุณแยกคำสั่งด้วย || คำสั่งที่สองจะถูกดำเนินการก็ต่อเมื่อคำสั่งแรกส่งคืนค่าที่ไม่ใช่ศูนย์ รายการ 5 มีลำดับคำสั่งบางอย่างโดยใช้คำสั่ง echo ตัวอย่างเหล่านี้ไม่น่าสนใจนักเนื่องจาก echo ส่งคืนค่า 0 แต่เราจะดูตัวอย่างเพิ่มเติมเมื่อเราเรียนรู้วิธีใช้คำสั่งเพิ่มเติม

รายการ 5. ลำดับคำสั่ง

$ เสียงสะท้อนบรรทัด 1; เสียงสะท้อนบรรทัด 2; เสียงสะท้อนสาย 3
บรรทัดที่ 1
บรรทัดที่ 2
บรรทัดที่ 3
$ สายสะท้อน 1&&สายสะท้อน 2&&สายสะท้อน 3
บรรทัดที่ 1
บรรทัดที่ 2
บรรทัดที่ 3
$ เสียงก้องบรรทัด 1||เสียงสะท้อนบรรทัด 2; เสียงสะท้อนสาย 3
บรรทัดที่ 1
บรรทัดที่ 3

คุณสามารถออกจากเชลล์ได้โดยใช้คำสั่ง exit นอกจากนี้ คุณยังสามารถระบุรหัสทางออกเป็นพารามิเตอร์ได้ หากคุณกำลังทำงานกับล่ามคำสั่งในหน้าต่างเทอร์มินัลในโหมดกราฟิก ในกรณีนี้มันจะปิดลง ในทำนองเดียวกัน หากคุณเชื่อมต่อกับระบบรีโมตโดยใช้ ssh หรือ telnet (ตัวอย่าง) การเชื่อมต่อจะล้มเหลว ในล่าม bash คุณสามารถกดได้ ปุ่ม Ctrlและ d สำหรับทางออก

ลองดูคำสั่งควบคุมอื่น หากคุณใส่คำสั่งหรือรายการคำสั่งไว้ในวงเล็บ คำสั่งหรือลำดับของคำสั่งจะถูกดำเนินการในสำเนาของเชลล์ ดังนั้นคำสั่ง exit จะออกจากสำเนาของเชลล์ ไม่ใช่จากเชลล์ที่คุณอยู่ในปัจจุบัน วิ่ง. รายการ 6 มีตัวอย่างง่ายๆ โดยใช้ && และ || ร่วมกัน

รายการ 6. เชลล์และลำดับคำสั่ง

$ (echo ในสำเนาของล่าม; ทางออก 0) && echo OK || echo ทางออกไม่ดี
ในสำเนาของล่าม
ตกลง
$ (echo ในสำเนาของล่ามทางออก 4) && echo OK || echo ทางออกไม่ดี
ในสำเนาของล่าม
ทางออกไม่ดี

คอยติดตามคำสั่งเพิ่มเติมในคู่มือนี้

ตัวแปรสภาพแวดล้อม

เมื่อรัน bash คุณจะถูกรายล้อมไปด้วยคอลเลกชันของการตั้งค่าที่ประกอบขึ้นเป็นสภาพแวดล้อมของคุณ เช่น รูปแบบของพรอมต์ ชื่อของโฮมไดเร็กตอรี่ของคุณ ไดเร็กทอรีการทำงานของคุณ ชื่อล่ามของคุณ ไฟล์ที่คุณเปิด ไฟล์ ฟังก์ชั่นที่คุณกำหนดไว้ และอื่นๆ สภาพแวดล้อมของคุณมีตัวแปรมากมายที่ทั้งคุณและ bash สามารถตั้งค่าได้ Bash ยังช่วยให้คุณสร้างตัวแปรเชลล์ที่คุณสามารถส่งออกไปยังสภาพแวดล้อมของคุณเพื่อใช้โดยกระบวนการอื่นที่ทำงานในล่ามหรือโดยล่ามอื่นที่คุณสามารถเรียกใช้จากล่ามปัจจุบัน

ทั้งตัวแปรสภาพแวดล้อมและตัวแปรเชลล์มีชื่อ คุณสามารถอ้างถึงค่าของตัวแปรได้โดยใส่เครื่องหมาย '$' หน้าชื่อตัวแปร ตัวแปรสภาพแวดล้อม bash ที่พบบ่อยที่สุดบางส่วนแสดงอยู่ในตารางที่ 4

  • ผู้ใช้เข้าสู่ระบบชื่อผู้ใช้
  • UID ID ดิจิทัลของผู้ใช้ที่เข้าสู่ระบบ
  • บ้านโฮมไดเร็กตอรี่ของผู้ใช้
  • P.W.D.ไดเร็กทอรีการทำงานปัจจุบัน
  • เปลือกชื่อเชลล์
  • $ รหัสกระบวนการ (หรือ PID) ของกระบวนการทุบตี (หรืออื่น ๆ )
  • พีไอดี ID ของกระบวนการที่เกิดขึ้น กระบวนการนี้(นั่นคือ ID ของกระบวนการหลัก)
  • ? รหัสออกคำสั่งสุดท้าย

ในรายการที่ 7 คุณจะเห็นตัวแปร bash บางตัว

รายการ 7. ตัวแปรสภาพแวดล้อมและเชลล์

$ echo $USER $UID
เอียน 500
$ echo $SHELL $HOME $PWD
/bin/bash /home/ian /home/ian
$ (ออก 0);echo $?;(ออก 4);echo $?
0
4
$ เสียงสะท้อน $$ $PPID
30576 30575

คุณสามารถสร้างหรือตั้งค่าตัวแปรเชลล์ได้โดยการพิมพ์เครื่องหมายเท่ากับ (=) ทันทีหลังชื่อตัวแปร ตัวแปรจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้น var1 และ VAR1 จึงเป็นตัวแปรสองตัวที่ต่างกัน ตามแบบแผน ตัวแปร โดยเฉพาะตัวแปรที่ส่งออก จะถูกเขียนลงไป ตัวพิมพ์ใหญ่แต่นี่ไม่ใช่ข้อกำหนดบังคับ อย่างเป็นทางการ $$ และ $? เป็นพารามิเตอร์ของเชลล์ ไม่ใช่ตัวแปร คุณสามารถอ้างอิงได้ แต่ไม่สามารถกำหนดค่าได้

เมื่อคุณสร้างตัวแปรเชลล์ คุณมักจะต้องการส่งออกตัวแปรดังกล่าวไปยังสภาพแวดล้อม เพื่อให้พร้อมใช้งานสำหรับกระบวนการอื่นๆ ที่คุณเรียกใช้จากเชลล์ ตัวแปรที่คุณส่งออกไม่พร้อมใช้งานสำหรับล่ามหลัก หากต้องการส่งออกตัวแปร ให้ใช้คำสั่งส่งออก เพื่อความสะดวก คุณสามารถกำหนดค่าและส่งออกตัวแปรได้ในขั้นตอนเดียว

เพื่อแสดงให้เห็นการมอบหมายงานและการส่งออก เรามาสร้าง bash อีกอันจาก bash Interpreter ปัจจุบัน จากนั้นจึงเรียกใช้ Korn Interpreter จาก (ksh) ที่สร้างขึ้น bash เราจะใช้คำสั่ง ps เพื่อแสดงข้อมูลเกี่ยวกับกระบวนการที่กำลังทำงานอยู่ เราจะเรียนรู้เพิ่มเติมเกี่ยวกับคำสั่ง ps เมื่อเราสำรวจแนวคิดเกี่ยวกับสถานะกระบวนการในภายหลังในบทช่วยสอนนี้

ไม่ได้ใช้ทุบตีเหรอ?

Bash เป็นล่ามเริ่มต้นในลีนุกซ์รุ่นต่างๆ หากคุณไม่ได้ทำงานกับ bash คุณอาจต้องการพิจารณา วิธีการดังต่อไปนี้เพื่อฝึกใช้ทุบตี

  • ใช้คำสั่ง
    chsh -s /bin/bash
    เพื่อเปลี่ยนล่ามเริ่มต้น การเปลี่ยนแปลงจะมีผลในครั้งถัดไปที่คุณเข้าสู่ระบบ
  • ทีม
    su – $USER -s /bin/bash
    จะสร้างกระบวนการอื่นที่จะเป็นลูกของล่ามคนปัจจุบันของคุณ กระบวนการใหม่จะเริ่มกระบวนการเข้าสู่ระบบด้วย bash shell
  • สร้างผู้ใช้ bash เพื่อเตรียมพร้อมสำหรับการสอบ LPI

รายการ 8 ตัวแปรสภาพแวดล้อมและเชลล์

$ PS -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -ทุบตี
$ทุบตี

PID PPID CMD
16353 30576 ทุบตี
$ VAR1=var1
$VAR2=var2
$ส่งออก VAR2
$ ส่งออก VAR3=var3
$VAR2 $VAR3
วาร์1 วาร์2 วาร์3
$ เสียงสะท้อน $VAR1 $VAR2 $VAR3 $SHELL
var1 var2 var3 /bin/bash
$ksh
$ PS -p $$ -o "pid ppid cmd"
PID PPID CMD
16448 16353 กิโลวัตต์
$ ส่งออก VAR4=var4
$ เสียงสะท้อน $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var2 var3 var4 /bin/bash
$ ออก
$ $ เสียงสะท้อน $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var1 var2 var3 /bin/bash
$ PS -p $$ -o "pid ppid cmd"
PID PPID CMD
16353 30576 ทุบตี
$ ออก
$ PS -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -ทุบตี
$ เสียงสะท้อน $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
/bin/ทุบตี

บันทึก:

  1. ที่จุดเริ่มต้นของลำดับนี้ ตัวแปล bash มี PID เป็น 30576
  2. ล่ามทุบตีตัวที่สองมี PID เท่ากับ 16353 และ PID หลักคือ 30576 นั่นคือทุบตีดั้งเดิม
  3. เราสร้างตัวแปร VAR1, VAR2 และ VAR3 ในอินสแตนซ์ที่สองของ bash แต่ส่งออกเฉพาะ VAR2 และ VAR3
  4. ในล่าม Korn เราได้สร้าง VAR4 คำสั่ง echo แสดงค่าของ VAR2, VAR3 และ VAR4 เท่านั้น และยืนยันว่า VAR1 ไม่ได้ถูกส่งออก คุณไม่แปลกใจเลยหรือที่ค่าของตัวแปร SHELL ไม่เปลี่ยนแปลงแม้ว่าพรอมต์จะเปลี่ยนไปก็ตาม คุณไม่สามารถพึ่งพา SHELL เพื่อกำหนดล่ามคนใดได้เสมอไป อยู่ระหว่างดำเนินการแต่คำสั่ง ps จะช่วยให้คุณสามารถระบุได้อย่างชัดเจนว่าอะไรคืออะไร โปรดทราบว่า ps ใส่ยัติภังค์ (-) ไว้หน้าอินสแตนซ์แรกของ bash เพื่อแจ้งให้เราทราบว่ามันคืออะไร เปลือกแหล่งที่มา.
  5. ในอินสแตนซ์ที่สองของ bash เราสามารถดู VAR1, VAR2 และ VAR3
  6. ท้ายที่สุด เมื่อเรากลับมาที่ล่ามดั้งเดิม ไม่มีตัวแปรตัวใดตัวหนึ่งอยู่ในนั้น

ก่อนหน้านี้เราได้พูดคุยถึงความเป็นไปได้ในการใช้ทั้งเครื่องหมายคำพูดเดี่ยวและคู่ มีความแตกต่างที่สำคัญระหว่างพวกเขา ล่ามทำการทดแทนตัวแปรเชลล์ระหว่างเครื่องหมายคำพูดคู่ ($) แต่จะไม่ทำการทดแทนหากใช้เครื่องหมายคำพูดเดี่ยว (') ในตัวอย่างก่อนหน้านี้ เราสร้างอินสแตนซ์ล่ามใหม่จากที่อื่น และได้รับรหัสกระบวนการใหม่ การใช้ตัวเลือก -คคุณสามารถส่งคำสั่งไปยังล่ามอื่นได้ ซึ่งจะรันคำสั่งและส่งคืน หากคุณส่งสตริงเป็นคำสั่งด้วยเครื่องหมายคำพูดเดี่ยว อินสแตนซ์ที่สองของล่ามจะตัดสตริงเหล่านั้นและประมวลผลสตริง โดยใช้ เครื่องหมายคำพูดคู่การทดแทนตัวแปรเกิดขึ้น ก่อนหน้านั้นวิธีการส่งสตริง ดังนั้นผลลัพธ์จึงอาจแตกต่างจากที่คุณคาดหวัง ล่ามและคำสั่งจะสร้างกระบวนการที่จะมี PID ของตัวเอง รายการที่ 9 แสดงให้เห็นถึงแนวคิดเหล่านี้ PID ของล่าม bash ดั้งเดิมอยู่ในแบบอักษรอื่น

รายการ 9. ราคาและตัวแปรเชลล์

$ เสียงสะท้อน "$SHELL" "$SHELL" "$$" "$$"
/bin/bash $SHELL 19244 $$
$ bash -c "echo ขยายในพาเรนต์ $$ $PPID"
ขยายในพาเรนต์ 19244 19243
$ bash -c "echo ขยายในเด็ก $$ $PPID"
ขยายในเด็ก 19297 19244

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

รายการ 10. การใช้เครื่องหมายปีกกากับชื่อตัวแปร

$ echo "-$HOME/abc-"
-/home/ian/abc-
$ เสียงสะท้อน "-$HOME_abc-"
--
$ เสียงสะท้อน "-$(HOME)_abc-"
-/home/ian_abc-

คำสั่ง env

คำสั่ง env โดยไม่มีตัวเลือกหรือพารามิเตอร์ใดๆ จะแสดงตัวแปรสภาพแวดล้อมปัจจุบัน คุณยังสามารถใช้เพื่อรันคำสั่งในสภาพแวดล้อมที่กำหนดไว้ล่วงหน้าได้ ตัวเลือก -i (หรือเพียงแค่ -) จะล้างสภาพแวดล้อมปัจจุบันก่อนดำเนินการคำสั่ง ในขณะที่ตัวเลือก -u จะล้างตัวแปรสภาพแวดล้อมที่คุณไม่ต้องการให้ส่งผ่าน

รายการ 11 มีเอาต์พุตบางส่วนของคำสั่ง env โดยไม่มีพารามิเตอร์ใดๆ ตามด้วยสามตัวอย่างที่เรียกใช้ล่ามที่แตกต่างกันโดยไม่มีสภาพแวดล้อมหลัก โปรดตรวจสอบอย่างรอบคอบก่อนที่เราจะหารือเกี่ยวกับพวกเขา

รายการ 11. คำสั่ง env

$env
HOSTNAME=ตัวตุ่น
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1,000
SSH_CLIENT=9.27.89.137 4339 22
SSH_TTY=/dev/pts/2
USER=เอียน
...
_=/bin/env
OLDPWD=/usr/src
$ env -i bash -c "echo $SHELL; env"
/bin/ทุบตี
PWD=/home/ian
SHLVL=1
_=/bin/env
$ env -i ksh -c "echo $SHELL; env"
_=/bin/env
PATH=/bin:/usr/bin
$ env -i tcsh -c "echo $SHELL; env"
SHELL: ตัวแปรที่ไม่ได้กำหนด

โปรดทราบว่า bash ตั้งค่าตัวแปร SHELL แต่ไม่ได้ส่งออกไปยังสภาพแวดล้อม แม้ว่า bash จะสร้างตัวแปรอื่นอีกสามตัวในสภาพแวดล้อมก็ตาม ในตัวอย่าง ksh เรามีตัวแปรสภาพแวดล้อมสองตัว แต่ความพยายามของเราในการแสดงค่าของตัวแปร SHELL ส่งผลให้เกิดบรรทัดว่าง สุดท้าย tcsh ไม่ได้สร้างตัวแปรสภาพแวดล้อมใดๆ และเกิดข้อผิดพลาดเมื่อเราพยายามรับค่าของตัวแปร SHELL

การตั้งค่าและการล้างตัวแปร

รายการ 11 แสดงให้เห็นว่าล่ามมีพฤติกรรมอย่างไรเมื่อประมวลผลตัวแปรและสภาพแวดล้อม แม้ว่าคู่มือนี้จะเน้นที่ bash แต่คุณควรทราบว่าล่ามบางตัวอาจไม่ทำงานเหมือนกัน ยิ่งไปกว่านั้น ล่ามยังมีพฤติกรรมที่แตกต่างกันไป ขึ้นอยู่กับว่าเป็นเชลล์ดั้งเดิมหรือไม่ สำหรับตอนนี้ เราจะบอกว่าเชลล์เริ่มต้นคือเชลล์ที่คุณได้รับเมื่อคุณเข้าสู่ระบบ คุณสามารถเรียกใช้เชลล์อื่นเพื่อให้พวกมันทำงานเหมือนเชลล์ดั้งเดิมได้หากต้องการ ล่ามทั้งสามตัวในตัวอย่างข้างต้น ซึ่งเปิดใช้ด้วยคำสั่ง env -i ไม่ใช่ล่ามดั้งเดิม ลองส่งตัวเลือก -l เพื่อดูความแตกต่างเมื่อรันเชลล์ดั้งเดิม

มาดูความพยายามของเราในการแสดงค่าของตัวแปร SHELL ในเชลล์เหล่านี้:

  • เมื่อ bash เริ่มต้น มันจะตั้งค่าตัวแปร SHELL แต่ไม่ได้ส่งออกไปยังสภาพแวดล้อมโดยอัตโนมัติ
  • เมื่อ ksh เริ่มต้น มันไม่ได้ตั้งค่าตัวแปร SHELL อย่างไรก็ตาม การอ้างอิงถึงตัวแปรสภาพแวดล้อมที่ไม่ได้กำหนดจะเทียบเท่ากับการอ้างอิงไปยังค่าว่าง
  • เมื่อ tcsh เริ่มต้น มันไม่ได้ตั้งค่าของตัวแปร SHELL ในกรณีนี้ ลักษณะการทำงานเริ่มต้นจะแตกต่างจาก ksh (และ bash) และส่งผลให้เกิดข้อผิดพลาดเกิดขึ้นเมื่อเราพยายามเข้าถึงตัวแปร

คุณสามารถใช้คำสั่ง unset เพื่อล้างตัวแปรและลบออกจากรายการตัวแปรเชลล์ หากมีการส่งออกตัวแปรไปยังสภาพแวดล้อม ตัวแปรนั้นจะถูกลบออกจากสภาพแวดล้อมด้วย คุณสามารถใช้คำสั่ง set เพื่อควบคุมพฤติกรรมของ bash (หรือล่ามอื่น ๆ ) Set เป็นคำสั่งในตัวของล่าม ดังนั้นตัวเลือกจึงขึ้นอยู่กับล่ามนั้นๆ ใน bash ตัวเลือก -u จะบอก bash ว่าอย่าสร้างข้อผิดพลาดเมื่ออ้างถึงตัวแปรที่ไม่ได้กำหนด แต่ให้ถือว่าตัวแปรเหล่านั้นเป็นค่าว่าง คุณสามารถเพิ่มตัวเลือกต่างๆ เพื่อตั้งค่าด้วย – และปิดการใช้งานด้วย + คุณสามารถแสดงรายการตัวเลือกชุดปัจจุบันด้วย echo $-

รายการ 12. ยกเลิกการตั้งค่าและตั้งค่า

$เอคโค$-
เขาBH
$ เอคโค $VAR1
$set -u;เอคโค$-
ฮิมูบีเอช
$ เอคโค $VAR1
bash: VAR1: ตัวแปรที่ไม่ได้ผูกไว้
$VAR1=v1
$VAR1=v1;เอคโค $VAR1
เวอร์ชัน 1
$unset VAR1;echo $VAR1
bash: VAR1: ตัวแปรที่ไม่ได้ผูกไว้
$ ชุด +u;echo $VAR1;echo $-
เขาBH

คุณสามารถใช้คำสั่ง set โดยไม่มีตัวเลือกใดๆ ซึ่งจะแสดงตัวแปรเชลล์ทั้งหมดและค่าของมัน (ถ้ามี) นอกจากนี้ยังมีคำสั่งอื่นประกาศซึ่งคุณสามารถสร้างส่งออกและแสดงค่าของตัวแปรเชลล์ได้ คุณสามารถเรียนรู้เกี่ยวกับตัวเลือกอื่นๆ สำหรับชุดและประกาศคำสั่งในหน้าคู่มือ เราจะดูที่หน้าคนในส่วนนี้ในภายหลัง

คำสั่งผู้บริหาร

คำสั่งสุดท้ายที่เราจะดูในส่วนนี้คือ exec คุณสามารถใช้คำสั่ง exec เพื่อรันคำสั่งอื่นที่จะแทนที่ล่ามปัจจุบัน รายการ 13 จะสร้างอินสแตนซ์ bash จากนั้นใช้ exec เพื่อแทนที่ด้วยตัวแปล Korn หลังจากออกจากล่าม Korn คุณจะกลับสู่ล่าม bash ดั้งเดิม (PID 22985 ในตัวอย่างนี้)

รายการ 13. การใช้ exec

$ เสียงสะท้อน $$
22985
$ทุบตี
$ เสียงสะท้อน $$
25063
$ ผู้บริหาร ksh
$ เสียงสะท้อน $$
25063
$ ออก
$ เสียงสะท้อน $$
22985

ประวัติทีม

หากคุณได้พิมพ์คำสั่งในขณะที่อ่านคู่มือ คุณอาจสังเกตเห็นว่ามีการใช้คำสั่งเดียวกันเกือบทั้งหมดบ่อยครั้ง ข่าวดีก็คือ bash สามารถเก็บประวัติคำสั่งของคุณได้ ตามค่าเริ่มต้น ประวัติจะถูกเปิดใช้งาน คุณสามารถปิดการใช้งานได้ด้วยคำสั่ง set +o history และเปิดใช้งานด้วยคำสั่ง set -o history ตัวแปรสภาพแวดล้อม HISTSIZE จะบอก bash ว่าต้องจัดเก็บกี่แถว คุณสมบัติอื่นๆ ชุดหนึ่งเป็นตัวกำหนดพฤติกรรมและการดำเนินการของเรื่องราว ดูหน้า bash man สำหรับรายละเอียด

หากคุณพิมพ์คำสั่งในขณะที่คุณอ่านคู่มือ คุณอาจสังเกตเห็นว่ามีการใช้คำสั่งเดียวกันเกือบทั้งหมดบ่อยครั้ง ข่าวดีก็คือ bash สามารถเก็บประวัติคำสั่งของคุณได้ ตามค่าเริ่มต้น ประวัติจะถูกเปิดใช้งาน คุณสามารถปิดการใช้งานได้ด้วยคำสั่ง set +o history และเปิดใช้งานด้วยคำสั่ง set -o history ตัวแปรสภาพแวดล้อม HISTSIZE จะบอก bash ว่าต้องจัดเก็บกี่แถว คุณสมบัติอื่นๆ ชุดหนึ่งเป็นตัวกำหนดพฤติกรรมและการดำเนินการของเรื่องราว ดูหน้า bash man สำหรับรายละเอียด

ต่อไปนี้เป็นคำสั่งบางส่วนที่คุณสามารถใช้เพื่อทำงานกับประวัติ:

ประวัติศาสตร์
แสดงประวัติทั้งหมด
ประวัติศาสตร์N
แสดง N บรรทัดสุดท้ายของประวัติของคุณ
ประวัติศาสตร์ -dN
ลบบรรทัด N ออกจากประวัติของคุณ ซึ่งสามารถใช้ได้ในกรณีที่คุณต้องการลบบรรทัดที่มีรหัสผ่าน
!!
คำสั่งสุดท้ายของคุณเข้ามา
!น
ทีมประวัติศาสตร์ที่ N
!-น
คำสั่งที่อยู่ห่างจากคำสั่งปัจจุบันในประวัติศาสตร์ถึง N ก้าว (!-1 เทียบเท่า!!)
!#
คำสั่งปัจจุบันที่คุณกำลังพิมพ์
!สตริง
คำสั่งล่าสุดที่ขึ้นต้นด้วยสตริง
!?เชือก?
คำสั่งล่าสุดที่มีสตริง

คุณสามารถใช้เครื่องหมายโคลอน (:) ตามด้วยค่าเฉพาะเพื่อเข้าถึงหรือเปลี่ยนแปลงคำสั่งในประวัติได้ รายชื่อ 14 แสดงให้เห็นถึงความเป็นไปได้บางประการในประวัติศาสตร์

รายการ 14. การจัดการประวัติศาสตร์

$ เสียงสะท้อน $$
22985
$ env -i ทุบตี -c "echo $$"
1542
$ !!
env -i ทุบตี -c "echo $$"
1555
$!อีซี
เสียงสะท้อน $$
22985
$ !th:s/$$/$PPID/
env -i bash -c "echo $PPID"
22985
$ประวัติศาสตร์ 6
1,097 เสียงสะท้อน $$
1,098 env -i ทุบตี -c "echo $$"
1,099 env -i ทุบตี -c "echo $$"
1100 เสียงสะท้อน $$
1101 env -i ทุบตี -c "echo $PPID"
1102 ประวัติศาสตร์ 6
$ประวัติศาสตร์ -d1100

คำสั่งในรายการ 14 ทำดังต่อไปนี้:

1. ส่งออก PID ของล่ามปัจจุบัน
2. รันคำสั่ง echo ในอินสแตนซ์ใหม่ของล่ามและพิมพ์ PID
3. รันคำสั่งสุดท้าย
4. รันคำสั่งอีกครั้งโดยขึ้นต้นด้วย 'ec'; คำสั่งแรกในตัวอย่างนี้จะทำงาน
5. เรียกใช้คำสั่งสุดท้ายที่ขึ้นต้นด้วย 'en' แต่แทนที่ '$PPID' ด้วย '$$' ดังนั้น PID หลักจะปรากฏขึ้นจริง
6. แสดงคำสั่งประวัติ 6 รายการล่าสุด
7. ลบคำสั่งหมายเลข 1100 เสียงสะท้อนคำสั่งสุดท้าย

คุณสามารถแก้ไขเรื่องราวแบบโต้ตอบได้ ล่ามทุบตีใช้ไลบรารี readline เพื่อจัดการคำสั่งและการแก้ไขประวัติ ตามค่าเริ่มต้น คีย์และคีย์ผสมที่ใช้ในการเลื่อนดูประวัติหรือบรรทัดแก้ไขจะเหมือนกับคีย์ที่ใช้ในโปรแกรมแก้ไข GNU Emacs ใน Emacs การกดคีย์ผสมมักจะเขียนเป็น C-x หรือ M-x โดยที่ x คือคีย์ปกติ และ C และ M คือคีย์ Control และ Meta ตามลำดับ บนพีซีทั่วไป ปุ่ม Ctrl จะสอดคล้องกับปุ่ม Emacs Control และปุ่ม Alt จะสอดคล้องกับปุ่ม Meta คุณสมบัติเพิ่มเติม ตลอดจนความสามารถในการกำหนดค่าตัวเลือกโดยใช้ไฟล์เริ่มต้นการอ่านไลน์ (โดยปกติคือ inputrc ในโฮมไดเร็กตอรี่ของคุณ) สามารถพบได้ใน man page

หากคุณต้องการควบคุมประวัติในโหมด vi ให้ใช้คำสั่ง set -o vi เพื่อสลับไปที่โหมด vi คุณสามารถเปลี่ยนกลับไปเป็นโหมด emacs ได้โดยใช้คำสั่ง set -o emacs เมื่อคุณแยกคำสั่งในโหมด vi คุณจะอยู่ในโหมดแทรก vi ในตอนแรก

เส้นทาง

คำสั่ง bash บางคำสั่งมีอยู่แล้วภายใน ในขณะที่คำสั่งอื่นๆ เป็นคำสั่งภายนอก ตอนนี้เรามาดูคำสั่งภายนอกและวิธีการรัน รวมถึงวิธีแยกแยะคำสั่งภายใน

ล่ามมองหาคำสั่งที่ไหน?

คำสั่งภายนอกแสดงถึงไฟล์ในระบบไฟล์ ส่วนการจัดการไฟล์อย่างง่ายของคู่มือนี้และบทช่วยสอนหัวข้อ 104 มีรายละเอียดเพิ่มเติม บนระบบ Linux และ UNIX ไฟล์ทั้งหมดเป็นส่วนหนึ่งของแผนผังขนาดใหญ่ซึ่งมีรูทเป็น / ในตัวอย่างข้างต้น ไดเร็กทอรีปัจจุบันของเราคือโฮมไดเร็กทอรีของผู้ใช้ สำหรับผู้ใช้ทั่วไป โฮมไดเร็กทอรีจะอยู่ในไดเร็กทอรี /home ซึ่งก็คือ /home/ian ในกรณีของฉัน โฮมไดเร็กตอรี่ของ Root คือ /root หลังจากที่คุณพิมพ์คำสั่ง bash จะค้นหาคำสั่งนั้นในรายการไดเร็กทอรีการค้นหาเริ่มต้น ซึ่งเป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งจัดเก็บไว้ในตัวแปรสภาพแวดล้อม PATH

หากคุณต้องการทราบว่าคำสั่งใดที่จะถูกดำเนินการหากคุณพิมพ์บรรทัดใดบรรทัดหนึ่ง ให้ใช้คำสั่ง which หรือ type รายการ 15 แสดงเส้นทางเริ่มต้นของฉันรวมถึงตำแหน่งของคำสั่งต่างๆ

รายการ 15. การค้นหาตำแหน่งคำสั่ง

$ เสียงสะท้อน $ PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/ian/bin
$ ซึ่งทุบตี env zip xclock echo set ls
นามแฝง ls = "ls --color = tty"
/bin/ls
/bin/ทุบตี
/bin/env
/usr/bin/zip
/usr/X11R6/bin/xclock
/bin/เอคโค่
/usr/bin/ซึ่ง: ไม่ได้ตั้งค่าใน (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/b
ใน:/home/ian/bin)
$ ประเภท bash env zip xclock echo set ls
bash คือ /bin/bash
env คือ /bin/env
zip คือ /usr/bin/zip.zip
xclock คือ /usr/X11R6/bin/xclock
echo เป็นเชลล์ในตัว
set เป็นเชลล์บิวท์อิน
ls มีนามแฝงว่า `ls --color=tty"

โปรดทราบว่าไดเร็กทอรีทั้งหมดในพาธจะลงท้ายด้วย /bin นี่เป็นแบบแผนทั่วไป แต่ไม่ใช่ข้อกำหนด คำสั่งใดรายงานเราว่าคำสั่ง ls เป็นนามแฝงและไม่พบคำสั่ง set ในกรณีนี้ สามารถตีความได้ว่าคำสั่งไม่มีอยู่หรือเป็นแบบบิวท์อิน คำสั่ง type บอกเราว่าคำสั่ง ls จริงๆ แล้วเป็นนามแฝง และยังกำหนดด้วยว่าคำสั่ง set นั้นเป็นคำสั่งในตัวของล่าม เธอยังบอกอีกว่ามีคำสั่ง echo ในตัว และยังมีคำสั่งใน /bin ด้วย ซึ่งเราพบว่าใช้คำสั่ง which คำสั่งทั้งสองให้ผลลัพธ์ที่แตกต่างกัน

เราได้เห็นแล้วว่าคำสั่ง ls ที่ใช้ในการดูเนื้อหาของไดเร็กทอรีนั้นเป็นนามแฝงจริงๆ นามแฝงเป็นวิธีที่สะดวกในการใช้คำสั่งกับชุดตัวเลือกต่างๆ หรือเป็นเพียงชื่ออื่นของคำสั่ง ในตัวอย่างของเรา ตัวเลือก –color=tty ทำให้รายการไฟล์ไดเร็กทอรีถูกเน้น ขึ้นอยู่กับประเภทของไฟล์และไดเร็กทอรี ลองใช้ dircolors –print-database เพื่อดูรหัสสีรวมถึงสีที่ใช้สำหรับไฟล์ประเภทใดประเภทหนึ่ง

แต่ละคำสั่งเหล่านี้มี ตัวเลือกเพิ่มเติม- คุณสามารถใช้คำสั่งใดคำสั่งหนึ่งก็ได้ ขึ้นอยู่กับความต้องการของคุณ ฉันชอบใช้ which เมื่อฉันมั่นใจว่าจะหาไฟล์ปฏิบัติการได้และต้องการเส้นทางแบบเต็ม คำสั่ง type ให้มากกว่านั้น ข้อมูลที่ถูกต้องซึ่งบางครั้งฉันต้องการในสคริปต์

การรันคำสั่งอื่นๆ

ในรายการ 15 เราเห็นว่าเส้นทางแบบเต็มของไฟล์ปฏิบัติการเริ่มต้นที่ไดเร็กทอรีราก / ตัวอย่างเช่น โปรแกรม xclock จริงๆ แล้วคือ /usr/X11R6/bin/xclock ซึ่งเป็นไฟล์ที่อยู่ในไดเร็กทอรี /usr/X11R6/bin หากโปรแกรมไม่อยู่ในตัวแปร PATH คุณสามารถรันได้โดยการระบุพาธแบบเต็มไปยังโปรแกรมและตัวโปรแกรมเอง คุณสามารถใช้เส้นทางได้สองประเภท:

  • เส้นทางสัมบูรณ์ที่ขึ้นต้นด้วย / เช่นที่เราเห็นในรายการ 15 (/bin/bash, /bin/env และอื่นๆ)
  • เส้นทางสัมพัทธ์คือเส้นทางที่สัมพันธ์กับไดเร็กทอรีการทำงานปัจจุบันของคุณ ซึ่งสามารถรับชื่อได้โดยใช้คำสั่ง pwd คำสั่งดังกล่าวไม่ได้ขึ้นต้นด้วย / แต่อย่างน้อยต้องมีหนึ่งตัว / ตัวอักษร

คุณสามารถใช้เส้นทางที่แน่นอนโดยไม่คำนึงถึงไดเร็กทอรีการทำงานปัจจุบันของคุณ แต่อาจต้องการใช้เส้นทางสัมพัทธ์เมื่อคำสั่งอยู่ใกล้กับไดเร็กทอรีปัจจุบัน สมมติว่าคุณกำลังพัฒนาเวอร์ชันใหม่ของโปรแกรม "Hello World!" แบบคลาสสิก ในไดเรกทอรีย่อย mytestbin ของโฮมไดเร็กตอรี่ของคุณ คุณอาจต้องการใช้เส้นทางสัมพัทธ์และรันคำสั่งเป็น mytestbin/hello มีชื่อพิเศษสองชื่อที่คุณสามารถใช้ได้ในเส้นทาง จุดเดียว (.) หมายถึงไดเร็กทอรีปัจจุบัน และคู่ของจุด (..) ที่อ้างอิงถึงไดเร็กทอรีหลักของไดเร็กทอรีปัจจุบัน เนื่องจากโฮมไดเร็กตอรี่ของคุณไม่ได้อยู่ในตัวแปรสภาพแวดล้อม PATH (และไม่ควรเป็นเช่นนั้น) คุณจะต้องระบุพาธที่ชัดเจนไปยังไฟล์ที่คุณต้องการเรียกใช้จากโฮมไดเร็กตอรี่ของคุณ ตัวอย่างเช่น หากคุณมีสำเนาของโปรแกรม hello อยู่ในโฮมไดเร็กตอรี่ของคุณ คุณสามารถใช้คำสั่ง ./hello เพื่อรันโปรแกรมได้ คุณสามารถใช้ทั้งสองอย่างได้ และ.. เป็นส่วนหนึ่งของเส้นทางสัมบูรณ์แม้ว่าจะเป็นเส้นทางเดียวก็ไม่มีประโยชน์มากในกรณีนี้ คุณสามารถใช้เครื่องหมายทิลเดอ (~) เพื่ออ้างถึงโฮมไดเร็กตอรี่ของคุณ และ ~ชื่อผู้ใช้เพื่ออ้างถึงโฮมไดเร็กตอรี่ของชื่อผู้ใช้ ดูตัวอย่างที่ 16

รายการ 16 เส้นทางสัมบูรณ์และสัมพัทธ์

$ /bin/echo ใช้คำสั่ง echo แทนที่จะใช้บิวด์อิน
ใช้คำสั่ง echo แทนที่จะใช้บิวด์อิน
$ /usr/../bin/echo รวม parent dir ไว้ในพาธ
รวม parent dir ไว้ในเส้นทาง
$ /bin/././echo เพิ่มส่วนประกอบเส้นทางที่ไม่มีประโยชน์สองสามรายการ
เพิ่มองค์ประกอบเส้นทางที่ไม่มีประโยชน์สองสามรายการ
$ pwd # ดูว่าเราอยู่ที่ไหน
/home/ian
$ ../../bin/echo ใช้เส้นทางสัมพันธ์เพื่อสะท้อน
ใช้เส้นทางสัมพัทธ์เพื่อสะท้อน
$ myprogs/hello # ใช้เส้นทางสัมพันธ์ที่ไม่มีจุด
-bash: myprogs/hello: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
$ mytestbin/hello # ใช้เส้นทางสัมพันธ์ที่ไม่มีจุด
สวัสดีชาวโลก!
$ ./hello # รันโปรแกรมในไดเร็กทอรีปัจจุบัน
สวัสดีชาวโลก!
$ ~/mytestbin/hello # วิ่งสวัสดีโดยใช้ ~
สวัสดีชาวโลก!
$ ../hello # ลองเรียกใช้สวัสดีจากผู้ปกครอง
-bash: ../hello: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

การเปลี่ยนไดเร็กทอรีการทำงาน

เช่นเดียวกับที่คุณสามารถรันโปรแกรมจากไดเร็กทอรีต่างๆ คุณสามารถเปลี่ยนไดเร็กทอรีการทำงานปัจจุบันโดยใช้คำสั่ง cd อาร์กิวเมนต์ของ cd ต้องเป็นเส้นทางแบบสัมบูรณ์หรือแบบสัมพันธ์ไปยังไดเร็กทอรี ในคำสั่ง คุณยังสามารถใช้ ., .., ~ และ ~username เมื่อระบุพาธ หากคุณพิมพ์ cd โดยไม่มีพารามิเตอร์ คุณจะไปที่โฮมไดเร็กตอรี่ของคุณ การส่งผ่านพารามิเตอร์เดียว (-) หมายถึงการไปที่ไดเร็กทอรีการทำงานก่อนหน้า โฮมไดเร็กตอรี่ถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อม HOME และไดเร็กทอรีก่อนหน้าจะถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อม OLDPWD ดังนั้น cd จึงเทียบเท่ากับ cd $HOME และ cd ก็เทียบเท่ากับ cd $OLDPWD เรามักจะพูดคุยสั้น ๆ เกี่ยวกับการเปลี่ยนไดเร็กทอรีแทนที่จะเปลี่ยนไดเร็กทอรีการทำงานปัจจุบันทั้งหมด

สำหรับคำสั่ง มี CDPATH ตัวแปรสภาพแวดล้อมที่มีรายการไดเร็กทอรีที่คั่นด้วยโคลอนที่ควรค้นหา (นอกเหนือจากไดเร็กทอรีการทำงานปัจจุบัน) เมื่อแก้ไขเส้นทางสัมพัทธ์ หากโซลูชันใช้เส้นทางจาก CDPATH cd จะพิมพ์เส้นทางแบบเต็มของไดเร็กทอรีที่พบเป็นเอาต์พุต โดยปกติแล้วการเปลี่ยนแปลงไดเร็กทอรีที่ประสบความสำเร็จจะมาพร้อมกับคำเชิญใหม่หรือคำเชิญที่มีการแก้ไขเล็กน้อย ตัวอย่างบางส่วนแสดงอยู่ในรายการ 17

รายการ 17. การเปลี่ยนไดเร็กทอรี

$ซีดี/;pwd
$ ซีดี /usr/X11R6;pwd
/usr/X11R6
$ซีดี ;pwd
/home/ian
$ซีดี -;pwd
/usr/X11R6
/usr/X11R6
$ cd ~ian/..;pwd
/บ้าน
$ซีดี ~;pwd
/home/ian
$ ส่งออก CDPATH=~
$ซีดี/;pwd
$ ซีดี mytestbin
/home/ian/mytestbin

การใช้คำสั่งแบบวนซ้ำ

คำสั่ง Linux จำนวนมากสามารถนำไปใช้ซ้ำกับไฟล์ทั้งหมดในแผนผังไดเร็กทอรี ตัวอย่างเช่น คำสั่ง ls มีตัวเลือก -R เพื่อแสดงรายการไดเร็กทอรีแบบวนซ้ำ และคำสั่ง cp, mv, rm และ diff มีตัวเลือก -r เพื่อใช้งานแบบวนซ้ำ

การทดแทนคำสั่ง

ทุบตีมีอย่างมาก โอกาสอันทรงพลังถ่ายโอนผลลัพธ์ของโปรแกรมหนึ่งไปยังอินพุตของอีกโปรแกรมหนึ่ง สิ่งนี้เรียกว่าการทดแทนคำสั่ง คุณสามารถทำได้โดยการล้อมรอบคำสั่งที่คุณต้องการผลลัพธ์ด้วยเครื่องหมายอะพอสทรอฟี (`) เมื่อใช้คำสั่งที่ซ้อนกันหลายคำสั่ง คุณสามารถใส่คำสั่งระหว่าง $(และ)

ในบทช่วยสอนก่อนหน้านี้ “LPI 101: การติดตั้ง Linux และการจัดการแพ็คเกจ” เราเห็นว่าคำสั่ง rpm สามารถบอกได้ว่าแพ็คเกจใดเป็นเจ้าของคำสั่งใด มันสะดวกที่จะใช้การทดแทนคำสั่งที่นี่ ตอนนี้คุณรู้แล้วว่าเราทำอย่างนั้นจริงๆ

การทดแทนคำสั่งเป็นเครื่องมืออันล้ำค่าเมื่อเขียนสคริปต์และเมื่อใช้บนบรรทัดคำสั่ง รายการ 18 แสดงตัวอย่างวิธีรับเส้นทางไดเร็กทอรีแบบสัมบูรณ์จากไดเร็กทอรีแบบสัมพัทธ์ วิธีค้นหาแพ็คเกจที่มีคำสั่ง /bin/echo และวิธีการดูเลเบลของสามพาร์ติชันบนฮาร์ดไดรฟ์ (ในฐานะรูท) หลังใช้คำสั่ง seq เพื่อสร้างลำดับของจำนวนเต็ม

รายการ 18 การทดแทนคำสั่ง

$ echo "../../usr/bin" dir คือ $(cd ../../usr/bin;pwd)
../../usr/bin dir คือ /usr/bin
$ซึ่งสะท้อน
/bin/เอคโค่
$ rpm -qf `ซึ่งสะท้อน`
sh-utils-2.0.12-3
$ซู -
รหัสผ่าน:
# สำหรับ n ใน $(seq 7 9); ทำ echo p$n `e2label /dev/hda$n`;done
p7 RH73
p8 SUSE81
ภาพ p9

หน้าคน

ในส่วนสุดท้ายของคู่มือนี้ เราจะดูวิธีการขอความช่วยเหลือ ทีมลินุกซ์การใช้ man page และเอกสารประเภทอื่นๆ

หน้าคนและส่วนต่างๆ

แหล่งที่มาของเอกสารหลัก (และแบบดั้งเดิม) คือหน้า man ซึ่งสามารถเข้าถึงได้โดยใช้คำสั่ง man รูปที่ 1 แสดง man page สำหรับคำสั่ง man ใช้คำสั่ง man man เพื่อรับข้อมูลนี้

รูปที่ 1 แสดงรายการ man page ทั่วไปบางรายการ:

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

คุณยังสามารถค้นหาส่วนต่างๆ เกี่ยวกับการใช้งาน วิธีรายงานข้อผิดพลาด ข้อมูลผู้เขียน และรายการคำสั่งอื่นๆ เช่น man page ของ man บอกว่ามี คำสั่งเพิ่มเติม(และคู่มือของพวกเขา):

เกี่ยวกับ (1) คืออะไร (1) น้อยกว่า (1) groff (1) และ man.conf (5)

โดยปกติแล้ว man page จะมี 8 ส่วนเหมือนกัน ปกติเพจส่วนใหญ่จะถูกติดตั้งตอนติดตั้งแพ็คเกจ ดังนั้นหากไม่ได้ติดตั้งแพ็คเกจ คุณก็จะพลาด man page ของมันไปอย่างแน่นอน นอกจากนี้ บางส่วนของหน้าอาจว่างเปล่าหรือเกือบว่างเปล่า ที่สุด ส่วนทั่วไปหน้าคนคือ:

1. คำสั่งผู้ใช้ (env, ls, echo, mkdir, tty)
2. การเรียกของระบบหรือฟังก์ชันเคอร์เนล (ลิงก์, sethostname, mkdir)
3. ฟังก์ชั่นไลบรารี (acosh, asctime, btree, locale, XML::Parser)
4. ข้อมูลอุปกรณ์ (isdn_audio, เมาส์, tty, ศูนย์)
5. คำอธิบายรูปแบบไฟล์ (keymaps, motd, wvdial.conf)
6. เกม (โปรดทราบว่าขณะนี้เกมจำนวนมากทำงานในโหมดกราฟิก ดังนั้นอาจมีระบบช่วยเหลือของตัวเองมากกว่าหน้าคู่มือ)
7. เบ็ดเตล็ด (arp, boot, regex, unix utf8)
8. การบริหารระบบ(debugfs, fdisk, fsck, mount, renice, rpm)

ส่วนอื่นๆ อาจรวมถึง 9 สำหรับเอกสารเกี่ยวกับ เคอร์เนลลินุกซ์, สำหรับเอกสารใหม่ o สำหรับเอกสารเก่า และ l สำหรับเอกสารในเครื่อง

บางรายการอาจปรากฏในหลายส่วน ตัวอย่างของเราแสดงให้เห็นว่า mkdir มีอยู่ในส่วนที่ 1 และ 2 และ tty ในส่วนที่ 1 และ 4 คุณสามารถกำหนดส่วนเฉพาะได้ เช่น man 4 tty หรือ man 2 mkdir หรือคุณสามารถใช้ตัวเลือก -a เพื่อแสดงรายการ man ทั้งหมด ส่วน -หน้า

คุณจะสังเกตได้จากภาพว่าผู้ชายมีตัวเลือกมากมายให้คุณพิจารณาด้วยตัวเอง ในตอนนี้ เรามาดูส่วน "ดูเพิ่มเติม" ของคำสั่งที่เกี่ยวข้องกับมนุษย์กันก่อน

ดูสิ่งนี้ด้วย

คำสั่งที่สำคัญที่สุดสองคำสั่งที่เกี่ยวข้องกับมนุษย์คือคำสั่งอะไรและคำสั่งที่เกี่ยวข้อง คำสั่ง whatis ค้นหาชื่อที่คุณระบุใน man page และแสดงข้อมูลเกี่ยวกับชื่อจาก man page ที่เกี่ยวข้อง คำสั่ง apropos ค้นหาคีย์เวิร์ดใน man page และส่งคืนคีย์เวิร์ดที่มีคำของคุณ รายการ 19 แสดงคำสั่งเหล่านี้

รายการ 19. ตัวอย่างคำสั่ง whatis และ apropos

$ผู้ชายคืออะไร
man (1) - จัดรูปแบบและแสดงหน้าคู่มือออนไลน์
man (7) - มาโครเพื่อจัดรูปแบบหน้าคน
man (1) - จัดรูปแบบและแสดงหน้าคู่มือออนไลน์
man.conf (5) - ข้อมูลการกำหนดค่าสำหรับมนุษย์
$mkdir คืออะไร
mkdir (1) - สร้างไดเรกทอรี

$ ประมาณ mkdir
mkdir (1) - สร้างไดเรกทอรี
mkdir(2) - สร้างไดเร็กทอรี
mkdirhier (1x) - สร้างลำดับชั้นของไดเรกทอรี

อย่างไรก็ตาม หากคุณไม่พบหน้า man สำหรับ man.conf ให้ลองเรียกใช้ man man.conf ig

คำสั่ง man จะปรากฏขึ้น โปรแกรมพิเศษเอาท์พุทหน้า บนระบบ Linux ส่วนใหญ่ โปรแกรมนี้จะน้อยกว่า อีกทางเลือกหนึ่งอาจเป็นโปรแกรมรุ่นเก่ากว่า หากคุณต้องการพิมพ์เพจ ให้ระบุอ็อพชัน -t เพื่อจัดรูปแบบเพจและพิมพ์โดยใช้โปรแกรม groff หรือ troff

โปรแกรมเอาต์พุตที่น้อยกว่ามีหลายคำสั่งที่ช่วยให้ค้นหาสตริงในข้อความที่แสดงได้ง่ายขึ้น ใช้ man less เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ / (การค้นหาไปข้างหน้า), ? (การค้นหาย้อนหลัง) และ n (สำหรับการค้นหาครั้งล่าสุดที่ดำเนินการ) รวมถึงคำสั่งอื่นๆ อีกมากมาย

แหล่งเอกสารอื่นๆ

นอกจาก man page ที่สามารถเข้าถึงได้จากบรรทัดคำสั่งแล้ว Free Software Foundation ยังได้สร้างอีกด้วย จำนวนมากไฟล์ข้อมูลที่ได้รับการประมวลผล โปรแกรมข้อมูล- มีความสามารถในการนำทางที่ยอดเยี่ยม รวมถึงความสามารถในการย้ายไปยังส่วนอื่นด้วย พิมพ์ข้อมูลคนหรือข้อมูลข้อมูลที่จะได้รับ ข้อมูลมากกว่านี้- คำสั่งบางคำสั่งไม่ได้ถูกบันทึกไว้ในข้อมูล ดังนั้นคุณสามารถใช้ทั้งหน้าคู่มือและข้อมูลได้

มีหลายอย่าง อินเทอร์เฟซแบบกราฟิกไปยังหน้า man เช่น xman (จากโครงการ XFree86) และ yelp (เบราว์เซอร์ช่วยเหลือ Gnome 2.0)

หากคุณไม่พบความช่วยเหลือสำหรับคำสั่ง ให้ลองเรียกใช้คำสั่งด้วยตัวเลือก –help ด้วยวิธีนี้คุณอาจค้นพบสิ่งที่คุณต้องการหรือรับคำใบ้ที่คุณสามารถดูได้

ส่วนถัดไปเกี่ยวกับการประมวลผลสตรีมข้อความโดยใช้ตัวกรอง