如何在不更改文件所有者的情况下使用 sudo 命令?

Dok*_*Gus 12 sudo sed ownership

当我使用 sudo 对文件进行一些活动时,这些文件会更改所有权。如何在不更改文件所有者的情况下使用 sudo 命令?

示例文件 archivos35.sh 来自 apache,但我使用 sed(使用 usr admin sudo)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh
Run Code Online (Sandbox Code Playgroud)

使用adminsudo 的用户---

sudo sed -i s/old/new/g archivos35.sh
Run Code Online (Sandbox Code Playgroud)

但是使用 sudo 执行该命令会更改文件的所有者

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh
Run Code Online (Sandbox Code Playgroud)

如何避免使用带有 sudo 的命令来更改文件的所有者?我只想更改文件而不修改其所有者。

ter*_*don 30

如果需要使用sudo修改文件,则使用它切换到正确的用户。您不需要切换到 root,这只是默认设置。所以,在你的情况下,你想做:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh
Run Code Online (Sandbox Code Playgroud)

这将以sed用户身份运行命令apache


Kyl*_*nes 2

您并没有真正更改文件的所有权,而是删除旧文件并创建一个新文件。当您执行此操作时,将创建由创建者的 uid 拥有的新文件。为了避免这种情况,您必须就地修改该文件。使用文本编辑器对其进行编辑,该文本编辑器通过覆盖原始文件来保存。或者运行 sed 命令并将输出输出到临时文件,然后将临时文件复制到原始文件上。

  • @JShorthouse 大多数所谓的“就地”编辑都不是,它们主要更改临时文件,然后将其 mv 到原始文件(这包括大多数(如果不是全部)sed 和 perl 的实现以及大多数其他程序带有“就地编辑”选项)。如果您想要实际的就地编辑,请使用可编写脚本的文本编辑器,例如“ed”或“ex”或“vi”/“vim”。 (3认同)