Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

Master Linux Terminal:คำแนะนำจากผู้เชี่ยวชาญเกี่ยวกับการวางท่อและการเปลี่ยนเส้นทาง

Master Linux Terminal:คำแนะนำจากผู้เชี่ยวชาญเกี่ยวกับการวางท่อและการเปลี่ยนเส้นทาง

อินเทอร์เฟซบรรทัดคำสั่งใน Linux มอบวิธีที่มีประสิทธิภาพในการทำงานต่างๆ บนระบบของคุณ เนื่องจากรากฐานของมัน Linux จึงมีคุณสมบัติมากมายที่รวมอยู่ในเทอร์มินัล

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

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

ข้อกำหนดเบื้องต้น

เพื่อให้เข้าใจคู่มือนี้อย่างถ่องแท้ คุณจะต้องมี:

เป็นอย่างน้อย
  • ความเข้าใจพื้นฐานเกี่ยวกับระบบปฏิบัติการ Linux
  • ประสบการณ์พื้นฐานในการทำงานกับบรรทัดคำสั่ง Linux
  • เข้าถึงบรรทัดคำสั่ง Linux เพื่อลองใช้คำสั่ง

ดูบทช่วยสอนบรรทัดคำสั่ง Linux นี้หากคุณเป็นมือใหม่หรือต้องการทบทวน

Piping ใน Linux คืออะไร

ก่อนที่เราจะเจาะลึกว่าการวางท่อหมายถึงอะไรก่อน Piping คือการกำหนดทิศทางเอาต์พุตของคำสั่ง Linux หนึ่งคำสั่งให้เป็นอินพุตไปยังคำสั่งอื่น คุณสามารถกำหนดทิศทางเอาต์พุตมาตรฐานหรือข้อผิดพลาดมาตรฐานจากคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่งได้โดยใช้การวางท่อ

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

หากคุณยังใหม่ต่อแนวคิดเรื่อง metaCharacters นี่เป็นเพียงชื่อแฟนซีสำหรับอักขระที่มีความหมายพิเศษในบรรทัดคำสั่ง มีอักขระเมตาอื่น ๆ ใน Linux นอกเหนือจากไพพ์ (|) ตัวอย่างทั่วไป ได้แก่ น้อยกว่า (<) มากกว่า (>) และเครื่องหมายแอมเปอร์แซนด์ (&) เป็นต้น

พื้นฐานของการวางท่อ

ไวยากรณ์พื้นฐานของการใช้ 07 คำสั่งจะเป็นดังนี้:

command1 | command2 | command3 | ... | commandN

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

ตัวอย่างการวางท่อ

ด้านล่างนี้คือตัวอย่างการใช้ 58 คำสั่งให้ทำงานต่างๆ

1. การนับจำนวนไฟล์และไดเร็กทอรี

ls -l | wc -l

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

ผลลัพธ์ของ 94 คำสั่งจะถูกส่งไปยังส่วนที่สอง 108 คำสั่งนับจำนวนบรรทัดจากเอาต์พุตของ 113 คำสั่งในส่วนแรกและพิมพ์ผลลัพธ์ไปยังเทอร์มินัล

2. การเรียงลำดับรายการไฟล์และไดเร็กทอรี

ls | sort

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

3. จัดเรียงและแสดงคำที่ไม่ซ้ำจากไฟล์

cat words.txt | sort -r | uniq

ตัวอย่างที่สามประกอบด้วยคำสั่งแยกกันสามคำสั่งที่เชื่อมต่อกันด้วยสองไพพ์ คำสั่งแรกส่งออกเนื้อหาของ 145 ไฟล์ซึ่งมีรายการคำศัพท์

เอาต์พุตถูกส่งไปยัง 156 คำสั่งซึ่งเรียงลำดับคำตามลำดับตัวอักษรย้อนกลับ สุดท้าย คำที่เรียงลำดับแล้วจะถูกส่งไปที่ 169 คำสั่ง ซึ่งจะลบคำที่ซ้ำกันและส่งออกคำที่เรียงลำดับไม่ซ้ำกัน

ทำไมและเมื่อใดที่คุณควรใช้ Command Piping Linux

Piping ใช้เวลามากกว่าแค่รู้ไวยากรณ์ ไวยากรณ์ค่อนข้างง่าย หากต้องการใช้การวางท่ออย่างมีประสิทธิภาพ คุณควรเข้าใจสาระสำคัญของมัน

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

การวางท่อไม่ได้หมายถึงการเป็นวิธีการเชื่อมโยงคำสั่งที่ไม่เกี่ยวข้องซึ่งคุณต้องการดำเนินการตามลำดับ หากคุณต้องการทำเช่นนั้น ให้เขียนคำสั่งของคุณในเทอร์มินัลแล้วคั่นด้วยเครื่องหมายอัฒภาค (;) โดยใช้ไวยากรณ์ต่อไปนี้:

command1 ; command2 ; ... ; commandN

การเปลี่ยนเส้นทางใน Linux คืออะไร

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

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

