題 帶有和沒有連字符的“su”有什麼區別?


我對Linux終端很新,我不太確定它們之間的區別 su 用連字符和 su 沒有連字符,例如: su - username 與 su username

我看了 進入文檔 但在那裡,沒有提到。有人可以幫幫我嗎?


72
2017-07-26 16:39


起源


“登錄shell”通常表示交互式shell。這是一個只執行腳本並退出的shell。 - Shahbaz
就在那裡 您鏈接到的同一個聯機幫助頁:“ - , - l, - login:使shell成為登錄shell“ - ArjunShankar
你甚至不必谷歌它,只需鍵入 su --help。 - Art Shayderov
值得注意的是:這在使用root而不使用hypen來啟動新的登錄shell時非常有用, $PATH 將無法更新,因此您將無法直接調用root用戶的二進製文件 /sbin 和 /usr/sbin - Garrett


答案:


“ - ”和“無連字符”之間的區別在於後者 保持 你現有的環境(變量等);前者創建一個新環境(具有實際用戶的設置,而不是您自己的設置)。

https://wiki.archlinux.org/index.php/Su

連字符有兩個效果:

1)從當前目錄切換到主目錄   通過登錄新用戶(例如,在root用戶的情況下為/ root)   作為那個用戶

2)將環境變量更改為新用戶的環境變量   由他們的〜/ .bashrc決定。也就是說,如果su的第一個參數是a   連字符,當前目錄和環境將更改為什麼   如果新用戶實際登錄到新用戶,則會被預期   會話(而不僅僅是接管現有會話)。


70
2017-07-26 16:43



這個網站 - > admon.org/difference-between-login-shell-and-non-login-shell 說沒有連字符時使用文件/ etc / profile和〜/ .bash_profile不會被執行。這兩個文件對用戶環境有何意義? - user574183
這兩件事是文件 組 用戶環境:) 不 執行它們意味著 保持 你原來的環境。執行它們(使用“ - ”)意味著製作 您的 環境和你“su'ing”的用戶一樣。使用連字符通常是你的 想  - 每當我“su”時,我習慣性地使用“ - ”。 - paulsm4
執行的順序真的重要嗎? Iam問這個是因為在那個站點上他們提到了兩個文件/ etc / bashrc~ / .bashrc在非登錄shell時以相反的順序執行。有人請幫幫我 - user574183
@ user574183當然,例如如果一個人設置了一些東西但另一個沒有設置某些東西或設置為其他東西 - fikr4n


su - 為root啟動登錄shell。有關與普通shell的差異,請參閱 這個網站 例如。


2
2017-07-26 16:43



這是真的,但這不是問題:) - paulsm4
這是不正確的,你可以用破折號運行su並讓它為不同的用戶啟動一個shell。執行以下操作並查看輸出 sudo su - "testuser" -c "whoami" - David Hergert
@DavidHergert是的,如果沒有用戶名,它會為root打開一個shell。 - Lars Kotthoff
@LarsKotthoff - 好的,對不起,它措辭的方式聽起來好像破折號是什麼使它成為root shell,而不是讓用戶默認為root的事實。甚至我當地居民SA也對此感到困惑。 :) - David Hergert