sudo和su命令怎麼用?

工作中用得比較多的命令是sudo,su命令相對少些。那麼它們到底有什麼區別,怎麼正確地使用這兩個命令?

su與sudo

su:該命令名稱來自“switch user”的首字母,意思是切換到其他使用者。不帶任何引數執行這個命令,預設會切換到root使用者。如果需要切換到指定使用者,比如切換到使用者“aneirin”,執行“su aneirin”即可。要切換成功,

需要輸入目標使用者的密碼

,這裡是使用者“aneirin”的密碼。

sudo:以root許可權執行一條命令,與su命令不同的是,

需要輸入當前使用者的密碼

,當前使用者必須在sudoers檔案中或者屬於一個在sudoers檔案的使用者組中。

要正確使用這兩個命令,還需要了解Shell的幾種型別,

Shell型別

登入Shell:當用戶登入系統時所用的Shell,登入Shell會查詢下面幾個檔案並處理其中的命令。

在CentOS 7系統,bash處理檔案的順序如下

(其他系統未測試),

1,/etc/profile檔案和目錄/etc/profile。d下的檔案,屬於系統級別

2,$HOME/。bash_profile

3,$HOME/。bashrc(如果有)

非登入Shell:比如在命令提示符下直接鍵入bash,它僅會執行“$HOME/。bashrc”

互動式Shell:前兩種都屬於互動式Shell,在這種Shell下,可以鍵入命令和系統互動

非互動式Shell:從一個自動程序執行,沒有標準輸入輸出

命令示例

sudo su

預設切換到root使用者,鑑權使用當前使用者的密碼。將啟動一個

互動式非登入Shell

,僅檔案“/root/。bashrc”會被執行,可以看到執行該命令後,雖然切換到root賬戶,但是當前目錄仍然沒變,

[aneirin@host:~]$ sudo su[root@host: /home/aneirin]#

sudo su -

啟動一個互動式登入Shell,檔案/etc/profile、/root/。bash_profile、/root/。bashrc都將被執行,可以看到彈出了登入banner。

[aneirin@host:~]$ sudo su -Last login: Tue Jun 29 15:00:11 CST 2021 on pts/0[root@host:~]#

sudo -i

與“sudo su -”類似,唯一不同的是,登入Shell由目標使用者的密碼資料庫指定,比如下面,

“root:x:0:0:root:/root:/bin/sh”,切換到root後,使用的Shell為“/bin/sh”

sudo /bin/bash

使用root許可權呼叫命令“/bin/bash”,啟動一個非登入互動式Shell,僅“/root/。bashrc”會被執行,切到root使用者後,

原來的環境變數保持不變

小技巧:

判斷當前Shell是否為登入Shell(shopt是bash中的命令,所以Shell要是bash)

shopt -q login_shell && echo ‘Login shell’ || echo ‘No login shell’

總結

本文對su和sudo命令做了簡單介紹,使用這兩個命令,特別注意,如果需要操作環境變數,需要指定正確的選項和引數。

希望這篇文章能幫到正在努力的你,歡迎關注、評論!