我有一个非 root 用户拥有的文件:
# ls -l example.php
-rw------- 1 foo bar ... example.php
我刚刚使用类似命令应用了补丁
patch -p0 <<-EOF
--- .../example.php.orig 2012-06-20 15:07:13.000000000 +0200
+++ .../example.php 2012-06-20 15:43:05.000000000 +0200
...
EOF
作为root,目标文件用户和组都更改为root
.我在页面中找不到任何对此的引用man
。
有没有办法像以前一样保留文件所有权不使用su
, sudo
, 或chown
?
su
似乎无法指定一个组。sudo -u foo patch ...
运行正常,但设置了错误的组。sudo -u foo -g bar patch ...
返回Sorry, user root is not allowed to execute '/usr/bin/patch' as foo:bar on hostname
。这可能是因为 userfoo
不是 group 的成员bar
。chown
意味着必须在运行之前存储权限patch
,并添加另外两行代码。
答案1
patch
创建新文件,这就是它保存有效用户凭据的原因。
解决方法:使用patch -o
创建临时文件,然后简单地cat
将 tmp 文件复制到原始文件。