Хорошо, проблема решена, и, что интересно, обнаружил проблему, о которой я даже не подозревал.
Сделав копию всего каталога «lists», я удалил все содержимое (, включая папку «partial» ), повторно -запустил apt -get update и вуаля, нет ошибки.
И проблема с бонусом была решена, так как в течение некоторого времени, когда я запускал apt -get upgrade, он не возвращал никаких обновлений для применения. Я ничего не думал об этом, только о том, что команды могут быть немного слабыми. Однако теперь, когда я пытаюсь «обновить», я получаю большое количество обновлений.
Большое спасибо за помощь. Может не показаться,но, как обычно, потребовался только вклад третьей стороны, чтобы вызвать реакцию, к которой я не пришел сам. Кто бы мог подумать, система работает!! =)
Привет,
Разница в том, что 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 символов ), вы все равно должны достичь этого конкретного предела.