smoła (obliczenia) - tar (computing)

smoła
Pierwotny autor (autorzy) AT&T Bell Laboratories
Deweloper(zy) Różne open-source i komercyjnych deweloperów
Pierwsze wydanie styczeń 1979 ; 42 lata temu ( 1979-01 )
Wersja stabilna
1,34/13 lutego 2021 ; 8 miesięcy temu ( 13.02.2021 )
Napisane w pdtar, gwiazda, Plan 9 , GNU : C
System operacyjny Unix , Unix , Plan 9 , Microsoft Windows , IBM i
Platforma Wieloplatformowy
Rodzaj Komenda
Licencja pdtar: Gwiazda domeny publicznej
: CDDL
Plan 9: MIT
GNU: GPLv3+
smoła
Rozszerzenie nazwy pliku
.smoła
Rodzaj mediów internetowych
aplikacja/x-tar
Jednolity identyfikator typu (UTI) public.tar-archiwum
magiczny numer u s t a r \0 0 0  przy przesunięciu 257 bajtów (dla wersji POSIX)

u s t a r \040 \040 \0  (dla starego formatu tar GNU)

nieobecny w wersjach pre-POSIX
Najnowsze wydanie
różne
(różne)
Rodzaj formatu Archiwizator plików
Standard POSIX od POSIX.1, obecnie w definicji pax [1]
Otwarty format ? tak

W obliczeniowej , smoła jest narzędziem oprogramowanie komputerowe do gromadzenia wielu plików w jednym pliku archiwum , często określane jako archiwum , do dystrybucji lub do celów archiwizacji. Nazwa pochodzi od „ t małpa ar szczypiorek”, jak to było pierwotnie opracowany do zapisu danych sekwencyjnej I / O urządzeń bez systemu plików własnych. Zestawy danych archiwalnych utworzone przez tar zawierają różne parametry systemu plików , takie jak nazwa, sygnatury czasowe, własność, uprawnienia dostępu do plików i organizacja katalogów .

Historia

Narzędzie wiersza poleceń zostało po raz pierwszy wprowadzone w systemie Unix w wersji 7 w styczniu 1979 roku, zastępując program tp. Struktura plików do przechowywania tych informacji została ustandaryzowana w POSIX .1-1988 i późniejszych POSIX.1-2001 i stała się formatem obsługiwanym przez większość nowoczesnych systemów archiwizacji plików.

Obecnie uniksopodobne systemy operacyjne zazwyczaj zawierają narzędzia do obsługi plików tar, a także narzędzia powszechnie używane do ich kompresji, takie jak gzip i bzip2 .

BSD-tar został dołączony do systemu Microsoft Windows od aktualizacji systemu Windows 10 z kwietnia 2018 r. , a poza tym dostępnych jest wiele narzędzi innych firm do odczytu i zapisu tych formatów w systemie Windows.

Komenda tar została również przeniesiona do systemu operacyjnego IBM i .

Racjonalne uzasadnienie

Wiele historycznych napędów taśmowych odczytuje i zapisuje bloki danych o zmiennej długości , pozostawiając na taśmie znaczną ilość wolnego miejsca między blokami (dla fizycznego rozpoczęcia i zatrzymania taśmy). Niektóre napędy taśmowe (i dyski surowe) obsługują tylko bloki danych o stałej długości. Ponadto podczas pisania na dowolnym nośniku, takim jak system plików lub sieć, zapisanie jednego dużego bloku zajmuje mniej czasu niż wielu małych bloków. Dlatego polecenie tar zapisuje dane w rekordach wielu bloków 512  B. Użytkownik może określić współczynnik blokowania, czyli liczbę bloków na rekord. Wartość domyślna to 20, co daje 10  KiB rekordów.

Format pliku

