смешанные результаты одной и той же команды (относящиеся к ARG_MAX)

Хорошо, проблема решена, и, что интересно, обнаружил проблему, о которой я даже не подозревал.

Сделав копию всего каталога «lists», я удалил все содержимое (, включая папку «partial» ), повторно -запустил apt -get update и вуаля, нет ошибки.

И проблема с бонусом была решена, так как в течение некоторого времени, когда я запускал apt -get upgrade, он не возвращал никаких обновлений для применения. Я ничего не думал об этом, только о том, что команды могут быть немного слабыми. Однако теперь, когда я пытаюсь «обновить», я получаю большое количество обновлений.

Большое спасибо за помощь. Может не показаться,но, как обычно, потребовался только вклад третьей стороны, чтобы вызвать реакцию, к которой я не пришел сам. Кто бы мог подумать, система работает!! =)

Привет,

1
23.11.2018, 07:40
1 ответ

Разница в том, что echo— это встроенная -оболочка, а /bin/echo— внешний исполняемый файл.

Ограничение на ARG _MAX связано с системным вызовом ядра для выполнения внешнего двоичного файла(execve(2).)

При выполнении встроенного -в вашей оболочке такие ограничения не налагаются системой, а ограничиваются только самой оболочкой, и большинство оболочек просто не будут налагать ограничений, кроме памяти, доступной для них для хранения аргументы.

Между прочим, в этом случае, когда вы выполняете внешнее /bin/echo, фактическое ограничение, которого вы достигаете, равно ARG _MAX _STRLEN, что является максимальной длиной один аргумент, а в Linux на Intel жестко -кодируется до 131 072 байт. См. этот ответ для более подробной информации. ARG _MAX по-прежнему является пределом для всех аргументов (плюс переменные среды и т. д. )Но каждый отдельный аргумент ограничен ARG _MAX _STRLEN. Таким образом, даже если вы сократите свое выражение Perl, чтобы сгенерировать более короткий srring (, например 132 000 символов ), вы все равно должны достичь этого конкретного предела.

2
27.01.2020, 23:31

Теги

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