- Linux копирование файлов с сохранением прав
- Копирование файлов в Linux
- Утилита копирования файлов cp
- Синтаксис и опции
- Примеры копирования файлов в linux
- Копирование файлов по регулярным выражениям в Linux
- Копирование содержимого файлов в Linux
- Специальное копирование файлов в Linux с помощью tar
- Выводы
- Копируем файлы и папки в терминале Linux
- Копирование в терминале Linux
- Рекурсивное копирование
- Опция -i при копировании
- Заключение
- How to Copy File Permissions and Ownership to Another File in Linux
- Copy File Permissions to Another File
- Copy File Ownership to Another File
Linux копирование файлов с сохранением прав
Сообщение pvasya » 21.03.2009 19:52 Заранее прошу прощения за написанные глупости, т.к. в shelle я пока не силён, но учусь(именно поэтому сюда и пришёл ! Необходимо скопировать дирректорию /home/dir1/ в /home/dir2/
Нашёл параметр -p у команды cp, вроде бы то что надо, но увы скопировать целую дирректорию cp не даёт. Тогда я решил сделать архив tar, а потом распоковать содержимое в нужную дирректорию.
Архив создал( с опциями cpf, вроде как p — отвечает за сохранение атрибутов). Затем переместил архив во вторую дирректорию и разархивировал(с опциями xvf). Но увы прямо в дирректории назначения(т.е. в /home/dir2/) была создана дирректория home/dir1/, а там уже файлы(т.е. получилось в итоге так: /home/dir2/home/dir1/). Это первая проблема. Как правильно разархивировать? Т.е. прямо в /home/dir2/, а не в /home/dir2/home/dir1/ ?
Вторая проблема: посмотрел содержимое /home/dir2/home/dir1/ — права доступа сброшены Источник
Копирование файлов в Linux
Копирование файлов — одна из задач, наиболее часто возникающих перед пользователями персонального компьютера. Конечно, можно открыть файловый менеджер, войти в нужную папку и скопировать файл с помощью контекстного меню — тут не о чем говорить. Но в этой статье я хотел бы рассмотреть копирование файлов в Linux с помощью терминала. Не всегда есть доступ к файловому менеджеру: из-за различных поломок графическая оболочка на домашнем компьютере может быть недоступна, а на серверах используется только консольный интерфейс. К тому же копирование файлов Ubuntu через терминал намного эффективнее, и вы сами в этом убедитесь. Сегодня мы рассмотрим не только обычное копирование командой cp Linux, но и не совсем обычное: с помощью tar и find.
Утилита копирования файлов cp
Название утилиты cp — это сокращение от Copy, что означает копировать. Утилита позволяет полностью копировать файлы и директории.
Синтаксис и опции
- —attributes-only — не копировать содержимое файла, а только флаги доступа и владельца;
- -f, —force — перезаписывать существующие файлы;
- -i, —interactive — спрашивать, нужно ли перезаписывать существующие файлы;
- -L — копировать не символические ссылки, а то, на что они указывают;
- -n — не перезаписывать существующие файлы;
- -P — не следовать символическим ссылкам;
- -r — копировать папку Linux рекурсивно;
- -s — не выполнять копирование файлов в Linux, а создавать символические ссылки;
- -u — скопировать файл, только если он был изменён;
- -x — не выходить за пределы этой файловой системы;
- -p — сохранять владельца, временные метки и флаги доступа при копировании;
- -t — считать файл-приемник директорией и копировать файл-источник в эту директорию.
Примеры копирования файлов в linux
Теперь, когда вы знаете основные опции, можно перейти к практике. Например, мы хотим скопировать некую картинку из домашней папки в подкаталог pictures:
Или можем явно указать имя новой картинки:
Копирование папок осуществляется с помощью ключа -r:
После выполнения этой команды копирования
/папка будет скопирована в папку
/Документы. Главное, не забывайте поставить слэш в конце выражения или использовать опцию -t. Иначе папка
/документы будет перезаписана.
По умолчанию команда cp Linux перезаписывает существующие файлы или папки, но можно заставить утилиту спрашивать, нужно ли перезаписывать каждый файл, если вы не уверены в правильности составления команды:
Есть и противоположная опция -n, означающая «никогда не перезаписывать существующие файлы».
Опция -u полезна в следующем случае: вы знаете или предполагаете, что в директории, куда копируется файл, есть старая его версия, тогда оператор -u выполнит замену на новую версию:
Сp также поддерживает специальные символы замены * и ?. Например, следующая команда скопирует все файлы, начинающиеся на test:
Если нужно применить более сложные регулярные выражения, придётся комбинировать утилиту cp с find или egrep.
В случае, если важно сохранить права доступа к файлу и его владельца, нужно использовать опцию -p:
Для упрощения использования команды можно применять синтаксис фигурных скобок. Например, чтобы создать резервную копию файла, выполните:
Будет создан файл с таким же именем и расширением .bak
По умолчанию в cp не отображается прогресс копирования файла, что очень неудобно при работе с большими файлами, но его можно легко посмотреть с помощью утилиты cv.
Копирование файлов по регулярным выражениям в Linux
В утилите find можно применять различные условия и регулярные выражения для поиска файлов. Я уже немного писал о ней в статье как найти новые файлы в Linux. Мы можем скопировать все найденные с помощью find файлы, вызвав для каждого из них команду cp. Например, копируем все файлы в текущей директории, содержащие в имени только цифры:
Здесь точка указывает на текущую директорию, а параметр name задает регулярное выражение. Параметром exec мы задаем, какую команду нужно выполнить для обнаруженных файлов. Символ <> — подставляет имя каждого файла.
Но не find‘ом единым такое делается. То же самое можно получить, запросив список файлов директории в ls, отфильтровав его по регулярному выражению egrep и передав имена файлов по очереди в cp с помощью xargs:
Это не совсем удобный способ копировать файлы Linux, но всё же он возможен. Будут скопированы все файлы из домашней директории, содержащие в имени только английские буквы.
Копирование содержимого файлов в Linux
Вы можете не только копировать сами файлы, но и управлять их содержимым. Например, склеить несколько файлов в один или разрезать файл на несколько частей. Утилита cat используется для вывода содержимого файла, в комбинации с операторами перенаправления вывода Bash вы можете выполнять копирование содержимого файла Linux в другой файл. Например:
Если файл был не пустым, он будет перезаписан. Или мы можем склеить два отдельных файла в один:
Специальное копирование файлов в Linux с помощью tar
Linux интересен тем, что позволяет выполнять одно и то же действие различными путями. Копирование в Linux тоже может быть выполнено не только с помощью cp. При переносе системных файлов в другой каталог, резервном копировании системных файлов и т.д. важно чтобы сохранились атрибуты, значения владельцев файлов и символические ссылки как они есть без какой-либо модификации.
Утилита cp тоже может справиться с такой задачей? если указать опцию -p, но можно использовать утилиту архивации tar. Мы не будем создавать никаких файлов архивов, а построим туннель. Первая часть команды пакует файл и отправляет на стандартный вывод, а другая сразу же распаковывает в нужную папку:
tar cf — /var | ( cd /mnt/var && tar xvf — )
Здесь мы полностью копируем содержимое папки /var в папку /mnt/var. Так вы можете копировать папку Linux, причём абсолютно любую или даже целую операционную систему.
Выводы
Теперь вы знаете, как выполняется копирование файлов Ubuntu и в Linux в целом. Как видите, в терминале это выполняется намного быстрее и эффективнее, чем с помощью графического интерфейса, если помнить нужные команды. Если у вас остались вопросы, спрашивайте в комментариях!
Копируем файлы и папки в терминале Linux
В данной статье мы разберемся как копировать в терминале Linux папки и файлы. Эти знания вам могут пригодится, если вдруг у вас не будет графического окружения Linux. Да и знания терминала вам поможет в освоении Linux систем, хотя на данный момент можно обойтись в некоторых дистрибутивах вообще без терминала. Но, терминал, это основа Linux, и без него вам может быть тяжко в решении каких либо ситуаций. На сайте уже имеются некоторые статьи на тему освоения терминала в Linux, так что при желании вы можете их найти и ознакомится с ними. Ну а мы вернемся к теме копирования файлов и папок в терминале Linux. При копировании, да и вообще система Linux чувствительна к регистру, так что вводя команды будьте внимательны.
Копирование в терминале Linux
Для копирования используется команда “cp”, у нее так же имеются некоторые опции, о которых вы узнаете чуть позже. Для того что бы скопировать какие то файлы или папки, необходимо ввести команду “cp”, далее, при необходимости указать путь до директории где находится папка или файл который вы ходите скопировать. После чего указываем путь до директории куда хотим скопировать. Так же возможно, вне домашнего каталога вам придется работать от root пользователя при копировании информации. И так, давайте приступим, например, мне необходимо скопировать файл под названием “test” в директорию “Документы”. Для этого ввожу команду “cp” далее название файла и путь куда хочу скопировать данный файл. При это не забываем про регистр, как мы помним, Linux чувствителен к нему:
Теперь усложним немного и скопируем файл который находится в директории “/tmp”. Как вы помните, при копировании вне домашнего каталога вам нужны будут права root пользователя. А иначе у вас не чего не получится:
Что бы получить права root пользователя на копирования из директории “/tmp”, как вы могли уже догадаться, необходимо перед командой “cp” ввести слово “sudo”:
sudo cp /tmp/test-file /Документы
Предположим, нам необходимо скопировать данный файл по другим именем, для этого снова вводим команду “cp”, далее путь к файлу и путь куда хотим скопировать данный файл. Но, в конце пути куда хотим скопировать, необходимо ввести новое название того файла, который копируем. Например, я хочу скопировать файл “test-file” из директории “/tmp” и переименовать его в “test-cp”, что бы вам было более наглядно, выделю жирным старое название файла, а затем новое:
sudo cp /tmp/ test-file /Документы/ test-cp
Рекурсивное копирование
Для копирования папок применяется рекурсивное копирование, –recursive (recursive) — копировать каталоги рекурсивно (то есть все подкаталоги и все файлы в подкаталогах). Для этого используется опция “-r”, например, я хочу скопировать папку “test-cp” в директорию “Документы”. Для этого ввожу команду “cp -r”далее указываем путь при необходимости и название папки которую хочу скопировать, после чего указываем путь куда копировать:
При необходимости точно так же как и файлы при копировании, название папки можно изменить, например, назовем папку “test-cp” просто “test”:
cp -r test-cp Документы/test
Опция -i при копировании
При копировании файла в нужную вам директорию, предыдущий файл с таким же именем просто перезапишется. То есть, если вы копируете файл “test-file” из директории “/tmp”, в директорию “Документы”, он заменит в директории уже имеющийся файл “test-file”. Что бы избежать перезаписывания файлов необходимо вести опцию “-i”, тогда при копировании вам будет предложен выбор, перезаписать файл или нет. Вы можете выбрать да или нет, указав это буквами “y- да, перезаписать” или “n- нет, не перезаписывать”:
sudo -i /tmp/test-file Документы
Заключение
Я уже не раз писал, что не стоит боятся терминала Linux, в нем нет ни чего сложно, а порой, бывает и так, что работа в терминале облегчает пользователю жизнь. Так же, если вы пользователь Debian и у вас по каким то причинам нет sudo, вы можете перейти к статье о настройке Debian и добавить вашего пользователя в группу sudo. Вы всегда можете набрать команду “cp –help” для получения справки по данной команде.
А на этом сегодня все. Надеюсь данная статья будет вам полезна.
Журнал Cyber-X
How to Copy File Permissions and Ownership to Another File in Linux
Assuming you have two files or you have just created a new file and want it to have the same permissions and ownership of an older file.
In this article, we will show you how to copy permissions and ownership from one file to another file in Linux using chmod and chown commands respectively.
Copy File Permissions to Another File
To copy file permissions from one file to another file, use chmod command with the —reference switch in the following syntax, where reference_file is the file from which permissions will be copied rather than specifying mode (i.e octal or numerical mode permissions) for file.
$ chmod --reference=reference_file file
$ ls -l users.list $ ls -l keys.list $ sudo chmod --reference=users.list keys.list $ ls -l keys.list
Copy File Ownership to Another File
Likewise, to copy ownership from another file, use chown command with the —reference switch as well using the following syntax, where reference_file is file from which owner and group will be copied rather than specifying owner:group values for file.
$ chown --reference=reference_file file
$ ls -l keys.list $ touch api.list $ ls -l keys.list $ sudo chown --reference=keys.list api.list $ ls -l api.list
You can also copy file permissions and ownership from one file to multiple files as shown.
$ sudo chmod --reference=users.list users1.list users2.list users3.list $ sudo chown --reference=users.list users1.list users2.list users3.list
For more information, refer to the chown and chmod man pages.
You will also find these guides concerning file permissions to be useful:
That’s all! If you know any other way to copy or clone file permissions in Linux, do share with us via the feedback form below.