เช่นเดียวกับการไพพ์ Linux จัดเตรียมอักขระพิเศษเพื่อทำการเปลี่ยนเส้นทาง ต่อไปนี้คืออักขระการเปลี่ยนเส้นทางไฟล์ที่สำคัญใน Linux และหน้าที่ของอักขระเหล่านี้:

  • 173 – กำหนดทิศทางเอาต์พุตของคำสั่งไปยังไฟล์ที่กำหนด
  • 183 – กำหนดทิศทางเนื้อหาของไฟล์ที่กำหนดไปยังคำสั่ง
  • 195 – กำหนดทิศทางเอาต์พุตของคำสั่งไปยังไฟล์ที่กำหนด ผนวกเอาต์พุตหากมีไฟล์อยู่และมีเนื้อหา
  • 207 – ส่งข้อความแสดงข้อผิดพลาดจากคำสั่งไปยังไฟล์ที่กำหนด
  • 216 – ส่งข้อความแสดงข้อผิดพลาดจากคำสั่งไปยังไฟล์ที่กำหนด ผนวกข้อความแสดงข้อผิดพลาดหากไฟล์มีอยู่และมีเนื้อหา
  • 222 – กำหนดทิศทางเอาต์พุตมาตรฐานและข้อผิดพลาดไปยังไฟล์ที่กำหนด
  • 235 – กำหนดทิศทางเอาต์พุตมาตรฐานและข้อผิดพลาดไปยังไฟล์ที่กำหนด ต่อท้ายไฟล์หากมีอยู่และมีเนื้อหา

มาดูอักขระการเปลี่ยนเส้นทางไฟล์แต่ละตัวในเชิงลึก

1. การเปลี่ยนเส้นทางเอาต์พุตด้วย 248

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

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

คุณสามารถดำเนินการเปลี่ยนเส้นทางเอาต์พุตได้โดยใช้ไวยากรณ์ต่อไปนี้:

command > file

ผลลัพธ์ของการรัน 266 จะถูกเขียนไปที่ 275 แทนเอาต์พุตมาตรฐาน (หรืออีกนัยหนึ่งคือพิมพ์ไปยังเทอร์มินัล) ต่อไปนี้คือตัวอย่างวิธีที่คุณสามารถเปลี่ยนเส้นทางเอาต์พุต:

ls -a > contents.txt

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

2. การเปลี่ยนเส้นทางเอาต์พุตด้วย 299

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

ไวยากรณ์จะเป็นดังนี้:

command >> file

นี่คือตัวอย่างการใช้การเปลี่ยนเส้นทางเอาต์พุตด้วย 331 เพื่อดำเนินการเหมือนเดิม:

ls -a >> contents.txt

3. การเปลี่ยนเส้นทางอินพุตด้วย 348

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

command < file

นี่คือตัวอย่างของการใช้การเปลี่ยนเส้นทางอินพุต:

wc -w < files.txt

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

wc -w files.txt

4. เกิดข้อผิดพลาดในการเปลี่ยนเส้นทางด้วย 397 และ 400

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

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

ls nonexistent 2> error.txt

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

หากคุณต้องเพิ่มข้อผิดพลาดต่อท้ายไฟล์ที่มีอยู่แทนที่จะเขียนทับเนื้อหา ให้ใช้ 439 แทนที่จะเป็น 444 .

5. เอาต์พุตและการเปลี่ยนเส้นทางข้อผิดพลาดด้วย 457 และ 466

แทนที่จะเลือกว่าจะเปลี่ยนเส้นทางเอาต์พุตมาตรฐานหรือข้อผิดพลาดมาตรฐานไปยังไฟล์ 473 ช่วยให้คุณสามารถเปลี่ยนเส้นทางทั้งสองพร้อมกันได้ คุณสามารถนึกถึง 489 เป็นการชวเลขสำหรับการรวมอักขระการเปลี่ยนเส้นทางเอาต์พุต (>) และการเปลี่ยนเส้นทางข้อผิดพลาด (2>)

ไวยากรณ์ของการใช้ 490 เป็นดังนี้:

command &> output.txt

ข้อผิดพลาดหรือเอาต์พุตของ 504 ถูกเขียนไปที่ 519 ไฟล์. นี่คือตัวอย่าง:

ls sample &> output.txt

ในคำสั่งด้านบน ถ้า 520 ไดเรกทอรีไม่พร้อมใช้งานหรือพร้อมใช้งาน แต่คุณไม่มีสิทธิ์ในการอ่าน ข้อผิดพลาดที่เหมาะสมจะถูกเขียนใน 533 ไฟล์. แต่หากมีอยู่และคุณมีสิทธิ์ในการอ่าน เนื้อหาจะถูกส่งออกใน 545 ไฟล์.

ใช้ 559 อนุญาตให้คุณผนวกเอาต์พุตเข้ากับไฟล์หากมีอยู่และมีเนื้อหา

วิธีการรวม Piping และการเปลี่ยนเส้นทางเพื่อปลดปล่อยพลังของ Command Line

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

ใช้คำสั่งต่อไปนี้เป็นตัวอย่าง:

ls | grep ".txt" > text_files.txt

561 คำสั่งแสดงรายการเนื้อหาของไดเร็กทอรีปัจจุบัน เอาต์พุตถูกส่งไปยัง 579 คำสั่งกรองไฟล์ข้อความ สุดท้ายผลลัพธ์ของ 586 คำสั่งถูกเปลี่ยนเส้นทางไปที่ 591 ไฟล์.

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

บทสรุป

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

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

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น