Копирование файлов в Linux
Не всегда есть доступ к файловому менеджеру: из-за различных поломок графическая оболочка на домашнем компьютере может быть недоступна, а на серверах используется только консольный интерфейс. К тому же копирование файлов Ubuntu через терминал намного эффективнее, и вы сами в этом убедитесь. Сегодня мы рассмотрим не только обычное копирование командой cp Linux, но и не совсем обычное: с помощью tar и find.
Утилита копирования файлов cp
Синтаксис и опции
Общий синтаксис cp выглядит вот так:
$ cp опции файл-источник файл-приемник
$ cp опции файл-источник директория-приемник/
После выполнения команды файл-источник будет полностью перенесен в файл-приемник. Если в конце указан слэш, файл будет записан в заданную директорию с оригинальным именем.
Утилита имеет несколько интересных опций, которые могут сильно помочь при нестандартных задачах копирования, поэтому давайте их рассмотрим:
Примеры копирования файлов в linux
Теперь, когда вы знаете основные опции, можно перейти к практике. Например, мы хотим скопировать некую картинку из домашней папки в подкаталог pictures:
Или можем явно указать имя новой картинки:
Копирование папок осуществляется с помощью ключа -r:
После выполнения этой команды копирования
/папка будет скопирована в папку
/Документы. Главное, не забывайте поставить слэш в конце выражения или использовать опцию -t. Иначе папка
/документы будет перезаписана.
По умолчанию команда cp Linux перезаписывает существующие файлы или папки, но можно заставить утилиту спрашивать, нужно ли перезаписывать каждый файл, если вы не уверены в правильности составления команды:
Есть и противоположная опция -n, означающая «никогда не перезаписывать существующие файлы».
Сp также поддерживает специальные символы замены * и ?. Например, следующая команда скопирует все файлы, начинающиеся на test:
Если нужно применить более сложные регулярные выражения, придётся комбинировать утилиту cp с find или egrep.
В случае, если важно сохранить права доступа к файлу и его владельца, нужно использовать опцию -p:
Для упрощения использования команды можно применять синтаксис фигурных скобок. Например, чтобы создать резервную копию файла, выполните:
По умолчанию в cp не отображается прогресс копирования файла, что очень неудобно при работе с большими файлами, но его можно легко посмотреть с помощью утилиты cv.
Копирование файлов по регулярным выражениям в Linux
В утилите find можно применять различные условия и регулярные выражения для поиска файлов. Я уже немного писал о ней в статье как найти новые файлы в Linux. Мы можем скопировать все найденные с помощью find файлы, вызвав для каждого из них команду cp. Например, копируем все файлы в текущей директории, содержащие в имени только цифры:
Но не find‘ом единым такое делается. То же самое можно получить, запросив список файлов директории в ls, отфильтровав его по регулярному выражению egrep и передав имена файлов по очереди в cp с помощью xargs:
Это не совсем удобный способ копировать файлы Linux, но всё же он возможен. Будут скопированы все файлы из домашней директории, содержащие в имени только английские буквы.
Копирование содержимого файлов в Linux
Вы можете не только копировать сами файлы, но и управлять их содержимым. Например, склеить несколько файлов в один или разрезать файл на несколько частей. Утилита cat используется для вывода содержимого файла, в комбинации с операторами перенаправления вывода Bash вы можете выполнять копирование содержимого файла Linux в другой файл. Например:
Если файл был не пустым, он будет перезаписан. Или мы можем склеить два отдельных файла в один:
cat файл1 файл2 > файл3
Специальное копирование файлов в Linux с помощью tar
Linux интересен тем, что позволяет выполнять одно и то же действие различными путями. Копирование в Linux тоже может быть выполнено не только с помощью cp. При переносе системных файлов в другой каталог, резервном копировании системных файлов и т.д. важно чтобы сохранились атрибуты, значения владельцев файлов и символические ссылки как они есть без какой-либо модификации.
Утилита cp тоже может справиться с такой задачей? если указать опцию -p, но можно использовать утилиту архивации tar. Мы не будем создавать никаких файлов архивов, а построим туннель. Первая часть команды пакует файл и отправляет на стандартный вывод, а другая сразу же распаковывает в нужную папку:
Здесь мы полностью копируем содержимое папки /var в папку /mnt/var. Так вы можете копировать папку Linux, причём абсолютно любую или даже целую операционную систему.
Выводы
Теперь вы знаете, как выполняется копирование файлов Ubuntu и в Linux в целом. Как видите, в терминале это выполняется намного быстрее и эффективнее, чем с помощью графического интерфейса, если помнить нужные команды. Если у вас остались вопросы, спрашивайте в комментариях!
Как скопировать папку в терминале линукс
C навигацией разобрались, теперь научимся создавать, удалять, копировать, перемещать файлы и директории (каталоги) в терминале Linux.
Создание файлов и директорий в терминале Linux.
Создание текстовых файлов в терминале Linux.
Текстовый файл в терминале Linux можно создать тремя способами.
1. С помощью команды touch:
Вводим команду touch, затем путь и название нового файла.
Например, создадим текстовый файл в текущей директории с именем file.txt:
2. С помощью перенаправления стандартного потока вывода любой команды.
О перенаправлении стандартных потоках вывода в файл более подробно будет рассказано в одной из следующих статей о терминале Linux.
Создать файл можно также перенаправлением вывода любой команды в файл.
В общем виде команда будет следующей:
То есть, команда с выводом, затем галочка вправо >, означающая перенаправление вывода команды в файл и путь к файлу.
Например, перенаправим вывод справки команды ls в файл, который будет создан (а если такой файл есть, то он будет полностью перезаписан):
Но это мы создали не пустой файл, а если хотим создать пустой, то воспользуемся командой echo c переданной ей пустой строкой (две одинарных ковычки) и перенаправим это в файл:
3. С помощью любого текстового редактора, консольного или с графическим интерфейсом.
Передаем команду запуска любого текстового редактора и путь к файлу.
Самый простой консольный текстовый редактор это nano:
Или с помощью текстового редактора с графическим интерфейсом, который установлен в Gnome по умолчанию:
Про манипуляции с текстом более подробно в одной из следующих статей о терминале Linux.
Создание директорий (каталогов) в терминале Linux.
Создание каталогов выполняется командой «mkdir» (от англ. make directory):
Создать директорию с именем «dir1»:
Создать две директории одновременно:
Создать дерево директорий:
Удаление файлов и директорий в терминале Linux.
Удаление директорий (каталогов) в терминале Linux.
Для удаления директорий используется команда «rmdir» (от англ. remove directory):
Удаляются директории аналогично, как и создаются. Такие же команды.
Удаление файлов в терминале Linux.
Для удаления файлов используется команда «rm» (от англ. remove).
Работает очень просто, пишете команду rm и путь к файлу, который хотите удалить:
Удалить файл с именем «file1»:
Но команда «rm» позволяет удалять не только файлы, но и директории (каталоги) вместе с их содержимым.
Удалить директорию с именем «dir1» и рекурсивно всё её содержимое:
Удалить две директории и рекурсивно их содержимое:
Также можно добавить параметр -f, который означает, что при удалении не будет запрашиваться подтверждение на удаление. Команды будут выглядеть так:
Перемещение и переименование файлов и директорий в терминале Linux.
Для перемещения и переименовывания файлов и директорий (каталогов) используется команда «mv» (от англ. move).
Всё очень просто. Чтобы переименовать файл, выполняем команду:
Чтобы переместить файл:
Копирование файлов и директорий в терминале Linux.
Для копирования используется команда «cp» (от англ. copy).
Скопировать файл file1 и назвать его file2:
Копировать директорию dir1 в директорию dir2:
Копировать файл с именем file1 в директорию c именем dir1:
Справка о командах.
Команда cp: правильное копирование папок с файлами в *nix
В этой статье будут раскрыты некоторые неочевидные вещи связанные с использованием wildcards при копировании, неоднозначное поведение команды cp при копировании, а также способы позволяющие корректно копировать огромное количество файлов без пропусков и вылетов.
Допустим нам нужно скопировать всё из папки /source в папку /target.
Первое, что приходит на ум это:
Сразу исправим эту команду на:
После копирования мы обнаружим, что скопировались не все файлы — были проигнорированы файлы начинающиеся с точки типа:
.profile
.local
.mc
и тому подобные.
Почему же так произошло?
Потому что wildcards обрабатывает shell ( bash в типовом случае). По умолчанию bash проигнорирует все файлы начинающиеся с точек, так как трактует их как скрытые. Чтобы избежать такого поведения нам придётся изменить поведение bash с помощью команды:
Чтобы это изменение поведения сохранилось после перезагрузки, можно сделать файл wildcard.sh c этой командой в папке /etc/profile.d (возможно в вашем дистрибутиве иная папка).
Однако, если в папке тысячи файлов и больше, то от подхода с использованием wildcards стоит отказаться вовсе. Дело в том, что bash разворачивает wildcards в очень длинную командную строку наподобие:
На длину командной строки есть ограничение, которое мы можем узнать используя команду:
Получим максимальную длину командной строки в байтах:
Получим что-то типа:
Итак, давайте будем обходиться вовсе без wildcards.
Давайте просто напишем
Однако, если папка target существует, то файлы будут скопированы в папку /target/source.
Не всегда мы можем удалить заранее папку /target, так как в ней могут быть нужные нам файлы и наша цель, допустим, дополнить файлы в /target файлами из /source.
Если бы папки источника и приёмника назывались одинаково, например, мы копировали бы из /source в /home/source, то можно было бы использовать команду:
И после копирования файлы в /home/source оказались бы дополненными файлами из /source.
Такая вот логическая задачка: мы можем дополнить файлы в директории-приёмнике, если папки называются одинаково, но если они отличаются, то папка-исходник будет помещена внутрь приёмника. Как скопировать файлы из /source в /target с помощью cp без wildcards?
Чтобы обойти это вредное ограничение мы используем неочевидное решение:
Те кто хорошо знаком с DOS и Linux уже всё поняли: внутри каждой папки есть 2 невидимые папки «.» и «..», являющиеся псевдопапками-ссылками на текущую и вышестоящие директории.
Поведение этой команды однозначно. Всё отработает без ошибок вне зависимости от того миллион у вас файлов или их нет вовсе.
Выводы
Если нужно скопировать все файлы из одной папки в другую, не используем wildcards, вместо них лучше использовать cp в сочетании с точкой в конце папки-источника. Это скопирует все файлы, включая скрытые и не завалится при миллионах файлов или полном отсутствии файлов.
Послесловие
vmspike предложил аналогичный по результату вариант команды:
ВНИМАНИЕ: регистр буквы T имеет значение. Если перепутать, то получите полную белиберду: направление копирования поменяется.
Благодарности:
Команда cp — копирование файлов в Linux из терминала
Задачи по копированию файлов из одного места в другое возникают у пользователей чаще всего, скопировать нужные объекты можно через менеджер файлов, в котором следует найти нужную директорию и после воспользоваться контекстным меню. Однако есть гораздо более простые способы, в этой статье речь как раз пойдет о них, точнее о копировании файлов в Линукс из консоли.
Знание о команде cp полезны, ведь файловый менеджер может некорректно работать из-за проблем с графической оболочкой. Серверные компьютеры вообще управляются только через консоль. Перемещать файлы с помощью терминала очень удобно, в этом может убедиться каждый пользователь. Скопировать файлы можно как с помощью утилиты cp, так же используя tar и find.
Синтаксис
Рассмотрим синтаксис утилиты.
cp [параметр] [что копировать] [куда купировать]
Как только команда будет активирована, отправляемый файл перенесется в место для приема, при указании на конце файла значка «/» он также будет перенесен, но с новым именем.
Примеры
Для первого примера, скопируем файл /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 устроена так, что все отправляемые с ее помощью файлы перезаписываются, однако программу можно заставить спрашивать пользователя о том, нужно ли перезаписывать старые данные, для этого есть специальная команда:
Существует альтернатива данной функции, благодаря запросу «-n» можно сказать программе, чтобы она вообще не перезаписывала файлы.
Данная возможность будет полезна при следующей ситуации: пользователю известно, что в определенном месте для копирования уже содержится тот же файл, но с устаревшей версией, а с помощью функции «-u» можно безболезненно перезаписать старые данные:
ВАЖНО! Как видно из скриншота, данный способ скопирует всю папку и поместит ее в новую директорию.
cp /root/katalog/* /root/newpapka
Как видно из примера выше, команда cp работает со знаками «*» и «?», следующий запрос, займется копированием всех файлов, чье название начинается с new:
cp /root/katalog/new* /root/newpapka
Для ввода команд быстрее есть возможность применять фигурные скобки, чтобы заиметь копию файла для резерва следует ввести данную команду:
С ее помощью появится резервный файл, который имеет расширение, указанное в скобках.
Одним из неудобств функции cp является то, что она не показывает количество скопированной информации, это мешает, особенно когда приходится работать с тяжелыми файлами. Полоску прогресса можно увидеть, если использовать функцию cv.
Регулярные выражения
Для выполнения других, более сложных функций, придется использовать вместе с cp такие утилиты find и egrep.
С помощью утилиты find есть возможность использовать команды для выявления расположения файлов. Пользователь может найти данные с использованием find, а затем скопировать их, используя функция для копирования.
Вот пример, в нем проводится копирование файлов, которые содержат цифры от 1 до 5:
Сделать то же самое можно и не прибегая к find, можно обратиться к утилите ls, выбрать нужные файлы, используя регулярные выражения egrep, затем отправить их под контроль cp, применяя при этом xargs:
Данный способ не отличается особым удобством, однако использовать его можно. При работе с ним начнется копирование файлов из основной директории, чьи имена содержат лишь цифры от 1 до 5.
Копирование при помощи перенаправления вывода
В операционной системе Linux есть специальный символ «>», который означает перенаправление вывода.
Благодаря этой возможности можно не только переносить файлы, но и работать с их составляющими. Есть возможность соединить несколько файлов или наоборот разрезать их.
Используя cat можно выводить на экран основные данные файла, а затем, используя bash, пользователь сможет переносить составляющие файла из одного места в другое.
cat file1 > newfile
Одной из особенностью Linux является то, что в нем одно и то же действие можно выполнять, используя несколько различных команд.
Скопировать данные можно не только с помощью cp. Когда важные системные файлы отправляются в другое место или происходит создание резервных копий данных, нужно, чтобы такие вещи как атрибуты, владельцы данных, ссылки-символы были сохранены без каких-либо изменений.
С помощью cp так делать можно, однако на помощь придется позвать утилиту tar, чтобы она начала работу следует написать в cp «-p».
В качестве примера будет приведен туннель – одна часть запроса архивирует файл и отправляет его, другая – разархивирует и отправляет в нужное место:
С помощью данной команды все из папки /lfc отправляется в папку /epl/lfc. Таким способом можно скопировать любую информацию с компьютера, даже если это операционная система.
Теперь почти каждый пользователь знает, как копировать файлы в ОС. С помощью терминала делать это можно быстро, главное – запомнить все нужные команды.
Linux копирование файлов и папок через консоль
На операционной системе Linux Ubuntu многим пользователям часто требуется скопировать файлы, директории или их содержимое в определённое место, например, на внешний носитель. В данной статье рассказано, как это сделать в кратчайшие сроки.
Как копировать файл Linux с помощью утилиты Cp
Сp — это стандартная утилита данной операционки, посредством использования которой можно сделать копию каталогов или единичных файлов.
К сведению! Cp — это сокращение от слова «Copy».
Внешний вид папок на рабочем столе операционной системы Линукс
Синтаксис и опции
Утилита имеет два возможных написания, которые могут применяться либо по отношению к папкам, либо к файлам:
Обратите внимание! Представленные выше команды вводятся в терминале операционной системы Линукс. Это специальное средство для ввода команд, которые могут повлиять на функционирование операционки.
Опытные специалисты выделяют несколько опций Cр:
Внешний вид терминала на OC Linux
Чтобы произвести Linux copy file с помощью представленной выше утилиты, рекомендуется действовать по следующему алгоритму:
Важно! Если после осуществления представленных выше манипуляций положительный результат не был достигнут, то пользователь, скорее всего, допустил ошибку, когда писалась СЗ команда Linux. Процедуру стоит провести заново.
Как скопировать несколько файлов через терминал на Линукс
Процесс осуществления данной задачи разделяют на несколько этапов, каждый из которых играет немаловажную роль:
Копирование файлов через терминал на операционной системе Линукс
Обратите внимание! Подобные команды можно придумать и самостоятельно, добавляя в синтаксис новые элементы, а также меняя местами приёмник с источником. В этом деле главное — не ошибиться при написании названий файлов и директорий, иначе процедуру придётся повторять заново после перезапуска компьютера.
Специальное копирование файлов в Linux с помощью Tar
Tar на операционных системах семейства Линукс представляет собой специальную утилиту архивации, благодаря которой можно сохранить атрибуты files. Процесс выполнения задачи на основе данной утилиты подробно описан в следующем алгоритме:
К сведению! Через программное обеспечение Tar также возможно скопировать ISO-образ с одного USB-накопителя на другой.
Как скопировать папку Linux с использованием файлового менеджера
Данный способ, который позволяет на операционке Linux скопировать файл, считается одним из самых простых и доступных. Его сможет реализовать даже чайник, затратив на это минимум усилий.
Файловый менеджер на операционке Linux
Процесс выполнения такого метода удобнее всего рассмотреть в пошаговом алгоритме, который рекомендуют к применению опытные специалисты:
Обратите внимание! Аналогичным образом можно переместить папку в папку, один единственный файл в указанный каталог либо его содержимое в другой file, осуществив замену. При этом перезагружать операционную систему после выполнения таких манипуляций не требуется, т. к. все изменения применяются автоматически.
Открытие папки от имени администратора через файловый менеджер на Linux
Почему не получается осуществить копирование объектов через файловый менеджер на ОС Линукс
У данного обстоятельства есть несколько распространённых причин:
Чистка компьютера от вредоносного ПО с использованием лицензионного антивируса
Важно! Перепрошивать BIOS самостоятельно не рекомендуется во избежание проблем в дальнейшем. Лучше обратиться в сервисный центр, специалисты которого смогут справиться с поставленной задачей без особых проблем.
Для устранения проблем с копированием директорий можно попробовать переустановить операционную систему, скачав один из дистрибутивов Linux. Однако данный способ стоит рассматривать в крайнем случае, когда ни одно из вышеперечисленного не привело к положительному результату.
Таким образом, большинство способов копирования файлов и папок на операционке Линукс реализуется с помощью терминала. Однако с работой консоли сможет разобраться не каждый пользователь. В такой ситуации скопировать нужные объекты можно будет в файловом менеджере системы. На основе представленной выше информации каждый сможет понять, как осуществляется в Linux копирование файлов.