Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

деготь

В Unix-подобном мире программного обеспечения деготь Программа является классическим инструментом для архивирования файлов.


Его название, сокращение от ленточный архив, раскрывает свои корни как инструмент для создания резервных лент. Хотя он по-прежнему используется для этой традиционной задачи, он одинаково хорошо подходит и для других устройств хранения данных. Мы часто видим имена файлов, оканчивающиеся расширением .tar or . TGZ, которые указывают на «обычный» tar-архив и gzip-архив соответственно. Архив tar может состоять из группы отдельных файлов, одной или нескольких иерархий каталогов или их смеси. Синтаксис команды работает следующим образом:

деготь Режим[кредита] пути...

в котором Режим — один из следующих режимов работы (здесь показан только неполный список; см. деготь справочная страница с полным списком):


Таблица 18-2: Режимы tar


Описание режима

Описание режима

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


x Распакуйте архив.


r Добавить указанные пути в конец архива.


t Перечислить содержимое архива.



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



[я @ linuxbox ~] $ mkdir -p игровая площадка / каталог- {001..100}

[я @ linuxbox ~] $ коснитесь игровая площадка / каталог- {001..100} / файл- {A..Z}

[я @ linuxbox ~] $ mkdir -p игровая площадка / каталог- {001..100}

[я @ linuxbox ~] $ коснитесь игровая площадка / каталог- {001..100} / файл- {A..Z}


Далее создадим tar-архив всей игровой площадки:



[я @ linuxbox ~] $ смола ср. игровая площадка. смола игровая площадка

[я @ linuxbox ~] $ смола ср. игровая площадка. смола игровая площадка


Эта команда создает tar-архив с именем игровая площадка.tar который содержит всю иерархию каталогов игровой площадки. Мы видим, что режим и f опция, которая используется для указания имени деготь архива, могут быть объединены и не требуют тире в начале. Однако обратите внимание, что режим всегда должен быть указан первым, а затем любой другой параметр.

Чтобы просмотреть содержимое архива, мы можем сделать это:


[я @ linuxbox ~] $ смола TF детская площадка.tar

[я @ linuxbox ~] $ смола TF детская площадка.tar


Для более подробного списка мы можем добавить v (подробный) вариант:


[я @ linuxbox ~] $ tar tvf детская площадка.tar

[я @ linuxbox ~] $ tar tvf детская площадка.tar


Теперь давайте перенесем игровую площадку в новое место. Мы сделаем это, создав новый каталог с именем Foo, изменив каталог и распаковав tar-архив:


[я @ linuxbox ~] $ мкдир фу

[я @ linuxbox ~] $ компакт-диск foo

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

[me @ linuxbox foo] $ ls

детская площадка

[я @ linuxbox ~] $ мкдир фу

[я @ linuxbox ~] $ компакт-диск foo

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

[me @ linuxbox foo] $ ls

детская площадка


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

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



[me @ linuxbox foo] $ cd

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

[me @ linuxbox foo] $ cd

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


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



[я @ linuxbox ~] $ компакт-диск foo

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

[me @ linuxbox foo] $ ls

домашняя игровая площадка [me@linuxbox foo]$ я дома

[я @ linuxbox ~] $ компакт-диск foo

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

[me @ linuxbox foo] $ ls

домашняя игровая площадка [me@linuxbox foo]$ я дома


me

[me @ linuxbox foo] $ Я дома/я

детская площадка

me

[me @ linuxbox foo] $ Я дома/я

детская площадка


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

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



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

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


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


[me@linuxbox2 ~]$ кд /

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

[me@linuxbox2 ~]$ кд /

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


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

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



смола xf путь archive.tar

смола xf путь archive.tar


Добавляя завершающий пути команде, деготь восстановит только указанный файл. Можно указать несколько путей. Обратите внимание, что путь должен быть полным и точным


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


[я @ linuxbox ~] $ компакт-диск foo

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

[я @ linuxbox ~] $ компакт-диск foo

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


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

tar часто используется вместе с find для создания архивов. В этом примере мы будем использовать find для создания набора файлов для включения в архив:


