cp 而不覆盖目标权限

cp 而不覆盖目标权限

如何cp在不改变目标文件权限的情况下使用该命令?例如:

cp /tmp/file   /home/file

我不想chown改变 chgrp/home/file

答案1

如果你只打开了手册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

答案2

cat也可以:

cat /tmp/file > /home/file

答案3

默认情况下,GNU cp(版本 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则会显示:

cp: cannot create regular file 'dest-file': Permission denied

除此之外的其他选择cp

cat将保留目标文件的 inode 和权限:

cat file-with-new-data > file-to-overwrite

但是,重定向不适用于sudo

如果您想要sudo保留目标权限,请使用以下命令:

< file-with-new-data sudo tee file-to-overwrite > /dev/null

这相当于更详细的:

cat file-with-new-data | sudo tee file-to-overwrite > /dev/null

答案4

根本不要使用与权限相关的开关,尤其是--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

相关内容