ฉันพยายามสั่งcat
ด้วยไฟล์ปฏิบัติการ:
cat /bin/ls
ตอนนี้ฉันไม่สามารถอ่านคำใด ๆ ในเทอร์มินัลนี้ (คอนโซล Linux) ฉันจะแก้ไขได้อย่างไร
ฉันพยายามสั่งcat
ด้วยไฟล์ปฏิบัติการ:
cat /bin/ls
ตอนนี้ฉันไม่สามารถอ่านคำใด ๆ ในเทอร์มินัลนี้ (คอนโซล Linux) ฉันจะแก้ไขได้อย่างไร
คำตอบ:
บ่อยครั้งเมื่ออยู่ในเทอร์มินัล Unix / Linux (Bash) เช่นคุณจะใช้คำสั่งmore
หรือless
หรือcat
เพื่อดูไฟล์ เมื่อคุณทำสิ่งนี้และไฟล์ไม่ได้มีไว้ให้ดู (เช่น/bin/ls
) คุณจะได้ผลลัพธ์ดังนี้:
สิ่งที่เกิดขึ้นที่นี่คือคุณพยายามดูไฟล์ที่เป็นโปรแกรม ปฏิบัติการที่ไม่ได้หมายถึงให้ดูกับผู้ดูมาตรฐานตามที่ฉันได้กล่าวไว้ข้างต้น
ในการแก้ไขปัญหานี้คุณสามารถทำสิ่งต่อไปนี้:
reset
และกดส่งคืนโดยปกติควรทำให้เทอร์มินัลของคุณกลับสู่โหมดปกติมากขึ้น ฉันจะพูดถึงอีกอย่างหนึ่งเมื่อคุณทำตามขั้นตอนด้านบนคุณจะพิมพ์คนตาบอดเข้าไปในเทอร์มินัลของคุณ ดังนั้นให้แน่ใจว่าคุณพิมพ์ถูกต้อง
ตามที่แนะนำในความคิดเห็นโดย @sendmoreinfo คุณอาจโชคดีกว่าที่ใช้คำสั่งต่อไปนี้แทนหากคำสั่งด้านบนไม่ทำงาน:
$ stty sane
$ tput rs1
บังเอิญถ้าคุณเจอไฟล์และไม่แน่ใจว่ามันจะทำให้เครื่องเทอร์มินัลของคุณวุ่นวายคุณสามารถตรวจสอบไฟล์โดยใช้คำสั่งfile
ซึ่งจะรายงานประเภทของไฟล์
ตัวอย่างเช่นด้วย/bin/ls
ไฟล์นั้นจะแสดงผลลัพธ์ต่อไปนี้:
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
reset
ไม่ได้รักษา 100% สำหรับความบ้าขั้ว พยายามที่จะตามมาด้วยstty sane
tput rs1
stty sane
tput
reset
ทำงานในกรณีของฉัน
clear
ใช้ได้กับกรณีที่ไม่รุนแรง
ฉันมีโอกาสที่ไม่มีกลอุบายทั่วไปreset
หรือใช้stty sane
งานได้ (หลังจากโทรprint
ไปหาหลามโดยไม่ได้ตั้งใจ) ฉันประสบความสำเร็จด้วยวิธีที่ 2 ที่ระบุไว้ในบล็อกที่เป็นประโยชน์นี้
ฉันได้สร้างนามแฝงที่มีประโยชน์ที่สุดตั้งแต่ฉัน:
alias fix='echo -e "\033c"'
echo -e "\033c"
ช่วยให้ฉันเพื่อทำความสะอาดตัวอักษรอ่านไม่ออก SSH cat /etc/localtime
เข้าสู่ระบบเซสชั่นสถานีที่ถูกผสมขึ้นหลังจากที่
ไม่มีคำตอบเดียวที่ใช้ได้สำหรับฉัน แต่นี่ดูเหมือนจะทำเคล็ดลับใน. bashrc เพิ่ม:
alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'
และเมื่อเกิดปัญหาขึ้นให้พิมพ์สิ่งนี้ (แม้ว่าคุณอาจมองไม่เห็น!)
(ctl-c, ctl-c, ctl-c)
fix
ขอบคุณมากสำหรับผู้ส่งก่อน เหตุผลที่เทอร์มินัลของคุณสกปรกเมื่อแสดงไฟล์ปฏิบัติการ (หรือที่เก็บคีย์ ฯลฯ ) ก็คือไฟล์เหล่านั้นมักจะมีลำดับไบนารีที่เป็นรหัสควบคุม รหัสควบคุมอาจทำสิ่งต่าง ๆ แบบสุ่มเช่นเปลี่ยนเป็นชุดอักขระกราฟิกตั้งค่าพื้นหน้าและสีพื้นหลังเป็นสิ่งเดียวกันเป็นต้น
sane
tmux
ผู้ใช้อาจสามารถส่งคำสั่งเหล่านี้ทั้งหมดไปยังเชลล์ได้ แต่การรีเซ็ตไม่ได้รับการยกระดับไปยังtmux
บานหน้าต่าง
ทำให้หน้าต่าง tmux ใหม่:
ctrl-B c
tmux list-panes
หมายเหตุจำนวนบานหน้าต่างที่คุณคิดว่าเป็น borked 0
โดยทั่วไป เรียกมันว่าPPP
เลือกหน้าต่าง tmux โดยที่XXX
หมายเลขหน้าต่างซึ่งถูกบอร์ไม่จำเป็นต้องเหมือนกับหมายเลขบานหน้าต่าง
ctrl-B XXX
tmux send-key -R -t PPP
จากนั้นคุณจะเห็นคำสั่งทั้งหมดในคำตอบอื่น ๆ สำหรับคำถามนี้ซึ่งทำให้กับเชลล์ของคุณ แต่ไม่ได้ผล! บางทีคนตาบอดtmux send-key -R -t PPP
อาจใช้ได้ แต่ฉันไม่สามารถทดสอบได้
ฉันมีนามแฝงใกล้เคียงกับโพสต์ก่อนหน้าโดยมีการเปลี่ยนแปลงเพียงเล็กน้อย ( tput reset
แทนrs1
) และอีกหนึ่งคำสั่งที่เพิ่ม ( setterm -reset
):
alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'
ไม่มีอะไรข้างต้นช่วยฉัน อย่างไรก็ตาม Jack Wasey พูดถึง tmux ดังนั้นฉันจึงวิ่งtmux
ออกไปอีกครั้งและทุกอย่างกลับมาเป็นปกติ
นอกจากคำตอบอื่น ๆ ที่แนะนำวิธีการรีเซ็ตเทอร์มินัลฉันคิดว่าความเสียหายนั้นไม่สามารถหลีกเลี่ยงได้หากไม่ได้รับการปกป้องอย่างเหมาะสม ดังนั้นฉันควรส่งออกไปยังตัวแปลงที่เป็นมิตรกับข้อความง่ายกว่าcat -v
:
docker logs myjenkinscontainer 2>&1 | cat -v
การดูและแก้ไขไฟล์ไบนารีดูเหมือนจะเป็นไปได้ด้วยhexdump -C
และvi -R
( :%!xxd -g1
สำหรับมุมมองฐานสิบหกและ:%!xxd -g1 -r
สำหรับการบันทึกการเปลี่ยนแปลงฐานสิบหก)
reset
ลองพิมพ์