Linux tar копирование файлов

Команда tar в Linux — создаём резервные копии быстро и эффективно

Команда tar в Linux - создаём резервные копии быстро и эффективно

Tar — самая удобная, простая для понимания и быстрая команда для архивирования файлов и папок. Поскольку большинство сайтов расположены на серверах с ОС Linux, чаще всего данную команду используют для создания резервных копий сайтов и важных файлов проекта. В данной статье я расскажу про особенности работы с командой tar, выборочное (инкрементное) резервное копирование, автоматизацию создания архивов и многое другое.

Итак, как создать архив в Linux, используя команду tar

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

А затем наполним её файлами, чтобы нам было с чем экспериментировать:

С помощью этих двух команд мы создали папку test , в ней разместили 100 папок вида dir-001 .. dir-100 и в каждую из 100 папок поместили файлы вида file-A.txt .. file-Z.txt

Теперь давайте выполним команду для архивирования:

В той папке, в которой мы находимся, появится архив test.tgz , в котором будет папка test и все вложенные в неё папки. Флаг » c » внутри команды означает «создать архив», » z » — сжать файлы. Флаг » f » ничего не означает и присутствует во всех командах, связанных с tar .

Если мы захотим посмотреть содержимое нашего архива — можно воспользоваться командой:

которая отобразит содержимое нашего архива в простом формате отображения. Для просмотра подробного списка архива добавим флаг » v «:

А теперь давайте распакуем архив. Для этого сначала есть смысл удалить имеющуюся папку test (используем команду rm -rf test ), а затем используем команду извлечения данных из нашего архива:

После этого архив распакуется и у нас снова появится папка test со всем её содержимым.

Кстати, мы можем извлекать файлы как по одному, так и выборочно. Например, извлекаем 1 файл:

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

А если мы хотим извлечь несколько файлов, то при использовании параметра —wildcards мы имеем возможность прописать групповые символы ( * и прочие ). Допустим, мы хотим извлечь все файлы с именем file-A.txt из всех 100 наших папок. Для этого используем команду:

tar xf test.tgz --wildcards 'test/dir-*/file-A.txt'

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

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

Читайте также:  How to install git on linux

Есть один ньюанс, который нужно понимать при работе с архиватором. Если при создании архива мы укажем абсолютный путь (от корня диска), то при создании архива в него будут включена вся структура каталогов, начиная от корня диска. Чтобы было понятнее, давайте попробуем это на деле. Сначала давайте выполним команду pwd , чтобы у нас отобразился полный путь к текущей рабочей директории. Далее выполняем команду:

tar czf test.tgz путь_к_текущей_директории_далее_слэш_и_имя_папки 
tar czf test.tgz /home/den/Desktop/test 

Обратите внимание на получившийся архив: все файлы имеют абсолютные пути, например, такого вида: /home/den/Desktop/test/dir-001/file-A.txt

Этот момент обязательно нужно учитывать при создании архивов и использовать именно тот вариант, который необходим для конкретно данной ситуации.

Использование tar вместе с find

Команду tar часто используют вместе с командой find (с помощью которой мы ищем файлы и папки). Например, мы хотим найти в папке все файлы с именем file-A.txt и добавить их внутрь имеющего архива, то это можно сделать командой:

find test -name 'file-A.txt' -exec tar rf test.tgz '<>' '+'

В данном примере флаг » r » используется для инкрементного добавления файлов внутрь имеющегося архива. Отличная и очень удобная на практике возможность! К примеру, мы можем с помощью find находить файлы, созданные не позже опреденённой даты и добавлять их к нашему архиву.

Также, tar умеет считывать данные со стандартного ввода и вывода. Пример:

find test -name 'file-A' | tar czf test.tgz -T -

Когда архиватору tar передается имя файла — (дефис), то под этим имеется ввиду либо стандартный ввод, либо стандартный вывод (и зависит это от контекста).

А ещё, можно использовать tar для передачи файлов через SSH . Пример:

ssh логин@хост_удалённой_машины 'tar cf - ИмяПапки' | tar xf -

Здесь мы скопировали с удалённой машины папку ‘ ИмяПапки ‘ в текущий рабочий каталог. С помощью SSH мы можем выполнить любой запрос на удаленной машине. Используя это, мы с помощью tar создали архив (флаг » c «) и вывели его не в файл, а в стандартный вывод (флаг » f » с дефисом в качестве аргумента), вследствие чего архив передается через SSH-туннель на локальную машину. В локальной машине мы вызываем tar для того чтобы распаковать архив (флаг » x «), полученный со стандартного ввода.

Автоматическое резервное копирование, с помощью tar и cron

Для создания регулярной резервной копии мы можем настроить планировщик cron . Если у Вас стандартный хостинг без root-доступа, то cron настраивается в панели управления Вашего хостинга. Если же у Вас выделенный сервер, тогда делаем всё стандартным образом через crontab -e

Пример записи cron для резервного копирования 1 раз в неделю:

@weekly /usr/bin/tar czf /home/den/archive-`date+"\%d_\%m_\%y"`.tgz /home/den/Desktop/test 

В данном примере мы раз в неделю, в полночь, архивируем папку (включая всё её содержимое) по адресу /home/den/Desktop/test и размещаем полученный архив внутрь папки /home/den/ , вписывая при этом в имя архива текущую дату.

Читайте также:  Linux listen on all interfaces

Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
W e b d e v e l o p m e n t b l o g !

Источник

Резервное копирование в Linux – команда tar

