Командата Tar в Linux: Tar CVF и Tar XVF, обяснени с примерни команди

В tarповечето сметки името е съкратено от лентов архив . Въпросните „ленти“ биха били всички онези магнитни устройства за съхранение, които бяха популярни през 50-те години.

Това предполага, че tarинструментът може да е малко стар и да е отминал. Но истината е, че през всичките години и през всички сеизмични промени в ИТ света tarне е загубил нищо от своята сила и стойност.

В тази статия, базирана на съдържанието от моята книга за Linux в действие, ще ви покажа основите на създаването, компресирането и възстановяването на tar архив. Да започнем в началото.

Създаване на архиви

Този пример ще вземе всички файлове и директории в рамките на текущата работна директория и под нея и ще изгради архивен файл, който хитро съм именувал archivename.tar.

Тук използвам три аргумента след командата tar:

  • на cразказва катран, за да създадете нов архив,
  • v задава изхода на екрана на многословен, така че ще получавам актуализации и
  • f сочи към името на файла, което бих искал да дам в архива.

Това *е, което казва tarда включите всички файлове и локални директории рекурсивно.

$ tar cvf archivename.tar * file1 file2 file3 directory1 directory1/morestuff directory1/morestuff/file100 directory1/morestuff/file101 

Командата tar никога няма да премести или изтрие някоя от оригиналните директории и файлове, с които я подавате - тя прави само архивирани копия.

Трябва също да обърнете внимание, че използването на точка (.) Вместо звездичка (*) в предишната команда би включвало дори скрити файлове (чиито имена на файлове започват с точка) в архива.

Ако следите на собствения си компютър (както определено трябва), ще видите нов файл с име archivename.tar. Разширението на .tar име на файл не е необходимо, но винаги е добра идея да съобщавате ясно целта на даден файл по възможно най-много начини.

Извличането на архива ви с цел възстановяване на файлове е лесно: Просто използвайте xvfвместо cvf. Това в примера ще запази нови копия на оригиналните файлове и директории в текущото местоположение.

$ tar xvf archivename.tar file1 file2 file3 directory1 directory1/morestuff directory1/morestuff/file100 directory1/morestuff/file101 

Разбира се, можете да накарате tar да изпраща извлечените файлове на друго място, като използва -Cаргумента, последван от целевото местоположение:

$ tar xvf archivename.tar -C /home/mydata/oldfiles/ 

Не винаги ще искате да включвате всички файлове в дървото на директориите във вашия архив.

Да предположим, че сте създали някои видеоклипове, но в момента те се съхраняват в директории, заедно с всички видове графични, аудио и текстови файлове (съдържащи вашите бележки). Единствените файлове, които трябва да архивирате, са окончателните видеоклипове, използващи разширението на .mp4 име на файл.

Ето как да направите това:

$ tar cvf archivename.tar *.mp4 

Това е страхотно. Но тези видео файлове са огромни. Не би ли било хубаво да направите този архив малко по-малък с помощта на компресия?

Не казвай повече! Просто изпълнете предишната команда с zаргумента (zip). Това ще каже на програмата gzip да компресира архива.

Ако искате да следвате конвенцията, можете също да добавите .gzразширение в допълнение към това, .tarкоето вече е там. Запомнете: яснота.

Ето как ще се развие това:

$ tar czvf archivename.tar.gz *.mp4 

Ако изпробвате това на собствените си .mp4 файлове и след това стартирате ls -l в директорията, съдържаща новите архиви, може да забележите, че .tar.gzфайлът не е чак толкова по-малък от .tarфайла, може би 10% или така. Какво е това?

Е, самият .mp4файлов формат е компресиран, така че има много по-малко място за gzip да прави своите неща.

Тъй като tar е напълно наясно със своята Linux среда, можете да го използвате, за да изберете файлове и директории, които живеят извън текущата ви работна директория. Този пример добавя всички .mp4файлове в /home/myuser/Videos/директорията:

$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4 

Тъй като архивните файлове могат да станат големи, понякога може да има смисъл да ги разбиете на множество по-малки файлове, да ги прехвърлите в новия им дом и след това да създадете отново оригиналния файл в другия край. Инструментът за разделяне е направен за тази цел.

В този пример -bказва на Linux да разделя файла archivename.tar.gz на части с размер 1 GB. След това операцията назовава всяка от частите - archivename.tar.gz.partaa, archivename.tar.gz.partab, archivename.tar.gz.partac и т.н.:

$ split -b 1G archivename.tar.gz "archivename.tar.gz.part" 

От друга страна, пресъздавате архива, като четете всяка от частите последователно (cat archivename.tar.gz.part *), след което пренасочвате изхода към нов файл, наречен archivename.tar.gz:

$ cat archivename.tar.gz.part* > archivename.tar.gz 

Архиви на поточна файлова система

Тук започват добрите неща. Ще ви покажа как да създадете архивен образ на работеща инсталация на Linux и да го предавате на отдалечено място за съхранение - всичко това в рамките на една команда. Ето командата:

# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz" 

Вместо да се опитвам да обясня всичко това веднага, ще използвам по-малки примери, за да го изследвам по отделно.

Нека създадем архив на съдържанието на директория, наречена importantstuff, която е пълна с, наистина, важни неща:

$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz" importantstuff/filename1 importantstuff/filename2 [...] [email protected]'s password: 

Нека да обясня този пример. Вместо да въвеждам името на архива веднага след аргументите на командата (както сте правили до сега), използвах тире (czvf -).

Тирето извежда данните към стандартен изход. Тя ви позволява да изтласкате подробностите за името на архивния файл обратно в края на командата и казва на tar да очаква вместо това да очаква изходното съдържание за архива.

След това насочих (|) неназования, компресиран архив към ssh вход на отдалечен сървър, където бях помолен за моята парола.

След това командата, затворена в кавички, изпълни cat срещу архивния поток от данни, който записа съдържанието на потока във файл, наречен myfiles.tar.gz в моята домашна директория на отдалечения хост.

Едно от предимствата на генерирането на архиви по този начин е, че избягвате режийните разходи на средна стъпка. Няма нужда дори временно да запазвате копие от архива на локалната машина. Представете си архивиране на инсталация, която запълва 110 GB от 128 GB налично пространство. Къде ще отиде архивът?

Това беше просто директория с файлове. Да предположим, че трябва да архивирате активна операционна система Linux на USB устройство, за да можете да я преместите на отделна машина и да я пуснете в основното устройство на тази машина.

Ако приемем, че вече има нова инсталация на същата версия на Linux на втората машина, следващата операция за копиране / поставяне ще генерира точно копие на първата.

ЗАБЕЛЕЖКА: Това няма да работи на целево устройство, което все още няма инсталирана файлова система Linux. За да се справите с тази ситуация, ще трябва да използвате dd.

The next example creates a compressed archive on the USB drive known as /dev/sdc1.

The --one-file-system argument excludes all data from any file system besides the current one. This means that pseudo partitions like /sys/ and /dev/ won’t be added to the archive. If there are other partitions that you want to include (as you’ll do for /usr/ and /var/ in this example), then they should be explicitly added.

Finally, you can exclude data from the current file system using the --exclude argument:

# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/ 

Now let’s go back to that full-service command example. Using what you’ve already learned, archive all the important directories of a file system and copy the archive file to a USB drive. It should make sense to you now:

# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz" 

There's much more administration goodness in the form of books, courses, and articles available at my bootstrap-it.com.