เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | เนื้อหา | ถัดไป>

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

การเปลี่ยนเส้นทาง I/O ช่วยให้เรากำหนดตำแหน่งเอาต์พุตมาตรฐานใหม่ได้ ในการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์อื่นแทนหน้าจอ เราใช้ตัวดำเนินการเปลี่ยนเส้นทาง “>” ตามด้วยชื่อไฟล์ ทำไมเราต้องการทำเช่นนี้? การเก็บเอาท์พุตของคำสั่งในไฟล์มักจะเป็นประโยชน์ ตัวอย่างเช่น เราสามารถบอกให้เชลล์ส่งผลลัพธ์ของ ls คำสั่งไปยังไฟล์ ls-output.txt แทนหน้าจอ:


[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt

[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt


ที่นี่ เราได้สร้างรายการยาวของ / usr / bin ไดเร็กทอรีและส่งผลไปยังไฟล์

ls-output.txt ลองตรวจสอบผลลัพธ์ที่เปลี่ยนเส้นทางของคำสั่ง:


[me@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 ฉัน ฉัน 167878 2016-02-01 15:07 ls-output.txt

[me@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 ฉัน ฉัน 167878 2016-02-01 15:07 ls-output.txt


ดี; ไฟล์ข้อความขนาดใหญ่ที่สวยงาม ถ้าเราดูไฟล์ด้วย น้อยลง,เราจะเห็นว่าไฟล์

ls-output.txt มีผลลัพธ์จากคำสั่ง ls ของเราอย่างแน่นอน:


[me@linuxbox ~]$ ls-output.txt น้อยกว่า

[me@linuxbox ~]$ ls-output.txt น้อยกว่า


ตอนนี้ มาทำการทดสอบการเปลี่ยนเส้นทางซ้ำกัน แต่คราวนี้เป็นการบิดเบี้ยว เราจะเปลี่ยนชื่อไดเร็กทอรีเป็นไดเร็กทอรีที่ไม่มีอยู่:



[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls: ไม่สามารถเข้าถึง /bin/usr: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls: ไม่สามารถเข้าถึง /bin/usr: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


เราได้รับข้อความแสดงข้อผิดพลาด สิ่งนี้สมเหตุสมผลเนื่องจากเราระบุไดเร็กทอรีที่ไม่มีอยู่จริง /bin/usrแต่ทำไมข้อความแสดงข้อผิดพลาดจึงปรากฏบนหน้าจอแทนที่จะถูกเปลี่ยนเส้นทางไปยังไฟล์ ls-output.txt? คำตอบก็คือ ls โปรแกรมไม่ส่งข้อความแสดงข้อผิดพลาดไปยังเอาต์พุตมาตรฐาน เช่นเดียวกับโปรแกรม Unix ที่เขียนอย่างดีส่วนใหญ่ มันส่งข้อความแสดงข้อผิดพลาดไปยังข้อผิดพลาดมาตรฐาน เนื่องจากเราเปลี่ยนเส้นทางเฉพาะเอาต์พุตมาตรฐานและไม่ใช่ข้อผิดพลาดมาตรฐาน จึงยังคงส่งข้อความแสดงข้อผิดพลาดไปที่หน้าจอ จะดูยังไง

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


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



[me@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 ฉัน ฉัน 0 2016-02-01 15:08 ls-output.txt

[me@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 ฉัน ฉัน 0 2016-02-01 15:08 ls-output.txt


ไฟล์ตอนนี้มีความยาวเป็นศูนย์! เนื่องจากเมื่อเราเปลี่ยนเส้นทางเอาต์พุตด้วยตัวดำเนินการเปลี่ยนเส้นทาง “>” ไฟล์ปลายทางจะถูกเขียนใหม่ตั้งแต่ต้นเสมอ ตั้งแต่เรา ls คำสั่งไม่สร้างผลลัพธ์และมีเพียงข้อความแสดงข้อผิดพลาด การดำเนินการเปลี่ยนเส้นทางเริ่มเขียนไฟล์ใหม่แล้วหยุดลงเนื่องจากข้อผิดพลาด ส่งผลให้มีการตัดทอน อันที่จริง หากเราจำเป็นต้องตัดทอนไฟล์จริง ๆ (หรือสร้างไฟล์ใหม่ที่ว่างเปล่า) เราสามารถใช้เคล็ดลับดังนี้:



[me@linuxbox ~]$ > ls-output.txt

[me@linuxbox ~]$ > ls-output.txt


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

ดังนั้นเราจะผนวกเอาท์พุตที่เปลี่ยนเส้นทางไปยังไฟล์แทนที่จะเขียนทับไฟล์ตั้งแต่ต้นได้อย่างไร สำหรับสิ่งนั้น เราใช้ตัวดำเนินการเปลี่ยนเส้นทาง “>>” เช่น:



[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt

[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt


การใช้ตัวดำเนินการ “>>” จะส่งผลให้ผลลัพธ์ถูกผนวกเข้ากับไฟล์ หากไม่มีไฟล์อยู่ ไฟล์จะถูกสร้างขึ้นเหมือนกับว่ามีการใช้ตัวดำเนินการ “>” มาทดสอบกัน:



[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 ฉัน ฉัน 503634 2016-02-01 15:45 ls-output.txt

[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 ฉัน ฉัน 503634 2016-02-01 15:45 ls-output.txt


เราทำซ้ำคำสั่งสามครั้งส่งผลให้ไฟล์เอาต์พุตมีขนาดใหญ่ขึ้นสามเท่า


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: