首頁 > linux教程 > Linux用戶和用戶組管理 閱讀:0更新時間:2020-03-28 00:59:20

Linux su命令:用戶間切換(包含su和su -的區別)

su 是最簡單的用戶切換命令,通過該命令可以實現任何身份的切換,包括從普通用戶切換為 root 用戶、從 root 用戶切換為普通用戶以及普通用戶之間的切換。

普通用戶之間切換以及普通用戶切換至 root 用戶,都需要知曉對方的密碼,只有正確輸入密碼,才能實現切換;從 root 用戶切換至其他用戶,無需知曉對方密碼,直接可切換成功。


su 命令的基本格式如下:

[root@localhost ~]# su [選項] 用戶名


選項:
  • -:當前用戶不僅切換為指定用戶的身份,同時所用的工作環境也切換為此用戶的環境(包括 PATH 變量、MAIL 變量等),使用 - 選項可省略用戶名,默認會切換為 root 用戶。
  • -l:同 - 的使用類似,也就是在切換用戶身份的同時,完整切換工作環境,但后面需要添加欲切換的使用者賬號。
  • -p:表示切換為指定用戶的身份,但不改變當前的工作環境(不使用切換用戶的配置文件)。
  • -m:和 -p 一樣;
  • -c 命令:僅切換用戶執行一次命令,執行后自動切換回來,該選項后通常會帶有要執行的命令。

【例 1】

[lamp@localhost ~]$ su -root
密碼: <-- 輸入 root 用戶的密碼
#"-"代表連帶環境變量一起切換,不能省略


【例 2】

[lamp@localhost ~]$ whoami
lamp
#當前我是lamp
[lamp@localhost ~]$ su - -c "useradd user1" root
密碼:
#不切換成root,但是執行useradd命令添加user1用戶
[lamp@localhost ~]$ whoami
lamp
#我還是lamp
[lamp@localhost ~]$ grep "user1' /etc/passwd
userl:x:502:504::/home/user1:/bin/bash
#user用戶已經添加了


除了像例 2 這樣,執行一條命令后用戶身份會隨即自動切換回來,其他切換用戶的方式不會自動切換,只能使用 exit 命令進行手動切換,例如:

[lamp@localhost ~]$ whoami
lamp
#當前我是lamp
[lamp@localhost ~]$ su - lamp1
Password:   <--輸入lamp1用戶的密碼
#切換至 lamp1 用戶的工作環境
[lamp@localhost ~]$ whoami
lamp1
#什么也不做,立即退出切換環境
[lamp1@localhost ~]$ exit
logout
[lamp@localhost ~]$ whoami
lamp

su 和 su - 的區別

注意,使用 su 命令時,有 - 和沒有 - 是完全不同的,- 選項表示在切換用戶身份的同時,連當前使用的環境變量也切換成指定用戶的。我們知道,環境變量是用來定義操作系統環境的,因此如果系統環境沒有隨用戶身份切換,很多命令無法正確執行。

舉個例子,普通用戶 lamp 通過 su 命令切換成 root 用戶,但沒有使用 - 選項,這樣情況下,雖然看似是 root 用戶,但系統中的 $PATH 環境變量依然是 lamp 的(而不是 root 的),因此當前工作環境中,并不包含 /sbin、/usr/sbin等超級用戶命令的保存路徑,這就導致很多管理員命令根本無法使用。不僅如此,當 root 用戶接受郵件時,會發現收到的是 lamp 用戶的郵件,因為環境變量 $MAIL 也沒有切換。

初學者可以這樣理解它們之間的區別,即有 - 選項,切換用戶身份更徹底;反之,只切換了一部分,這會導致某些命令運行出現問題或錯誤(例如無法使用 service 命令)。

通過下面這個例子,可直觀的看到 su 和 su - 的區別:

[lamp@localhost ~]$ whoami
lamp
#查詢用戶身份,我是lamp
[lamp@localhost ~]$ su root
密碼:
<-輸入root密碼
#切換到root,但是沒有切換環境變量。注意:普通用戶切換到root需要密碼
[root@localhost ~]# env | grep lamp
#查看環境變量,提取包含lamp的行
USER=lamp
#用戶名還是lamp,而不是root
PATH=/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/lamp/bin
#命令査找的路徑不包含超級用戶路徑
MAIL=/var/spool/mail/lamp
PWD=/home/lamp
LOGNAME=lamp
#郵箱、主目錄、目前用戶名還是lamp

可以看到,在不使用 su - 的情況下,雖然用戶身份成功切換,但環境變量依舊用的是原用戶的,切換并不完整。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