Archiwum tar składa się z szeregu obiektów plików, stąd popularny termin tarball , odnoszący się do tego, w jaki sposób archiwum tar zbiera wszelkiego rodzaju obiekty, które przyklejają się do jego powierzchni. Każdy obiekt plikowy zawiera dowolne dane pliku i jest poprzedzony 512-bajtowym rekordem nagłówka . Dane pliku są zapisywane bez zmian, z wyjątkiem tego, że ich długość jest zaokrąglana do wielokrotności 512 bajtów. Oryginalna implementacja tar nie dbała o zawartość bajtów wypełniających i pozostawiła dane bufora niezmienione, ale większość nowoczesnych implementacji tar wypełnia dodatkową przestrzeń zerami. Koniec archiwum jest oznaczony przez co najmniej dwa kolejne rekordy wypełnione zerami. (Źródłem rozmiaru rekordu tar wydają się być 512-bajtowe sektory dysku używane w systemie plików Unix w wersji 7.) Ostatni blok archiwum jest dopełniany do pełnej długości zerami.

nagłówek

Rekord nagłówka pliku zawiera metadane dotyczące pliku. Aby zapewnić przenośność w różnych architekturach z różną kolejnością bajtów , informacje w rekordzie nagłówka są kodowane w ASCII . Zatem jeśli wszystkie pliki w archiwum są plikami tekstowymi ASCII i mają nazwy ASCII, to archiwum jest zasadniczo plikiem tekstowym ASCII (zawierającym wiele znaków NUL ).

Pola zdefiniowane przez oryginalny format tar Unix są wymienione w poniższej tabeli. Tabela wskaźników linków/typów plików zawiera kilka nowoczesnych rozszerzeń. Gdy pole nie jest używane, jest wypełniane bajtami NUL. Nagłówek używa 257 bajtów, a następnie jest uzupełniany bajtami NUL, aby wypełnić rekord 512 bajtów. W nagłówku nie ma "magicznego numeru" do identyfikacji pliku.

Nagłówek tar sprzed POSIX.1-1988 (tj. v7):

Przesunięcie pola Rozmiar pola Pole
0 100 Nazwa pliku
100 8 Tryb pliku (ósemkowy)
108 8 Numeryczny identyfikator użytkownika właściciela (ósemkowy)
116 8 Numeryczny identyfikator użytkownika grupy (ósemkowy)
124 12 Rozmiar pliku w bajtach (ósemka)
136 12 Czas ostatniej modyfikacji w numerycznym formacie czasu Unix (ósemkowym)
148 8 Suma kontrolna rekordu nagłówka
156 1 Wskaźnik łącza (typ pliku)
157 100 Nazwa połączonego pliku

Pole wskaźnika łącza sprzed POSIX.1-1988 może mieć następujące wartości:

Pole wskaźnika łącza
Wartość Oznaczający
'0' lub ( ASCII NUL ) Normalny plik
„1” Twardy link
'2' Dowiązanie symboliczne

Niektóre implementacje tar sprzed wersji POSIX.1-1988 wskazywały katalog przez ukośnik (/) w nazwie.

Wartości numeryczne są kodowane w liczbach ósemkowych przy użyciu cyfr ASCII, z wiodącymi zerami. Ze względów historycznych należy również użyć końcowego znaku NUL lub spacji . Tak więc, chociaż zarezerwowanych jest 12 bajtów do przechowywania rozmiaru pliku, można zapisać tylko 11 cyfr ósemkowych. Daje to maksymalny rozmiar pliku 8 gigabajtów w plikach zarchiwizowanych. Aby przezwyciężyć to ograniczenie, w 2001 r. firma star wprowadziła kodowanie o podstawie 256, które jest wskazywane przez ustawienie bitu wyższego rzędu w skrajnym lewym bajcie pola numerycznego. GNU-tar i BSD-tar podążyły za tym pomysłem. Dodatkowo wersje tar sprzed pierwszego standardu POSIX z 1988 roku uzupełniają wartości spacjami zamiast zer.

