Копирование файлов и папок в системах Unix. Опции резервного копирования gnu. Копирование файлов по регулярным выражениям в Linux
Хотя для копирования файлов иногда пользуются командой cat, но в Linux существует для этого специальная команда cp. Ее можно применять в одной из двух форм:
$ cp source destination
$ cp source_directory new_directory
В первом случае файл или каталог source копируется, соответственно, в файл или каталог destination, а во втором случае файлы, содержащиеся в каталоге source_directory копируются в каталог new_directory. Для копирования надо иметь права на чтение файлов, которые копируются, и права на запись в каталог, в который производится копирование.
Если в качестве целевого указывается существующий файл, то его содержимое будет затерто, поэтому при копировании надо соблюдать осторожность. Впрочем, можно использовать команду cp с опцией -i, тогда перед перезаписью существующего файла будет запрашиваться подтверждение.
У команды cp имеется еще несколько полезных опций:
Значение |
|
Сохраняет время модификации файла и максимально возможные полномочия. Без этой опции для нового файла задаются полномочия, соответствующие полномочиям запустившего команду пользователя |
|
Если source - каталог, то копируется как он, так и все входящие в него подкаталоги, т. е. сохраняется исходная форма дерева каталогов |
|
Если задать эту опцию, то символические ссылки будут оставаться ссылками (а иначе вместо ссылки копируется файл, на который дается ссылка) |
|
Перезаписывать файлы при копировании (если такие уже есть) без дополнительных предупреждений |
Команда mv
Если вам необходимо не скопировать, а переместить файл из одного каталога в другой, вы можете воспользоваться командой mv. Синтаксис этой команды аналогичен синтаксису команды cp. Более того, она сначала копирует файл (или каталог), а только потом удаляет исходный файл (каталог). И опции у нее такие же, как у cp.
Команда mv может использоваться не только для перемещения, но и для переименования файлов и каталогов (т. е. перемещения их внутри одного каталога). Для этого надо просто задать в качестве аргументов старое и новое имя файла:
$ mv oldname newname
Следует учесть, что команда mv не позволяет переименовать сразу несколько файлов (используя шаблон имени), так что команда mv *.xxx *.yyy не будет работать.
При использовании команды mv, также как и при использовании cp, не забывайте применять опцию -i для того, чтобы получить предупреждение, когда файл будет перезаписываться.
Команды rm и rmdir
Для удаления ненужных файлов и каталогов в Linux служат команды rm (удаляет файлы) и rmdir (удаляет пустой каталог) . Для того, чтобы воспользовался этими командами, вы должны иметь право записи в каталоге, в котором расположены удаляемые файлы или каталоги. При этом полномочия на изменение самих файлов не обязательны. Если хотите перед удалением файла получить дополнительный запрос на подтверждение операции, используйте опцию -i.
Если вы попытаетесь использовать команду rm (без всяких опций) для удаления каталога, то будет выдано сообщение, что это каталог, и удаления не произойдет. Для удаления каталога надо удалить в нем все файлы, после чего удалить сам каталог с помощью команды rmdir. Однако можно удалить и непустой каталог со всеми входящими в него подкаталогами и файлами, если использовать команду rm с опцией -r.
Если вы дадите команду rm *, то удалите все файлы в текущем каталоге. Подкаталоги при этом не удалятся. Для удаления как файлов, так и подкаталогов текущего каталога надо тоже воспользоваться опцией -r. Однако всегда помните, что в Linux нет команды восстановления файлов после их удаления (даже если вы спохватились сразу же после ошибочного удаления файла или каталога)!
Частыми операциями в файловой структуре являются создание файлов и каталогов, их копирование, перемещение, переименование, а также удаление. Очевидно для подобных действий в командной оболочке 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.
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"").
Команда 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.
cp - копирование файлов и каталогов