Limit in saving program output to file in Linux

Я знаю, что могу использовать:

$ my_program > output.txt

Для перенаправления вывода в файл, но проблема в том, что когда файл достигает 64 Кб, в файл больше ничего не записывается, и я теряю всю информацию, которая идет дальше...

Что я могу сделать?

0
18.06.2017, 18:30
2 ответа

Оболочка использует некоторые внутренние ограничения. В bash (оболочке, которую вы используете) для их перечисления используется команда ulimit(-a для всех):

$ ulimit -a

перенаправление (>) или канал (|) -- на низкое значение, 8 (-p) в этой системе Linux, размер потока, который может быть отправлен через канал может быть довольно большим (более 10 миллионов байт):

$ printf '%0*d' 11000111 0 | wc -c
11000111

Другое ограничение, реальное, применимое к каналу, считывается из:

$ cat /proc/sys/fs/pipe-max-size
65536

И устанавливается в том же файле:

$ sudo echo $((4 * 1024)) > /proc/sys/fs/pipe-max-size

Однако, даже совсем небольшое значение, как указано выше, не ограничивает поток в трубе. Приведенная выше команда с более чем 10 миллионами байт все еще работает.
Причина в том, что ограничение применяется к тому, что может передать одинблок.

Вам нужен такой инструмент, как этот скрипт, который смешивает perl и bashдля записи одногоблока.

$ ./pipesize 128 1
write size:        128; bytes successfully before error: 4096

Это показывает реальный лимит для канала (тот же лимит, что и при перенаправлении).

0
28.01.2020, 04:44

Проверьте вывод ulimit -f. Вы можете быть ограничены текущим предельным значением файла. Если это так, вы можете удалить свой лимит, запустив ulimit -f unlimited.

0
28.01.2020, 04:44

Теги

Похожие вопросы