[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' -exec tar rf player.tar '{}' '+'

[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' -exec tar rf player.tar '{}' '+'


Здесь мы используем найдите чтобы сопоставить все файлы в детская площадка названный файл-A а затем, используя -Exec действие, мы вызываем деготь в режиме добавления (r), чтобы добавить соответствующие файлы в архив игровая площадка.tar.

. деготь найдите это хороший способ создания инкрементные резервные копии дерева каталогов или всей системы. Используя найдите для сопоставления файлов, более новых, чем файл временной метки, мы могли бы создать архив, который содержит только файлы, более новые, чем последний архив, предполагая, что файл временной метки обновляется сразу после создания каждого архива.

tar также может использовать как стандартный ввод, так и вывод. Вот подробный пример:



[me @ linuxbox foo] $ cd

[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' | tar cf - --files- from=- | gzip > детская площадка.tgz

[me @ linuxbox foo] $ cd

[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' | tar cf - --files- from=- | gzip > детская площадка.tgz


В этом примере мы использовали найдите программа для создания списка совпадающих файлов и передачи их в деготь. Если указано имя файла «-», оно означает стандартный ввод или вывод, в зависимости от необходимости. (Кстати, это соглашение об использовании «-» для обозначения стандартного ввода/вывода также используется во многих других программах). --файлы-из опция (которая также может быть указана как -T) причины деготь вместо этого прочитать список путей из файла


чем командная строка. Наконец, архив, созданный деготь подключен к GZIP создать сжатый архив Детская площадка.tgz, . TGZ Расширение — это обычное расширение, присваиваемое файлам tar, сжатым с помощью gzip. Расширение .tar.gz также используется иногда.

Пока мы использовали GZIP внешняя программа для создания нашего сжатого архива, современные версии GNU деготь поддерживать сжатие как gzip, так и bzip2 напрямую с использованием z и j варианты соответственно. Используя наш предыдущий пример в качестве основы, мы можем упростить его следующим образом:



[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' | tar czf play.tgz -T -

[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' | tar czf play.tgz -T -


Если бы мы хотели вместо этого создать сжатый архив bzip2, мы могли бы сделать это:



[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' | tar cjf play.tbz -T -

[я @ linuxbox ~] $ найти игровую площадку -имя 'файл-A' | tar cjf play.tbz -T -


Просто изменив параметр сжатия с z в j (и изменив расширение выходного файла на .tbz для обозначения файла, сжатого bzip2), мы включили сжатие bzip2.

Еще одно интересное использование стандартного ввода и вывода с помощью деготь Команда включает передачу файлов между системами по сети. Представьте себе, что у нас есть две машины, на которых работает Unix-подобная система, оснащенная деготь и SSH. В таком сценарии мы могли бы перенести каталог из удаленной системы (с именем удаленная система для этого примера) в нашу локальную систему:



[я @ linuxbox ~] $ удаленный материал mkdir

[я @ linuxbox ~] $ компакт-диск с удаленными материалами

[me@linuxbox удаленный материал]$ ssh Remote-sys 'tar cf — Документы' | смола хф -

Пароль me@remote-sys: [me@linuxbox Remote-stuff]$ ls Документы

[я @ linuxbox ~] $ удаленный материал mkdir

[я @ linuxbox ~] $ компакт-диск с удаленными материалами

[me@linuxbox удаленный материал]$ ssh Remote-sys 'tar cf — Документы' | смола хф -

Пароль me@remote-sys: [me@linuxbox Remote-stuff]$ ls Документы


Здесь мы смогли скопировать каталог с именем Документы из удаленной системы удаленная система в каталог внутри каталога с именем удаленные вещи в локальной системе. Как мы это сделали? Сначала мы запустили деготь программу на удаленной системе с помощью SSH. Вы вспомните это SSH позволяет нам выполнять программу удаленно на сетевом компьютере и «видеть» результаты в локальной системе-стандартный вывод


Данные, полученные в удаленной системе, отправляются в локальную систему для просмотра. Мы можем воспользоваться этим, имея деготь создать архив ( c режим) и отправить его на стандартный вывод, а не в файл (режим f с аргументом тире), тем самым транспортируя архив по зашифрованному туннелю, предоставленному SSH в локальную систему. В локальной системе мы выполняем деготь и заставить его расширить архив ( x режим), подаваемый со стандартного ввода (опять же, f вариант с аргументом тире).


Лучшие облачные вычисления для ОС в OnWorks: