¿Por qué `cat / dev / urandom` rompe su terminal?

Respuestas:

21

Si bien existen sus caracteres ASCII normales e imprimibles que se envían de ida y vuelta en un terminal, también hay muchos caracteres no imprimibles que se utilizan para que el sistema se comunique con el terminal. Por ejemplo, si un programa envía el carácter 0x07("carácter de campana ASCII"), su terminal debe emitir un pitido.

Se pueden usar otras secuencias especiales para cambiar el color del texto que se muestra, en qué dirección se muestra, el título de la ventana, el tamaño de la ventana, etc., entre muchas otras cosas.

Cuando usted

cat /dev/urandom

Se arrojan un montón de caracteres aleatorios a su terminal, y la terminal no puede decir que no son códigos de control reales.

Debido a que el programa está enviando efectivamente comandos aleatorios al terminal, el terminal termina en un estado aleatorio, a menudo inutilizable.

Darth Android
fuente
4

Algunos de los resultados aleatorios serán códigos de escape ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), que pueden hacer cosas divertidas como ocultar el cursor o seleccionar fuentes alternativas. Otra posibilidad son las secuencias unicode: un bytestream aleatorio no será UTF-8 válido, y probablemente no todos los terminales con reconocimiento Unicode lo manejan con gracia.

vbraun
fuente
1

cat /dev/urandomle dará una secuencia de bytes aleatorios entre 0y 255, no todos esos valores son caracteres de texto válidos. Debido a que la ventana del terminal se alimentaba con datos no válidos, nunca se esperaba que pudiera manejarla, podría poner la aplicación del terminal en un estado "roto".

Scott Chamberlain
fuente