我可以在进程替换中使用 sudo 吗?

我可以在进程替换中使用 sudo 吗?

我想通过计算磁盘空间du,但我需要sudo访问一些目录:

$perl -ane '$i+=($F[0] =~ s/^(\d+).*/$1/r); print "$i\n"' <(sudo du /home)

这使:

[sudo] password for user1: 
sudo: unable to read user1: Input/output error

如何在进程替换中启用 sudo?

答案1

首先使用空命令运行它,或者sudo -v设置身份验证令牌,然后接下来的运行应该可以在不询问密码的情况下运行。虽然取决于系统上 sudo 的设置方式,但默认身份验证的有效期为 15 分钟。

$ sudo -v
[sudo] password for iv: 
$ cat <(sudo du -d 1)
28636  ./foo
...

或者使用管道代替进程替换:

$ sudo du -d 1 | cat
[sudo] password for iv: 
28636  ./foo
...

请注意,您的 Perl 脚本似乎没有多大意义。du列出所有目录,包括带有子目录的目录,并计算所有子树本身的大小。因此,如果您只添加它显示的数字,您就可以为每个深度级别的所有目录计数一次。例如,这里只有一个 100 kB 的文件a/b/c

$ du a
104     a/b/c
108     a/b
112     a

另外,du -s仅显示给定目录的总大小,并且至少 GNU du 具有-d--max-depth=N限制它显示的子目录的层数等。

相关内容