Mam skrypt bash, który tworzy plik „.tar”. Po utworzeniu pliku chciałbym przetestować jego integralność i wysłać wiadomość e-mail do użytkownika root, jeśli integralność jest zła.
Wiem, że musiałbym użyć polecenia, tar -tf /root/archive.taraby sprawdzić integralność pliku, ale jak mam to zaimplementować w instrukcji bash if i sprawdzić, czy nie ma błędów?
W przypadku tarznalezienia błędów na wejściu będzie exit(3)¹ z niezerową wartością wyjściową. Dzieje się tak - w przypadku większości tarimplementacji - również podczas wyświetlania zawartości archiwum t. Możesz więc po prostu sprawdzić wartość wyjściową, taraby ustalić, czy coś poszło nie tak:
if! tar tf /root/archive.tar &>/dev/null;then
write_an_email_to_root
fi
Jeśli tarnie znajdziesz wszystkich błędów t, nadal możesz wyodrębnić archiwum stdouti przekierować stdoutdo niego /dev/null, co byłoby wolniejszym, ale bardziej niezawodnym podejściem:
if! tar xOf /root/archive.tar &>/dev/null;then
write_an_email_to_root
fi
¹ Ten zapis oznacza stronę podręcznika, a nie rzeczywiste połączenie. Zobaczyć man 3 exit.
Prawdopodobnie będziesz chciał przekierować tarwyjście /dev/null, ponieważ prawdopodobnie nie chcesz go zobaczyć.
Kevin
1
Nie wszystkie tarimplementacje wykrywają lub zgłaszają wszystkie błędy za pomocą t( bsdtarnie, można tar xOf file.tar > /dev/nulltam użyć ). Nie wszystkie tarimplementacje zakończyłyby się ze statusem wyjścia 2, star(255) ot bsdtar(1) nie, ale ważne jest to, że status wyjścia jest tutaj niezerowy.
Stéphane Chazelas
1
Zredagowałem odpowiednio mój post. Z exit(2)zostałem odnośnie do odpowiedniego podręcznika, a nie dokładną wartość exit (dlatego miałem »niezerową« wyraźnie wymienione w zdaniu). Zanotował to (i zmienił sekcję na prawą -.-).
Andreas Wiese
twoja odpowiedź dotyczy tylko możliwości wylistowania i wypakowania, jeśli otworzę archiwum tar w edytorze i zmienię coś, twoje rozwiązanie nie
wykryje
0
przepraszam, ale nie możesz, wygląda na to, że tar nie ma możliwości testowania (na przykład jeśli zapomnisz o * nix i spróbujesz przetestować go za pomocą winrar, wynik będzie następujący: „Polecenie nie jest obsługiwane dla tego typu archiwum”)
jak wskazałem w komentarzach powyżej, tar dosłownie nie ma wewnętrznego CRC, aby mieć termin porównania, dlatego jeśli zmienisz archiwum tar za pomocą edytora, wyświetlanie i rozpakowywanie może działać bezbłędnie bez błędów, ale wyodrębniać uszkodzone dane
Podsumowując, kończę tutaj, mając nadzieję na rozwiązanie, ale nie ma jednego, na szczęście są dwie dobre wiadomości:
istnieją bardzo, bardzo BARDZO rzadkie archiwa tar, które nie są również kompresowane z innym programem (takim jak gzip, bzip2 itp.), dlatego ten program będzie miał rozwiązanie testowe, a ludzie, którzy go nie kompresują, są trochę lamani, NAPRAWDĘ LAME
na mój osobisty problem, mam szczęście, po wypakowaniu go właśnie znalazłem plik md5sum z CRC wszystkich plików w nim zawartych (nawet osoba, która umieściła tar w arhive i nie chciała go skompresować, nadal chciał być możliwe do zweryfikowania)
Odpowiedzi w jednym wierszu często nie są zbyt pomocne. Zastanów się nad poszerzeniem swojego postu o materiał źródłowy (np. Dokumentację), który obsługuje twoje rozwiązanie.
HalosGhost
7
-ctworzy plik o nazwie via -f(„test.tar”). -zgzips archiwum. -vsprawia, że jest pełny. Jestem prawie pewien, że to nie jest dokładne rozwiązanie.
tar
wyjście/dev/null
, ponieważ prawdopodobnie nie chcesz go zobaczyć.tar
implementacje wykrywają lub zgłaszają wszystkie błędy za pomocąt
(bsdtar
nie, możnatar xOf file.tar > /dev/null
tam użyć ). Nie wszystkietar
implementacje zakończyłyby się ze statusem wyjścia 2,star
(255) otbsdtar
(1) nie, ale ważne jest to, że status wyjścia jest tutaj niezerowy.exit(2)
zostałem odnośnie do odpowiedniego podręcznika, a nie dokładną wartość exit (dlatego miałem »niezerową« wyraźnie wymienione w zdaniu). Zanotował to (i zmienił sekcję na prawą -.-).przepraszam, ale nie możesz, wygląda na to, że tar nie ma możliwości testowania (na przykład jeśli zapomnisz o * nix i spróbujesz przetestować go za pomocą winrar, wynik będzie następujący: „Polecenie nie jest obsługiwane dla tego typu archiwum”)
jak wskazałem w komentarzach powyżej, tar dosłownie nie ma wewnętrznego CRC, aby mieć termin porównania, dlatego jeśli zmienisz archiwum tar za pomocą edytora, wyświetlanie i rozpakowywanie może działać bezbłędnie bez błędów, ale wyodrębniać uszkodzone dane
Podsumowując, kończę tutaj, mając nadzieję na rozwiązanie, ale nie ma jednego, na szczęście są dwie dobre wiadomości:
istnieją bardzo, bardzo BARDZO rzadkie archiwa tar, które nie są również kompresowane z innym programem (takim jak gzip, bzip2 itp.), dlatego ten program będzie miał rozwiązanie testowe, a ludzie, którzy go nie kompresują, są trochę lamani, NAPRAWDĘ LAME
na mój osobisty problem, mam szczęście, po wypakowaniu go właśnie znalazłem plik md5sum z CRC wszystkich plików w nim zawartych (nawet osoba, która umieściła tar w arhive i nie chciała go skompresować, nadal chciał być możliwe do zweryfikowania)
źródło
Możesz to zrobić, przekazując następujące argumenty do
tar
:źródło
-c
tworzy plik o nazwie via-f
(„test.tar”).-z
gzips archiwum.-v
sprawia, że jest pełny. Jestem prawie pewien, że to nie jest dokładne rozwiązanie.