อินเทอร์เฟซบรรทัดคำสั่งใน 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
อย่างไรก็ตาม คุณควรใช้ความระมัดระวังเมื่อเขียนลงไฟล์ที่มีอยู่ เนื่องจากเนื้อหาจะถูกเขียนทับโดยไม่มีคำเตือน
คุณสามารถดำเนินการเปลี่ยนเส้นทางเอาต์พุตได้โดยใช้ไวยากรณ์ต่อไปนี้:
ผลลัพธ์ของการรัน
ในคำสั่งข้างต้น รายการของรายการในไดเร็กทอรีปัจจุบัน (รวมถึง dotfiles, ไดเร็กทอรี และไฟล์) จะถูกเขียนไปที่
ไวยากรณ์จะเป็นดังนี้:
นี่คือตัวอย่างการใช้การเปลี่ยนเส้นทางเอาต์พุตด้วย
นี่คือตัวอย่างของการใช้การเปลี่ยนเส้นทางอินพุต:
ในตัวอย่างข้างต้น เรากำลังส่งผ่าน
เมื่อทำงานบนบรรทัดคำสั่ง คุณอาจพบข้อผิดพลาด ตัวอย่างเช่น หากคุณต้องการรันไฟล์โดยไม่มีการอนุญาตที่เหมาะสม แทนที่จะปล่อยให้เทอร์มินัลแสดงข้อผิดพลาดโดยการพิมพ์ คุณสามารถใช้อักขระการเปลี่ยนเส้นทางข้อผิดพลาดเพื่อกำหนดว่าข้อความแสดงข้อผิดพลาดควรไปที่ใด
ตำแหน่งที่ดีในการเปลี่ยนเส้นทางข้อผิดพลาดคือไฟล์สำหรับจัดเก็บข้อผิดพลาดโดยเฉพาะ นี่คือตัวอย่างง่ายๆ ของคำสั่งที่พยายามเข้าถึงรายการไฟล์ในไดเร็กทอรีที่ไม่มีอยู่:
ในตัวอย่างข้างต้น เทอร์มินัลจะส่งข้อผิดพลาดเนื่องจากไม่มีไฟล์ชื่อ
หากคุณต้องเพิ่มข้อผิดพลาดต่อท้ายไฟล์ที่มีอยู่แทนที่จะเขียนทับเนื้อหา ให้ใช้
แทนที่จะเลือกว่าจะเปลี่ยนเส้นทางเอาต์พุตมาตรฐานหรือข้อผิดพลาดมาตรฐานไปยังไฟล์
ไวยากรณ์ของการใช้
ข้อผิดพลาดหรือเอาต์พุตของ
ในคำสั่งด้านบน ถ้า
ใช้
การใช้การวางท่อและการเปลี่ยนเส้นทางร่วมกันช่วยให้คุณดำเนินการที่ซับซ้อนได้โดยไม่ต้องยกของหนัก เมื่อเรียนรู้วิธีรวมทั้งสองเข้าด้วยกัน คุณจะสามารถสร้างคำสั่งที่ซับซ้อนเพื่อดำเนินการต่างๆ ได้โดยใช้การพิมพ์น้อยลง ป>
ใช้คำสั่งต่อไปนี้เป็นตัวอย่าง:
ตัวอย่างที่เรียบง่ายแต่ทรงพลังนี้แสดงให้เห็นว่าเมื่อพูดถึงการไพพ์และการเปลี่ยนเส้นทาง ขีดจำกัดเพียงอย่างเดียวคือความคิดของคุณ
ในบทช่วยสอนนี้ คุณได้เรียนรู้พื้นฐานของการวางท่อและการเปลี่ยนเส้นทางใน Linux เราได้กล่าวถึงพื้นฐานพร้อมตัวอย่างวิธีการใช้ทั้งสองอย่าง ป>
คุณลักษณะทั้งสองที่แยกจากกันอาจมีประสิทธิภาพมาก แต่คุณสามารถดำเนินการต่อไปได้โดยการรวมคุณสมบัติทั้งสองไว้ในคำสั่งของคุณ ดังที่แสดงไว้ในส่วนสุดท้าย
เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น 252รหัส> สัญลักษณ์ช่วยให้คุณสามารถเปลี่ยนเส้นทางเอาต์พุตของคำสั่งไปยังไฟล์บางไฟล์ได้ เมื่อใช้สัญลักษณ์ คุณสามารถเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ที่มีอยู่ได้ หากไม่มีอยู่ อักขระการเปลี่ยนเส้นทางเอาต์พุตจะสร้างอักขระใหม่โดยอัตโนมัติ ป> command > file
266 จะถูกเขียนไปที่ 275 แทนเอาต์พุตมาตรฐาน (หรืออีกนัยหนึ่งคือพิมพ์ไปยังเทอร์มินัล) ต่อไปนี้คือตัวอย่างวิธีที่คุณสามารถเปลี่ยนเส้นทางเอาต์พุต:ls -a > contents.txt
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 ไฟล์. ป> บทสรุป