无需更改所有者和组即可进行修补

无需更改所有者和组即可进行修补

我有一个非 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 文件复制到原始文件。

相关内容