為什麼使用 su – 而不是僅僅使用 su


介紹

Linux 作業系統是一個強大的工具,為其使用者提供了廣泛的功能和特性。系統管理員在 Linux 系統上執行的最常見任務之一是使用 su 命令切換到 root 使用者帳戶。但是,在某些情況下,建議使用 su – 而不是僅僅使用 su。在本文中,我們將探討使用 su – 的原因,並提供一些關於其如何有益的示例。

su 和 su – 之間有什麼區別?

su 命令用於切換到系統上的另一個使用者帳戶,通常是 root 帳戶。當您鍵入 su 後跟要切換到的使用者的名稱時,系統會提示您輸入該使用者的密碼。輸入正確的密碼後,您將被授予訪問該使用者帳戶的許可權。

另一方面,su – 命令不僅切換到目標使用者帳戶,還使用該使用者的環境變數建立一個新的 shell 環境。這意味著對環境變數(例如 PATH 或 HOME)所做的任何更改都將應用於新的 shell。

為什麼使用 su – 而不是僅僅使用 su?

使用 su – 比僅僅使用 su 更為有利的原因有很多。讓我們在下面探討其中的一些原因。

環境變數

如上所述,su – 使用目標使用者的環境變數建立一個新的 shell 環境。如果您需要執行依賴於特定環境變數的命令,這將非常有用。例如,假設您需要執行一個位於系統 PATH 變數中不存在的目錄中的命令。如果您只使用 su,則找不到該命令,因為 PATH 變數尚未更新以包含該目錄。但是,如果您使用 su –,新的 shell 環境將具有更新的 PATH 變數,並且可以找到該命令。

主目錄

當您使用 su – 時,新的 shell 環境將以目標使用者的主目錄作為其當前工作目錄。如果您需要執行需要訪問目標使用者主目錄的操作,這將非常有用。例如,如果您需要編輯位於目標使用者主目錄中的檔案,只需使用 su – 並將主目錄設定為當前工作目錄即可。

資源分配

當您使用 su – 時,新的 shell 環境還將具有目標使用者的資源限制和 ulimit 值。如果您需要執行一個比當前使用者帳戶允許的資源更多的命令,這將非常有用。例如,如果您需要執行一個需要比當前使用者帳戶允許的開啟檔案更多的程序,則可以使用 su – 切換到 root 帳戶並訪問更多資源。

示例

讓我們來看一些使用 su – 比僅僅使用 su 更為有利的示例。

示例 1:使用更新的環境變數執行命令

假設您需要執行一個位於系統 PATH 變數中不存在的目錄中的命令。如果您只使用 su,則找不到該命令,因為 PATH 變數尚未更新以包含該目錄。但是,如果您使用 su –,新的 shell 環境將具有更新的 PATH 變數,並且可以找到該命令。

為了說明這一點,假設您有一個名為 mycommand 的命令,位於 /opt/myapp/bin 目錄中。如果您只使用 su,則無法執行該命令,因為系統的 PATH 變數不包含 /opt/myapp/bin 目錄。但是,如果您使用 su –,新的 shell 環境將具有更新的 PATH 變數,並且您可以像這樣執行命令:

su - root password: mycommand

示例 2:訪問目標使用者的主目錄中的檔案

假設您需要編輯位於目標使用者主目錄中的檔案。只需使用 su – 並將主目錄設定為當前工作目錄即可。

為了說明這一點,假設您需要編輯一個名為 myconfig.txt 的檔案,該檔案位於使用者“user1”的主目錄中。如果您只使用 su,則會切換到“user1”帳戶,但當前工作目錄將與先前使用者的當前工作目錄相同。但是,如果您使用 su –,新的 shell 環境將以“user1”的主目錄作為當前工作目錄,並且您可以像這樣編輯檔案:

su - user1 password: cd ~ vi myconfig.txt

示例 3:使用更多資源執行程序

假設您需要執行一個比當前使用者帳戶允許的資源更多的程序。您可以使用 su – 切換到 root 帳戶並訪問更多資源。

為了說明這一點,假設您需要執行一個需要比當前使用者帳戶允許的開啟檔案更多的程序。如果您只使用 su,則會切換到 root 帳戶,但資源限制和 ulimit 值將與先前使用者的帳戶相同。但是,如果您使用 su –,新的 shell 環境將具有 root 帳戶的資源限制和 ulimit 值,並且您可以像這樣執行程序:

su - password: ulimit -n 5000 myprocess

使用 su 的最佳實踐

雖然 su – 非常有用,但在使用時務必小心。以下是在使用 su – 時應遵循的一些最佳實踐:

  • 僅在必要時使用 su – 雖然 su – 可能會有幫助,但並非總是必要的。如果您只需要以 root 使用者身份執行命令,則使用 su 就足夠了。

  • 使用 sudo 代替 su – 在許多情況下,最好使用 sudo 命令而不是 su –。sudo 允許您以提升的許可權執行命令,而無需切換到 root 使用者帳戶。

  • 謹慎使用 su – 當您使用 su – 時,您實際上是以 root 使用者身份執行命令。如果您不小心,這可能很危險。請確保仔細檢查您使用 su – 執行的任何命令,以確保它們是安全的。

  • 跟蹤環境變化 當您使用 su – 時,環境變數可能會發生變化,這可能會導致意外行為。請務必跟蹤對環境變數所做的任何更改,並確保它們不會造成問題。

  • 登出 root 使用者帳戶 完成使用 root 使用者帳戶後,請務必登出。這將防止在您不注意時發生任何意外更改。

不應使用 su 的示例

雖然 su – 可能有用,但在某些情況下最好不要使用它。以下是一些不應使用 su – 的示例:

  • 執行簡單命令 如果您只需要執行一個具有提升許可權的簡單命令,則使用 su 就足夠了。如果您不需要更改環境變數或訪問 root 使用者的主目錄,則無需使用 su –。

  • 使用特定環境執行命令 如果您需要使用特定環境執行命令,最好使用 env 命令而不是 su –。這允許您設定環境變數而無需更改使用者帳戶。

  • 執行不需要提升許可權的命令 如果您需要執行的命令不需要提升許可權,則使用 su – 是不必要的。

結論

總之,su – 命令在多種情況下比僅僅使用 su 更為有利,因為它使用目標使用者的環境變數、主目錄和資源限制建立一個新的 shell 環境。這對於使用更新的環境變數執行命令、訪問目標使用者的主目錄中的檔案以及使用更多資源執行程序非常有用。作為系統管理員,必須瞭解 su 和 su – 之間的區別,以及何時使用每個命令來有效地執行您的任務。

更新於: 2023-03-23

1K+ 閱讀量

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.