Perbaiki terminal setelah menampilkan file biner

122

Saya sudah mencoba perintah catdengan file yang dapat dieksekusi:

cat /bin/ls

Sekarang saya tidak bisa membaca kata apa pun di terminal ini (konsol Linux). Bagaimana saya bisa memperbaikinya?

kebetulan-ng
sumber
4
Jika saya mengerti dengan benar, mungkin terminal Anda kacau; coba ketikkan reset.
Patrice Levesque
Sebenarnya saya pikir jawabannya ada di sini lebih baik, jadi lebih baik tandai sebagai dup sebaliknya
ilkkachu

Jawaban:

165

Sering kali ketika di terminal Unix / Linux (Bash) misalnya Anda akan menggunakan perintah moreatau lessatau catuntuk melihat file. Ketika Anda melakukan ini dan file tidak dimaksudkan untuk dilihat (seperti /bin/ls) Anda akan mendapatkan output seperti ini:

                ss dari keluaran biner

Apa yang terjadi di sini adalah Anda baru saja mencoba melihat file yang merupakan program. Dapat dieksekusi yang tidak dimaksudkan untuk dilihat dengan pemirsa standar seperti yang saya sebutkan di atas.

metode # 1 - reset

Untuk memperbaiki masalah ini, Anda dapat melakukan hal berikut:

  1. Tekan Control + C beberapa kali ( Ctrl+ C)
  2. Ketik perintah resetdan tekan kembali

Ini biasanya membuat terminal Anda kembali ke mode yang lebih normal. Saya akan menyebutkan satu hal lagi, ketika Anda melakukan langkah-langkah di atas, Anda akan dengan mengetikkannya di terminal Anda. Jadi pastikan Anda mengetiknya dengan benar.

Metode # 2 - stty waras

Seperti yang disarankan dalam komentar oleh @sendmoreinfo Anda mungkin lebih beruntung menggunakan perintah berikut daripada jika di atas tidak berfungsi:

$ stty sane
$ tput rs1

menentukan jenis file

Kebetulan, jika Anda menemukan file dan tidak yakin apakah itu akan mengacaukan terminal Anda, Anda dapat memeriksa file menggunakan perintah fileyang akan melaporkan kembali jenis file itu.

Misalnya, dengan /bin/lsfile itu menunjukkan output berikut:

$ 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
slm
sumber
15
resetbukan obat 100% untuk kegilaan terminal. Coba stty sanediikuti oleh tput rs1.
sendmoreinfo
@sendmoreinfo - terima kasih saya telah menambahkan saran Anda untuk jawabannya. Saya pernah menggunakan stty sanetetapi tidak pernah tput.
slm
1
sebenarnya, saya perlu meneliti ini lebih lanjut. reset seharusnya mengirim string rs1. Tes yang baik (setidaknya untuk xterm) adalah membuat kursor tidak terlihat dan melihat apakah reset mengembalikannya.
sendmoreinfo
4
resetbekerja dalam kasus saya
code_monk
1
clearjuga berfungsi untuk kasus ringan.
Navin
36

Saya pernah memiliki kesempatan di mana tidak ada trik yang biasa, resetatau stty sane, bekerja (setelah secara tidak sengaja memanggil printbytearray python). Saya berhasil dengan metode 2 yang tercantum di blog bermanfaat ini .

Sejak itu saya telah membuat alias yang paling membantu:

alias fix='echo -e "\033c"'
Benjamin Riggs
sumber
2
Saya tahu ini sudah lama, tetapi ini adalah satu-satunya jawaban di atas yang bekerja untuk saya! Terima kasih
jredd
Ini echo -e "\033c"membantu saya untuk membersihkan sesi terminal masuk SSH yang kacau karakter yang tercampur setelah cat /etc/localtime.
Pro Backup
Ini bekerja dengan OpenBSD, ketika yang lainnya tidak.
DHW
1
percobaan lebih lanjut dengan layar (1) menemukan pengiriman kekuatan semua sesi (-D) kemudian mengeluarkan perintah reset ke layar terminal yang mendasarinya dijalankan, dapat memperbaiki masalah. mungkin juga perlu mengganti nama jendela yang rusak yang dapat menampilkan kembali data biner yang sama di terminal yang menyebabkannya rusak (dan kemudian mengatur ulang lagi).
matematika
1
Ukuran terminal saya (LINES) dipotong kira-kira setengah setelah menggunakan vi saat menghubungkan ke konsol host linux jarak jauh melalui SOL. Sesi jarak jauh memiliki LINES = 24 sedangkan sesi MAC lokal saya memiliki LINES = 51. echo -e "\ 033c" bekerja untuk saya tetapi tidak ada perbaikan lain yang saya coba lakukan ('stty sane', tput rs1, tput sgr0, reset).
Mark
7

Tidak ada jawaban sebelumnya yang berfungsi untuk saya. Tapi ini sepertinya melakukan trik di .bashrc tambahkan:

alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'

dan kemudian ketika masalah terjadi ketik ini (meskipun Anda mungkin tidak bisa melihatnya!)

(ctl-c, ctl-c, ctl-c)
fix

Terima kasih banyak kepada submitter sebelumnya. Selain itu, sebagai catatan tambahan, alasan terminal Anda menjadi miring ketika menunjukkan file-file yang dapat dieksekusi (atau keystores, dll) adalah bahwa file-file tersebut sering mengandung urutan biner yang merupakan kode kontrol. Kode kontrol dapat melakukan hal-hal acak seperti beralih ke rangkaian karakter grafis, mengatur warna latar depan dan latar belakang ke hal yang sama, dll.

Steven yang Mudah Geli
sumber
Sama terjadi. Tidak ada yang berhasil untuk saya, hanya kombo ini ...
Benar
1
Saya meneleponsane
qodeninja
4

tmuxpengguna mungkin dapat mengirim semua perintah ini ke shell mereka, tetapi pengaturan ulang tidak naik ke tmuxpanel.

Buat jendela tmux baru: ctrl-B c tmux list-panes Catat nomor panel yang menurut Anda borked, biasanya 0. Sebut sajaPPP

Pilih jendela tmux, di mana XXXnomor jendela yang di-bork, tidak harus sama dengan nomor panel. ctrl-B XXX tmux send-key -R -t PPP

Anda kemudian akan melihat semua perintah di jawaban lain untuk pertanyaan ini yang berhasil masuk ke shell Anda, tetapi tidak berhasil! Mungkin orang buta tmux send-key -R -t PPPakan berhasil, tetapi saya tidak bisa menguji.

Jack Wasey
sumber
3

Saya memiliki alias yang hampir sama dengan posting sebelumnya, dengan satu perubahan kecil ( tput resetbukan rs1) dan satu perintah tambahan ( setterm -reset):

alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'
Cyril Chaboisseau
sumber
1

Tidak ada yang membantu saya di atas. Namun, Jack Wasey menyebutkan tmux, jadi saya hanya berlari tmux, keluar lagi dan semuanya kembali normal.

xdevs23
sumber
0

Selain jawaban lain yang menyarankan cara mengatur ulang terminal, saya pikir korupsi tidak dapat dihindari kecuali dijaga dengan baik. Jadi saya lebih baik mengirim output ke konverter ramah teks sederhana cat -v:

docker logs myjenkinscontainer 2>&1 | cat -v

Melihat dan mengedit file biner tampaknya dimungkinkan dengan hexdump -Cdan vi -R( :%!xxd -g1untuk tampilan hex dan :%!xxd -g1 -runtuk menyimpan perubahan hex).

belut ghEEz
sumber