在 Linux 的 vi 編輯器中獲取檔案的 root 許可權
在許多情況下,我們認為自己已經以 root 使用者身份打開了一個檔案進行修改,但當我們實際嘗試儲存更改時,卻發現該檔案是以普通使用者或沒有特定編輯許可權的使用者開啟的。在這種情況下,我們通常只有一個選擇,那就是使用以下命令關閉檔案:
q!
然後,使用以下命令再次開啟檔案:
sudo su vi file.txt
進行更改並使用以下命令儲存檔案:
wq!
雖然這些都很簡單,但如果我們實際上不想使用 **sudo su** 命令,而仍然能夠編輯和儲存只允許 root 使用者編輯的檔案,該怎麼辦呢?
為了做到這一點,我們可以使用以下命令:
:w !sudo tee filename
上面的命令一開始可能有點複雜,讓我來解釋一下。**: (冒號)** 符號是命令的開頭,然後我們緊跟其後寫 **w**,代表 **寫入** 許可權,它通常接受要寫入的檔案路徑。
然後,我們有 **!sudo**,其中 sudo 關鍵字很明顯,它允許您以超級使用者身份執行命令。! 符號稱為否定符號,它簡單地反轉值。然後,在 !sudo 後面是 **tee** 符號,它將標準輸入 (stdin) 傳輸到指定的檔案,過程是這樣的:**:w** 將寫入標準輸入,然後超級使用者 **tee** 將接收檔案內容並寫入檔案,不會建立新檔案,只需覆蓋內容,並且檔案模式和屬性將被保留。
示例
既然我們知道了該命令的實際作用,讓我們在一個只有超級使用者才能編輯的簡單檔案中使用它。
假設我們在 ** /usr/local/go/src ** 中有一個檔案,這是 Go 原始碼的預設路徑。檔名是 **symtab.go**,可以在此位置找到。
/usr/local/go/src/runtime
如果我們使用任何沒有超級使用者許可權的使用者開啟此檔案,然後嘗試更改內容並使用以下命令儲存檔案:
:wq!
輸出
然後我們將得到以下錯誤:
"symtab.go" E212: Can't open file for writing
這是因為我們沒有許可權更改檔案,解決方法是使用上面提到的命令或更改使用者,由於我們不想更改使用者,最好在終端中使用以下命令:
:w !sudo tee symtab.go
現在,我們可以對檔案進行任何我們想要的更改,而無需切換到超級使用者。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP