當前位置: 首頁>>技術教程>>正文


‘sudo su – ‘vs ‘sudo -i’ vs ‘sudo/bin/bash’ – 何時使用哪一個或者它有什麽關係?

, , , ,

問題描述

當我正在做一些需要根連續輸入數十次的內容時,我更喜歡將會話切換到根會話。在我在互聯網上使用的各種教程和說明中,我看到sudo su,sudo su – ,sudo -i和sudo /bin /bash被用來打開根會話,但我不清楚它們之間的區別以及何時或如果差異很重要。

有人可以幫我解決這個問題嗎?

最佳解決辦法

為了解釋這一點,你需要知道程序的功能:

su – 命令su用於切換到另一個用戶(用戶),但也可以通過不帶參數調用該命令來切換到root用戶。在輸入切換到用戶環境的密碼後,su會詢問您要切換的用戶密碼。

sudosudo旨在以root權限運行單個命令。但與su不同,它會提示您輸入當前用戶的密碼。此用戶必須位於sudoers文件(或sudoers文件中的組)中。默認情況下,Ubuntu “remembers”你的密碼為15分鍾,這樣你就不必每次輸入你的密碼。

bash – 與計算機交互的text-interface。了解登錄,non-login,交互式和non-interactive shell 之間的區別很重要:

  • 登錄shell:登錄shell以特定用戶的身份登錄係統,這是用戶名和密碼所必需的。當您點擊ctrl + alt + F1登錄到虛擬終端後,您將成功登錄登錄shell。

  • non-login shell 程序:在沒有登錄的情況下執行的 shell 程序,目前是logged-in用戶。當你在gnome中打開一個圖形終端時,它是一個non-login shell 。

  • 交互式shell:一個shell(登錄或non-login),您可以在其中交互式輸入或中斷命令。例如一個gnome終端。

  • non-interactive shell:可能從自動進程運行的(子)shell。您將看不到輸入或輸出。

sudo su使用命令su調用sudo。 Bash被稱為交互式non-login shell 。所以bash隻執行.bashrc。你可以看到,切換到root後,你仍然在同一個目錄中:

user@host:~$ sudo su
root@host:/home/user#

sudo su -這一次它是一個登錄shell,因此/etc/profile.profile.bashrc被執行,您將會發現自己位於root的主目錄下,並且擁有root的環境。

sudo -isudo su -幾乎相同-i(模擬初始登錄)選項將目標用戶的密碼數據庫條目指定的shell作為登錄shell運行。這意味著login-specific資源文件(如.profile.bashrc.login)將被shell讀取和執行。

sudo /bin/bash這意味著您使用命令/bin/bash調用sudo/bin/bash作為non-login shell 啟動,因此所有dot-files都不執行,但bash本身讀取主叫用戶的.bashrc。你的環境保持不變。你的家不會是根的家。所以你是根,但是在主叫用戶的環境中。

sudo -s讀取$SHELL變量並執行內容。如果$SHELL包含/bin/bash,則調用sudo /bin/bash(請參見上文)。

檢查:檢查您是否在登錄shell中(僅在bash中工作,因為shopt是內置命令):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/246.html,未經允許,請勿轉載。