使用vim儲存沒有編輯許可權的檔案

2021-06-28 08:32:30 字數 1284 閱讀 4008

使用vim編輯檔案非常方便,vim也是修改系統配置最常用的工具。但有時我們會顧著方便而忘了自己有沒有許可權編輯檔案。 往往會在寫完檔案內容儲存時才發現自己沒有許可權。怎麼辦?     將檔案使用:w 的方式另存為新檔案,再用新檔案替換就檔案的雖然可行(還需要注意修改檔案操作許可權),但還是麻煩了點。下面將使用一條命令儲存沒有許可權的檔案。

先上命令:

:w !sudo tee % > /dev/null

這裡「:」表示在vim的命令列模式下。注意 w 和!之間隔著乙個空格。

下面首先介紹:w  !命令

:w !用於將當前緩衝區內容作為標準輸入送給cmd命令。  比如 :w !sh  就是將緩衝區的每一行視為shell命令然後執行。為了便於理解,這裡再介紹乙個r命令。: r !用於將命令的執行結果讀入到當前緩衝區。如:.r!date就是將當前時間寫入到當前行(.)。 

接下來是tee命令

博主初學unix時,感覺ls、cp等命令很容易發現就是對應單詞的縮寫。但tee命令很難理解,也很少用得到。 tee是這樣工作的,將前乙個命名的標準輸出(即輸出到螢幕)作為標準輸入,然後再輸出到標準輸出,同時儲存為對應檔案。將這個流程畫出來,剛好就是字母t,這應該就是rms等人將該命令命名為tee的原因。

舉個例子:

ls |tee out.txt 

ls 將輸出當前目錄列表,這個輸出被管道送入tee命令,tee將該輸入內容直接輸出的同時,備份到out.txt檔案。

最後乙個是sudo,這個用過*nix的都應該知道,就是以superviser執行命令。

預備知識就這麼多,接下來我們看看本文開頭的那條命名是如何工作的。

首先w !sudo tee 這一部分將緩衝區內容送給tee命令。sudo 確保tee命令是以supervisor來執行的,這樣就能保證有寫入許可權。

現在tee 已經獲得了我們的檔案內容,接下來就要將內容另存為其他檔案了。這裡我們將檔案儲存為它自己。 輸入%以代表檔案路徑名(%是vim中儲存當前檔案路徑名的專用暫存器,在命令列下會自動替換為完整路徑)。 到了這裡我們實際就能借助tee命令儲存檔案內容了,但tee命令還有標準輸出,為了避免重複顯示,我們將其丟到黑洞,即/dev/null。 

看完命令,我們實際執行以看效果。

執行vi /etc/hostname 。編輯之後執行:w!會彈出錯誤警告。這裡我們使用開頭的命令重新儲存。 執行完命令後,vim會彈出內容已經改變的確認提示。注意這時,tee已經幫我們把檔案內容寫入原檔案件了。 我們按o確認。然後像往常一樣退出。這次我們在編輯檔案時忘記了sudo,但確實成功修改了檔案。 最後提醒一下,如果你不是真的想修改hostname,作完這個練習就把檔案改回去吧。 

使用vim儲存沒有編輯許可權的檔案

直接貼出解決方案,輸入命令 w sudo tee dev null然後會提示檔案以經被改變,要求再次提載入,同意就可以。關掉vim,再用合適的許可權的開啟,繼續工作。下面貼出這樣做的原因,分兩步理解 1.明確知識點,vim在,利用命令 w 可以直接執行linux相關命令,然後把當前緩衝區內容做為標準...

vim 儲存沒有許可權的檔案

使用vim編輯檔案非常方便,vim也是修改系統配置最常用的工具。但有時我們會顧著方便而忘了自己有沒有許可權編輯檔案。往往會在寫完檔案內容儲存時才發現自己沒有許可權。怎麼辦?將檔案使用 w 的方式另存為新檔案,再用新檔案替換就檔案的雖然可行 還需要注意修改檔案操作許可權 但還是麻煩了點。下面將使用一條...

Vim編輯器的使用(2) 文件編輯

在普通模式下.小數點 表示重複上一次的命令操作 拷貝測試檔案到本地目錄 cd home shiyanlou cp etc protocols 開啟檔案進行編輯 vim protocols普通模式下輸入x,刪除第乙個字元,輸入.小數點 會再次刪除乙個字元,除此之外也可以重複dd的刪除操作 進入普通模式...