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

來源:互聯網
上載者:User

標籤:vim   檔案許可權   

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

先上命令:

:w !sudo tee % > /dev/null

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


下面首先介紹:w  !<cmd>命令

:w !<cmd> 用於將當前緩衝區內容作為標準輸入送給cmd命令。  比如 :w !sh  就是將緩衝區的每一行視為shell命令然後執行。為了便於理解,這裡再介紹一個r命令。: r !<cmd>用於將<cmd>命令的執行結果讀入到當前緩衝區。如:.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儲存沒有編輯許可權的檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.