
我有以下疑問。在我遵循的與軟體安裝相關的教程中,我必須執行以下命令(我正在將其執行到SSHshell,因此此步驟清單以exit
命令結尾):
sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit
我的疑問是:
-s
命令後面的參數到底扮演什麼角色sudo
?
在網路上搜尋我發現:
-s [指令] ‑s(shell)選項執行 SHELL 環境變數指定的 shell(如果已設定)或密碼資料庫中指定的 shell。如果指定了命令,則會透過 shell 的 ‑c 選項將其傳遞到 shell 執行。如果未指定命令,則執行互動式 shell
在我看來,sudo -s
使用 shell 的環境變數執行命令。
但這對我來說並不清楚:在這種情況下,使用環境變數執行的命令是什麼? (它只執行sudo -s
而不執行sudo -s [command]
)。
答案1
簡單的答案是它給你一個 root shell。這就是它在這裡的用途。有一個好的su
Unix.SE 上的、sudo -i
、sudo -s
和sudo su
方法之間的技術比較但這與這裡無關。該代碼可以使用任何並且可以工作。
幫助塊意味著以下幾件事:
它正在環境變數中尋找命令
$SHELL
。如果你跑步echo $SHELL
你可能會看到/bin/bash
。這意味著您將獲得 Bash 的根實例。我確信如果您參與zsh
其中就意味著您獲得了zsh
.如果
$SHELL
為空,它將回退到/etc/passwd
為該使用者定義的預設 shell。如果您提供命令(例如
sudo -s whoami
),它實際上正在運行:sudo /bin/bash -c "whoami"
如果您不傳遞命令,它也不會傳遞參數
-c
,因此您只會獲得一個互動式 shell。
我多次使用過“root”這個詞。經過預設 sudo
都是關於以 root 身份運行事物,但sudo
(和 su)可以以其他用戶身份運行事物(如果您有權這樣做)。我只是為那些會大喊大叫的學究們說這句話,這並沒有像我上面sudo -s -u $USER
所承諾的那樣給他們一個根外殼。-s
而在我的最卑微的就意見而言,僅僅成為兩個命令的 root 確實很愚蠢,更不用說它可能會讓用戶意外地以 root 身份運行更多命令。如果您想要或需要以 root 身分執行某些內容,只需在命令前面加上sudo
:
sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
我對任何建議獲取 root shell 的教程都持懷疑態度,除非您確實有大量命令要運行……即使如此,也有腳本編寫。
答案2
sudo -s
將像普通用戶一樣在當前目錄中運行命令。例如:
rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds
Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)
rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found
rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found
rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds
Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)
當然,使用-s
而不是在命令前面加上前綴./
可能不會節省太多時間。