เทอร์มินัลคือหัวใจของระบบลินุกซ์ ทุกโปรแกรมที่ทำงานใน Linux กำลังทำงานอยู่ใต้บรรทัดคำสั่งของเทอร์มินัล ซึ่งรวมถึงโปรแกรมขนาดใหญ่ เช่น เว็บเบราว์เซอร์ และแม้แต่โปรแกรมธรรมดาๆ เช่น โปรแกรมแก้ไขข้อความ ดังนั้น การใช้เทอร์มินัลอย่างถูกต้องจึงเป็นขั้นตอนสำคัญหากคุณต้องการทำความเข้าใจวิธีการทำงานของระบบปฏิบัติการ
ด้วยสิ่งนี้ ในขณะที่ทำงานบนเทอร์มินัล Linux คุณอาจต้องการบันทึกเอาต์พุตเทอร์มินัลของคำสั่งไปยังไฟล์ ไฟล์นี้อาจใช้เป็นข้อมูลสำหรับการดำเนินการอื่นหรือเพื่อบันทึกกิจกรรมของเทอร์มินัล บทความนี้จะสอนห้าวิธีในการบันทึกเอาต์พุตเทอร์มินัลไปยังไฟล์
1. ใช้เทอร์มินัลเฉพาะ
วิธีแรกในการจัดการกับสิ่งนี้คือการใช้ Terminal ที่รองรับการบันทึกเอาต์พุตไปยังไฟล์ ตัวอย่างเช่น เทอร์มินัล Konsole ที่มาพร้อมกับการติดตั้ง KDE มาตรฐานจะมีตัวเลือกในการเขียนเอาต์พุตไปยังไฟล์
ในการทำเช่นนั้น กดปุ่ม “ไฟล์” ในแถบเมนูแล้วคลิก “บันทึกผลลัพธ์เป็น … “
ซึ่งจะเป็นการเปิดหน้าต่างโต้ตอบซึ่งคุณสามารถบันทึกเอาต์พุตของเทอร์มินัลได้ จากที่นั่น คุณสามารถเลือกตำแหน่งที่คุณต้องการบันทึกไฟล์ได้
คุณยังสามารถบันทึกผลลัพธ์ของคำสั่งในเทอร์มินัล GNOME ได้อีกด้วย เพียงคลิกขวาที่เทอร์มินัลแล้วกด “คัดลอกเอาต์พุตเป็น HTML” จากนั้นจะโหลดข้อความเทอร์มินัลลงในคลิปบอร์ดของคุณ จากที่นั่น คุณสามารถวางลงในโปรแกรมแก้ไขข้อความใดก็ได้
2. การเปลี่ยนเส้นทางเอาต์พุต
อีกวิธีในการจัดการกับสิ่งนี้คือการใช้ตัวดำเนินการในตัวของเชลล์ UNIX ฟังก์ชันเหล่านี้เป็นฟังก์ชันเริ่มต้นใน Linux และสามารถเปลี่ยนเส้นทางเอาต์พุตข้อความของโปรแกรมไปยังไฟล์ได้ มีโอเปอเรเตอร์สามตัวที่สามารถทำได้:
- The
>
โอเปอเรเตอร์จะสร้างหรือแทนที่เนื้อหาของไฟล์ด้วยผลลัพธ์ของโปรแกรมของคุณ สิ่งนี้มีประโยชน์หากคุณต้องการดัมพ์และดูผลลัพธ์ปัจจุบันของโปรแกรมของคุณเป็นไฟล์เดียวกัน - The
>>
ตัวดำเนินการจะสร้างไฟล์ด้วยผลลัพธ์ของโปรแกรมของคุณ อย่างไรก็ตาม โอเปอเรเตอร์นี้จะเพิ่มเฉพาะเอาต์พุตแทนการแทนที่ สิ่งนี้มีประโยชน์หากคุณต้องการดัมพ์ผลลัพธ์ของโปรแกรมของคุณอย่างต่อเนื่องเป็นไฟล์เดียว - สุดท้าย
2>
ตัวดำเนินการคือตัวดำเนินการชนิดพิเศษที่จะพิมพ์ข้อผิดพลาดที่จะถูกรายงานกลับ ซึ่งมีประโยชน์มากในระหว่างการดีบัก เนื่องจากจะแสดงปัญหาที่โปรแกรมพบก่อนที่จะเกิดขัดข้อง
เมื่อทราบแล้ว วิธีที่คุณใช้โอเปอเรเตอร์เหล่านี้คือการเพิ่มที่ส่วนท้ายของโปรแกรม ลองพิจารณาตัวอย่างต่อไปนี้:
echo "maketecheasier" > hello.txt
ฉันสั่ง echo
โปรแกรมที่จะส่งออกคำว่า "maketecheasier" จากนั้นเพิ่ม >
ตัวดำเนินการเช่นเดียวกับชื่อไฟล์ สิ่งนี้บอกให้เชลล์ UNIX เขียนเอาต์พุตไปยังไฟล์ “hello.txt” แทนที่จะพิมพ์ไปที่หน้าจอ
3. ที
นอกเหนือจากการเปลี่ยนเส้นทางเอาต์พุต คุณยังสามารถบันทึกเอาต์พุตของคำสั่งเทอร์มินัลโดยใช้โปรแกรมชื่อ tee
. นี่คือโปรแกรม GNU ที่ให้คุณอ่านและเขียนไปยังอินพุตมาตรฐาน ใช้โปรแกรมนี้กับไพพ์ UNIX เพื่อเขียนเอาต์พุตของคำสั่งไปยังไฟล์
ลองพิจารณาตัวอย่างต่อไปนี้:
echo "maketecheasier" | tee hello.txt
ที่นี่ แทนที่จะใช้การเปลี่ยนเส้นทางเอาต์พุต ฉันไปป์ (|
) ส่งออกไปยัง tee
.
หมายเหตุ :ไพพ์นำเอาท์พุตของโปรแกรมหนึ่งและป้อนเข้าไปในอินพุทของอีกโปรแกรมหนึ่ง วิธีนี้ช่วยให้คุณรวมหลายโปรแกรมเข้าด้วยกันได้ ตราบใดที่โปรแกรมทั้งหมดใช้อินพุตและเอาต์พุตมาตรฐาน
4. สคริปต์
อีกวิธีในการดึงเอาต์พุตจากเทอร์มินัลคือผ่าน script
ซึ่งเป็นโปรแกรม Linux ในตัวที่บันทึกทุกสิ่งที่คุณพิมพ์ในเทอร์มินัลตลอดจนเอาต์พุต
คุณสามารถใช้สคริปต์เพื่อบันทึกบันทึกของเทอร์มินัลเซสชันของคุณในรูปแบบข้อความที่แยกวิเคราะห์ได้ สิ่งนี้มีประโยชน์มากหากคุณต้องการส่งบันทึกข้อผิดพลาดทางออนไลน์เพื่อรับการสนับสนุนจากผู้อื่น
ในการใช้งาน ให้รันคำสั่งต่อไปนี้:
script filename.txt
สิ่งนี้จะเริ่มต้นสภาพแวดล้อมของสคริปต์ซึ่งคุณสามารถเริ่มรันคำสั่งได้ อย่างไรก็ตาม สิ่งสำคัญอย่างหนึ่งที่ควรทราบคือสคริปต์นั้นรวบรวมทุกสิ่งที่คุณทำในเซสชันนั้น ลองพิจารณาตัวอย่างต่อไปนี้:
Script started on 2022-03-27 18:02:29+08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"] [?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls [?2004l [0m[01;34mDesktop[0m [01;34mDownloads[0m [01;34mmail[0m [01;34mNews[0m [01;34mpods[0m [01;34mdocuments[0m [00;32mhello.txt[0m [01;34mMail[0m [01;34mpics[0m [01;34mtmp[0m [01;34mvids[0m [?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit [?2004l exit Script done on 2022-03-27 18:03:19+08:00 [COMMAND_EXIT_CODE="0"]
สคริปต์ประกอบด้วยการกดปุ่มและอักขระควบคุมทั้งหมดที่คุณกด ในกรณีของฉัน มันรวมปุ่ม "ล่องหน" ทั้งหมดที่ฉันกด รวมทั้ง Tab และ Backspace กดปุ่ม
เมื่อคุณทำเซสชั่นเสร็จแล้ว ให้พิมพ์ exit
. การดำเนินการนี้จะสิ้นสุดโปรแกรม Script และเขียนบันทึกทั้งหมดลงในไฟล์ที่คุณระบุ
5. การจับภาพเทอร์มินัลเฟรมบัฟเฟอร์
สุดท้าย คุณสามารถรับเอาต์พุตของเทอร์มินัลได้ด้วยการดึงจาก Linux framebuffer สิ่งนี้มีประโยชน์หากคุณทำงานบนโทรพิมพ์โดยตรงและต้องการบันทึกผลลัพธ์ของโปรแกรม
ในการจับภาพอุปกรณ์ framebuffer ให้รันคำสั่งต่อไปนี้ขณะอยู่ใน teletype:
cat /dev/fb0 > capture.raw
สิ่งสำคัญประการหนึ่งที่ควรทราบคือการจับภาพอุปกรณ์ framebuffer ด้วยวิธีนี้หมายความว่าคุณกำลังดัมพ์ไบต์ดิบของ framebuffer ลงในไฟล์ ในการดูไฟล์นั้น คุณต้องโหลดมันในโปรแกรมแก้ไขรูปภาพและปรับสีและความลึกของบิตด้วยตนเอง กระบวนการนี้ไม่เพียงแต่ใช้เวลานาน แต่ยังทำผิดได้ง่ายอีกด้วย
ดังนั้น วิธีหนึ่งที่จะจัดการกับสิ่งนี้คือการใช้โปรแกรมของบริษัทอื่น เช่น fbgrab การดำเนินการนี้จะดึงหน้าจอโทรพิมพ์ปัจจุบันจากอุปกรณ์เฟรมบัฟเฟอร์แล้วทิ้งลงในไฟล์ PPM หรือ PNG
การติดตั้ง fbgrab นั้นค่อนข้างตรงไปตรงมาเช่นกัน ในการแจกแจงแบบใช้ Debian และ Ubuntu คุณสามารถใช้ apt:
sudo apt install fbgrab
สำหรับ Arch Linux ให้เรียกใช้ pacman:
sudo pacman -S fbgrab
การใช้ fbgrab เพื่อจับเอาท์พุตเทอร์มินัล
เมื่อติดตั้งแล้ว ให้วางที่โทรพิมพ์โดยกด Control + กะ + Alt + F3 จากนั้นเรียกใช้ fbcat
หรือ fbgrab
.
Fbcat เป็นโปรแกรมที่ง่ายกว่าที่คว้าหน้าจอ framebuffer ปัจจุบันและบันทึกลงในภาพ PPM นี่เป็นรูปแบบภาพดิบระดับต่ำที่คุณสามารถโหลดในโปรแกรมแก้ไขภาพเพื่อแปลงเป็น PNG Fbcat มีประโยชน์อย่างยิ่งหากคุณกำลังพยายามจับภาพการแสดงผลที่มีความลึกของบิตที่ต่ำกว่าซึ่งต้องใช้รูปแบบภาพดิบในการจับภาพอย่างถูกต้อง
ในการจับภาพโดยใช้โปรแกรม fbcat ให้รันคำสั่งต่อไปนี้:
fbcat > capture.ppm
การดำเนินการนี้จะดึงหน้าจอที่แสดงอยู่ในปัจจุบันและดัมพ์เนื้อหาในไฟล์ capture.ppm
ในทางกลับกัน Fbgrab เป็นโปรแกรมที่ซับซ้อนกว่าที่ออกแบบมาเพื่อจับภาพการแสดงผลที่มีความลึกของบิตที่สูงขึ้น โดยส่วนใหญ่ คุณจะใช้เพื่อจับภาพหน้าจอโทรพิมพ์ของคุณ รองรับการบันทึกเป็น PNG โดยค่าเริ่มต้นและมีตัวเลือกให้เลือกโทรพิมพ์อื่นเพื่อจับภาพ
ในการจับภาพโดยใช้โปรแกรม fbgrab ให้รันคำสั่งต่อไปนี้:
sudo fbgrab -c 3 capture.png
นี่จะคว้าหน้าจอโทรพิมพ์ที่สามและบันทึกไว้ในไฟล์ 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