再次從頭好好的學習Linux,本着以免輕易忘記,以備后用的原則,將我覺得常用或者好玩的linux命令記錄在這,注意:我的實驗環境是 Ubuntu 14.04.1
su 這個命令我經常使用,因為我喜歡在root用戶下來操作
1:一般用戶切換為root用戶(有以下幾種方式,需要輸入密碼)
su
su -
su -l
su --login
su - root
su -l root
su --login root
su root
2:root用戶切換為一般用戶(不需要輸入密碼)
su qian
su - qian
su -l qian
su --login qian
3:使用su --help 或者 man su 可以查看到su命令更加詳細的信息,這個命令相當的簡單,不過在沒有寫這篇博客之前我沒有實驗那么多的情況,這也許就是寫這篇博文的小小新發現吧!
這里又不得不提英語的重要性了,命令的幫助信息和用戶幫助手冊的信息全部都是英文,如果英文功力好,只要知道命令的名字就能通過man命令了解到這個命令的全部信息,當然,具體的作用還是要實驗一下才能理解的更加深刻的,對於一個命令而言,雖然沒有必要牢記所有的信息,但是常用的使用方式最好能夠熟記,所以,同樣的功能越簡單越好了,切換用戶 su username 就差不多了。
4:簡單說明
在系統中要做身份的切換時,su就是必備的指令了。在許多系統中,為了安全的考慮,是不允許root直接登錄系統的,在這樣的情況下,就必須以一般的用戶登錄,並通過su來切換用戶啦。另外,Ubuntu系統還通過sudo針對單個命令授予臨時權限。sudo僅在需要時授予用戶權限,減少了用戶因為錯誤執行命令損壞系統的可能性。
5:與su命令相關的其他非常有用的文章
1:原文地址是 http://blog.chinaunix.net/uid-26085226-id-3127903.html
原問:linux中,我以root登錄,和以其他用戶登錄然后使用su命令切換至root用戶,有什么不一樣,如果一樣的話,我執行su命令之后,其他的用戶還在不在系統中?本人在執行su后,試圖刪除其他用戶,linux提示,其他用戶logged in?why
回答:我來為你解釋吧! unix系統里,當用戶登錄時會為每個用戶創建一個shell進程,提供交互功能,如果你使用的是bash,那么這個shell進程就是bash,使用的ksh,這個進程就是ksh,其他shell也是一樣。
而對於進程而言,在它的進程PCB(進程控制塊)里,有實際用戶ID和有效用戶ID這兩個值,所謂實際用戶ID是指該進程是以什么身份創建的,比如:我當前是root用戶,我創建的進程的實際用戶ID就是root的ID,一般為0。而有效用戶ID是指對該進程當前擁有使用權限的用戶的ID,比如我有一輛車,我把它組出去了,這個車的擁有者是我,但是使用權限卻不是我的。
一般情況下實際用戶ID和有效用戶ID都是相同的,su命令就是擁有這樣的功能,讓一個進程可以以命令擁有者的權限運行,即可以使進程的實際用戶ID和有效用戶ID不相同。你可以用ls -l去查看su這個命令,在它的擁有者的x權限位上寫的一定是個s(小s),passwd命令也是一樣,他們擁有相同的功能。這個s位的意思是 執行該命令的用戶可以以該命令的擁有者權限來執行,如果你把這個s位取消了,也就只有su的擁有者可以su了。
現在來進一步解釋下吧,希望你能看的懂。
當我們以root執行su時,su命令會以當前shell進程為父進程來創建一個新的shell進程,這個shell進程是提供給我們所要su到的那個用戶使用的,而root的shell進程仍然存在,反過來也是一樣的,這就是你所問的問題的原因,因為之前那個用戶的shell進程還沒關閉,你可以使用exit退出一下,可以看到,並不是退出登錄了,而是回到之前的那個用戶去了。因為它們是父子進程的關系,子進程的結束當然 不會影響到父進程的執行了。但是我們如果強行殺死父進程,那就直接退出了。
其實很多人並不了解,whoami和who am i的區別,他們的作用是不同的。
who am i 顯示當前shell進程的實際用戶ID。
whomai 顯示當前shell進程的有效用戶ID。
很多時候,這兩個輸出是一樣的,以至於我們以為這兩個命令的作用是相同的。
實例:root@yunhw-Aspire-4750G:~# who am i
root pts/0 2011-12-10 13:13 (:0.0)
root@yunhw-Aspire-4750G:~# whoami
root
root@yunhw-Aspire-4750G:~#ps -ef
root 2939 2935 0 13:18 pts/0 00:00:00 bash
root@yunhw-Aspire-4750G:~# su - yunhw
yunhw@yunhw-Aspire-4750G:~$ who am i
root pts/0 2011-12-10 13:13 (:0.0)
yunhw@yunhw-Aspire-4750G:~$ whoami
yunhw
root@yunhw-Aspire-4750G:~#ps -ef
root 2939 2935 0 13:18 pts/0 00:00:00 bash
yunhw 2958 2939 0 13:19 pts/0 00:00:00 su - yunhw
yunhw 2966 2958 7 13:19 pts/0 00:00:00 -su
root@yunhw-Aspire-4750G:~#sudo kill -9 2939
這條命令一執行,也就完全退出了。
2:原文地址是 http://my.oschina.net/u/162204/blog/158743
su 后面不加用戶是默認切到 root
su 是不改變當前變量
su - 是改變為切換到用戶的變量
也就是說su只能獲得root的執行權限,不能獲得環境變量
而su -是切換到root並獲得root的環境變量及執行權限
語法:
$ su [user_name]
su 命令可以用來交互地更改你的用戶ID和組ID。 Su是switch user 或set user id的一個縮寫。這個命令讓你開啟一個子進程,成為新的用戶 ID 和賦予你存取與這個用戶ID 關聯所有文件的存取權限。因此,出於安全的考慮,你在實際轉換身份時,會被要求輸入這個用戶帳號的密碼。
如果沒有參數,su 命令將你轉換為 root(系統管理員)。root 帳號有時也被稱為超級用戶,因為這個用戶可以存取系統中的任何文件。也正是這個原因,許多人將su命令看成是 supper-user(超級用戶)的一個縮寫。當然,你必須要提供 root密碼。 想要回到你原先的用戶身份,不要再使用 su 命令,你只需要使用 exit命令退出你使用su命令而生成的新的對話進程。
$ su – username
一些配置文件是為你的對話線索而設立的。當你使用命令 su username時,你的對話特征和你原始的登錄身份一樣。如果你想要你的對話進程擁有轉換后的用戶 ID一致的特征,你要使用短斜杠: su – username。
3:原文地址是 http://www.jb51.net/LINUXjishu/57936.html
linux su 命令
建議大家切換用戶的時候 使用 su - root 這樣,否則可能發現某些命令執行不了
關於su 、su - 及 sudo的區別 請往下看
1.命令作用
su的作用是變更為其它使用者的身份,超級用戶除外,需要鍵入該使用者的密碼。
2.使用方式
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
3.參數說明
-f , –fast:不必讀啟動文件(如 csh.cshrc 等),僅用於csh或tcsh兩種Shell。
-l , –login:加了這個參數之后,就好像是重新登陸一樣,大部分環境變量(例如HOME、SHELL和USER等)都是以該使用者(USER)為主,並
且工作目錄也會改變。如果沒有指定USER,缺省情況是root。
-m, -p ,–preserve-environment:執行su時不改變環境變數。
-c command:變更賬號為USER的使用者,並執行指令(command)后再變回原來使用者。
–help 顯示說明文件
–version 顯示版本資訊
USER:欲變更的使用者賬號,
ARG: 傳入新的Shell參數。
4.例子
su -c ls root 變更帳號為 root 並在執行 ls 指令后退出變回原使用者。
su [用戶名]
a>在root用戶下, 輸入 su 普通用戶. 則切換至普通用戶, 從root切換到變通用戶不需要密碼
b>在普通用戶下, 輸入 su [用戶名]
提示 password:
輸入用戶的PASSWORD, 則切換至該用戶
擴展閱讀一:Linux下 su命令與su - 命令有什么區別?
su 是切換到其他用戶,但是不切換環境變量(比如說那些export命令查看一下,就知道兩個命令的區別了)
su - 是完整的切換到一個用戶環境
所以建議大家切換用戶的時候,盡量使用 su - linuxso 這樣 否則可能發現某些命令執行不了
擴展閱讀二:su和sudo的區別
由於su 對切換到超級權限用戶root后,權限的無限制性,所以su並不能擔任多個管理員所管理的系統。如果用su 來切換到超級用戶來管理系統,也不能明確哪些工作是由哪個管理員進行的操作。特別是對於服務器的管理有多人參與管理時,最好是針對每個管理員的技術特長和 管理范圍,並且有針對性的下放給權限,並且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到 sudo。
通過sudo,我們能把某些超級權限有針對性的下放,並且不需要普通用戶知道root密碼,所以sudo 相對於權限無限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權許可的,所以也被稱為授權許可的su;
sudo 執行命令的流程是當前用戶切換到root(或其它指定切換到的用戶),然后以root(或其它指定的切換到的用戶)身份執行命令,執行完成后,直接退回到當前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進行授權;