- Команда cp — копирование файлов в Linux из терминала
- Синтаксис
- Примеры
- Регулярные выражения
- Копирование при помощи перенаправления вывода
- TAR
- Итог
- Команда tar в Linux — создаём резервные копии быстро и эффективно
- Итак, как создать архив в Linux, используя команду tar
- Использование tar вместе с find
- Автоматическое резервное копирование, с помощью tar и cron
Команда cp — копирование файлов в Linux из терминала
Задачи по копированию файлов из одного места в другое возникают у пользователей чаще всего, скопировать нужные объекты можно через менеджер файлов, в котором следует найти нужную директорию и после воспользоваться контекстным меню. Однако есть гораздо более простые способы, в этой статье речь как раз пойдет о них, точнее о копировании файлов в Линукс из консоли. Знание о команде cp полезны, ведь файловый менеджер может некорректно работать из-за проблем с графической оболочкой. Серверные компьютеры вообще управляются только через консоль. Перемещать файлы с помощью терминала очень удобно, в этом может убедиться каждый пользователь. Скопировать файлы можно как с помощью утилиты cp, так же используя tar и find.
Синтаксис
- —attributes-only – переместить не сам файл, а только данные пользователя и флаги доступа;
- -f —force – вместо старых данных записать новые;
- -i —interactive – спросить о необходимости переписывать старую информацию;
- -L – создать копию не ссылок-символов, а того, что находится по этим ссылкам;
- -n – оставить старые файлы на их месте;
- -P – игнорировать ссылки-символы;
- -r – скопировать данные Linux используя рекурсию;
- -s – ничего не копировать, просто создать ссылки-символы;
- -u – копировать файл, но при условии, что он уже был изменен;
- -x – проводить все действия только внутри одной системы файлов;
- -p – во время копирования сохранить все информацию о файле;
- -t – команда дает возможность считать файл для приема директорией, и отправлять в него нужный объект;
Примеры
Для первого примера, скопируем файл /root/katalog/dokument в папку, которая называется «newpapka».
cp /root/katalog/dokument /root/newpapka
Cкопируем «dokument» и «file» в каталог «newpapka».
cp /root/katalog/dokument /root/katalog/file /root/newpapka
Часто бывает так, когда копируешь несколько файлов, желательно выводить информацию, что происходит. В этом поможет опция «-v».
cp -v /root/katalog/dokument /root/katalog/file /root/newpapka
Команда cp устроена так, что все отправляемые с ее помощью файлы перезаписываются, однако программу можно заставить спрашивать пользователя о том, нужно ли перезаписывать старые данные, для этого есть специальная команда:
cp -i /root/katalog/dokument /root/newpapka
Существует альтернатива данной функции, благодаря запросу «-n» можно сказать программе, чтобы она вообще не перезаписывала файлы.
Данная возможность будет полезна при следующей ситуации: пользователю известно, что в определенном месте для копирования уже содержится тот же файл, но с устаревшей версией, а с помощью функции «-u» можно безболезненно перезаписать старые данные:
cp -u /root/katalog/dokument /root/newpapka
Для копирование папки со всем ее содержимом необходимо использовать параметр -r.
cp -r /root/katalog /root/newpapka
ВАЖНО! Как видно из скриншота, данный способ скопирует всю папку и поместит ее в новую директорию.
Если нужно только сделать копию всех файлов без папки, то опция -r не подойдет.
cp /root/katalog/* /root/newpapka
Как видно из примера выше, команда cp работает со знаками «*» и «?», следующий запрос, займется копированием всех файлов, чье название начинается с new:
cp /root/katalog/new* /root/newpapka
Для ввода команд быстрее есть возможность применять фигурные скобки, чтобы заиметь копию файла для резерва следует ввести данную команду:
С ее помощью появится резервный файл, который имеет расширение, указанное в скобках.
Одним из неудобств функции cp является то, что она не показывает количество скопированной информации, это мешает, особенно когда приходится работать с тяжелыми файлами. Полоску прогресса можно увидеть, если использовать функцию cv.
Регулярные выражения
Для выполнения других, более сложных функций, придется использовать вместе с cp такие утилиты find и egrep.
С помощью утилиты find есть возможность использовать команды для выявления расположения файлов. Пользователь может найти данные с использованием find, а затем скопировать их, используя функция для копирования.
Вот пример, в нем проводится копирование файлов, которые содержат цифры от 1 до 5:
find /root -name 4 -exec cp <> /root/newpapka \;
ВАЖНО! Обязательно в конце команды нужно ввести «;», в противном случаи будет ошибка — exec аргумент не задан.
- /root — каталог где производить поиск.
- -name — критерии поиска.
- 1 — что искать, в данном случаи от одного до пяти.
- -exec — аргумент, который говорит, что нужно запустить команду.
- <> — подставляет имя каждого файла.
Сделать то же самое можно и не прибегая к find, можно обратиться к утилите ls, выбрать нужные файлы, используя регулярные выражения egrep, затем отправить их под контроль cp, применяя при этом xargs:
ls -1 /root | egrep ‘5’ | xargs cp -t /root/newpapka
Данный способ не отличается особым удобством, однако использовать его можно. При работе с ним начнется копирование файлов из основной директории, чьи имена содержат лишь цифры от 1 до 5.
Копирование при помощи перенаправления вывода
В операционной системе Linux есть специальный символ «>», который означает перенаправление вывода.
Благодаря этой возможности можно не только переносить файлы, но и работать с их составляющими. Есть возможность соединить несколько файлов или наоборот разрезать их.
Используя cat можно выводить на экран основные данные файла, а затем, используя bash, пользователь сможет переносить составляющие файла из одного места в другое.
TAR
Одной из особенностью Linux является то, что в нем одно и то же действие можно выполнять, используя несколько различных команд.
Скопировать данные можно не только с помощью cp. Когда важные системные файлы отправляются в другое место или происходит создание резервных копий данных, нужно, чтобы такие вещи как атрибуты, владельцы данных, ссылки-символы были сохранены без каких-либо изменений.
С помощью cp так делать можно, однако на помощь придется позвать утилиту tar, чтобы она начала работу следует написать в cp «-p».
В качестве примера будет приведен туннель – одна часть запроса архивирует файл и отправляет его, другая – разархивирует и отправляет в нужное место:
tar cf — /lfc | ( cd /epl/lfc && tar xvf — )
С помощью данной команды все из папки /lfc отправляется в папку /epl/lfc. Таким способом можно скопировать любую информацию с компьютера, даже если это операционная система.
Итог
Теперь почти каждый пользователь знает, как копировать файлы в ОС. С помощью терминала делать это можно быстро, главное – запомнить все нужные команды.
Команда 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'
Обратите внимание на то, что мы должны указать относительный путь к нашим файлам. Т.е. путь без ‘ / ‘ в котором мы должны указать полный путь, исходя из структуры нашего имеющегося архива.
Групповые символы — это отличная возможность извлекать из больших архивов отдельные группы файлов, например, за доли секунд мы можем извлечь из огромного архива все файлы изображений.
Есть один ньюанс, который нужно понимать при работе с архиватором. Если при создании архива мы укажем абсолютный путь (от корня диска), то при создании архива в него будут включена вся структура каталогов, начиная от корня диска. Чтобы было понятнее, давайте попробуем это на деле. Сначала давайте выполним команду 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/ , вписывая при этом в имя архива текущую дату.
Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
W e b d e v e l o p m e n t b l o g !