![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcBnYldHL0FWby9mZvwVPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMz8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PwJWZ35SMxMzNzETYkFzMxEjMjJTNzYzX3EDMwADMyIzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.webp)
su是一個Linux指令,渾身充滿了power。可以切換到其他使用者或者高權使用者去幹sth。
請原諒我這外企員工中英文夾雜式的表達,reason很簡單,就是要你有很深的impression。
在很久很久之前,公司窮買不起MacBook,xjjdog隻能使用用SecureCRT來遠端連接配接伺服器。
為了增加安全性,首先需要登陸一台跳闆機,然後再在跳闆機上使用ssh指令連接配接真正的目标機器。
其中,就有一台伺服器對環境要求非常苛刻。當服務啟動,總是發現它的環境變量不是自己所想要的那樣,即使在root使用者的
.bash_profile
檔案裡強行設定都沒用。
到最後才發現,是su指令用錯了。
那麼, su, su -, sudo -i, sudo -s ,到底有什麼差別?
sudo
首先,我們來看下sudo。
我們最常用的,就是 sudo -s了。它的意思是:
- 使用目前使用者的環境變量
- 不跳轉切換使用者後的目錄
- 切換到超級管理者或者目标使用者的權限
這通常會帶來一些問題,比如xjjdog使用者下設定了自己的一套環境變量,當使用 su -s 切換到超級管理者權限,依然使用的是xjjdog的環境變量。這樣,就會發生找不到指令,語言錯誤,甚至配置錯誤的結果。
相對應的, sudo -i 就幹淨利索的多。它的意思是:
- 使用root或者目标使用者使用者的環境變量
- 切換到 /root或者目标使用者的home目錄
- 切換到超級管理者或者目标使用者的權限
大多數情況下,推薦使用 su -i 替代 su -s,這樣出問題的幾率會小的很。
su
與此對應的,就是su指令。
如果隻運作su,它的效果和sudo -s是一樣的。
如果使用了 su - ,那麼它的效果就是sudo -i。
如果沒有特殊原因,任何使用,都應該使用sudo -i或者su -。
高權賬号
随着運維工具的提升,普通開發已經很少有機會接觸這種指令了。但萬變不離其宗,在開發運維工具的時候,同樣會碰到這樣的問題。
很多時候,公司設定了嚴格的權限和分級制度,用來規範開發人員的操作。
但是,高權賬号總是必要的。這些賬号通常都會配置設定給leader們。
比較搞笑的是,公司的開發規範大多數開發是能夠遵守的,而帶頭破壞規範的,一般還是高權賬号。
公司的問題和社會的問題都是相似的。“管理者”設計了一套機制,用來避免風險,限制行為。但當繩子套在自己身上的時候,才體驗到它的束手束腳。