Patch

不更改所有者和組的更新檔

  • June 20, 2012

我有一個非 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,添加另外兩行程式碼。

patch創建新文件,這就是它擁有有效使用者憑據的原因。

解決方法:使用patch -o創建臨時文件,然後簡單地cat將 tmp 文件轉換為原始文件。

引用自:https://unix.stackexchange.com/questions/41181