《Disney +》 迪士尼、Marvel、彼思、星球大戰…  《State of Play》將於2月26日本週五精彩回歸   「GUILTY GEAR -STRIVE-」季票1第4彈追加角色決定為「梅喧」!   《HYDE RUN》事前登錄開始!看HYDE的帥氣跑酷!   能夠預覽自己試戴Razer電競口罩「Project Hazel」的AR濾鏡登場!   Hermen Hulst專訪問答:PlayStation Studios的下一步規劃   備受期待的遊戲陣容強勢襲來!官方公開「PlayStation5_Lineup_Presentation_File_2021-03」!   《漫威復仇者聯盟》PS5強化功能、黑豹等新情報公開   透過凸版印刷公司內部活動「TOPPAN eSPORTS FESTIVAL 2021」重新認識了電競的優點! 

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

隨機商業新聞

Disney Plus