J'avais essayé la commande cat
avec un fichier exécutable:
cat /bin/ls
Maintenant, je ne peux lire aucun mot dans ce terminal (console Linux). Comment puis-je le réparer?
Souvent, dans un terminal Unix/Linux (Bash) par exemple, vous utiliserez les commandes more
ou less
ou cat
pour afficher un fichier. Lorsque vous effectuez cette opération et que le fichier n'est pas destiné à être affiché (tel que /bin/ls
) vous obtiendrez une sortie comme celle-ci:
Ce qui se passe ici, c'est que vous venez d'essayer d'afficher un fichier qui est un programme. Un exécutable qui n'est pas destiné à être vu avec les téléspectateurs standard comme je l'ai mentionné ci-dessus.
Pour résoudre ce problème, vous pouvez procéder comme suit:
reset
et appuyez sur retourCela devrait généralement remettre votre terminal dans un mode plus normal. Je mentionnerai encore une chose, lorsque vous effectuez les étapes ci-dessus, vous les taperez en aveugle dans votre terminal. Assurez-vous donc que vous le saisissez correctement.
Comme suggéré dans les commentaires de @sendmoreinfo, vous pourriez avoir plus de chance d'utiliser les commandes suivantes à la place si ce qui précède ne fonctionne pas:
$ stty sane
$ tput rs1
Soit dit en passant, si vous rencontrez un fichier et que vous n'êtes pas sûr qu'il va gâcher votre terminal, vous pouvez inspecter le fichier à l'aide de la commande file
qui indiquera le type de fichier qu'il est.
Par exemple, avec /bin/ls
ce fichier affiche la sortie suivante:
$ 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
J'ai eu une occasion où aucune des astuces habituelles, reset
ou stty sane
, a fonctionné (après avoir accidentellement appelé print
sur un python bytearray). J'ai réussi avec méthode 2 répertoriée sur ce blog utile .
J'ai depuis créé un alias des plus utiles:
alias fix='echo -e "\033c"'
Aucune réponse préalable n'a fonctionné pour moi. Mais cela semblait faire l'affaire en .bashrc ajouter:
alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'
puis lorsque le problème se produit, tapez ceci (même si vous ne le voyez probablement pas!)
(ctl-c, ctl-c, ctl-c)
fix
Merci beaucoup aux auteurs précédents. De plus, comme remarque latérale, la raison pour laquelle votre terminal devient bancal lors de l'affichage de ces fichiers exécutables (ou magasins de clés, etc.) est que ces fichiers contiennent souvent des séquences binaires qui sont des codes de contrôle. Les codes de contrôle peuvent faire des choses aléatoires comme passer à un jeu de caractères graphiques, définir les couleurs de premier plan et d'arrière-plan sur la même chose, etc.
tmux
les utilisateurs peuvent être en mesure d'envoyer toutes ces commandes à leur shell, mais la réinitialisation n'est pas élevée dans le volet tmux
.
Créer une nouvelle fenêtre tmux: ctrl-B c
tmux list-panes
Notez le numéro de volet que vous pensez être falsifié, généralement 0
. Appelons ça PPP
Sélectionnez la fenêtre tmux, où XXX
est le numéro de fenêtre qui est bouché, pas nécessairement le même que le numéro de volet. ctrl-B XXX
tmux send-key -R -t PPP
Vous verrez alors toutes les commandes dans les autres réponses à cette question qui ont atteint votre Shell, mais n'ont pas fonctionné! Peut-être un aveugle tmux send-key -R -t PPP
fonctionnera, mais je ne peux pas tester.
J'ai presque le même alias que le post précédent, avec un petit changement (tput reset
au lieu de rs1
) et une commande ajoutée (setterm -reset
):
alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'
Rien au-dessus ne m'a aidé. Cependant, Jack Wasey a mentionné tmux, alors j'ai juste lancé tmux
, je suis sorti de nouveau et tout était revenu à la normale.
Une autre solution est:
reset
Je sais que cela existe depuis un certain temps, mais alors que la plupart des autres réponses ont fonctionné pour moi, réinitialisé, sain d'esprit, parfois aucune de ces réponses n'a fonctionné pour moi et je recourt toujours à:
echo ^v^o
C'est l'écho Ctrl + V suivi de Ctrl + O
En plus d'autres réponses indiquant comment réinitialiser le terminal, j'ai pensé que la corruption ne peut être évitée que si elle est correctement protégée. Donc, je ferais mieux d'envoyer la sortie vers un simple convertisseur convivial de texte cat -v
:
docker logs myjenkinscontainer 2>&1 | cat -v
La visualisation et l'édition de fichiers binaires semble possible avec hexdump -C
et vi -R
(:%!xxd -g1
pour une vue hexadécimale et :%!xxd -g1 -r
pour enregistrer les modifications hexadécimales).