sudo 是否以您自己的用户 ID 创建文件?

sudo 是否以您自己的用户 ID 创建文件?

如果我想做类似的事情

sudo fdisk -l > test.txt

但我希望 test.txt 位于我自己的用户 ID(而不是 root)下,而不必事后对其进行 chown,有什么办法吗?

具体来说,我的实际目标是让 python 脚本执行一系列 sudo 权限操作,并转储输出。如果流程如下,我应该以何种方式请求 sudo 权限:

somescripts
 \-> runs python script, grabs sudo
      \-> runs operation with sudo permissions
      |     like fdisk -l > test.txt
      \-> runs operation with sudo permissions, reads stdout, writes stdout to file
            like fdisk -l --> reads stdout --> make file --> writes data to file

谢谢。

答案1

您可以使用tee。tee 的作用是将 stdin 写入文件并将其回显到 stdout 上。将其与管道和 sudo 一起使用可有效更改活动用户以进行输出重定向。请记住,管道的左侧必须实际写入 stdout,而不是 stderr。

sudo fdisk -l | sudo -u myuser tee <file>

答案2

$ sudo fdisk -l > test.txt
$ ls -l test.txt
-rw-r--r-- 1 daniel daniel 1848 apr 22 14:20 fd

像您描述的那样使用重定向时,之后不需要更改文件的所有权。

按照建议使用时tee,在同样的前提下不需要使用sudo -u myuser

sudo fdisk -l | tee test.txt

就足够了(但根据上面的演示,在这种情况下不需要)。


在 Python 脚本中,如果你运行整个脚本作为root通过sudo,则重定向也将作为进行root,但如果您仅sudo在脚本中的先前命令行示例中使用,则它将按上述方式运行。

相关内容