Почему `cat /dev/urandom` ломает ваш терминал?
В связи с этим вопросом: https://serverfault.com/questions/534449
Как cat /dev/urandom
заставить некоторые терминальные эмуляторы работать шатко?
4 ответа
В то время как есть обычные печатные символы ASCII, которые отправляются туда и обратно на терминале, есть также много непечатаемых символов, которые используются системой для связи с терминалом. Например, если программа отправляет символ 0x07
("ASCII Bell персонаж"), ваш терминал должен подать звуковой сигнал.
Другие специальные последовательности могут использоваться для изменения цвета отображаемого текста, направления, в котором он отображается, заголовка окна, размера окна и т. Д., И многих других.
Когда ты
cat /dev/urandom
Куча случайных символов сбрасывается на ваш терминал, и терминал не может сказать, что это не настоящие управляющие коды.
Поскольку программа эффективно отправляет случайные команды на терминал, терминал оказывается в случайном, часто непригодном для использования состоянии.
Фактически использование этой команды покажет, есть ли АНБ на вашем компьютере в данный момент:
strings < /dev/urandom | grep nsa -i
Если вы получаете какие-либо положительные результаты, это явный признак того, что они просматривают на вашем компьютере. Это даже работает на машинах с воздушным зазором, и причина, по которой ваш удар иногда становится "шатким", заключается в контрмеры АНБ. Быть осторожен!
Некоторым случайным выводом будут экранирующие коды ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code), которые могут делать такие забавные вещи, как скрытие курсора или выбор альтернативных шрифтов. Другой возможностью являются последовательности Юникода: случайный поток байтов не будет действительным UTF-8, и, вероятно, не все терминалы с поддержкой Юникода обрабатывают это изящно.
cat /dev/urandom
даст вам поток случайных байтов между 0
а также 255
не все эти значения являются допустимыми текстовыми символами. Поскольку окно терминала передавало недопустимые данные, оно никогда не ожидало, что оно может перевести приложение терминала в "сломанное" состояние.