Suma kontrolna jest obliczana jako suma wartości bajtowych unsigned o rekordzie nagłówka z ośmiu bajtów sum kontrolnych podjętych być obowiązuje ASCII (wartość dziesiętna 32). Jest przechowywany jako sześciocyfrowa liczba ósemkowa z wiodącymi zerami, po których następuje znak NUL i spacja. Różne implementacje nie są zgodne z tym formatem. Ponadto niektóre historyczne implementacje tar traktowały bajty jako podpisane. Implementacje zazwyczaj obliczają sumę kontrolną w obie strony i traktują ją jako dobrą, jeśli suma ze znakiem lub bez znaku jest zgodna z uwzględnioną sumą kontrolną.

Systemy plików Unix obsługują wiele łączy (nazw) dla tego samego pliku. Jeśli w archiwum tar pojawia się kilka takich plików, tylko pierwszy z nich jest archiwizowany jako normalny plik; reszta jest archiwizowana jako twarde linki, z polem "nazwa dołączonego pliku" ustawionym na nazwę pierwszego z nich. Po wyodrębnieniu takie dowiązania twarde powinny zostać odtworzone w systemie plików.

Format USstar

Większość nowoczesnych programów tar odczytuje i zapisuje archiwa w formacie UStar ( Unix Standard TAR ), wprowadzonym przez standard POSIX IEEE P1003.1 od 1988 roku. Wprowadzono dodatkowe pola nagłówka. Starsze programy tar zignorują dodatkowe informacje (prawdopodobnie wyodrębniając częściowo nazwane pliki), podczas gdy nowsze będą sprawdzać obecność ciągu „ustar”, aby określić, czy nowy format jest używany. Format USstar pozwala na dłuższe nazwy plików i przechowuje dodatkowe informacje o każdym pliku. Maksymalny rozmiar nazwy pliku to 256, ale jest on dzielony między poprzedzającą ścieżkę „prefiks nazwy pliku” i samą nazwę pliku, więc może być znacznie mniejszy.

Przesunięcie pola Rozmiar pola Pole
0 156 (Kilka pól, jak w starym formacie)
156 1 Wpisz flagę
157 100 (To samo pole jak w starym formacie)
257 6 Wskaźnik USstar „ustar”, a następnie NUL
263 2 Wersja USstar "00"
265 32 Nazwa użytkownika właściciela
297 32 Nazwa grupy właścicieli
329 8 Numer główny urządzenia
337 8 Numer podrzędny urządzenia
345 155 Prefiks nazwy pliku

Pole flagi typu może mieć następujące wartości:

Wpisz pole flagi
Wartość Oznaczający
'0' lub ( ASCII NUL ) Normalny plik
„1” Twardy link
'2' Dowiązanie symboliczne
„3” Znak specjalny
„4” Blokuj specjalne
„5” Informator
'6' FIFO
'7' Ciągły plik
'g' Globalny rozszerzony nagłówek z metadanymi (POSIX.1-2001)
'x' Rozszerzony nagłówek z metadanymi dla następnego pliku w archiwum (POSIX.1-2001)
„A”–„Z” Rozszerzenia specyficzne dla dostawcy (POSIX.1-1988)
Wszystkie inne wartości Zarezerwowane do przyszłej standaryzacji

Rozszerzenia POSIX.1-1988 specyficzne dla dostawcy wykorzystujące wartości flag linków „A”…„Z” mają częściowo inne znaczenie u różnych dostawców i dlatego są postrzegane jako przestarzałe i zastępowane przez rozszerzenia POSIX.1-2001, które zawierają również znacznik dostawcy .

