![我可以在进程替换中使用 sudo 吗?](https://linux22.com/image/176636/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E8%BF%9B%E7%A8%8B%E6%9B%BF%E6%8D%A2%E4%B8%AD%E4%BD%BF%E7%94%A8%20sudo%20%E5%90%97%EF%BC%9F.png)
我想通过计算磁盘空间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
限制它显示的子目录的层数等。