GlareVPN使用日本在地伺服器‧日本本地IP位址,述不能訪問日本國內網站的情形將通通消失。  Netflix原創動畫「惡靈古堡:無盡闇黑」釋出第2彈劇照&故事內容   CyberZ與人氣大逃殺遊戲《荒野行動》締結夥伴契約!   原定2021年開賣的《KOF XV》確定延期發售   不擇手段地將業務臻至完美!「Good Job!」於Nintendo Switch試玩同樂會登場!   LoL與UNIQLO「UT」合作!《英雄聯盟》UT日本開始販售!   尤菲的極限爆發曝光!「FINAL FANTASY VII REMAKE INTERGRADE」、「尼祿」、「史卡蕾特 & 緋紅夢魘」美術圖以及新戰鬥系統「聯手模式」大公開!   「東京電玩展 2021 Online」公開視覺美術圖!今年同時開設 VR 會場!   Acer發表搭載了可發出1670萬色獨家冷卻風扇「Predator Orion 3000」的全新桌上型電腦。 

Vim 使用 tee 和 sudo 解決臨時權限不足的問題

商業

Vim 在編輯檔案時,偶爾會遇到在編輯某個檔案,但是這檔案的權限不足,要怎麼做呢?

Vim 使用 tee 和 sudo 解決臨時權限不足的問題

一般遇到權限不足但是又已經寫完的情況,最常見的作法,就是寫到 /tmp 或自己家目錄,再將此檔案 mv 蓋回來。

不過 tee + sudo 可以不用離開 Vim 一次解決寫入的問題,命令詳見下述:(於 Vim 裡面)

  • :w !sudo tee %

環境準備 與 寫入測試

  1. $ mkdir /tmp/test # 先來準備一個權限不足的環境
  2. $ touch /tmp/test/test.txt
  3. $ sudo chown -R root.root /tmp/test
  4. 再來 使用 Vim 編輯 /tmp/test/test.txt
  5. vim /tmp/test/test.txt # 隨便打幾個字,再來 :w 要存檔,就會遇到下述訊息:
    • E45: 有設定 'readonly' 選項(唯讀) (可用 ! 強制執行)
  6. 訊息說用 ! 可以強制寫入看看,使用 :w! 遇到下述訊息:
    • "test.txt" E212: 無法以寫入模式開啟
  7. 再來嘗試看看 ":w !sudo tee %",會寫入完成,然後看到下述訊息,按 L 重新載入即可
    • W12: 警告: 檔案 "test.txt" 自上次讀入後已變動, 而且編輯中的緩衝區也更動了
    • See ":help W12" for more info.
    • 確定([O]), 載入檔案((L)):

「:w !sudo tee %」的功能分解

  • :w:Vim 的標準檔案寫入
  • !:執行外部命令
  • sudo:權限提昇
  • tee:把 stdin 存到文件的程式
  • %:Vim 的暫存器,存目前編輯文件的路徑名稱,可以 :echo @% 查看,更多資訊可見下面:
    • :echo @% " directory/name of file
    • :echo expand('%:t') " name of file ('tail')
    • :echo expand('%:p') " full path
    • :echo expand('%:p:h') " directory containing file ('head')
  • 此命令就等同由外部 sudo 再使用 tee 將 stdin 寫入檔案,所以檔案變更,Vim 發覺有資料變更,需要重新載入檔案內容
Tsung

隨機商業新聞

NordVPN