如果我想做类似的事情
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
在脚本中的先前命令行示例中使用,则它将按上述方式运行。