Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

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

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

1. ใช้เทอร์มินัลเฉพาะ

วิธีแรกในการจัดการกับสิ่งนี้คือการใช้ Terminal ที่รองรับการบันทึกเอาต์พุตไปยังไฟล์ ตัวอย่างเช่น เทอร์มินัล Konsole ที่มาพร้อมกับการติดตั้ง KDE มาตรฐานจะมีตัวเลือกในการเขียนเอาต์พุตไปยังไฟล์

ในการทำเช่นนั้น กดปุ่ม “ไฟล์” ในแถบเมนูแล้วคลิก “บันทึกผลลัพธ์เป็น … “

วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

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

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

วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

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

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

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

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

echo "maketecheasier" > hello.txt

ฉันสั่ง echo โปรแกรมที่จะส่งออกคำว่า "maketecheasier" จากนั้นเพิ่ม > ตัวดำเนินการเช่นเดียวกับชื่อไฟล์ สิ่งนี้บอกให้เชลล์ UNIX เขียนเอาต์พุตไปยังไฟล์ “hello.txt” แทนที่จะพิมพ์ไปที่หน้าจอ

วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

3. ที

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

ลองพิจารณาตัวอย่างต่อไปนี้:

echo "maketecheasier" | tee hello.txt
วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

ที่นี่ แทนที่จะใช้การเปลี่ยนเส้นทางเอาต์พุต ฉันไปป์ (| ) ส่งออกไปยัง tee .

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

4. สคริปต์

อีกวิธีในการดึงเอาต์พุตจากเทอร์มินัลคือผ่าน script ซึ่งเป็นโปรแกรม Linux ในตัวที่บันทึกทุกสิ่งที่คุณพิมพ์ในเทอร์มินัลตลอดจนเอาต์พุต

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

ในการใช้งาน ให้รันคำสั่งต่อไปนี้:

script filename.txt
วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

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

Script started on 2022-03-27 18:02:29+08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"]
[?2004h[ balaraw:~ ]$ ls
[?2004l
Desktop    Downloads  mail  News  pods  [01;34mdocuments  hello.txt  Mail  pics  tmp   vids
[?2004h[ balaraw:~ ]$ exit
[?2004l
exit
 
Script done on 2022-03-27 18:03:19+08:00 [COMMAND_EXIT_CODE="0"]

สคริปต์ประกอบด้วยการกดปุ่มและอักขระควบคุมทั้งหมดที่คุณกด ในกรณีของฉัน มันรวมปุ่ม "ล่องหน" ทั้งหมดที่ฉันกด รวมทั้ง Tab และ Backspace กดปุ่ม

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

วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

5. การจับภาพเทอร์มินัลเฟรมบัฟเฟอร์

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

ในการจับภาพอุปกรณ์ framebuffer ให้รันคำสั่งต่อไปนี้ขณะอยู่ใน teletype:

cat /dev/fb0 > capture.raw
วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

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

ดังนั้น วิธีหนึ่งที่จะจัดการกับสิ่งนี้คือการใช้โปรแกรมของบริษัทอื่น เช่น fbgrab การดำเนินการนี้จะดึงหน้าจอโทรพิมพ์ปัจจุบันจากอุปกรณ์เฟรมบัฟเฟอร์แล้วทิ้งลงในไฟล์ PPM หรือ PNG

การติดตั้ง fbgrab นั้นค่อนข้างตรงไปตรงมาเช่นกัน ในการแจกแจงแบบใช้ Debian และ Ubuntu คุณสามารถใช้ apt:

sudo apt install fbgrab

สำหรับ Arch Linux ให้เรียกใช้ pacman:

sudo pacman -S fbgrab
วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

การใช้ fbgrab เพื่อจับเอาท์พุตเทอร์มินัล

เมื่อติดตั้งแล้ว ให้วางที่โทรพิมพ์โดยกด Control + กะ + Alt + F3 จากนั้นเรียกใช้ fbcat หรือ fbgrab .

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

ในการจับภาพโดยใช้โปรแกรม fbcat ให้รันคำสั่งต่อไปนี้:

fbcat > capture.ppm
วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

การดำเนินการนี้จะดึงหน้าจอที่แสดงอยู่ในปัจจุบันและดัมพ์เนื้อหาในไฟล์ capture.ppm

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

ในการจับภาพโดยใช้โปรแกรม fbgrab ให้รันคำสั่งต่อไปนี้:

sudo fbgrab -c 3 capture.png
วิธีบันทึกเทอร์มินัลเอาท์พุตไปยังไฟล์ใน Linux

นี่จะคว้าหน้าจอโทรพิมพ์ที่สามและบันทึกไว้ในไฟล์ capture.png

หากคุณกำลังมองหาคำแนะนำเพิ่มเติมสำหรับเทอร์มินัล Linux โปรดดูที่กล่าวถึงการส่งอีเมลจากบรรทัดคำสั่ง

คำถามที่พบบ่อย

1. ช่วย! Fbgrab ไม่ทำงาน รูปภาพเป็นเพียงสีดำหรือว่างเปล่า

อาจเป็นเพราะ fbgrab ใช้อุปกรณ์ framebuffer อื่นเพื่อจับภาพเอาต์พุตของเทอร์มินัล ตรวจสอบอุปกรณ์เฟรมบัฟเฟอร์ปัจจุบันที่ระบบใช้โดยแสดงรายการโฟลเดอร์ “/dev”

ls /dev

จากที่นั่น ให้มองหาอุปกรณ์ “/dev/fbX” โดยปกติ Linux จะใช้ “/dev/fb0” สำหรับเฟรมบัฟเฟอร์ อย่างไรก็ตาม หากระบบของคุณใช้ framebuffer อื่น เช่น “/dev/fb1” คุณสามารถส่งคำสั่งต่อไปนี้เพื่อบอกให้ fbgrab ดึงจาก framebuffer นั้นแทน:

fbgrab -d 1 capture.png

2. เป็นไปได้ไหมที่จะดึงเนื้อหาของไฟล์ที่ฉันเขียนเป็นอินพุตไปยังโปรแกรม

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

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

[1] cat test.txt | program
[2] program < test.txt
  • ตัวอย่างแรกเรียกโปรแกรม cat เพื่อโหลดข้อความ จากนั้นโหลดตัวดำเนินการไพพ์ที่มีเอาต์พุต cat และไพพ์ไปยังโปรแกรมของคุณ
  • ในทางกลับกัน ตัวอย่างที่สองเรียกโปรแกรมของคุณทันที จากนั้นเลือก < โอเปอเรเตอร์ ซึ่งใช้อาร์กิวเมนต์ถัดไปเป็นอินพุต

3. มีวิธีบังคับให้สคริปต์จับเฉพาะผลลัพธ์ของคำสั่งหรือไม่

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

script -c "your-command" test.txt

-c flag บอกให้โปรแกรมสคริปต์รันโปรแกรมเท่านั้น:your-command จากนั้นจะเขียนเอาต์พุตลงในไฟล์ข้อความชื่อ test.txt