cp + не хочет перезаписывать разрешения
Как вы используете cp
команда без изменения прав доступа к целевому файлу? Например:
cp /tmp/file /home/file
Я не хочу меняться chown
а также chgrp
на /home/file
,
6 ответов
Если вы только открыли руководство дляcp
...
Следующее не будет перезаписывать файл прав доступа и владения + групповой:
cp --no-preserve=mode,ownership /tmp/file /home/file
Обратите внимание, что привилегии root необходимы, если вы хотите сохранить право собственности и групповую принадлежность.
Выдержка из руководства:
--preserve[=ATTR_LIST] preserve the specified attributes (default: mode,owner- ship,timestamps), if possible additional attributes: context, links, xattr, all
По умолчанию GNU (версия 8.32) НЕ перезаписывает разрешения назначения, поэтому вопрос спорный:
% ls -li
total 8,192
19392015 -rwxrwxrwx 1 ravi ravi 4 Jan 3 16:54 bar*
19392014 -rw-r--r-- 1 ravi ravi 4 Jan 3 16:46 foo
% cp foo bar
% ls -li
total 8,192
19392015 -rwxrwxrwx 1 ravi ravi 4 Jan 3 16:57 bar*
19392014 -rw-r--r-- 1 ravi ravi 4 Jan 3 16:46 foo
%
В случае, когда файл назначения недоступен для записи (даже если каталог доступен), будет сказано:
cp: cannot create regular file 'dest-file': Permission denied
Другие варианты кромеcp
:
cat
сохранит индексный дескриптор и разрешения целевого файла:
cat file-with-new-data > file-to-overwrite
Однако перенаправления не будут работать с .
Если вы хотитеsudo
и сохраните разрешения назначения, используйте это:
< file-with-new-data sudo tee file-to-overwrite > /dev/null
Это эквивалентно более подробному:
cat file-with-new-data | sudo tee file-to-overwrite > /dev/null
Ни в коем случае не используйте переключатели, связанные с разрешениями, особенно --no-preserve
потому что ведет себя странно
хорошо:
[il@localhost Downloads]$ sudo cp ssh_host_* /etc/ssh/
[il@localhost Downloads]$ ls -l /etc/ssh
total 604
-rw-r--r-- 1 root root 581843 Oct 20 2017 moduli
-rw-r--r-- 1 root root 2276 Oct 20 2017 ssh_config
-rw------- 1 root root 3907 Oct 20 2017 sshd_config
-rw-r-----. 1 root ssh_keys 227 Oct 2 12:26 ssh_host_ecdsa_key
-rw-r--r--. 1 root root 172 Oct 2 12:26 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 411 Oct 2 12:26 ssh_host_ed25519_key
-rw-r--r--. 1 root root 100 Oct 2 12:26 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys 1679 Oct 2 12:26 ssh_host_rsa_key
-rw-r--r--. 1 root root 392 Oct 2 12:26 ssh_host_rsa_key.pub
плохой:
[il@localhost Downloads]$ sudo cp --no-preserve=mode,ownership ssh_host_* /etc/ssh/
[il@localhost Downloads]$ ls -l /etc/ssh
total 604
-rw-r--r-- 1 root root 581843 Oct 20 2017 moduli
-rw-r--r-- 1 root root 2276 Oct 20 2017 ssh_config
-rw------- 1 root root 3907 Oct 20 2017 sshd_config
-rw-r--r--. 1 root ssh_keys 227 Oct 2 12:27 ssh_host_ecdsa_key
-rw-r--r--. 1 root root 172 Oct 2 12:27 ssh_host_ecdsa_key.pub
-rw-r--r--. 1 root ssh_keys 411 Oct 2 12:27 ssh_host_ed25519_key
-rw-r--r--. 1 root root 100 Oct 2 12:27 ssh_host_ed25519_key.pub
-rw-r--r--. 1 root ssh_keys 1679 Oct 2 12:27 ssh_host_rsa_key
-rw-r--r--. 1 root root 392 Oct 2 12:27 ssh_host_rsa_key.pub
По умолчанию cp не отменяет разрешения. Если вы хотите убедиться, что разрешение не будет переопределено, используйте
cp --preserve=mode,ownership /tmp/file /target_dir_where_file_resides
Или вы можете использовать еще лучшую программу установки из GNU coreutils, которая была сделана для этой конкретной цели. Обратите внимание, что он не может выполнять рекурсию (без опции -R или -r).
http://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html