Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.ru
Post #828
10.9K
Как проверить tar.gz без распаковки?
ㅤ
Да все просто, для начала создаем архив:
На выходе получаем годный
Для этого запускаем:
Ключ «t» как раз и запускает необходимый тест. Если все хорошо, то команда вернет статус:
Теперь ломаем архив:
И после проверки получаем:
А
Еще можно протестировать так:
Ну или банально распаковать в дев/нуль:
Bash скрипт для проверки может выглядеть так:
Чмодим и запускаем:
Такие дела.
Чуть позже покажу какие есть способы проверять целостность архивов которые ты заливаешь в s3. Очень полезно это проверять в рамках бекапов, когда локально оно у тебя все хорошо, а в s3 все нахуй битое-побитое лежит.
tags: #linux #bash
—
🔔 @bashdays➡️ @gitgate
ㅤ
Да все просто, для начала создаем архив:
tar -czvf bashdays.tar.gz /etc
На выходе получаем годный
bashdays.tar.gz. Теперь нужно проверить, что этот архив действительно годный и случайно не побился.Для этого запускаем:
tar -tzf bashdays.tar.gz
Ключ «t» как раз и запускает необходимый тест. Если все хорошо, то команда вернет статус:
echo $? ага выдаёт 0. Отлично!Теперь ломаем архив:
truncate -s -10 bashdays.tar.gz
И после проверки получаем:
tar -tzf bashdays.tar.gz
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
А
echo $? ага выдаёт 2. Ага. Зная это ты можешь тестировать архивы без распаковки и затем заливать их например в s3.Еще можно протестировать так:
gzip -t bashdays.tar.gz
Ну или банально распаковать в дев/нуль:
tar -xzf bashdays.tar.gz -O > /dev/null
Bash скрипт для проверки может выглядеть так:
#!/bin/bash
# Проверяем, передан ли аргумент
if [ $# -ne 1 ]; then
echo "Использование: $0 <файл архива>"
exit 1
fi
ARCHIVE="$1"
# Проверяем, существует ли файл
if [ ! -f "$ARCHIVE" ]; then
echo "Ошибка: файл '$ARCHIVE' не найден!"
exit 2
fi
# Определяем тип архива
if [[ "$ARCHIVE" == *.tar.gz || "$ARCHIVE" == *.tgz ]]; then
echo "Архив '$ARCHIVE' определён как tar.gz"
FORMAT="tar.gz"
elif [[ "$ARCHIVE" == *.tar ]]; then
echo "Архив '$ARCHIVE' определён как tar"
FORMAT="tar"
else
echo "Ошибка: неподдерживаемый формат архива!"
exit 3
fi
# Проверяем целостность архива
echo "Проверка содержимого архива..."
if ! tar -tzf "$ARCHIVE" &>/dev/null; then
echo "Ошибка: tar.gz архив повреждён!"
exit 4
fi
if [[ "$FORMAT" == "tar.gz" ]]; then
echo "Дополнительная проверка gzip..."
if ! gzip -t "$ARCHIVE" &>/dev/null; then
echo "Ошибка: gzip-архив повреждён!"
exit 5
fi
fi
echo "Архив '$ARCHIVE' проверен: ошибок не обнаружено."
exit 0
Чмодим и запускаем:
chmod +x check_tar.sh
./check_tar.sh bashdays.tar.gz
Такие дела.
Чуть позже покажу какие есть способы проверять целостность архивов которые ты заливаешь в s3. Очень полезно это проверять в рамках бекапов, когда локально оно у тебя все хорошо, а в s3 все нахуй битое-побитое лежит.
tags: #linux #bash
—
🔔 @bashdays➡️ @gitgate
