Linux運維基礎之su命令詳解

Linux運維基礎之su命令詳解

su 命令通常與其他命令一起使用,如用於臨時提升訪問許可權的 sudo、用於更改密碼的 passwd,以及用於檢查當前登入使用者的 whoami。瞭解 su 對於系統管理任務和需要在多使用者環境中執行的使用者來說至關重要。

因此,讓我們開始學習如何有效使用 su 命令來切換使用者賬戶和提升許可權。

su 命令的一般語法:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ su [OPTIONS] [USER [ARGUMENT...]]
$ su [OPTIONS] [USER [ARGUMENT...]]
$ su [OPTIONS] [USER [ARGUMENT...]]

1. 使用不同的使用者賬戶登入

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su [username]
su [username]
su [username]

將使用者名稱傳遞給 su 命令,密碼驗證通過後,它將提供一個登入會話。

例 1:切換到根使用者

如果執行 su 命令時沒有輸入使用者名稱,則預設為根使用者。系統會提示你輸入 root 密碼。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ su
Password: [Enter root password here]
# [You are now in a shell as the root user]
$ su Password: [Enter root password here] # [You are now in a shell as the root user]
$ su
Password: [Enter root password here]
# [You are now in a shell as the root user]

例 2:切換到特定使用者

要切換到特定使用者,可以指定使用者名稱作為引數。例如,要切換到名為 john 的使用者,可以這樣做:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ su john
Password: [Enter john's password here]
$ [You are now in a shell as john]
$ su john Password: [Enter john's password here] $ [You are now in a shell as john]
$ su john
Password: [Enter john's password here]
$ [You are now in a shell as john]

例 3:以其他使用者身份執行命令

你也可以以其他使用者的身份執行一條命令,而無需進入他們的 shell。例如,以 john 的身份執行 whoami

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ su -c "whoami" john
Password: [Enter john's password here]
john
$ su -c "whoami" john Password: [Enter john's password here] john
$ su -c "whoami" john
Password: [Enter john's password here]
john

2. 使用不同的使用者賬戶登入 + 執行命令

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su [username] -c [command]
su [username] -c [command]
su [username] -c [command]

使用 -c 選項可以在不同的使用者賬戶下執行特定命令,並在當前登入會話中顯示結果。

例 1:以根使用者身份執行命令

假設你想執行 ls /root 命令來列出 /root 目錄的內容,通常只有 root 使用者才能訪問該目錄。你可以使用:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su root -c "ls /root"
su root -c "ls /root"
su root -c "ls /root"

執行該命令後,系統會提示你輸入 root 密碼。通過身份驗證後,將執行 ls /root 命令,並檢視 /root 目錄的內容。

例 2:以其他使用者身份執行命令

假設系統中有另一個名為 john 的使用者,你想以該使用者身份執行位於 /home/john/script.py 的 Python 指令碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su john -c "python3 /home/john/script.py"
su john -c "python3 /home/john/script.py"
su john -c "python3 /home/john/script.py"

同樣,系統會提示你輸入 john 賬戶的密碼。通過身份驗證後,Python 指令碼將以 john 的身份執行。

例 3:執行多條命令

您還可以依次執行多條命令。例如,要切換到一個目錄,然後以使用者 john 的身份列出目錄內容,可以執行以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su john -c "cd /home/john/documents && ls"
su john -c "cd /home/john/documents && ls"
su john -c "cd /home/john/documents && ls"

這將切換到 john 使用者,導航到 /home/john/documents ,然後列出該目錄的內容。

3. 指定 shell

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su -s /bin/[shell]
su -s /bin/[shell]
su -s /bin/[shell]

使用 -s 選項將現有預設 shell 更改為其他 shell。

示例:

假設你當前以使用者 john 登入,而你想切換到使用 bash shell 的使用者 alice 。你可以執行以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su -s /bin/bash alice
su -s /bin/bash alice
su -s /bin/bash alice

執行此命令後,系統會提示你輸入 alice 的密碼。如果密碼正確,就會切換到 alice 的使用者賬戶,shell 將是 bash

4. 保留使用者賬戶環境

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su –p [another_user]
su –p [another_user]
su –p [another_user]

使用 -p 選項可以保留當前使用者賬戶的環境。

示例:

舉例說明假設你當前以使用者 john 登入,你想切換到使用者 alice,但保留 john 的環境變數。

輸入以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
su -p alice
su -p alice
su -p alice

系統會提示你輸入 alice 的密碼。

成功輸入密碼後,您將切換到使用者 alice,但您的環境仍將包含 john 的設定。

更多 Linux 命令

下面羅列了最常見的一些 Linux 命令,您可以根據自己的需要查閱對應命令的詳細解析:

目錄操作 rmdir · cd · pwd · exa · ls
檔案操作 cat · cp · dd · less · touch · ln · rename · more · head
檔案系統操作 chown · mkfs · locate
網路 ping · curl · wget · iptables · mtr
搜尋和文字處理 find · grep · sed · whatis · ripgrep · fd · tldr
系統資訊和管理 env · history · top · who · htop · glances · lsof
使用者和會話管理 screen · su · sudo · open

此外,我們還整理 Linux 命令列大全,以幫助大家全面深入地學習 Linux。

評論留言