Arreglar terminal después de mostrar un archivo binario


122

Intenté el comando catcon un archivo ejecutable:

cat /bin/ls

Ahora no puedo leer ninguna palabra en este terminal (consola de Linux). ¿Cómo puedo arreglarlo?


44
Si entiendo correctamente, tal vez su terminal está atornillado; Intenta escribir reset.
Patrice Levesque


En realidad, creo que las respuestas aquí son mejores, así que mejor marque como dup a la inversa
ilkkachu

Respuestas:


165

Muchas veces cuando se encuentra en una terminal de Unix / Linux (Bash), por ejemplo, que va a utilizar los comandos moreo lesso catver un archivo. Cuando haces esto y el archivo no está destinado a ser visto (como /bin/ls), obtendrás una salida como esta:

                ss de salida binaria

Lo que está sucediendo aquí es que acabas de intentar ver un archivo que es un programa. Un ejecutable que no está destinado a ser visto con los espectadores estándar como mencioné anteriormente.

método # 1 - restablecer

Para solucionar este problema, puede hacer lo siguiente:

  1. Presiona Control + C un par de veces ( Ctrl+ C)
  2. Escribe el comando resety presiona regresar

Esto generalmente debería volver a poner su terminal en un modo más normal. Mencionaré una cosa más, cuando sigas los pasos anteriores, los escribirás a ciegas en tu terminal. Así que solo asegúrate de escribirlo correctamente.

método # 2 - stty cuerdo

Como se sugiere en los comentarios de @sendmoreinfo, es posible que tengas más suerte usando los siguientes comandos si lo anterior no funciona:

$ stty sane
$ tput rs1

determinar el tipo de un archivo

Por cierto, si te encuentras con un archivo y no estás seguro de si va a estropear tu terminal, puedes inspeccionar el archivo usando el comando fileque informará el tipo de archivo que es.

Por ejemplo, con /bin/lsese archivo se muestra el siguiente resultado:

$ 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

15
resetNo es una cura al 100% para la locura terminal. Intenta stty saneseguido por tput rs1.
sendmoreinfo

@sendmoreinfo: gracias. Agregué su sugerencia a la respuesta. Lo había usado stty sanepero nunca tput.
slm

1
en realidad, necesito investigar esto más. Se supone que reset debe enviar la cadena rs1. Una buena prueba (para xterm, al menos) es hacer que el cursor sea invisible y ver si el restablecimiento lo recupera.
sendmoreinfo

44
resetfuncionó en mi caso
code_monk

1
clearTambién funciona para casos leves.
Navin

36

He tenido una ocasión en la que ninguno de los trucos habituales, reseto stty sane, funcionó (después de llamar accidentalmente printa un python bytearray). Tuve éxito con el método 2 que aparece en este útil blog .

Desde entonces he creado un alias más útil:

alias fix='echo -e "\033c"'

2
Sé que esto es viejo, ¡pero esta es la única respuesta anterior que funcionó para mí! Gracias
jredd

Esto echo -e "\033c"me ayudó a limpiar una sesión de terminal de inicio de sesión SSH confusa de caracteres que se mezcló después de a cat /etc/localtime.
Pro Backup

Esto funcionó con OpenBSD, cuando todos los demás no lo hicieron.
ACS

1
una mayor experimentación con la pantalla (1) descubrió que la desconexión forzada de todas las sesiones (-D) y luego la emisión de los comandos de reinicio a la pantalla del terminal subyacente, podría solucionar el problema. También es posible que deba cambiar el nombre de los nombres de ventanas corruptos que pueden volver a mostrar los mismos datos binarios en el terminal, lo que hace que se dañen (y luego se restablecen una vez más).
matemáticas

1
El tamaño de mi terminal (LÍNEAS) se redujo aproximadamente a la mitad después de usar vi mientras me conectaba a la consola de un host remoto de Linux a través de SOL. La sesión remota tenía LINES = 24 mientras que mi sesión MAC local tenía LINES = 51. echo -e "\ 033c" funcionó para mí, pero ninguna de las otras soluciones que probé funcionó ('stty sane', tput rs1, tput sgr0, reset).
Mark

7

Ninguna respuesta previa única funcionó para mí. Pero esto parecía hacer el truco en .bashrc add:

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

y luego, cuando ocurra el problema, escriba esto (¡aunque probablemente no pueda verlo!)

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

Muchas gracias a los remitentes anteriores. Además, como nota al margen, la razón por la cual su terminal se vuelve inestable al mostrar esos archivos ejecutables (o almacenes de claves, etc.) es que esos archivos a menudo contienen secuencias binarias que son códigos de control. Los códigos de control pueden hacer cosas aleatorias como cambiar a un conjunto de caracteres gráficos, establecer los colores de primer plano y de fondo en la misma cosa, etc.


Lo mismo sucedió Nada funcionó para mí, solo este combo ...
Verdadero

1
Llamé a misane
qodeninja

4

tmuxlos usuarios pueden enviar todos estos comandos a su shell, pero el restablecimiento no se eleva al tmuxpanel.

Crear nueva ventana de tmux: ctrl-B c tmux list-panes tenga en cuenta el número de panel que cree que está borked, por lo general 0. Vamos a llamarloPPP

Seleccione la ventana tmux, donde XXXestá el número de la ventana que está borked, no necesariamente el mismo que el número del panel. ctrl-B XXX tmux send-key -R -t PPP

Luego verá todos los comandos en las otras respuestas a esta pregunta que llegó a su shell, ¡pero no funcionó! Tal vez una ciega tmux send-key -R -t PPPfuncione, pero no puedo probar.


3

Tengo casi el mismo alias que la publicación anterior, con un pequeño cambio (en tput resetlugar de rs1) y un comando agregado ( setterm -reset):

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

1

Nada de lo anterior me ayudó. Sin embargo, Jack Wasey mencionó tmux, así que simplemente corrí tmux, salí nuevamente y todo volvió a la normalidad.


0

Además de otras respuestas que aconsejan cómo restablecer el terminal, pensé que la corrupción no se puede evitar a menos que esté debidamente protegida. Así que mejor envío la salida a un simple conversor de texto cat -v:

docker logs myjenkinscontainer 2>&1 | cat -v

Ver y editar archivos binarios parece posible con hexdump -Cy vi -R( :%!xxd -g1para una vista hexadecimal y :%!xxd -g1 -rpara guardar los cambios hexadecimales).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.