歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> linux su命令的真正含義

linux su命令的真正含義

日期:2017/3/1 17:58:24   编辑:Linux技術
原問: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

這條命令一執行,也就完全退出了。
Copyright © Linux教程網 All Rights Reserved