Во-первых, вы должны понять, почему возникают ошибки несоответствия хэш-суммы. В общем, есть 2 причины:
Во-первых, некоторые репозитории apt используют сжатые метаданные LZMA (.xz). apt до версии 1.0 не может правильно (иногда) распаковывать архивы LZMA, что приводит к ошибке несоответствия хэш-суммы.
Для этого есть два пути:
Прочтите этот блог post Я писал об этой проблеме, в которой более подробно объясняются оба решения.
Во-вторых, репозитории APT по своей сути являются доступными . Фактические метаданные APT содержат ошибки, и их дизайн не позволяет клиентам apt согласованно загружать метаданные репозитория, если apt-get update
происходит во время обновления репозитория.
Для этого есть два решения:
apt-get clean
, а затем rm -rf / var / lib / apt / lists / *
. Затем запустите apt-get update
. Это повторно загрузит все метаданные. Если репозиторий, к которому вы пытаетесь подключиться, не обновляется, пока вы выполняете apt-get update
, все будет в порядке.В противном случае вам придется сделать это снова. С
for i in /var/log/*; do
> "$i"
done
Если вы хотите избежать сообщений об ошибках для каталогов, включите тест.
for i in /var/log/*; do
test -f "$i" && > "$i"
done
Другим вариантом в одной команде может быть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
создаст файл с именем *
. Вы можете избежать этого двумя способами:
установите nullglob:shopt -s nullglob
перед запуском truncate
. Затем вы (, если вы не удалили stderr ), увидите ошибку:
truncate: missing file operand
скажите truncate
не создавать отсутствующие файлы:truncate --no-create -s 0 /var/log/*