Typ '7' (Plik ciągły) jest formalnie oznaczony jako zarezerwowany w standardzie POSIX, ale miał wskazywać pliki, które powinny być umieszczone na dysku w sposób ciągły. Niewiele systemów operacyjnych obsługuje jawne tworzenie takich plików, dlatego większość programów TAR ich nie obsługuje i będzie traktować pliki typu 7 tak, jakby były typu 0 (zwykłe). Wyjątkiem są starsze wersje GNU tar, działające w systemie operacyjnym MASSCOMP RTU (Real Time Unix), który obsługuje flagę O_CTG funkcji open() w celu żądania ciągłego pliku; jednak wsparcie to zostało usunięte z wersji GNU tar 1.24 i nowszych.

POSIX.1-2001/os.

W 1997 roku Sun zaproponował metodę dodawania rozszerzeń do formatu tar. Ta metoda została później zaakceptowana dla standardu POSIX.1-2001. Ten format jest znany jako rozszerzony format tar lub format pax . Nowy format tar umożliwia użytkownikom dodawanie dowolnych ulepszeń specyficznych dla dostawców oznaczonych tagami. Następujące znaczniki są zdefiniowane przez standard POSIX:

  • atime , mtime : wszystkie znaczniki czasu pliku w dowolnej rozdzielczości (większość implementacji używa granulacji nanosekundowej)
  • path : nazwy ścieżek o nieograniczonej długości i kodowanie zestawu znaków
  • linkpath : nazwy docelowe dowiązania symbolicznego o nieograniczonej długości i kodowaniu zestawu znaków
  • uname , gname : nazwy użytkowników i grup o nieograniczonej długości oraz kodowanie zestawu znaków
  • rozmiar : pliki o nieograniczonym rozmiarze (historyczny format tar to 8 GB)
  • uid , gid : userid i groupid bez ograniczenia rozmiaru (ten historyczny format tar był ograniczony do maksymalnego identyfikatora 2097151)
  • definicja zestawu znaków dla nazw ścieżek i nazw użytkowników/grup ( UTF-8 )

W 2001 roku program Star stał się pierwszą smołą obsługującą nowy format. W 2004 roku GNU tar obsługiwał nowy format, chociaż nie zapisuje go jeszcze jako domyślnego wyjścia programu tar.

Został zaprojektowany tak, aby wszystkie implementacje potrafiące odczytywać format USstar również mogły czytać POSIX.1-2001. Jedynymi wyjątkami są pliki korzystające z rozszerzonych funkcji, takich jak dłuższe nazwy plików. Dla kompatybilności są one zakodowane w plikach tar jako pliki specjalne xlub gtypy. zazwyczaj w PaxHeaders.XXXXkatalogu. Implementacja wspierająca Pax wykorzystałaby te informacje, podczas gdy nieobsługujące, takie jak 7-Zip , przetwarzałoby je jako dodatkowe pliki.

Ograniczenia

Oryginalny format smoły powstał we wczesnych dniach Uniksa i pomimo obecnego powszechnego użycia, wiele jego cech konstrukcyjnych uważa się za przestarzałe.

Wiele starszych implementacji tar nie rejestruje ani nie przywraca rozszerzonych atrybutów (xattrs) ani list kontroli dostępu (ACL). W 2001 r. Star wprowadził obsługę list ACL i rozszerzonych atrybutów poprzez własne znaczniki dla POSIX.1-2001 pax. Bsdtar używa rozszerzeń gwiazdy do obsługi list ACL. Nowsze wersje GNU tar obsługują rozszerzone atrybuty Linuksa, reimplementując rozszerzenia gwiaździste. Szereg rozszerzeń jest omówionych w podręczniku typów plików dla tar BSD, tar(5).

Inne formaty zostały stworzone w celu usunięcia niedociągnięć smoły.

Tarbomb

Tarbomb w hakerów slangu , to plik tar, które zawiera wiele plików, które ekstraktu do katalogu roboczego. Taki plik tar może stwarzać problemy przez nadpisywanie plików o tej samej nazwie w katalogu roboczym lub mieszanie plików jednego projektu z innym. Jest to co najwyżej niedogodność dla użytkownika, który jest zobowiązany do zidentyfikowania i usunięcia szeregu plików przeplatanych innymi treściami katalogu. Takie zachowanie jest uważane za złą etykietę twórcy archiwum.