Утилита tar в Linux предназначена для объединения (упаковки) нескольких файлов в один, т. е. для создания архивов. Она обладает хорошим функционалом для работы с архивами, умеет эффективно перемещать файлы (архивы или tar-файлы) с одного устройства на другое (включая ленточные устройства), сохраняя при этом атрибуты файлов и структуру файловой системы. Всё это позволяет использовать утилиту в качестве полноценного инструмента для организации резервного копирования. Конечно, для этих целей существуют и другие, специализированные утилиты. Как например dump, однако системным администраторам полезно уметь обращаться также и с tar.

Особенности использования утилиты tar

Как уже отмечалось, утилита объединяет несколько каталогов и файлов в один tar-файл, который потом можно сжать при помощи, например gzip, compress или bzip2. Это очень удобно, когда необходимо и данные зарезервировать и дополнительное место освободить на диске. Утилита часто применяется, когда нужно создать кратковременные резервные копии данных.

Среди версий tar, которые не относятся к GNU, подавляющее большинство таких, которые не поддерживают длину имён файлов больше, чем 100 символов, а также не умеют работать с несколькими лентами, поэтому перед использованием конкретной имеющейся в распоряжении версии утилиты необходимо внимательно ознакомиться с официальной технической документацией (команда man tar) для выяснения подобных деталей. Также, не все версии tar по-умолчанию обрабатывают символьные ссылки — от версии к версии для этого используются различные ключи, о чём можно также узнать из документации. Утилита очень хорошо подходит для быстрого копирования дерева каталогов.

Синтаксис и опции команды tar

У утилиты tar следующий синтаксис:

tar [опции] название_архива файлы_для_архива

Например, с помощью команды:

можно сделать копию каталога /etc в архив etc.tar. Приведённый пример демонстрирует распространённый случай резервного копирования с помощью команды tar. Здесь опция -c означает создание (create) архива, -f – вывод результатов в файл. Во второй части команды, которая принимает на свой вход выходной поток от tar -cf опция -x (extract) указывает tar, что нужно извлекать содержимое архива, -p – сохранять информацию о режимах доступа к файлам. Есть ещё опция -b, позволяющая задавать коэффициент объединения блоков, который полезен при записи на ленточные устройства. Это в некоторых случаях позволяет добиться большей производительности. Оптимальным считается значение 20, однако, поэкспериментировав, можно найти и лучший вариант для конкретных условий. Опция -v позволяет выводить подробную информацию о ходе работы команды.

tar [опции] архив

Распакует archive.tar в текущую директорию, что бы задать директорию куда нужно распаковать архив используйте ключ -с. Например

Читайте также:  What is debian based linux

Ниже представлен основной список ключей команды tar

-A, —catenate, —concatenate присоединение tar-файловк архиву
-c, —create создание нового архива
-d, —diff, —compare поиск различий между архивом и файловой системой
—delete удаление из архива (не на магнитных лентах!)
-r, —append добавление файлов в конец архива
-t, —list вывод списка содержимого архива
—test-label проверка метки тома архива и выход
-u, —update добавление в архив только более новых файлов
-x, —extract, —get извлечение файлов из архива

Обратите внимание, что при запуске команды, перед ключами не обязательно ставить знак дефиса

tar примеры

Как уже упоминалось, для создания сжатых архивов сначала создаётся сам архив командой tar, а затем этот архив сжимается с помощью gzip. Но можно всё это сделать и одной командой tar:

В результате будет создан сжатый архив gzip archive.tgz, сжатие которого будет выполнено с помощью gzip и благодаря опции z. Символ «*» указывает, что в архив попадёт всё, что находится в текущем каталоге. Здесь же будет создан и целевой архив archive.tgz. Вместо опции z можно указывать и другие — Z, J, j, которые задают соответствующие алгоритмы сжатия — LZV, xz и bzip2.

На всякий случай, перед созданием резервных копий лучше перейти в корневой каталог «/» — утилита убирает начальный символ «/» из имён/путей файлов, из-за чего в последствии информация из архивов может быть восстановлена не совсем правильно.

В случае с резервным копированием (на ленточный носитель) можно использовать следующие команды:

$ cd / $ tar -cpf /dev/st0 --label="Backup at `date '+%d-%B-%Y'`." -C /home

Как видно, здесь в качестве имени архива используется /dev/st0 – ленточное устройство. Поэтому для идентификации архивов полезно воспользоваться опцией —label, задающей описание конкретного архива. В обратных кавычках подставляется маска для даты/времени создания архива. Опцией -C (или —directory) задаётся директория, подлежащая резервированию. Для выполнения добавочного архивирования, т. е. когда необходимо зарезервировать только изменившиеся с момента предыдущей архивации файлов, следует воспользоваться опцией -N:

$ cd / $ tar -cpNf /dev/st0 --label="Backup at `date '+%d-%B-%Y'`." -C /home

После создания резервной копии не лишним будет проверить с помощью опции -d, что архив цел:

Для резервирования всей системы можно использовать такую команду:

$ cd / $ tar -cpf /sysarchive/system-at-`date '+%d-%B-%Y'`.tar -C / --exclude=proc --exclude=mnt --exclude=archive --exclude=cache --exclude=*/lost+found .

Здесь с помощью опций —exclude указывается, какие каталоги необходимо исключить из процедуры архивирования, а символ точки «.» в конце команды говорит о том, что нужно обрабатывать все каталоги и файлы, находящиеся в директории, указанной опцией -C. Следует заметить, что в данном примере, в отличие от предыдущих, в качестве целевого архива задан непосредственно tar-файл, а не ленточное устройство.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Похожие записи:

Источник

Оцените статью
Adblock
detector