В bash как бесконечные выходные потоки перенаправляются на файлы, обрабатываемые? - PullRequest
0 голосов
/ 21 марта 2020

В качестве эксперимента я перенаправил вывод yes, команды, которая выводит строку несколько раз до тех пор, пока не будет уничтожен , следующим образом:

yes > a.txt

Я прервал процесс с Ctrl + C за доли секунды, но даже за это короткое время размер файла a.txt закончился и составил пару сотен мегабайт.

Итак, у меня есть несколько вопросов:

  1. Как можно создать такой большой файл за такое короткое время? Разве нет ограничений по скорости записи, особенно на жестких дисках, таких как тот, который я использую?

  2. Как можно избежать этого, когда я непреднамеренно перенаправляю вывод программы с бесконечным l oop?

  3. Предположим, что описанный выше процесс работает в течение длительного времени. Будет ли заполнено все пространство, оставшееся в хранилище, или есть какие-либо «меры безопасности», установленные bash, OS и т. Д. c.?

1 Ответ

1 голос
/ 21 марта 2020

Вывод временно сохраняется в буферах ядра. Когда ваша память заполняется, запись замедляется до скорости жесткого диска, которая все еще довольно быстрая.

Большинство Unix файловых систем резервируют процент пространства для процессов root. Вы можете убедиться в этом, сравнив вывод df с sudo df. Но если у вас не включены пользовательские квоты, вы, безусловно, можете использовать все свое дисковое пространство таким образом. К счастью, инструмент командной строки rm не требует использования дискового пространства для своей работы.

...