Сохраняйте право собственности и права доступа к файлам при копировании файлов или каталогов
На днях я планировал сделать резервную копию некоторых данных из моей настольной системы 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
Рекомендуем прочитать:
- Как скопировать файлы и одновременно изменить владельца и разрешения
Надеюсь это поможет.