(linux)Vim存檔無root權限,不用離開Vim的臨時解決方法
Vim存檔無root權限,不用離開Vim的臨時解決方法(:w !sudo tee %)
由於安全性等因素,一般不建議直接使用root
帳號登入Linux系統,而是使用一般使用者帳號登入。
然而,在使用Vim編輯檔案時,有時會忘記先使用su
或sudo
指令取得root
權限,
導致在儲存檔案時出現readonly的提示,才發現權限不足。
這種情況下,如果直接退出Vim,之前的編輯工作就都白費了。
解決方法一
一種常見的解決方法是,先將編輯好的檔案儲存在一個暫存檔中。
在離開Vim後,使用root
權限將暫存檔複製到目標位置,然後再刪除暫存檔。
或者,也可以直接將暫存檔mv覆蓋原本要編輯的檔案。
這樣就能確保編輯的內容得以保存,同時也避免了權限不足的問題。
解決方法二
上面的方法雖然可行,但步驟上還是比較麻煩。
另一個比較方便的方式,是直接在Vim中,用下面指令取得root
權限來寫入檔案:
1 | :w !sudo tee % |
輸入此指令後,會需要輸入密碼以取得root
權限。
此指令是經外部的shell寫入文件,所以Vim會發現檔案已被更動,會出現下面提示:
1 | W12: Warning: File "/xxx/xxxx" has changed and the buffer was changed in Vim as well |
按下L
重新載入新的內容即可。
:w !sudo tee %
指令功能拆解說明
:w
:標準Vim寫入指令,但在此是將Vim內容寫入一個緩衝區!
:執行外部命令(shell)sudo
:呼叫sudo指令,取得root權限tee
:將stdin(Vim 寫入緩衝區的資料)導向至stdout以及檔案%
:百分比符號就是Vim的暫存器,代表目前編輯檔案的路徑名稱