Bash

我可以在程序替換中使用 sudo 嗎?

  • July 8, 2020

我想通過 計算磁碟空間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?

首先使用空命令執行它,或者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限制它顯示的子目錄級別等。

引用自:https://unix.stackexchange.com/questions/597451