Поиск по сайту:

Сохраняйте право собственности и права доступа к файлам при копировании файлов или каталогов

На днях я планировал сделать резервную копию некоторых данных из моей настольной системы Ubuntu на внешний USB-накопитель. После того, как я перенес все данные на внешний диск, я заметил, что владельцы и права доступа к файлам и каталогам в источнике и месте назначения различаются. Но я хотел сохранить существующие атрибуты файла (такие как владелец, группа, метка времени и т. д.) в обоих местах. После быстрого поиска в Google и просмотра справочных страниц команды "cp" я обнаружил, что мы можем сохранить права владения и права доступа к файлам без изменений при копировании файлов и каталогов на Linux. Если вы когда-либо оказывались в подобной ситуации, вот быстрый способ сделать это.

Сохраняйте права собственности и права доступа к файлам при копировании файлов или каталогов в Linux

Команда cp имеет возможность копировать файлы и каталоги, но сохраняет время изменения, время доступа и режимы из исходного файла.

cp -rp ~/data /media/sk/sk_seagate/data/

Здесь я копирую содержимое папки с именем data на свой внешний диск.

На страницах руководства команды cp:

-p     same as --preserve=mode,ownership,timestamps

       --preserve[=ATTR_LIST]
              preserve the specified attributes (default: mode,ownership,timestamps), if possible
              additional attributes: context, links, xattr, all

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

А флаг "-r" используется здесь для рекурсивного копирования каталогов. Это означает, что он будет копировать каталоги, их подкаталоги и файлы.

Альтернативно вы можете использовать флаг -a. Он включает флаг -r и сохраняет все, например ссылки, xattr, атрибуты SELinux и т. д.

cp -a ~/data /media/sk/sk_seagate/data/

Из справочных страниц команды cp:

-a, --archive
              same as -dR --preserve=all

Чтобы проверить, сохранены ли права доступа к файлу и право собственности, используйте команду getfacl в обоих местах, то есть в источнике и месте назначения.

getfacl ~/data
getfacl /media/sk/sk_seagate/data/

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

scp -rp ~/data senthil@192.168.225.22:/home/senthil/

Приведенная выше команда скопирует папку содержимого с именем "data" из моей локальной системы в удаленную систему. Здесь 192168.225.22 — это IP-адрес моей удаленной системы, а "senthil" — имя пользователя удаленной системы.

Проверьте права доступа к файлам и право собственности на каталог «data» в обеих системах с помощью команды "getfacl".

Сначала давайте проверим атрибуты файла каталога «data» в локальной системе:

getfacl data/

Пример вывода:

file: data/
owner: sk
group: sk
user::rwx
group::rwx
other::r-x

Затем проверьте атрибуты файла каталога «данные» в удаленной системе. Вы можете напрямую войти в удаленную систему и проверить атрибуты fie удаленного каталога с помощью команды ssh, как показано ниже.

ssh senthil@192.168.225.22 getfacl data

Пример вывода:

senthil@192.168.225.22's password:
file: data
# owner: senthil
# group: senthil
user::rwx
group::rwx
other::r-x

Как вы могли заметить из приведенных выше результатов, информация о владельце и группе (т. е. сентил) в моей удаленной системе различна. Потому что флаг -p команды scp не сохраняет все разрешения.

На страницах руководства команды scp:

-p      Preserves modification times, access times, and modes from the original file.

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

Более подробную информацию можно найти на страницах руководства команд cp и scp.

man cp
man scp

Рекомендуем прочитать:

  • Как скопировать файлы и одновременно изменить владельца и разрешения

Надеюсь это поможет.

Статьи по данной тематике