Por que `cat / dev / urandom` quebra seu terminal?

Respostas:

21

Embora existam caracteres ASCII normais imprimíveis que são enviados e enviados em um terminal, também existem muitos caracteres não imprimíveis que são usados ​​para o sistema se comunicar com o terminal. Por exemplo, se um programa envia o caractere 0x07("caractere ASCII Bell"), seu terminal deve emitir um sinal sonoro.

Outras seqüências especiais podem ser usadas para alterar a cor do texto que está sendo exibido, qual direção é exibida, o título da janela, o tamanho da janela, etc., entre muitas outras coisas.

Quando você

cat /dev/urandom

Um monte de caracteres aleatórios são jogados no seu terminal, e o terminal não pode dizer que não são códigos de controle reais.

Como o programa está efetivamente enviando comandos aleatórios para o terminal, o terminal termina em um estado aleatório, geralmente inutilizável.

Darth Android
fonte
4

Algumas das saídas aleatórias serão códigos de escape ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), que podem fazer coisas divertidas, como ocultar o cursor ou selecionar fontes alternativas. Outra possibilidade são seqüências unicode: um bytestream aleatório não será válido UTF-8 e provavelmente nem todos os terminais sensíveis a unicode lidam com isso normalmente.

vbraun
fonte
1

cat /dev/urandomfornecerá um fluxo de bytes aleatórios entre 0e 255, nem todos esses valores são caracteres de texto válidos. Como a janela do terminal alimentava dados inválidos, nunca se esperava que ele pudesse lidar com isso, pois o aplicativo do terminal poderia ficar em um estado "quebrado".

Scott Chamberlain
fonte