Sudo

使用 sudo 計時命令執行時間時,time 應該在 sudo 之前還是在 sudo 之後?

  • March 17, 2020

當用 來計時命令執行時間時sudotime應該在之前sudo還是之後sudo

time sudo command

或者

sudo time command

哪一個是正確的?

輸出對我來說似乎非常不同

   [esolve@xxt ~]$ sudo time ls
   193.144.21.131_udp.folder  lockfile         run_udp.sh    udp_folder
   50IP.txt                   my_ip_host_site  send_udp_log  udp_receiver
   ip_each_site               raw_udp_client   ssh.log
   0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 3088maxresident)k
   0inputs+0outputs (0major+236minor)pagefaults 0swaps


   [esolve@xxt ~]$ time sudo ls        
   193.144.21.131_udp.folder  lockfile         run_udp.sh    udp_folder
   50IP.txt                   my_ip_host_site  send_udp_log  udp_receiver
   ip_each_site               raw_udp_client   ssh.log

   real    0m0.004s
   user    0m0.003s
   sys     0m0.002s
   [esolve@xxt ~]$

為什麼他們會這樣?

time sudo command執行你的 shell 的time內置函式(如果有的話),而sudo time command總是執行time程序搜尋路徑中的執行檔 ( $PATH)。

time sudo command包括命令花費的時間sudo,而sudo time command沒有。

您應該使用sudo time command, 因為sudo的處理時間很小但並不總是可以忽略不計,如果使用者需要輸入密碼,它的掛鐘時間可能會大很多。

看起來在 Debian Stretch 上不起作用“sudo time”

# sudo time ls
sudo: time: command not found

# time sudo ls
created

real    0m0,007s
user    0m0,002s
sys     0m0,006s

在 Debian 上:

# whereis time
time: /usr/include/time.h /usr/share/man/man7/time.7.gz /usr/share/man/man3/time.3am.gz /usr/share/man/man2/time.2.gz

在 Debian 傑西上:

# whereis time
time: /usr/bin/time /usr/include/time.h /usr/share/man/man3/time.3am.gz /usr/share/man/man1/time.1.gz /usr/share/man/man2/time.2.gz /usr/share/man/man7/time.7.gz

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