Очистите все файлы журналов в каталоге

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

Во-первых, некоторые репозитории apt используют сжатые метаданные LZMA (.xz). apt до версии 1.0 не может правильно (иногда) распаковывать архивы LZMA, что приводит к ошибке несоответствия хэш-суммы.

Для этого есть два пути:

  1. Скажите своему подходящему клиенту, чтобы он не использовал сжатые метаданные XZ.
  2. Обновите apt в своей системе до версии новее 1.0

Прочтите этот блог post Я писал об этой проблеме, в которой более подробно объясняются оба решения.

Во-вторых, репозитории APT по своей сути являются доступными . Фактические метаданные APT содержат ошибки, и их дизайн не позволяет клиентам apt согласованно загружать метаданные репозитория, если apt-get update происходит во время обновления репозитория.

Для этого есть два решения:

  1. Обновите до более новую версию APT и убедитесь, что репозиторий, который вы создаете (или хотите использовать), поддерживает Acquire-by-hash . Это решает проблему по сути, но в некоторых случаях это невозможно, если вы не контролируете репозиторий.
  2. Вы можете удалить кэшированные метаданные в вашей системе и попробовать еще раз. Для этого сначала запустите apt-get clean , а затем rm -rf / var / lib / apt / lists / * . Затем запустите apt-get update . Это повторно загрузит все метаданные. Если репозиторий, к которому вы пытаетесь подключиться, не обновляется, пока вы выполняете apt-get update , все будет в порядке.В противном случае вам придется сделать это снова.

0
09.09.2018, 16:39
2 ответа

С

for i in /var/log/*; do
    > "$i"
done

Если вы хотите избежать сообщений об ошибках для каталогов, включите тест.

for i in /var/log/*; do
    test -f "$i" && > "$i"
done
3
28.01.2020, 02:16

Другим вариантом в одной команде может бытьtruncate:

truncate -s /var/log/*

В приведенном выше примере будут выдаваться ошибки для любых подкаталогов /var/log, хотя:

truncate: cannot open '/var/log/subdir' for writing: Is a directory

... который можно отключить, удалив stderr:

truncate -s /var/log/* 2>/dev/null

Если нет ни файлов, ни каталогов, то следует опасаться текущей nullglobопции оболочки. По умолчанию он выключен :

.
$ shopt nullglob
nullglob        off

... который оставит *нераскрытым, и, таким образом, truncateсоздаст файл с именем *. Вы можете избежать этого двумя способами:

  1. установите nullglob:shopt -s nullglobперед запуском truncate. Затем вы (, если вы не удалили stderr ), увидите ошибку:

    truncate: missing file operand

  2. скажите truncateне создавать отсутствующие файлы:truncate --no-create -s 0 /var/log/*

2
28.01.2020, 02:16

Теги

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