老男孩Linux培訓新班剛開始,老男孩發現群裡就在討論這個su和su -的區別,有的同學們說,直接su就可以,有的說必須要su -。有的同學直接發問,到底su和su -有什麼區別?
1授之以“魚”的答案
6.6.1.3 su命令實例
當不加任何參數執行su命令時,表示要切換到root用戶,但這樣執行,會遇到一些問題。因為雖然是切換到root用戶了,但並沒有改變為root用戶登錄環境,用戶默認的登錄環境,可以在/etc/passwd 中查得到,包括家目錄,shell類型等。比較規范的操作方法是”su -“。見下面的實例。
實例1:由普通用戶oldboy切換到root用戶
[oldboy@oldboy ~]$ whoami #→確認當前用戶為oldboy
oldboy
[oldboy@oldboy ~]$ su #→不加用戶就表示切到root用戶。當然也可以使用su root。
Password: #→這裡當然就是root用戶的密碼了。
[root@oldboy oldboy]# env
HOSTNAME=oldboy
USER=oldboy
MAIL=/var/spool/mail/oldboy
PWD=/home/oldboy
HOME=/root
LOGNAME=oldboy
...省略部分無關內容...
#→細心的讀者應該已經看到了,如果使用su而不加上“-”這個參數,那麼,切換前的用戶的相關信息還會存在,這會引起很多麻煩,甚至會出現意想不到的結果。因此,切換用戶時,最好是 “su - 用戶名”。這是生產場景中標准的切換用戶的操作方法。
[root@oldboy oldboy]# exit #→退出當前用戶,這個命令也可以用ctrl+d快捷鍵命令替代。
[oldboy@oldboy ~]$ su - #→帶上“-”參數做切換,也可用su - root命令。這是生產場景中的標准操作方法。
Password:
[root@oldboy ~]# env|egrep "USER|MAIL|PWD|LOGNAME" #→切換後的環境變量信息結果。使用egrep過濾包含想查看的字符串的行。
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root
#→這次和上次就不同了,所有的環境變量信息都切換到了root下。因此,請大家在切換用戶時一定要加上“su - 用戶名”,這裡提醒下,不光是切到root呦,切換到其他用戶也是一樣,呵呵。
su命令總結:
1)普通用戶切換到root用戶,可使用su -或su - root。必須輸入root密碼才能完成切換。
2)root用戶切換到普通用戶,可使用“su - 普通用戶名”的寫法。不需要輸入任何密碼就能完成切換。切換到普通用戶後,在執行一些命令如ifconfig時,可能會遭遇到環境變量PATH路徑問題而找不到某些系統命令(一般是/sbin,/usr/sbin等下面的命令),這時就需要將普通用戶的PATH,配置成root的PATH內容,前面的文章已講解過這個配置方法,不清楚的讀者,可以翻閱下。
3)如果僅希望在某用戶下執行命令,而不直接切換到該用戶下操作,可以使用 su - 用戶名 -c "命令"的方式。
上文摘錄於老男孩Linux培訓講課與出書教案筆記部分。
老男孩評論:雖然這樣給同學們講解不錯,但這依然是授之以魚的講解方式,學生必須要意識到自己如何能獲取到這樣的知識,而不是輕易去問老師獲得,只有學會了學習方法與自學能力才是學習Linux運維比較高的境界,也是未來發展之道。
2授之以“漁”的答案
1)可以去搜索引擎搜索,然後根據說的去實踐下,最後別忘了總結。
這個算是“漁”,但還不徹底,即不是學習Linux運維的優秀思想,但是很多初學者默認就會這樣(但搜索的技能缺乏很多),所以,這條路也算可以吧,但最好還是下面的思想。
2)要了解su和su -的區別,其實就是要知道su -的作用就可以了,su -這樣的命令顯然,-是su的參數,因此,完全可以man su或者su --help獲取到你想要的答案,然後,在輔助上面教案的提示去實踐敲一下體會下(別忘了總結好筆記)。
man su或者su --help的如下:
su參數選項注釋說明(帶※的表示重要,需要掌握)
-, -l, --login
make the shell a login shell
#→※使一個shell成為登陸的shell,如執行su - oldboy 時,表示該用戶想改變身份為 oldboy,並且使用oldboy用戶的環境變量配置,如:/home/oldboy/.bash_profile等。
[oldboy@student ~]$ su --help
Usage: su [OPTION]... [-] [USER [ARG]...]
Change the effective user id and group id to that of USER.
-, -l, --login make the shell a login shell
…省略部分…
[oldboy@student ~]$ man su
NAME
su - run a shell with substitute user and group IDs
SYNOPSIS
su [OPTION]... [-] [USER [ARG]...]
DESCRIPTION
Change the effective user id and group id to that of USER.
-, -l, --login
make the shell a login shell
…省略部分…
實踐的過程非常重要,見上文。
拓展:在舉個例子就是老男孩曾經發布在博客的考試題
1.如何取得/etiantian文件的權限對應的數字內容,如-rw-r--r-- 為644,要求使用命令取得644這樣的數字。
解答如下:
http://oldboy.blog.51cto.com/2561410/791638
這道題就是一個很好的培養學習思維和自學能力的例子。其中的當命令結果包含我們需要的內容的時候,我們要想到此命令是否有具體的參數能夠一步達到我們需要的結果。
重視學習方法的學習,才是學好Linux運維之道,這也是老男孩寫博客時很少發表一些服務的部署過程給大家或者具體的業務腳本,因為,老男孩覺得這些都是授之以“魚”的方法,應盡可能避免或者一定要多種方法結合,完全授之以“魚”作用比較小。所以,“漁”的過程基本是在老男孩給學生留的課後作業部分完成的,老男孩講“漁”,同學們給老師“魚”。
補充一個老男孩課後要求大家上交捕的“魚”:
提示:既然同學們學會捕魚的技巧了,就要讓老男孩看到魚:下面是要求大家上交的捕的魚:
老男孩培訓第15次講課課後shell作業:
(面授班按個人分配的總結,網絡班全部都編寫)
請全體同學務必完成,捕魚的技巧不是老男孩講了你們就會的,必須要多次的實踐才能掌握,同學們加油,有不會的問題課後群內討論或者找導師咨詢。
1)lnmp一鍵安裝腳本<==zhengdong
要求:linux centos5.8,nginx1.3.4,mysql5.5.27,php5.3.17
2)linux系統一鍵優化腳本<==chenya
3)lamp一鍵安裝腳本<==zhangji
4)rsync,sersync,inotify一鍵安裝及配置腳本<==sanyapen
5)mysql多實例安裝及備份腳本<==zhangxian
6)apache,nginx,mysql,rsync的服務檢測監控腳本<==yanggongwan
7)mysql主從同步一鍵實現腳本<==fengyiwe
8)lamp一鍵安裝腳本<==lifen
本文出自 “老男孩的linux博客” 博客,請務必保留此出處http://oldboy.blog.51cto.com/2561410/1053606