不改变所有者和组的补丁

l0b*_*0b0 7 patch chown

我有一个非 root 用户拥有的文件:

# ls -l example.php
-rw------- 1 foo bar ... example.php
Run Code Online (Sandbox Code Playgroud)

我刚刚应用了一个带有类似命令的补丁

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
Run Code Online (Sandbox Code Playgroud)

作为 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,添加另外两行代码。

poi*_*ige 9

patch 创建新文件,这就是它保存有效用户凭据的原因。

解决方法:使用patch -o创建临时文件,然后简单地将cattmp 文件转换为原始文件。