《Disney +》 迪士尼、Marvel、彼思、星球大戰…  全新《Subnautica: Below Zero》遊戲畫面在「State of Play」公開   就決定是你了!1比1復刻精靈球登場!包含超級球與高級球等5種類開賣!   Street Fighter V Season 5的最後追加角色終於公開!新角色「LUKE」參戰!   和皮克敏來場1萬步旅行吧!《Pikmin Bloom》即將舉辦首場社群日活動!   波導的勇者!「玩偶 等身大路卡利歐」即日起在日本寶可夢線上中心接受預購中!   全新獨立遊戲的發表與更新內容成為矚目焦點   Steam版「魔物獵人 崛起」提供免費體驗版!從今起可用電腦狩獵了!   《Returnal》2.0更新帶來暫停循環和拍照模式 

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

隨機商業新聞

Micorsoft