如何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