Linux su命令
在我的fc6系統下用普通用戶登錄,然后用su命令切換到超級用戶,再輸入ifconfig命令,報錯:command not find。而如果用su -命令切換到超級用戶,再輸入ifconfig命令則能成功執行。這其中涉及的就是su命令與su -命令的區別,man su得到的幫助文檔如下:
-, -l, --login
make the shell a login shell
翻譯過來的意思如下:
-.-l或--login 改變身份時,也同時變更工作目錄,以及HOME,SHELL,USER,LOGNAME。此外,也會變更PATH變量。
說簡單點就是用su命令不會改變當前工作目錄以及HOME,SHELL,USER,LOGNAME。此外,也會變更PATH變量,而用su -命令則默認改變成root用戶了。打個比方:
在普通用戶下輸入:
$pwd
/home/mgqw (當前用戶目錄)
$su
****** (輸入密碼)
#pwd (再次查看路徑)
/home/mgqw (還是當前用戶目錄)
但是如果換成su -的話結果如下:
$pwd
/home/mgqw (當前用戶目錄)
$su -
****** (輸入密碼)
#pwd (再次查看路徑)
/root (切換到超級用戶目錄)
Linux su命令用於變更為其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。
使用權限:所有使用者。
語法
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
參數說明:
- -f 或 --fast 不必讀啟動檔(如 csh.cshrc 等),僅用於 csh 或 tcsh
- -m -p 或 --preserve-environment 執行 su 時不改變環境變數
- -c command 或 --command=command 變更為帳號為 USER 的使用者並執行指令(command)后再變回原來使用者
- -s shell 或 --shell=shell 指定要執行的 shell (bash csh tcsh 等),預設值為 /etc/passwd 內的該使用者(USER) shell
- --help 顯示說明文件
- --version 顯示版本資訊
- - -l 或 --login 這個參數加了之后,就好像是重新 login 為該使用者一樣,大部份環境變數(HOME SHELL USER等等)都是以該使用者(USER)為主,並且工作目錄也會改變,如果沒有指定 USER ,內定是 root
- USER 欲變更的使用者帳號
- ARG 傳入新的 shell 參數
實例
變更帳號為 root 並在執行 ls 指令后退出變回原使用者
su -c ls root
變更帳號為 root 並傳入 -f 參數給新執行的 shell
su root -f
變更帳號為 clsung 並改變工作目錄至 clsung 的家目錄(home dir)
su - clsung
切換用戶
hnlinux@runoob.com:~$ whoami //顯示當前用戶 hnlinux hnlinux@runoob.com:~$ pwd //顯示當前目錄 /home/hnlinux hnlinux@runoob.com:~$ su root //切換到root用戶 密碼: root@runoob.com:/home/hnlinux# whoami root root@runoob.com:/home/hnlinux# pwd /home/hnlinux
切換用戶,改變環境變量
hnlinux@runoob.com:~$ whoami //顯示當前用戶 hnlinux hnlinux@runoob.com:~$ pwd //顯示當前目錄 /home/hnlinux hnlinux@runoob.com:~$ su - root //切換到root用戶 密碼: root@runoob.com:/home/hnlinux# whoami root root@runoob.com:/home/hnlinux# pwd //顯示當前目錄 /root