nazwa tar
jest, według większości kont, skrótem od Tape archive. „Taśmy”, o których mowa, to wszystkie te magnetyczne napędy pamięci masowej, które były popularne aż do 1950 roku.
to sugeruje, że tar
narzędzie może być nieco stare i już po premierze. Ale prawda jest taka, że przez wszystkie lata i przez wszystkie sejsmiczne zmiany w świecie IT, tar
nie stracił żadnej ze swojej mocy i wartości.
w tym artykule, opartym na treści z mojej książki Linux in Action, pokażę Ci podstawy tworzenia, kompresji i przywracania archiwów tar. Zacznijmy od początku.
Ten przykład weźmie wszystkie pliki i katalogi w bieżącym katalogu roboczym i zbuduje plik archiwum, który sprytnie nazwałemarchivename.tar
.
tutaj używam trzech argumentów po poleceniu tar:
-
c
mówi tar, aby utworzyć nowe archiwum, -
v
ustawia wyjście ekranu na verbose, więc będę otrzymywać aktualizacje, a -
f
wskazuje na nazwę pliku, którą chciałbym dać archiwum.
*
jest tym, co mówitar
, aby rekurencyjnie zawierać wszystkie pliki i katalogi lokalne.
$ tar cvf archivename.tar *file1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
polecenie tar nigdy nie przeniesie ani nie usunie żadnego z oryginalnych katalogów i plików, które go podajesz – tworzy tylko zarchiwizowane kopie.
należy również zauważyć, że za pomocą kropki (.) zamiast gwiazdki ( * ) w poprzednim poleceniu zawierałoby nawet ukryte pliki (których nazwy zaczynają się od kropki) w archiwum.
jeśli śledzisz na własnym komputerze (tak jak zdecydowanie powinieneś), zobaczysz nowy plik o nazwie archivename.smoła. The .rozszerzenie nazwy pliku tar nie jest konieczne, ale zawsze dobrym pomysłem jest jasne przekazanie celu pliku NA jak najwięcej sposobów.
Rozpakowanie archiwum w celu przywrócenia plików jest łatwe: Wystarczy użyć xvf
zamiast cvf
. To, w przykładzie, zapisze nowe kopie oryginalnych plików i katalogów w bieżącej lokalizacji.
$ tar xvf archivename.tarfile1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
oczywiście możesz również wysłać pliki do innego miejsca za pomocą argumentu-C
, a następnie lokalizacji docelowej:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
nie zawsze będziesz chciał umieszczać wszystkie pliki w drzewie katalogów w swoim archiwum.
Załóżmy, że stworzyłeś kilka filmów, ale są one obecnie przechowywane w katalogach wraz z wszelkiego rodzaju plikami graficznymi, audio i tekstowymi (zawierającymi Twoje notatki). Jedyne pliki, których potrzebujesz do utworzenia kopii zapasowej, to końcowe Klipy wideo z rozszerzeniem nazwy pliku .mp4.
oto jak to zrobić:
$ tar cvf archivename.tar *.mp4
to świetnie. Ale te pliki wideo są ogromne. Czy nie byłoby miło zmniejszyć to archiwum za pomocą kompresji?
nie mów nic więcej! Wystarczy uruchomić poprzednie polecenie z argumentemz
(zip). To powie programowi gzip, aby skompresował archiwum.
Jeśli chcesz przestrzegać konwencji, możesz również dodać.gz
rozszerzenie oprócz.tar
, które już tam jest. Pamiętaj: jasność.
oto jak to się rozegra:
$ tar czvf archivename.tar.gz *.mp4
jeśli wypróbujesz to na własnych plikach .mp4, a następnie uruchomisz ls-l w katalogu zawierającym nowe archiwa, możesz zauważyć, że .tar.gz
plik nie jest dużo mniejszy niż .tar
, może około 10%. O co chodzi?
Cóż,.mp4
format pliku jest sam w sobie skompresowany, więc gzip ma dużo mniej miejsca na swoje rzeczy.
ponieważ tar jest w pełni świadomy swojego środowiska linuksowego, możesz użyć go do wybierania plików i katalogów, które znajdują się poza bieżącym katalogiem roboczym. Ten przykład dodaje wszystkie pliki.mp4
do katalogu/home/myuser/Videos/
:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
Ponieważ pliki archiwów mogą być duże, czasami sensowne może być rozbicie ich na wiele mniejszych plików, przeniesienie ich do nowego domu, a następnie ponowne utworzenie oryginalnego pliku na drugim końcu. Narzędzie split jest wykonane w tym celu.
w tym przykładzie -b
mówi Linuksowi, aby podzielił nazwę archiwum.smoła.plik gz na części o wielkości 1 GB. Następnie operacja nazywa każdą z części-archivename.smoła.gz.partaa, nazwa archiwalna.smoła.gz.partab, nazwa archiwalna.smoła.gz.partac i tak dalej:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
Po drugiej stronie ponownie tworzysz archiwum, czytając każdą z części w kolejności (Cat archivename.smoła.gz.część*), a następnie przekierowanie wyjścia do nowego pliku o nazwie archivename.smoła.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
strumieniowe archiwa systemu plików
tutaj zaczyna się dobry materiał. Pokażę Ci, jak utworzyć obraz archiwum działającej instalacji Linuksa i przesłać go do zdalnego miejsca przechowywania – wszystko za pomocą jednego polecenia. Oto polecenie:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
zamiast próbować wyjaśnić to wszystko od razu, użyję mniejszych przykładów, aby zbadać to po kawałku na raz.
stwórzmy archiwum zawartości katalogu o nazwie importantstuff, który jest wypełniony, cóż, naprawdę ważnymi rzeczami:
$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz"importantstuff/filename1importantstuff/[email protected]'s password:
Pozwól mi wyjaśnić ten przykład. Zamiast wpisywać nazwę archiwum zaraz po argumentach polecenia (tak jak dotychczas), użyłem myślnika (czvf -).
dash wyprowadza dane na standardowe wyjście. Pozwala to przesunąć szczegóły nazwy pliku archiwum z powrotem na koniec polecenia i mówi tar, aby zamiast tego oczekiwał zawartości źródłowej dla archiwum.
następnie wysłałem (|) nienazwane, skompresowane archiwum do logowania ssh na zdalnym serwerze, gdzie zostałem poproszony o hasło.
polecenie zawarte w cudzysłowie następnie wykonało cat przeciwko archiwalnemu strumieniowi danych, który zapisał zawartość strumienia do pliku o nazwie myfiles.smoła.gz w moim katalogu domowym na zdalnym hoście.
jedną z zalet generowania archiwów w ten sposób jest to, że unikasz narzutu środkowego kroku. Nie ma potrzeby nawet tymczasowego zapisywania kopii archiwum na komputerze lokalnym. Wyobraź sobie tworzenie kopii zapasowej instalacji, która wypełnia 110 GB z 128 GB dostępnej przestrzeni. Dokąd miałoby pójść archiwum?
To był tylko katalog plików. Załóżmy, że musisz wykonać kopię zapasową aktywnego systemu operacyjnego Linux na dysku USB, abyś mógł przenieść go na oddzielną maszynę i wrzucić na główny dysk tego urządzenia.
zakładając, że jest już nowa instalacja tej samej wersji Linuksa na drugim komputerze, następna operacja kopiowania/wklejania wygeneruje dokładną replikę pierwszego.
uwaga: to nie zadziała na dysku docelowym, który nie ma jeszcze zainstalowanego systemu plików Linux. Aby poradzić sobie z tą sytuacją, musisz użyć
dd
następny przykład tworzy skompresowane archiwum na dysku USB znanym jako/dev/sdc1
.
argument--one-file-system
wyklucza wszystkie dane z dowolnego systemu plików poza bieżącym. Oznacza to, że pseudo partycje takie jak /sys/
I /dev/
nie zostaną dodane do archiwum. Jeśli istnieją inne partycje, które chcesz dołączyć (tak jak w przypadku /usr/
I /var/
w tym przykładzie), powinny one zostać jawnie dodane.
wreszcie, możesz wykluczyć dane z bieżącego systemu plików za pomocą argumentu --exclude
:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/
wróćmy teraz do przykładu pełnego polecenia. Korzystając z tego, czego już się nauczyłeś, zarchiwizuj wszystkie ważne katalogi systemu plików i skopiuj plik archiwum na dysk USB. To powinno mieć dla ciebie sens.:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
jest o wiele więcej informacji administracyjnych w postaci książek, kursów i artykułów dostępnych na mojej bootstrap-it.com.