Чтение онлайн

ЖАНРЫ

Командная строка Linux
Шрифт:

tar режим[параметры] путь...

где под режимом подразумевается один из нескольких режимов работы, перечисленных в табл. 18.2 (здесь представлены не все параметры; полный список вы найдете на странице справочного руководства (man) для tar).

Таблица 18.2. Режимы команды tar

Режим

Описание

c

Создать архив из списка файлов и/или каталогов

x

Извлечь файлы из архива

r

Добавить указанный

файл и/или каталог в конец архива

t

Вывести список содержимого архива

В программе tar используется немного непривычный способ определения параметров, поэтому рассмотрим несколько примеров ее использования. Для начала воссоздадим нашу песочницу, как мы это делали в предыдущей главе:

[me@linuxbox ~]$ mkdir -p playground/dir-{00{1..9},0{10..99},100}

[me@linuxbox ~]$ touch playground/dir-{00{1..9},0{10..99},100}/file-{A..Z}

Далее создадим архив всей песочницы:

[me@linuxbox ~]$ tar cf playground.tar playground

Эта команда создаст tar-архив с именем playground.tar, включающий всю иерархию каталогов песочницы. Как видите, режим и параметр f, который используется для определения имени tar-архива, можно объединять, и при этом не требуется использовать начальный дефис. Но имейте в виду, что режим всегда должен указываться первым, перед любыми параметрами. Посмотреть содержимое архива можно с помощью следующей команды:

[me@linuxbox ~]$ tar tf playground.tar

Для получения более подробного списка добавим параметр v (verbose — подробности):

[me@linuxbox ~]$ tar tvf playground.tar

Теперь извлечем содержимое архива в другой каталог. Для этого создадим новый каталог с именем foo, перейдем в него и извлечем содержимое tar-архива:

[me@linuxbox ~]$ mkdir foo

[me@linuxbox ~]$ cd foo

[me@linuxbox foo]$ tar xf ../playground.tar

[me@linuxbox foo]$ ls

playground

Если внимательно исследовать содержимое ~/foo/playground, можно заметить, что в результате распаковывания архива мы получили точные копии оригинальных файлов. Однако следует помнить, что если вы не действуете от имени суперпользователя, файлы и каталоги, извлеченные из архива, будут принадлежать пользователю, выполнившему восстановление, а не первоначальному их владельцу.

Другой интересной особенностью tar является способ обработки путей в архивах. По умолчанию используются относительные пути, а не абсолютные. Для этого программа tar просто удаляет начальный слеш во всех путях. Чтобы показать это, создадим снова наш архив, но на этот раз укажем абсолютный путь к архивируемому каталогу:

[me@linuxbox foo]$ cd

[me@linuxbox ~]$ tar cf playground2.tar ~/playground

Как вы помните, командная оболочка заменит ~/playground полным путем /home/me/playground после нажатия клавиши ENTER, благодаря этому мы получим полный путь для нашей демонстрации. Далее извлечем архив, так же как прежде, и посмотрим, что из этого получилось:

[me@linuxbox ~]$ cd foo

[me@linuxbox foo]$ tar xf ../playground2.tar

[me@linuxbox foo]$ ls

home playground

[me@linuxbox foo]$ ls home

me

[me@linuxbox foo]$ ls home/me

playground

Как

видите, здесь при извлечении архива каталог home/me/playground был воссоздан не в корневом, а в текущем рабочем каталоге ~/foo, как было бы в случае с абсолютными путями. Это может показаться странным, но такое решение имеет свои преимущества: оно позволяет извлекать архивы в любое другое место, а не только в исходное. Повторив это упражнение с параметром, управляющим выводом дополнительных сообщений (v), можно получить более понятную картину происходящего.

Рассмотрим пусть и гипотетический, но все же имеющий практическую ценность пример использования tar. Представим, что нужно скопировать домашний каталог со всем его содержимым в другую систему и у нас имеется жесткий диск, подключаемый к порту USB, который можно использовать для переноса файлов. В современных системах Linux такие диски «как по волшебству» автоматически монтируются в каталог /media. Допустим также, что подключаемый жесткий диск имеет том с именем BigDisk. Чтобы создать требуемый архив, выполним следующую команду:

[me@linuxbox ~]$ sudo tar cf /media/BigDisk/home.tar /home

После записи файла следует отмонтировать диск и подключить его ко второму компьютеру. И снова он автоматически монтируется в каталог /media/BigDisk. Чтобы извлечь архив, выполните следующие команды:

[me@linuxbox2 ~]$ cd /

[me@linuxbox2 /]$ sudo tar xf /media/BigDisk/home.tar

Обратите внимание, что здесь сначала выполняется переход в каталог /, чтобы извлечение производилось относительно корневого каталога, потому что все пути в архиве — относительные.

При распаковке архива можно ограничить количество извлекаемых данных. Например, можно извлечь из архива единственный файл:

tar xf archive.tar путь_к_файлу

Добавление в конец команды пути к файлу гарантирует извлечение только этого файла. Можно указать несколько путей. Обратите внимание, что путь к файлу должен быть полным относительным путем в архиве. Обычно в путях к файлам нельзя использовать групповые символы; но GNU-версия tar (именно эта версия входит в состав большинства дистрибутивов Linux) поддерживает параметр --wildcards. В следующем примере используется файл playground2.tar, созданный выше:

[me@linuxbox ~]$ cd foo

[me@linuxbox foo]$ tar xf ../playground2.tar --wildcards 'home/me/playground/ dir-*/file-A'

Эта команда извлечет только файлы, соответствующие указанному пути с групповым символом dir-*.

Программа tar часто используется в сочетании с find. В следующем примере коман­да find используется для поиска файлов, подлежащих включению в архив:

[me@linuxbox ~]$ find playground -name 'file-A' -exec tar rf playground.tar '{}' '+'

Поделиться с друзьями: