Копирование файлов и папок в системах Unix. Копирование файлов в Linux

cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] исходный_файл целевой_файл cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] исходный_файл целевой_каталог В первой форме утилита cp , копирует содержимое файла исходный_файл в целевой_файл . Во второй форме содержимое каждого указанного файла копируется в целевой_каталог . Имена самих файлов при этом не изменяются. Если cp обнаруживает попытку копирования файла самого в себя, копирование не производится.

Возможно использование следующих опций: -H Если указана опция -R , следовать по символическим ссылкам, указанным в командной строке, но не следовать по символическим ссылкам, встречающимся в процессе обхода дерева каталогов. -L Если указана опция -R , следовать всем символическим ссылкам. -P Если указана опция -R , не следовать никаким символическим ссылкам. Это режим работы cp по умолчанию. -R Если аргумент исходный_файл указывает на каталог, cp копирует этот каталог вместе со всем деревом файловой иерархии, которое он содержит. Если исходный_файл оканчивается на / , копируется не сам каталог, а только его содержимое. Эта опция также указывает на необходимость копирования символических ссылок, а не объектов, на которые они указывают, и заставляет cp создавать специальные файлы вместо того, чтобы копировать их, как обычные. Создаваемые каталоги имеют те же права доступа, что и исходные каталоги, вне зависимости от действующего для процесса значения umask . Обратите внимание, что cp копирует жёсткие ссылки как отдельные файлы. Если вам нужно сохранять жёсткие ссылки, используйте tar(1) , cpio(1) или pax(1) . -f Для каждого уже существующего целевого имени пути, удалять его и создавать новый файл, не требуя подтверждения операции, вне зависимости от его прав доступа. (Опция -f отменяет действие любой из ранее указанных опций -i или -n ). -i Если в результате копирования будет перезаписан существующий файл, cp запросит подтверждение пользователя. Если ответ, полученный со стандартного ввода, начинается символом "y " или "Y ", будет предпринята попытка копирования (опция -i отменяет действие любой из ранее заданных опций -f или -n ) -l Создавать жёсткие ссылки на обычные файлы в иерархии вместо того, чтобы их копировать. -n Не перезаписывать существующие файлы. (Опция -n отменяет действие любой из предшествующих опций -f или -i ). -p Заставляет cp сохранять следующие атрибуты каждого исходного файла в создаваемой копии: время модификации, время доступа, флаги файла, режим доступа, идентификаторы пользователя и группы, насколько это позволено правами доступа. Если значения идентификаторов пользователя и группы не могут быть сохранены, не выводится никакого сообщения об ошибке, и возвращаемое программой значение статуса завершения не изменяется. Если исходный файл имеет установленный SUID бит и значение идентификатора пользователя не может быть сохранено, SUID бит в атрибутах скопированного файла не сохраняется. Если исходный файл имеет установленный бит SGID и значение идентификатора группы не может быть сохранено, бит SGID в атрибутах копии не сохраняется. Если исходный файл имеет установленные биты SUID и SGID и значение либо идентификатора пользователя, либо идентификатора группы не может быть сохранено, ни один из битов SUID и SGID в атрибутах копии не сохраняется. -v Выводить больше информации, показывая файлы по мере их копирования.

Для каждого уже существующего целевого файла, его содержимое перезаписывается, если позволяют права доступа. Его режим доступа и идентификаторы пользователя и группы не изменяются, если не задана опция -p .

Во второй синтаксической форме целевой_каталог должен существовать, если только не был указан единственный исходный_файл , являющийся каталогом, и опция -R .

Если целевой файл не существует, используются права доступа исходного файла, изменённые в соответствии со значением umask (см. csh(1) ). Если исходный файл имеет установленный бит SUID, этот бит сбрасывается, если только исходный файл и файл назначения не принадлежат одному владельцу. Если исходный файл имеет установленный бит set-user-ID, этот бит сбрасывается, если только исходный файл и файл назначения не принадлежат одной группе, а пользователь является членом этой группы. Если установлены оба бита, и SUID, и SGID, должны быть соблюдены оба вышеупомянутых условия, в противном случае оба этих бита сбрасываются.

Для создания или перезаписи файлов требуются соответствующие права доступа.

Программа cp всегда следует символическим ссылкам, если только не указана опция -R (в этом случае она по умолчанию символическим ссылкам не следует). Опции -H или -L (совместно с опцией -R ) приводят к тому, что cp будет следовать символическим ссылкам, как описано выше. Опции -H , -L и -P игнорируются, если не указана опция -R . Кроме этого, эти опции отменяют друг друга, и действия команды определяются той опцией, которая была указана последней.

Если cp получает сигнал SIGINFO (см. аргумент status для stty(1) ), на стандартный вывод будут выведены имена текущего исходного и целевого файлов, а также прогресс копирования в процентах.

СТАТУС ЗАВЕРШЕНИЯ

Программа cp возвращает 0 в случае успешного завершения и >0 в случае возникновения ошибки.

СОВМЕСТИМОСТЬ

Старые версии cp имели опцию -r . Данная реализация поддерживает эту опцию, однако её поведение отличается от исторического. Использование этой опции настоятельно не рекомендуется, так как её поведение зависит от конкретной реализации. В , -r является синонимом для -RL и работает так же, если это не переопределено другими флагами. Реализация -r в старых версиях отличалась тем, что при воссоздании иерархии файлов специальные файлы копировались как обычные.

Опции -v и -n являются нестандартными и их использование в командных сценариях не рекомендуется.

СМОТРИ ТАКЖЕ

mv(1), rcp(1), umask(2), fts(3), symlink(7)

СТАНДАРТЫ Предполагается, что утилита cp совместима со стандартом IEEE Std 1003.2 (``POSIX.2"").

Копирование файлов - одна из задач, наиболее часто возникающих перед пользователями персонального компьютера. Конечно, можно открыть файловый менеджер, войти в нужную папку и скопировать файл с помощью контекстного меню - тут не о чем говорить. Но в этой статье я хотел бы рассмотреть копирование файлов в Linux с помощью терминала.

Не всегда есть доступ к файловому менеджеру: из-за различных поломок графическая оболочка на домашнем компьютере может быть недоступна, а на серверах используется только консольный интерфейс. К тому же копирование файлов Ubuntu через терминал намного эффективнее, и вы сами в этом убедитесь. Сегодня мы рассмотрим не только обычное копирование командой cp Linux, но и не совсем обычное: с помощью tar и find .

Название утилиты cp - это сокращение от Copy, что означает копировать. Утилита позволяет полностью копировать файлы и директории.

Синтаксис и опции

Общий синтаксис cp выглядит вот так:

$ cp опции файл-источник файл-приемник

$ cp опции файл-источник директория-приемник/

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

Утилита имеет несколько интересных опций, которые могут сильно помочь при нестандартных задачах копирования, поэтому давайте их рассмотрим:

  • --attributes-only - не копировать содержимое файла, а только флаги доступа и владельца;
  • -f, --force - перезаписывать существующие файлы;
  • -i, --interactive - спрашивать, нужно ли перезаписывать существующие файлы;
  • -L - копировать не символические ссылки, а то, на что они указывают;
  • -n - не перезаписывать существующие файлы;
  • -P - не следовать символическим ссылкам;
  • -r - копировать папку Linux рекурсивно;
  • -s - не выполнять копирование файлов в Linux, а создавать символические ссылки;
  • -u - скопировать файл, только если он был изменён;
  • -x - не выходить за пределы этой файловой системы;
  • -p - сохранять владельца, временные метки и флаги доступа при копировании;
  • -t - считать файл-приемник директорией и копировать файл-источник в эту директорию.

Примеры копирования файлов в linux

Теперь, когда вы знаете основные опции, можно перейти к практике. Например, мы хотим скопировать некую картинку из домашней папки в подкаталог pictures:

cp ~/pic.png ~/pictures/

Или можем явно указать имя новой картинки:

cp ~/pic.png ~/pictures/wallpaper.png

Копирование папок осуществляется с помощью ключа -r :

cp -R ~/папка ~/Документы/

После выполнения этой команды копирования ~/папка будет скопирована в папку ~/Документы. Главное, не забывайте поставить слэш в конце выражения или использовать опцию -t . Иначе папка ~/документы будет перезаписана.

По умолчанию команда cp Linux перезаписывает существующие файлы или папки, но можно заставить утилиту спрашивать, нужно ли перезаписывать каждый файл, если вы не уверены в правильности составления команды:

cp -i ~/test ~/Documents/test

Есть и противоположная опция -n , означающая "никогда не перезаписывать существующие файлы".

Опция -u полезна в следующем случае: вы знаете или предполагаете, что в директории, куда копируется файл, есть старая его версия, тогда оператор -u выполнит замену на новую версию:

cp -u ~/test ~/Documents/test

Сp также поддерживает специальные символы замены * и ? . Например, следующая команда скопирует все файлы, начинающиеся на test :

cp ~/test* ~/Документы/

Если нужно применить более сложные регулярные выражения, придётся комбинировать утилиту cp с find или egrep .

cp -p ~/test* ~/Документы/

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

$ cp test.conf{,.bak}

Будет создан файл с таким же именем и расширением.bak

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

Копирование файлов по регулярным выражениям в Linux

В утилите find можно применять различные условия и регулярные выражения для поиска файлов. Я уже немного писал о ней в статье . Мы можем скопировать все найденные с помощью find файлы, вызвав для каждого из них команду cp . Например, копируем все файлы в текущей директории, содержащие в имени только цифры:

find . -name -exec cp {} ~/Документы \

Здесь точка указывает на текущую директорию, а параметр name задает регулярное выражение. Параметром exec мы задаем, какую команду нужно выполнить для обнаруженных файлов. Символ {} - подставляет имя каждого файла.

Но не find "ом единым такое делается. То же самое можно получить, запросив список файлов директории в ls , отфильтровав его по регулярному выражению egrep и передав имена файлов по очереди в cp с помощью xargs :

ls -1 ~/ | egrep "" | xargs cp -t ~/Папка/

Это не совсем удобный способ копировать файлы Linux, но всё же он возможен. Будут скопированы все файлы из домашней директории, содержащие в имени только английские буквы.

Копирование содержимого файлов в Linux

Вы можете не только копировать сами файлы, но и управлять их содержимым. Например, склеить несколько файлов в один или разрезать файл на несколько частей. Утилита cat используется для вывода содержимого файла, в комбинации с операторами перенаправления вывода Bash вы можете выполнять копирование содержимого файла Linux в другой файл. Например:

cat файл1 > файл2

Если файл был не пустым, он будет перезаписан. Или мы можем склеить два отдельных файла в один:

cat файл1 файл2 > файл3

Специальное копирование файлов в Linux с помощью tar

Linux интересен тем, что позволяет выполнять одно и то же действие различными путями. Копирование в Linux тоже может быть выполнено не только с помощью cp . При переносе системных файлов в другой каталог, резервном копировании системных файлов и т.д. важно чтобы сохранились атрибуты, значения владельцев файлов и символические ссылки как они есть без какой-либо модификации.

Утилита cp тоже может справиться с такой задачей? если указать опцию -p , но можно использовать утилиту архивации tar . Мы не будем создавать никаких файлов архивов, а построим туннель. Первая часть команды пакует файл и отправляет на стандартный вывод, а другая сразу же распаковывает в нужную папку:

tar cf - /var | (cd /mnt/var && tar xvf -)

Здесь мы полностью копируем содержимое папки /var в папку /mnt/var. Так вы можете копировать папку Linux, причём абсолютно любую или даже целую операционную систему.

Выводы

Теперь вы знаете, как выполняется копирование файлов Ubuntu и в Linux в целом. Как видите, в терминале это выполняется намного быстрее и эффективнее, чем с помощью графического интерфейса, если помнить нужные команды. Если у вас остались вопросы, спрашивайте в комментариях!

cp - копирование файлов и каталогов

ОБЗОР

cp [ опции ] файл путь cp [ опции ] файл... каталог Опции POSIX: [-fiprR] [--] Дополнительные опции POSIX 1003.1-2003: [-HLP] Опции GNU file-utils 4.0 (краткая форма): [-abdfilprsuvxPR] [-S СУФФИКС ] [-V {numbered,existing,simple}] [--backup= CONTROL ] [--sparse= КОГДА ] [--help] [--version] [--] Дополнительные опции GNU file-utils 4.1 (краткая форма): [-HLP] [--copy-contents] [--no-preserve] [--reply= HOW ] [--remove-destination] [--strip-trailing-slashes] [--target-directory= DIR ]

ОПИСАНИЕ

cp копирует файлы (или, если попросить, каталоги). Вы можете либо копировать один файл в другой, заданный файл, либо копировать сколько угодно файлов в заданный каталог. Если последний аргумент является существующим каталогом, то cp копирует каждый исходный файл в этот каталог (сохраняя имена). В противном случае, если задано только два файла, то cp копирует первый файл во второй. Если задано более двух аргументов, которые не являются опциями, а последний аргумент не является именем какого-либо каталога, то это приведет к ошибке. (Так, если /a~-- это каталог, то cp -r /a /b скопирует /a в /b/a и /a/x в /b/a/x в случае, если /b уже существует, но эта же команда будет копировать /a в /b и /a/x to /b/x, если /b не существует, или же завершится с ошибкой, если /b -- обычный файл). Права доступа к файлам и каталогам будут равны тем, что были на оригинальных файлах, логически умноженными (AND) на 0777 (другими словами, в новых правах будут сброшены биты sticky, setuid и setgid -- Прим. ред.), а также с учетом umask (1) пользователя (за исключением случая, когда задана опция -p). (Но во время рекурсивного копирования каталогов, вновь создаваемые каталоги будут временно получать права, логически сложенные (OR) со значением S_IRWXU (0700), для того, чтобы разрешить чтение, запись и поиск во вновь созданных каталогах). При попытке скопировать файл сам в себя ничего происходить не будет (за исключением возможной выдачи сообщения об ошибке). Когда происходит копирование файла в другой существующий файл, то он открывается с использованием вызова open(path, O_WRONLY | O_TRUNC). Когда копирование осуществляется во вновь создаваемый файл, то он создается с использованием вызова open(path, O_WRONLY | O_CREAT, mode). Если эти вызовы завершаются неудачно, то считается, что файл существует, а чтобы cp попытался его удалить (unlink), необходимо указать опцию -f. Если удаление проходит успешно, то дальше все работает как для случая с новым файлом.

ОПЦИИ POSIX

POSIX имеет четыре с половиной опции: -f Если требуется, удаляет существующие файлы, в которые происходит копирование. (См. выше) -i Спрашивает, нужно ли перезаписывать существующие файлы, в которые происходит копирование. (Запрос выдается на стандартный вывод ошибок, а ответ читается со стандартного ввода. Копирование осуществляется только в случае положительного ответа). -p Сохраняет исходные параметры файла, такие как владелец, группа, права доступа (включая suid и sgid биты), время последней модификации и время последнего доступа к файлу. В случае, если установка владельца или группы приводит к ошибке, suid и sgid биты сбрасываются. (Заметим, что впоследствии исходный файл и его копия могут иметь разное время последнего доступа, так как операция копирования является доступом к исходному файлу). -R Копировать каталоги рекурсивно; правильно обрабатывать ситуации, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, копией FIFO или специального файла будет также являться FIFO или специальный файл). -r Копировать каталоги рекурсивно; выполнять какие-то, неопределенные стандартом действия, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, разрешается, и фактически одобряется, наличие опции -r как синонима для -R. Однако, глупое поведение, которое проявляет версия cp в GNU 4.0 не запрещается.) -- Завершает список опций.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ POSIX 2003

Стандарт POSIX 1003.1-2003 добавляет три опции, которые определяют как управлять символьными ссылками. Когда выполняется нерекурсивное копирование, символьные ссылки разименовываются (берутся те объекты на которые они указывают, вместо самой ссылки -- прим.пер.). Когда выполняется рекурсивное копирование с использованием опции -r, результаты зависят от реализации. Когда выполняется рекурсивное копирование с использованием опции -R: -H Разименовывает символьные ссылки, указанные в списке параметров. Не разименовывает символьные ссылки, которые встречаются во время рекурсивного копирования, а просто копирует их. -L Разименовывает все символьные ссылки, как заданные в списке параметров так и встретившиеся во время рекурсивного копирования. -P Не разименовывает никакие символьные ссылки, ни заданные в списке параметров, ни встретившиеся во время рекурсивного копирования. Просто копирует их как символьные ссылки. Нет опции, работающей по умолчанию - необходимо указывать одну из опций для достижения нужного результата.

ПОДРОБНОСТИ ВЕРСИИ GNU

Обычно файлы записываются точно в том же виде, как и были прочитаны. См. ниже об опции --sparse , который является исключением. По умолчанию cp не копирует каталоги (см. опцию -r ). cp обычно отвергает копирование файла в себя же, за следующим исключением: если заданы опции --force --backup и при этом исходный файл и файл , в который осуществляется копирование, идентичны и являются обычными файлами, то cp сделает резервную копию файла: обычную или нумерованную, как скажете. Это полезно, когда вы просто хотите сделать резервную копию существующего файла, перед тем как его изменить. По умолчанию, символьные ссылки не разименовываются.

ОПЦИИ GNU

-a, --archive По возможности сохраняет структуру и атрибуты исходных файлов при копировании (но не сохраняет структуру каталогов). Эквивалентно заданию опций -dpPR . -b Смотрите обсуждение резервных копий ниже. --copy-contents (начиная с версии file-utils 4.1) В file-utils 4.0 делаются глупые вещи, попытки копировать содержимое файлов устройств и FIFO во время рекурсивного копирования. Никогда не используйте эту опцию. С ней, `cp" может просто зависнуть, читая FIFO или /dev/tty или заполнить весь диск копируя /dev/zero. -d Копирует символьные ссылки как символьные ссылки, а не файлы, на которые они указывают, и сохраняет жесткие ссылки между исходными файлами в копиях. В file-utils 4.0 длинная опция --no-dereference была синонимом для опции -d, но в file-utils 4.1 она является синонимом для опции -P, в то время как опция -d эквивалентна опциям --no-dereference --preserve=links. -f, --force Удаляет существующие файлы в случае возникновения ошибки при открытии их на чтение и никогда не спрашивает подтверждения перед тем как это сделать. (Такое поведение начинается с версии file-utils 4.1. В file-utils 4.0 эта опция была эквивалентна новой опции --remove-destination.) -H (начиная с версии file-utils 4.1) См. описание POSIX выше. -i, --interactive Спрашивает, нужно ли перезаписывать существующие обычные файлы. -l, --link Делает жесткие ссылки вместо копирования обычных файлов (не каталогов). -L, --dereference (начиная с версии file-utils 4.1) Смотрите описание POSIX выше. --no-preserve= АТРИБУТЫ (начиная с версии file-utils 4.1) Не сохраняет заданные атрибуты. См. ниже опцию --preserve. -p, --preserve Защищает оригинальные параметры файла, такие как владелец, группа, права доступа и временные штампы. --preserve= АТРИБУТЫ (начиная с версии file-utils 4.1) Здесь параметр АТРИБУТЫ может принимать одно из значений "mode" (права доступа), "ownership" (владелец и группа), "timestamps" (временные штампы), "links", "all" (всё перечисленное). -P, --no-dereference (начиная с версии file-utils 4.1) См. выше описание POSIX. Эта опция заменяет опцию -P в file-utils 4.0, которая была синонимом опции --parents. См. также опцию -d выше. --parents (начиная с версии file-utils 4.0 также -P) Формирует имя каждого копируемого файла путем добавления к имени каталога, в который осуществляется копирование, символа косой черты (/) и указанного полного имени исходного файла. Последний заданный аргумент cp должен быть именем существующего каталога. Например, команда cp --parents a/b/c existing_dir копирует файл a/b/c в existing_dir/a/b/c, создавая отсутствующие промежуточные каталоги. -r В file-utils 4.1: синоним опции -R. В file-utils 4.0: Копирует каталоги рекурсивно, копирует любые не-каталоги и не символьные ссылки (то есть FIFO и специальные файлы), как если бы они были обычными файлами. Это глупое поведение можно получить в file-utils 4.1 если указать опцию --copy-contents. -R, --recursive Копирует каталоги рекурсивно, защищая не-каталоги. --reply= HOW (начиная с версии file-utils 4.1) Здесь аргумент HOW может принимать одно из значений "yes", "no", "query", определяя какой ответ будет автоматически даваться на все вопросы: "да", "нет" или "запрос" пользователю соответственно. --remove-destination (начиная с версии file-utils 4.1) Удаляет каждый существующий (в том месте куда происходит копирование) файл, перед копированием. В версии file-utils 4.0 эта опция неявно включалась при указании опции -f. --sparse= КОГДА Разреженный (sparse) файл содержит дыры -- последовательности нулевых байт, которые не занимают физических блоков на диске; системный вызов read читает их как нули. Такой подход может как сохранить дисковое пространство, так и увеличить скорость работы, потому что многие бинарные файлы содержат много расположенных последовательно нулевых байт. По умолчанию, cp определяет дыры в исходном файле с помощью простой эвристики и делает соответствующий выходной файл также разреженным. Параметр КОГДА может принимать следующие значения: auto Поведение по умолчанию: выходной файл является разреженным, если входной файл также является разреженным. always Всегда делать выходной файл разреженным. Это полезно, когда входной файл расположен на файловой системе, которая не поддерживает разреженные файлы, а выходной файл будет располагаться на файловой системе, которая их поддерживает. never Никогда не делать выходные файлы разреженными. Если вы нашли применение для этой опции, дайте нам знать. --strip-trailing-slashes (начиная с file-utils 4.1) Удаляет все конечные символы `´ из каждого аргумента. (Это может изменить интерпретацию аргумента, если он является символьной ссылкой на каталог.) -s, --symbolic-link Делает символьные ссылки вместо копирования не-каталогов. Все имена исходных файлов должны быть полными, т. е. начинаться с символа /, за исключением случая, когда символьные ссылки будут создаваться в текущем каталоге. Эта опция генерирует сообщение об ошибке, если система не поддерживает символьные ссылки. -S Суффикс резервной копии, см. ниже. --target-directory= КАТАЛОГ (начиная с версии file-utils 4.1) Задаёт каталог назначения, куда будет осуществляться копирование. Имеется в виду для использования с xargs (1), как, например, в "ls | xargs cp --target- directory=../d". -u, --update Не копировать не-каталоги, которые уже существуют в том месте, куда осуществляется копирование, если они имеют такое же или более раннее время модификации. -v, --verbose Выводить имя каждого файла перед его копированием. -x, --one-file-system Пропускать подкаталоги, которые расположены на файловых системах, отличных от той, где начиналось копирование.

