当我使用 sudo 对文件执行某些活动时,这些文件会更改所有权。如何在不更改文件所有者的情况下使用 sudo 命令?
示例文件 archivos35.sh 来自 apache 但我使用 sed (使用 usr admin sudo)
$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh
使用 sudo 的用户admin
---
sudo sed -i s/old/new/g archivos35.sh
但是使用 sudo 执行该命令会更改文件的所有者
$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh
如何避免使用带有 sudo 的命令来更改文件的所有者?我只想更改文件而不修改其所有者。
答案1
如果需要使用sudo
修改该文件,那么使用它来切换到正确的用户。你不需要切换到 root,这只是默认设置。因此,就您而言,您需要执行以下操作:
sudo -iu apache sed -i 's/old/new/g' archivos35.sh
这将以sed
用户身份运行命令apache
。
答案2
您并没有真正更改文件的所有权,而是删除旧文件并创建一个新文件。当您执行此操作时,将创建由创建者的 uid 拥有的新文件。为了避免这种情况,您必须就地修改该文件。使用文本编辑器对其进行编辑,该文本编辑器通过覆盖原始文件来保存。或者运行 sed 命令并将输出输出到临时文件,然后将临时文件复制到原始文件上。