Pokrewnym problemem jest używanie bezwzględnych ścieżek lub odniesień do katalogu nadrzędnego podczas tworzenia plików tar. Pliki wyodrębnione z takich archiwów będą często tworzone w nietypowych lokalizacjach poza katalogiem roboczym i, podobnie jak tarbomb, mogą potencjalnie nadpisywać istniejące pliki. Jednak współczesne wersje FreeBSD i GNU tar domyślnie nie tworzą ani nie wyodrębniają bezwzględnych ścieżek i odniesień do katalogów nadrzędnych, chyba że jest to wyraźnie dozwolone za pomocą flagi -Plub opcji --absolute-names. Program bsdtar, który jest również dostępny w wielu systemach operacyjnych i jest domyślnym narzędziem tar w systemie Mac OS X 10.6, również nie śledzi odniesień do katalogu nadrzędnego ani dowiązań symbolicznych.

Jeśli użytkownik ma dostępną tylko bardzo starą tar, która nie zawiera tych zabezpieczeń, problemy te można złagodzić, najpierw sprawdzając plik tar za pomocą polecenia tar tf archive.tar, które wyświetla zawartość i pozwala później wykluczyć problematyczne pliki. Te polecenia nie wyodrębniają żadnych plików, ale wyświetlają nazwy wszystkich plików w archiwum. Jeśli jakiekolwiek są problematyczne, użytkownik może utworzyć nowy pusty katalog i rozpakować do niego archiwum — lub całkowicie uniknąć pliku tar. Większość narzędzi graficznych może wyświetlić zawartość archiwum przed ich rozpakowaniem. Vim może otwierać archiwa tar i wyświetlać ich zawartość. GNU Emacs jest również w stanie otworzyć archiwum tar i wyświetlić jego zawartość w zniszczonym buforze.

Losowy dostęp

Format tar został zaprojektowany bez scentralizowanego indeksu lub spisu treści dla plików i ich właściwości do przesyłania strumieniowego na urządzenia do tworzenia kopii zapasowych na taśmach. Archiwum musi być odczytywane sekwencyjnie, aby wyświetlić lub wyodrębnić pliki. W przypadku dużych archiwów tar powoduje to spadek wydajności, przez co archiwa tar są nieodpowiednie w sytuacjach, które często wymagają losowego dostępu do poszczególnych plików.

Duplikaty

Innym problemem związanym z formatem tar jest to, że pozwala kilku (prawdopodobnie różnym) plikom w archiwum mieć identyczną ścieżkę i nazwę pliku. Podczas rozpakowywania takiego archiwum zwykle druga wersja pliku nadpisuje poprzednią.

Może to stworzyć niejawny (nieoczywisty) tarbomb, który technicznie nie zawiera plików ze ścieżkami bezwzględnymi lub odsyłającymi katalogami nadrzędnymi, ale nadal powoduje nadpisywanie plików poza bieżącym katalogiem (na przykład archiwum może zawierać dwa pliki o tej samej ścieżce i nazwie pliku, z których pierwszy jest dowiązaniem symbolicznym do jakiejś lokalizacji poza bieżącym katalogiem, a drugi z nich jest zwykłym plikiem, a następnie rozpakowanie takiego archiwum w niektórych implementacjach tar może spowodować zapis do lokalizacji wskazywanej przez dowiązanie symboliczne).

Kluczowe wdrożenia

Historycznie wiele systemów zaimplementowało tar, a wiele ogólnych archiwów plików ma przynajmniej częściową obsługę tar (często przy użyciu jednej z poniższych implementacji). Historia smoły to opowieść o niezgodnościach, zwanych „wojnami smołowymi”. Większość implementacji tar może również czytać i tworzyć cpio i pax (ten ostatni jest w rzeczywistości formatem tar z rozszerzeniami POSIX -2001).