ОПЦИИ РЕЗЕРВНОГО КОПИРОВАНИЯ GNU

GNU-версии таких программ как cp , mv , ln , install и patch могут, если потребуется, делать резервные копии файлов, которые будут перезаписаны, изменены или уничтожены. При желании, резервные копии файлов создаются с помощью опции -b. Как они будут называться, задает опция -V. В случае, если имя файла резервной копии создается с помощью добавления суффикса к имени исходного файла, то суффикс указывается с помощью опции -S. -b, --backup Делать резервные копии файлов, которые будут перезаписаны или удалены. --backup= CONTROL (Начиная с версии fileutils-4.1.) -S СУФФИКС , --suffix= СУФФИКС Добавить СУФФИКС к имени файла при создании его резервной копии. Если данная опция не задана, то суффикс можно также задать, используя переменную окружения SIMPLE_BACKUP_SUFFIX Если не задана ни опция, ни переменная, то по умолчанию используется суффикс ~. -V МЕТОД , --version-control= МЕТОД Определяет, как будут называться резервные копии файлов. Аргумент МЕТОД может принимать значения numbered (или t), existing (или nil) и never (или simple). Если данная опция не задана, то будет использовано значение переменной окружения VERSION_CONTROL . Если же не задано значение и этой переменной, то по умолчанию тип резервного копирования устанавливается в existing. Данная опция соответствует переменной version-control в Emacs. Допустимыми значениями МЕТОД являются (допускаются однозначные сокращения): t , numbered Всегда делать нумерованные резервные копии файлов. nil , existing Делать нумерованные резервные копии файлов для файлов, которые уже их имеют и простые резервные копии для остальных файлов. never , simple Всегда делать простые резервные копии.

СТАНДАРТНЫЕ ОПЦИИ GNU

--help Выдать подсказку на стандартный вывод и успешно завершиться. --version Выдать информацию о версии на стандартный вывод и успешно завершиться. -- Служит для обозначения конца списка опций.

ОКРУЖЕНИЕ

При работе обычным образом используются значения переменных LANG, LC_ALL, LC_COLLATE, LC_CTYPE и LC_MESSAGES. Для GNU версии используются также переменные SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL, контролирующие создание резервных копий, как описано выше.

СОВМЕСТИМОСТЬ

POSIX 1003.2

ЗАМЕЧАНИЯ

Данная страница описывает версию cp пакета fileutils-4.1; другие версии могут иметь небольшие отличия. Исправления и дополнения присылайте по адресу [email protected] . Сообщения об ошибках в этой программе присылайте по адресу [email protected] .

ПЕРЕВОД

Перевёл с английского Виктор Вислобоков 2003

Команда cp и есть та палочка-выручалочка, которая всегда придет на помощь. Если Вы только что установили линукс и у Вас не установлен , а для настройки выхода в интернет необходимо сконфигурировать определенные файлы, то команда cp выручит нас, как никакая другая.
Допустим, для настройки выхода в интернет Вам нужно изменить некоторые файлы, но из-за отсутствия прав доступа к ним Вы не можете этого сделать посредством графического интерфейса. Но зато Вы можете создать файл посредством графического интерфейса в любой доступной папке (например /home/имя_пользователя), заполнить его согласно инструкции или мануалу и, запустив с последующей , заменить при помощи команды cp существующий файл на созданным Вами.
Например, Вам, как и мне, понадобилось изменить файл /etc/network/interfaces. Лично я, при помощи графического интерфейса, создал файл interfaces в /home/viuktor/. Скопировал в него содержимое оригинала (файла /etc/network/interfaces), добавил нужные строки и сохранил. А потом, при помощи cp заменил файл /etc/network/interfaces файлом /home/viuktor/interfaces..
Правда, выполняя данную операцию, следует проявить максимальное внимание, ведь очень часто некоторые файлы требуется дополнить одной или более строками. Потому, если в мануле сказано «добавьте…», ни в коем случае не забывайте скопировать все из оригинала в созданный вами файл.

