Чому `cat / dev / urandom` зламає ваш термінал?


Відповіді:


21

Незважаючи на те, що звичайні символи ASCII для друку надсилаються туди-сюди на терміналі, також є багато недрукованих символів, які використовуються для зв'язку системи з терміналом. Наприклад, якщо програма надсилає символ 0x07("ASCII Bell символ"), ваш термінал повинен подати звуковий сигнал.

Інші спеціальні послідовності можуть бути використані для зміни кольору тексту, що відображається, у якому напрямку воно відображається, назва вікна, розмір вікна тощо, серед багатьох інших речей.

Коли ти

cat /dev/urandom

Купа випадкових символів скидається на ваш термінал, і термінал не може сказати, що це не реальні контрольні коди.

Оскільки програма ефективно надсилає випадкові команди до терміналу, термінал виявляється у випадковому, часто непридатному стані.


4

Деякі з випадкових результатів будуть кодами аварійних відхилень ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), які можуть робити цікаві речі, як приховати курсор або вибрати альтернативні шрифти. Іншою можливістю є послідовності unicode: Випадковий байтовий потік не буде дійсним UTF-8, і, ймовірно, не всі термінали, котрі знають, що знають код, витончено справляються з цим.


1

cat /dev/urandomдасть вам потік випадкових байтів між, 0і 255не всі ці значення є дійсними текстовими символами. Оскільки вікно терміналу подавали недійсні дані, ніколи не очікувалося, що це обробляє, воно може привести термінальну програму до "зламаного" стану.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.