Перевірка цілісності файлу tar у файлі bash


25

У мене є сценарій bash, який створює файл '.tar'. Після створення файлу я хотів би перевірити його цілісність та надіслати електронний лист кореневому користувачеві, якщо цілісність погана.

Я знаю, що мені потрібно використовувати команду tar -tf /root/archive.tarдля перевірки цілісності файлу, але як би я реалізував це в bash, якщо оператор і перевіряв на помилки?

Відповіді:


33

Якщо ви tarзнайдете помилки у своєму введенні, воно буде exit(3)¹ із ненульовим значенням виходу. Це - з більшістю tarреалізацій - також робиться при перерахуванні вмісту архіву t. Таким чином, ви можете просто перевірити значення виходу, tarщоб визначити, чи щось пішло не так:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

Якщо ваш tarгоді й шукати всі помилки з t, ще можна було витягти з архіву в stdoutі переадресацією stdoutдо /dev/null, який буде повільніше , але більш надійний підхід:

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

¹ Це позначення позначає сторінку, а не власне виклик. Див man 3 exit.


1
Ви, ймовірно, захочете перенаправити tarвихід /dev/null, оскільки ви, мабуть, насправді не хочете його бачити.
Кевін

1
Не всі tarреалізації виявляють або повідомляють про всі помилки за допомогою t( bsdtarні, ви можете використовувати tar xOf file.tar > /dev/nullтам). Не всі tarреалізації виходитимуть із статусом виходу 2, star(255) ot bsdtar(1) - ні, але важливо, що статус виходу тут не дорівнює нулю.
Стефан Шазелас

1
Я відповідно редагував свою посаду. З exit(2)мене в ставленні до відповідній сторінці керівництва, а не точне значення виходу (саме тому я мав »ненульовий« явно згадується в наступному реченні). Анотував це (і змінив розділ на правий -.-).
Андреас Візе

Ваша відповідь стосується лише можливості лістингу та вилучення, якщо я відкрию архів tar з редактором і щось зміню, ваше рішення не спричинить помилок ... Вибачте
THESorcerer

0

вибачте, але ви не можете, здається, що tar не вистачає можливостей тестування (наприклад, якщо ви забудете про * nix і спробуєте перевірити його за допомогою winrar, результат буде таким: "Команда не підтримується для цього типу архіву")

як я зазначив у коментарях вище, у tar буквально не вистачає внутрішнього CRC, щоб мати термін порівняння, тому, якщо ви зміните архів tar, редактором, перелік та вилучення може працювати бездоганно без помилок, але витягуйте пошкоджені дані

на закінчення я закінчую тут сподіваючись на рішення, але не існує жодної, на щастя, є дві хороші новини:

Є дуже, дуже ДУЖЕ архіви рідкісного дьогтю, які також не стискаються з іншою програмою (наприклад, gzip, bzip2 і т. д.), тому ця програма матиме рішення для тестування, і люди, які не стискають їх, начебто кульгаві, НАСТУПНО ЛАЙТЕ

для моєї особистої проблеми, мені пощастило, після її вилучення я щойно знайшов файл md5sum з CRC усіх файлів всередині (навіть людина, яка клала архівний тар в мережу і не хотіла його стискати, він все-таки хотів бути може бути перевірений)


-5

Це можна зробити, передавши такі аргументи tar:

$ tar -cvzf test.tar test_file

2
Однорядкові відповіді часто не так корисні. Спробуйте розширити свою публікацію, щоб включити деякі вихідні матеріали (наприклад, документацію), що підтримують ваше рішення.
HalosGhost

7
-cстворює файл з ім'ям via -f('test.tar'). -zgzips архіву. -vробить його багатослівним. Я майже впевнений, що це не точне рішення.
EpicVoyage
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.