Команда cp применяется для копирования и переноса файлов.

Она имеет следующий синтаксис cp {параметр} <источник> <пункт назначения>

ОПИСАНИЕ В первой форме утилита cp копирует содержимое файла исходный_файл в целевой_файл. Во второй форме содержимое каждого указанного файла копи- руется в целевой_каталог. Имена самих файлов при этом не изменяются. Если cp обнаруживает попытку копирования файла самого в себя, копирование не производится. Имеются следующие опции: -H Если указана опция -R, следовать символическим ссылкам, указанным в командной строке, но не следовать символическим ссылкам, встречаю- щимся в процессе обхода дерева каталогов. -L Если указана опция -R, следовать всем символическим ссылкам. -P Если указана опция -R, не следовать никаким символическим ссылкам. Это режим работы по умолчанию. -R Если исходный_файл указывает на каталог, cp копирует этот каталог вместе со всем деревом файловой иерархии, которое он содержит. Ес- ли исходный_файл оканчивается на /, копируется не сам каталог, а только его содержимое. Эта опция также указывает на необходимость копирования символических ссылок, а не объектов, на которые они указывают, и заставляет cp создавать специальные файлы вместо того, чтобы копировать их, как обычные. Создаваемые каталоги имеют те же права доступа, что и исходные каталоги, вне зависимости от действу- ющего для процесса значения umask. Обратите внимание, что cp копирует жёсткие ссылки как отдельные файлы. Если вам нужно сохранять жёсткие ссылки, используйте tar(1), cpio(1) или pax(1). -f Для каждого уже существующего целевого имени пути, удалять его и создавать новый файл, не требуя подтверждения операции, вне зависи- мости от его прав доступа. (Опция -f отменяет действие любой из ранее указанных опций -i или -n.) -i Заставляет cp выдавать запрос через стандартный файл ошибок перед копированием файла, которое бы вызвало перезапись существующего файла. Если ответ, полученный со стандартного ввода, начинается символом `y" или `Y", будет предпринята попытка копирования. (Опция -i отменяет действие любой из ранее заданных опций -f или -n.) -l Создавать жёсткие ссылки на обычные файлы в иерархии вместо того, чтобы их копировать. -n Не перезаписывать существующие файлы. (Опция -n отменяет действие любой из предшествующих опций -f или -i.) -p Заставляет cp сохранять следующие атрибуты каждого исходного файла в создаваемой копии: время модификации, время доступа, флаги файла, режим доступа, идентификаторы пользователя и группы, насколько это позволено правами доступа. Если значения идентификаторов пользователя и группы не могут быть сохранены, не выводится никакого сообщения об ошибке, и возвращае- мое программой значение статуса завершения не изменяется. Если исходный файл имеет установленный бит set-user-ID и значение идентификатора пользователя не может быть сохранено, бит set-user- ID в атрибутах копии не сохраняется. Если исходный файл имеет установленный бит set-group-ID и значение идентификатора группы не может быть сохранено, бит set-group-ID в атрибутах копии не сохра- няется. Если исходный файл имеет установленные биты set-user-ID и set-group-ID и значение либо идентификатора пользователя, либо идентификатора группы не может быть сохранено, ни один из битов set-user-ID и set-group-ID в атрибутах копии не сохраняется. -v Выводить больше информации, показывая файлы по мере их копирования. Для каждого уже существующего целевого файла, его содержимое перезаписы- вается, если позволяют права. Его режим доступа и идентификаторы пользо- вателя и группы не изменяются, если не задана опция -p. Во второй синтаксической форме целевой_каталог должен существовать, если только не был указан единственный исходный_файл, являющийся каталогом, и опция -R. Если целевой файл не существует, используются права исходного файла, изменённые в соответствии со значением umask (см. csh(1)). Если исходный файл имеет установленный бит set-user-ID, этот бит сбрасывается, если только исходный файл и файл назначения не принадлежат одному владельцу. Если исходный файл имеет установленный бит set-user-ID, этот бит сбрасы- вается, если только исходный файл и файл назначения не принадлежат одной группе, а пользователь является членом этой группы. Если установлены оба бита, и set-user-ID, и set-group-ID, должны быть соблюдены оба вышеупомя- нутых условия, в противном случае оба этих бита сбрасываются. Для создания или перезаписи файлов требуются соответствующие права доступа. Утилита cp всегда следует символическим ссылкам, если только не указана опция -R (в этом случае она по умолчанию символическим ссылкам не сле- дует). Опции -H или -L (совместно с опцией -R) приводят к тому, что cp будет следовать символическим ссылкам, как описано выше. Опции -H, -L и -P игнорируются, если не указана опция -R. Кроме этого, эти опции отме- няют друг друга, и действия команды определяются той опцией, которая была указана последней. Если cp получает сигнал SIGINFO (см. аргумент status для stty(1)), на стандартный вывод будут выведены имена текущего исходного и целевого фай- лов, а также прогресс копирования в процентах. СТАТУС ЗАВЕРШЕНИЯ Утилита cp возвращает 0 в случае успешного завершения и >0 в случае воз- никновения ошибки. СОВМЕСТИМОСТЬ Старые версии cp имели опцию -r. Данная реализация поддерживает эту опцию, однако её поведение отличается от исторического. Использование этой опции настоятельно не рекомендуется, так как её поведение зависит от конкретной реализации. Во FreeBSD, -r является синонимом для -RL и рабо- тает так же, если это не переопределено другими флагами. Реализация -r в старых версиях отличалась тем, что при воссоздании иерархии файлов специ- альные файлы копировались как обычные. Опции -v и -n являются нестандартными и их использование в командных сце- нариях не рекомендуется. СМОТРИ ТАКЖЕ mv(1), rcp(1), umask(2), fts(3), symlink(7) ИСТОРИЯ Команда cp появилась в Version 1 AT&T UNIX.

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

