ps:前幾天,實驗室的同學問到為什麼sudo cd命令不行,我當時幫他解決了這個問題,但是我想了想我自己也不太清楚為什麼sudo cd不行,而需要用到su root然後再使用cd命令。所以自己在網上找了一些資料,並整理了一下發表出來,在自己忘了的時候自己也可以查閱一下!
一、linux下的su命令
su命令的全稱就是switch user,顧名思義,其意思就是切換使用者身份,使得使用者可以在shell中以其他身份執行程式。除非該使用者自己是超級使用者,那麼切換使用者身份時均需要密碼。該命令的語法一般如下:
su[-flmp][--help][--version][-][-c《指令》][-s][欲切換賬戶]。
引數解釋:
-c《指令》或--command=《指令》:執行乙個指令後就恢復原來的身份;
-f或--fast:使shell不用讀取啟動檔案,適用於csh和tsch;
-,-l,--login:切換使用者時,使環境變數(home,shell,user,logname,path等)和欲切換的使用者相同、不使用則取得使用者的臨時許可權,環境變數不發生變化;
-m,-p,:變更身份時,保留環境變數不變;
-s,--shell=:指定執行命令的shell;
--help:顯示幫助;
--version:顯示版本資訊;
使用者賬戶:指定欲切換使用者,預設切換為root。
注:root許可權極高,幾乎可以做任何事,謹慎使用,平時使用普通使用者登入,必要時臨時切換為root,用完即切換回普通使用者。
簡單示例:
假設乙個普通使用者trunk,首先以trunk登陸:
su root 臨時切換到root使用者,需要輸入密碼,切換後環境變數不變,取得root的部分許可權,且只能使用trunk使用者path路徑中的命令,不能使用root使用者path路徑中的獨有命令。
su - root 切換為root使用者,需要輸入密碼,切換後環境變數改變,幾乎可以不受限制的做任何事。
su - trunk 從root切換回普通使用者,無需輸入密碼,切換後只擁有trunk許可權。
su 與 su - 的區別:
su usernameshell會切換到username的身份,但是shell的環境變數還是切換前的一樣,注意,這樣可能會執行不了username的某些程式。
su - usernameshell會切換到username的身份,但是shell的環境變數會變成username身份下的環境變數
所以建議在切換使用者時使用後一種用法。
二、linux下的sudo命令
sudo命令的允許系統管理員讓普通使用者執行一些或全部的需要root許可權的命令的工具。該工具可以減少root使用者的登入和管理時間,提高了系統安全性。因為sudo命令不需要root的密碼,只需要使用者輸入其自身的密碼即可臨時獲得root許可權來執行一些外部命令。該許可權是臨時的,一般命令執行完之後shell就會回到當前的使用者身份。
sudo的語法一般如下:
sudo [ -vhl lvkkshpsb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command
引數解釋:
-v
顯示版本編號
-h
會顯示版本編號及指令的使用方式說明
-l
顯示出自己(執行 sudo 的使用者)的許可權
-v
因為 sudo 在第一次執行時或是在 n 分鐘內沒有執行(n 預設為五)會問密碼,這個引數是重新做一次確認,如果超過 n 分鐘,也會問密碼
-k
將會強迫使用者在下一次執行 sudo 時問密碼(不論有沒有超過 n 分鐘)
-b
將要執行的指令放在背景執行
-p
prompt 可以更改問密碼的提示語,其中 %u 會代換為使用者的帳號名稱, %h 會顯示主機名稱
-u
username/#uid 不加此引數,代表要以 root 的身份執行指令,而加了此引數,可以以 username 的身份執行指令(#uid 為該 username 的使用者號碼)
-s
執行環境變數中的 shell 所指定的 shell ,或是 /etc/passwd 裡所指定的 shell
-h
將環境變數中的 home (家目錄)指定為要變更身份的使用者家目錄(如不加 -u 引數就是
系統管理者 root )
command
要以 系統管理者身份(或以 -u 更改為其他人)執行的指令
簡單示例:
1. sudo -l 列出目前的許可權
若使用者不在sudoers中會提示不能執行sudo命令,存在則會顯示詳細的許可權。
2. sudo -v 列出 sudo 的版本資訊
3. 指令名稱:sudoers(在fc5下顯示不能找到此命令,但用man可以查到其用法。)用來顯示可以使用sudo的使用者
常見錯誤:
sudo cd /*** 提示command not found
因為cd是shell自帶的命令,是屬於內部命令,而sudo只能以臨時的root身份來呼叫外部命令,所以會提示command not found這個錯誤。
Linux命令中su與sudo的區別
一.使用 su 命令臨時切換使用者身份 1 su 的適用條件和威力 su命令就是切換使用者的工具,怎麼理解呢?比如我們以普通使用者beinan登入的,但要新增使用者任務,執行useradd beinan使用者沒有這個許可權,而這個許可權恰恰由root所擁有。解決辦法無法有三個 一是退出beinan使...
Linux命令中su與sudo的詳細區別
一.使用 su 命令臨時切換使用者身份 1 su 的適用條件和威力 su命令就是切換使用者的工具,怎麼理解呢?比如我們以普通使用者admin登入的,但要新增使用者任務,執行useradd admin使用者沒有這個許可權,而這個許可權恰恰由root所擁有。解決辦法無法有三個 一.是退出admin使用者...
Linux中sudo與su的區別
sudo意思就是super user do,sudo root是讓當前使用者暫時切換到超級使用者模式以執行超級使用者許可權,提示輸入密碼時該密碼為當前使用者的密碼,而不是超級賬戶的密碼。sudo預設的身份為root,在 etc sudoers中設定了可執行sudo指令的使用者,若未經授權的使用者企圖...