Kluczowe wdrożenia w kolejności pochodzenia:

  • Solaris smoła , oparty na oryginalnym Unix V7 smoły i przychodzi jako domyślny w systemie operacyjnym Solaris
  • GNU tar jest domyślny w większościdystrybucji Linuksa . Opiera się na publicznym wdrożeniu pdtar, które rozpoczęło się w 1987 roku. Najnowsze wersje mogą używać różnych formatów, w tym formatów ustar, pax, GNU i v7.
  • FreeBSD tar (również tar BSD ) stał się domyślnym smoła na większości Berkeley Software Distribution opartych systemów operacyjnych, w tym Mac OS X . Podstawowa funkcjonalność jest dostępna jako biblioteka do włączenia w innych aplikacjach. Ta implementacja automatycznie wykrywa format pliku i może wyodrębnić z obrazów cdrom tar, pax, cpio, zip, jar, ar, xar, rpm i ISO 9660. Jest również wyposażony w funkcjonalnie równoważny interfejs wiersza poleceń cpio.
  • Schily tar , lepiej znany jako gwiazda , ma znaczenie historyczne, ponieważ niektóre z jego rozszerzeń były dość popularne. Jest to najstarsza darmowa smoła z 1982 roku.

Dodatkowo, większość implementacji pax i cpio potrafi czytać i tworzyć wiele typów plików tar.

Przyrostki do skompresowanych plików

Pliki archiwum tar zwykle mają rozszerzenie .tar (np. jakiśplik.tar ).

Plik archiwum tar zawiera nieskompresowane strumienie bajtów plików, które zawiera. Aby uzyskać kompresję archiwum, dostępne są różne programy do kompresji , takie jak gzip , bzip2 , xz , lzip , lzma , zstd lub compress , które kompresują całe archiwum tar. Zazwyczaj skompresowana forma archiwum otrzymuje nazwę pliku przez dodanie specyficznego dla formatu przyrostka kompresora do nazwy pliku archiwum. Na przykład archiwum tar archive.tar nosi nazwę archive.tar.gz , gdy jest skompresowane przez gzip.

Popularne programy tar, takie jak wersje BSD i GNU tar obsługują opcje wiersza poleceń Z (kompresuj), z (gzip) i j (bzip2) do kompresji lub dekompresji pliku archiwum podczas tworzenia lub rozpakowywania. GNU tar od wersji 1.20 wzwyż obsługuje również opcję --lzma ( LZMA ). 1.21 dodano obsługę lzop za pomocą --lzop . 1.22 dodano obsługę xz z --xz lub -J . 1.23 dodano obsługę lzip z --lzip . 1.31 dodano obsługę zstd za pomocą --zstd . Dekompresja tych formatów jest obsługiwana automatycznie, jeśli używane są obsługiwane rozszerzenia nazw plików, a kompresja jest obsługiwana automatycznie przy użyciu tych samych rozszerzeń nazw plików, jeśli opcja --auto-compress (krótka forma -a ) jest przekazywana do odpowiedniej wersji GNU tar.

MS-DOS „s 8,3 filename ograniczenia spowodowały dodatkowych konwencji nazewnictwa skompresowanych archiwów tar. Jednak ta praktyka została zarzucona, ponieważ FAT oferuje teraz długie nazwy plików .

Archiwizacja tar jest często używana razem z metodą kompresji, taką jak gzip , do tworzenia skompresowanego archiwum. Jak pokazano, kombinacja plików w archiwum jest skompresowana jako jedna jednostka.
Odpowiedniki przyrostków plików
Długie Niski
.tar.bz2 .tb2, .tbz, .tbz2, .tz2
.tar.gz .taz, .tgz
.tar.lz
.tar.lzma .tlz
.tar.lzo
.tar.xz .txt
.tar.Z .tZ, .taZ
.tar.zst .tzst

Zobacz też

Bibliografia

Zewnętrzne linki