Копирование файлов и каталогов

В Bash для копирования файлов используется команда cp (от "copy"), которой обычно передаются два аргумента:

    адрес с именем исходного файла,

    новый адрес с именем или просто адрес каталога, куда помещается копия.

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

Рассмотрим примеры.

cp readme readme2

В данном случае создается копия файла readme, которая остается в той же директории под именем readme2.

cp readme Desktop/

В папку Desktop копируется файл readme. Здесь текущим является родительский Desktop"у каталог. Имена копии и файла оригинала будут совпадать, а вот полные адреса – нет.

cp / home/ irina/ tux.png / mnt/ D/ pingvin.png

Здесь копируется файл из одного каталога в другой, используются абсолютные адреса, имя копии изменяется.

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

Чтобы скопировать каталог со всем его содержимым, необходимо использовать ключ -r команды cp:

cp -r ./ letters ./ oldletters

Перемещение и переименование

В Bash-оболочке Linux для перемещения и переименования используется одна и та же команда – mv (от "move" – перемещать). Переименование можно рассматривать как частный случай перемещения, ведь по-сути изменяется полный адрес файла, что равносильно перемещению, даже если файл остается в том же каталоге.

Также как в случае cp, для mv необходимо указать пару аргументов. Выбор между перемещением и переименованием зависит от того, что это за аргументы. При перемещении файл меняет свой адрес, следовательно, если в первом и втором аргументах указаны разные адреса, то произойдет перемещение. Если адреса одинаковые, а различаются только имена, происходит переименование. Кроме того, перемещение может быть совмещено с переименованием.

В случае перемещения без переименования во втором аргументе указывается только каталог места назначения.

mv document.txt Work

mv document.txt Work/ doc23.txt

Здесь в первом случае файл document.txt перемещается в каталог Work. Во-втором случае одновременно происходит перемещение файла и его переименование: файл document.txt перемещается в директорию Work и получает новое имя doc23.txt.

При использовании команды mv для переименования в качестве второго аргумента указывается новое имя:

mv order.txt orderNew.txt

mv Work/ list.odt Work/ names.odt

Каталоги перемещаются и переименовываются по тому же принципу, что и файлы. Групповое перемещение файлов работает также, как с командой cp.

Создание файлов и каталогов

Новые директории создаются командой mkdir . Например, чтобы создать каталог Work в текущей директории необходимо выполнить следующую команду:

mkdir Work
или
mkdir ./ Work

Существует множество способов создания файлов, обычно они создаются какой-либо программой. Если все же возникает необходимость создать пустой файл, сделать это можно с помощью программы touch. В качестве аргумента ей передается имя создаваемого файла. Еще один способ – . Пример:

cal > ./ Work/ January

Здесь программа cal выводит календарь на текущий месяц, а поскольку стоит знак перенаправления вывода, то вывод команды будет записан в файл January, находящийся в папке Work.