Pourquoi `cat / dev / urandom` casse-t-il votre terminal?

Réponses:

21

Bien que vos caractères ASCII normaux imprimables soient envoyés dans les deux sens sur un terminal, de nombreux caractères non imprimables sont également utilisés pour que le système communique avec le terminal. Par exemple, si un programme envoie le caractère 0x07("caractère de cloche ASCII"), votre terminal devrait émettre un bip.

D'autres séquences spéciales peuvent être utilisées pour changer la couleur du texte affiché, la direction dans laquelle il est affiché, le titre de la fenêtre, la taille de la fenêtre, etc., entre autres choses.

Quand vous

cat /dev/urandom

Un tas de caractères aléatoires sont transférés sur votre terminal, et le terminal ne peut pas dire que ce ne sont pas de vrais codes de contrôle.

Parce que le programme envoie efficacement des commandes aléatoires au terminal, le terminal se retrouve dans un état aléatoire, souvent inutilisable.

Dark Android
la source
4

Une partie de la sortie aléatoire sera des codes d'échappement ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), qui peuvent faire des choses amusantes comme cacher le curseur ou sélectionner des polices alternatives. Une autre possibilité est les séquences unicode: un flux de bytest aléatoire ne sera pas UTF-8 valide, et probablement tous les terminaux compatibles Unicode ne le gèrent pas avec élégance.

vbraun
la source
1

cat /dev/urandomvous donnera un flux d'octets aléatoires entre 0et 255, toutes ces valeurs ne sont pas des caractères de texte valides. Étant donné que la fenêtre du terminal alimentait des données non valides, on ne s'attendait pas à ce qu'elles gèrent l'application du terminal dans un état "interrompu".

Scott Chamberlain
la source