工作中用得比較多的命令是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命令做了簡單介紹,使用這兩個命令,特別注意,如果需要操作環境變數,需要指定正確的選項和引數。
希望這篇文章能幫到正在努力的你,歡迎關注、評論!