Dlaczego `cat / dev / urandom` psuje twój terminal?

Odpowiedzi:

21

Chociaż istnieją normalne, drukowalne znaki ASCII, które są przesyłane tam i z powrotem na terminalu, istnieje również wiele znaków niedrukowalnych, które są używane przez system do komunikacji z terminalem. Na przykład, jeśli program wysyła znak 0x07(„znak dzwonka ASCII”), terminal powinien wydać dźwięk.

Inne specjalne sekwencje mogą być użyte do zmiany koloru wyświetlanego tekstu, kierunku wyświetlania, tytułu okna, wielkości okna itp.

Kiedy ty

cat /dev/urandom

Kilka losowych znaków jest zrzucanych na twój terminal, a terminal nie może powiedzieć, że to nie są prawdziwe kody kontrolne.

Ponieważ program skutecznie wysyła losowe polecenia do terminala, terminal kończy się w losowym, często bezużytecznym stanie.

Darth Android
źródło
4

Niektóre losowe dane wyjściowe to kody ucieczki ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), które mogą robić fajne rzeczy, takie jak ukrywanie kursora lub wybieranie alternatywnych czcionek. Inną możliwością są sekwencje Unicode: losowy bajt nie będzie prawidłowy UTF-8 i prawdopodobnie nie wszystkie terminale obsługujące Unicode obsługują to z wdziękiem.

vbraun
źródło
1

cat /dev/urandomda ci strumień losowych bajtów pomiędzy 0i 255, nie wszystkie z tych wartości są poprawnymi znakami tekstowymi. Ponieważ okno terminala podaje niepoprawne dane, nigdy nie oczekiwano, że może to spowodować, że aplikacja terminala przejdzie w stan „zepsuty”.

Scott Chamberlain
źródło