Corrigir terminal após exibir um arquivo binário

105

Eu tentei o comando cat com um arquivo executável:

cat /bin/ls

Agora não consigo ler nenhuma palavra neste terminal (console do Linux). Como posso consertar isso?

    
por fluke-ng 17.06.2013 / 14:40

6 respostas

145

Muitas vezes, quando em um terminal Unix / Linux (Bash), por exemplo, você usará os comandos more ou less ou cat para exibir um arquivo. Quando você fizer isso e o arquivo não for visualizado (como /bin/ls ), você terá uma saída assim:

O que está acontecendo aqui é que você acabou de tentar visualizar um arquivo que é um programa. Um executável que não deve ser visualizado com visualizadores padrão, como mencionei acima.

método 1 - redefinir

Para corrigir esse problema, você pode fazer o seguinte:

  1. Pressione Ctrl + C algumas vezes ( Ctrl + C )
  2. Digite o comando reset e clique em retornar

Isso normalmente deve colocar seu terminal de volta em um modo mais normal. Vou mencionar mais uma coisa, quando você faz os passos acima, você vai digitando-os cegos em seu terminal. Então apenas certifique-se de que você está digitando corretamente.

método # 2 - stty sane

Como sugerido nos comentários de @sendmoreinfo, você pode ter mais sorte ao usar os seguintes comandos se o acima não funcionar:

$ stty sane
$ tput rs1

determinando um tipo de arquivo

Por acaso, se você encontrar um arquivo e não tiver certeza se ele vai atrapalhar o seu terminal, você pode inspecionar o arquivo usando o comando file , que reportará o tipo de arquivo que ele é.

Por exemplo, com /bin/ls , esse arquivo mostra a seguinte saída:

$ 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
    
por 17.06.2013 / 15:07
31

Eu tive uma ocasião em que nenhum dos truques habituais, reset ou stty sane , funcionou (após acidentalmente chamar print em um bytearray de python). Tive sucesso com o método 2 listado neste útil blog .

Desde então, criei um alias muito útil:

alias fix='echo -e "3c"'
    
por 12.02.2016 / 06:07
4

Nenhuma resposta anterior funcionou para mim. Mas isso pareceu fazer o truque em .bashrc add:

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

e quando o problema ocorrer, digite isto (mesmo que você provavelmente não consiga ver!)

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

Muito obrigado aos remetentes anteriores. Além disso, como uma nota lateral, o motivo pelo qual seu terminal fica instável ao mostrar esses arquivos executáveis (ou keystores, etc) é que esses arquivos geralmente contêm sequências binárias que são códigos de controle. Os códigos de controle podem fazer coisas aleatórias, como mudar para um conjunto de caracteres gráficos, definir cores de primeiro plano e de fundo para a mesma coisa, etc.

    
por 02.08.2016 / 22:58
3

Eu tenho quase o mesmo alias da postagem anterior, com uma pequena alteração ( tput reset em vez de rs1 ) e um comando adicionado ( setterm -reset ):

alias clr='echo -e "3c" ; stty sane; setterm -reset; reset; tput reset; clear'
    
por 26.10.2016 / 22:24
2

tmux usuários podem enviar todos esses comandos para o shell, mas a redefinição não é elevada para o painel tmux .

Crie uma nova janela do tmux: %código% %código% Observe o número do painel que você considera borked, normalmente ctrl-B c . Vamos chamá-lo de tmux list-panes

Selecione a janela do tmux, em que 0 é o número da janela que está borked, não necessariamente igual ao número do painel. %código% PPP

Você então verá todos os comandos nas outras respostas a essa pergunta que chegaram ao seu shell, mas não funcionou! Talvez um cego XXX funcione, mas não posso testar.

    
por 20.08.2017 / 02:45
0

Nada acima me ajudou. No entanto, Jack Wasey mencionou o tmux, então eu corri tmux , saí novamente e tudo voltou ao normal.

    
por 11.10.2017 / 18:36