Oprócz tego, co wcześniej powiedzieli grawity i Paul :
Historia
W „dawnych czasach”, cpio (z opcją -c
używany) był narzędzie do wykorzystania, gdy przyszło do przenoszenia plików do innych pochodnych UNIX, ponieważ był bardziej mobilny i elastyczny niż smoła . Ale problemy z przenoszeniem zawartości substancji smolistych można uznać za rozwiązane od późnych lat osiemdziesiątych.
Niestety, w tym czasie różni dostawcy zniekształcili -c
format cpio (wystarczy spojrzeć na stronę podręcznika dla GNU cpio i tej opcji -H
). W tym czasie smoła stała się bardziej przenośna niż CPIO ... Zajęło to prawie całą dekadę, zanim różni dostawcy UNIXa to rozwiązali. Mając GNU tar i GNU cpio zainstalowana była obowiązkowa dla wszystkich administratorów, które miały do czynienia z taśmami z różnych źródeł, a następnie z powrotem (nawet w dzisiejszych czasach jak mniemam).
Interfejs użytkownika
tar może użyć pliku konfiguracji taśmy, w którym administrator skonfigurowałby napędy taśm podłączone do systemu. Użytkownik powiedziałby wtedy „Cóż, wezmę napęd taśmowy 1” zamiast pamiętać dokładny węzeł urządzenia dla taśmy (co może być bardzo mylące i nie jest standaryzowane na różnych platformach UNIX.
Ale główna różnica polega na:
tar potrafi samodzielnie przeszukiwać katalogi i pobiera listę plików lub katalogów, których kopie zapasowe należy utworzyć z argumentów wiersza poleceń.
cpio archiwizuje tylko pliki lub katalogi, do których jest skierowany, ale nie przeszukuje podkatalogów samodzielnie. Również cpio pobiera listę elementów, które należy zarchiwizować ze standardowego wejścia - dlatego prawie zawsze jest używany w połączeniu z funkcją find .
Cpio polecenia często wygląda przerażające dla początkujących w porównaniu ze smoły :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
Myślę, że to jest główny powód, dla którego większość ludzi używa tar do tworzenia plików archiwalnych: w przypadku prostych zadań, takich jak łączenie całego katalogu, jest to po prostu łatwiejsze w użyciu.
Również GNU tar oferuje opcję, -z
która powoduje, że archiwum jest kompresowane za pomocą GNU zip w locie, dzięki czemu wszystko jest jeszcze łatwiejsze.
Z drugiej strony można robić sprytne rzeczy za pomocą find & cpio . W rzeczywistości jest to podejście bardziej podobne do systemu UNIX: Po co włączać wyszukiwanie drzewa katalogów do cpio, jeśli istnieje już narzędzie, które zajmuje się prawie wszystkim, co można sobie wyobrazić: znaleźć . Przychodzi mi na myśl tworzenie kopii zapasowych plików nowszych niż określona data, ograniczanie plików do plików znajdujących się w tym samym systemie plików lub filtrowanie wyników wyszukiwania w grep -v
celu wykluczenia niektórych plików ...
Ludzie GNU tar spędzili dużo pracy, aby uwzględnić wiele rzeczy, które wcześniej były możliwe tylko z cpio . W rzeczywistości oba narzędzia uczyły się od siebie nawzajem - ale tylko procesor może odczytać format tar - nie na odwrót.
przetwarzanie smoły i danych wyjściowych
Ostatnia uwaga do czegoś, co powiedziałeś:
Powiedziano mi również, że TAR nie może kompresować z STDOUT. Chcę archiwizować / kompresować migawki ZFS do tworzenia kopii zapasowych. Zastanawiałem się, czy mógłbym połączyć CPIO z bzip2, aby uzyskać ten efekt.
Cóż, każda wersja tar (GNU lub nie) może być używana w potoku. Wystarczy użyć znaku minus ( -
) jako nazwy archiwum:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
Również GNU tar oferuje opcję --to-command
określenia polecenia postprocesora - chociaż nadal wolałbym potok. Może przydaje się podczas pisania na niektóre urządzenia.
pax
: P