如何.bashrc
安全地編輯適用於 Linux 的 Windows 子系統中的檔案?
本文警告切勿AppData
使用 Windows 工具編輯儲存在 WSL 資料夾中的檔案。
那麼如何.bashrc
以安全的方式編輯文件呢?
答案1
答案2
答案3
很抱歉在這裡添加另一個答案,但問題本身(以及這裡的所有其他答案)需要情境對於其他試圖理解它的人來說,這是缺失的。
原始問題中連結的 Microsoft 警告是指編輯 WSL1 文件透過Windows使用 Windows 的%AppData%
路徑。在 WSL 版本 1(但不是版本 2)中,WSL 將 Linux 實例的整個檔案系統儲存在 Windows 資料夾中。這些檔案雖然在 Windows 中對使用者可見,但不應在 Windows 中編輯。如警告所述,如果不加以注意,WSL 實例可能會損壞。
這在 WSL 版本 2 上不是問題。
然而,在任一版本上,它是可以安全地編輯文件(包括~/.bashrc
)裡面WSL 實例。在那裡,它只是 WSL 檔案系統中的一個普通檔案。 2019年的兩個答案(卡班諾格的野獸和WinEunuuchs2Unix 的)利用這種方法。這沒有什麼問題——它們都是正確的答案。儘管我想說安裝 Windows X Server 並且gedit
只是為了編輯 WSL 檔案可能有點過分了。幾乎任何其他編輯器都可以被引用(有人想為了完整性而添加 Emacs 答案嗎?;-))。
這Brixton Mavu 2020 年的回答,其中提到使用 VSCode,也是同一想法的延伸。儘管 VSCode 使用 Windows 工具,但它會在 WSL 實例內啟動一個伺服器,並與其進行通訊以允許編輯、瀏覽甚至調試 WSL 實例。
然後還有@Jon 最近的回答(這引發了這個問題,這就是我看到它的原因)。對於如何從 Windows 內部(而不是從 WSL 實例內部)安全地編輯 WSL 檔案(大部分),這是正確的答案。不過,實際上已經在原始問題中連結的 Microsoft 部落格條目中提到了這一點。
我說“大部分”,是因為一般來說,你應該避免使用 Windows 工具來編輯 Linux 文件,因為許多 Windows 編輯器預設使用 DOS/Windows 行結束符,這也會導致~/.bashrc
失敗。有些工具足夠智能,可以識別現有文件是 Linux 文件,有些工具則不然,但大多數工具在沒有任何其他格式的情況下將預設為 CRLF (DOS/Windows)。
如果 WSL 實例由於 中的錯誤而無法啟動~/.bashrc
,那麼您可以使用@Jon的建議來\\wsl$\
編輯它,但還有(恕我直言)其他更安全的替代方案。
若要編輯~/.bashrc
該檔案以阻止您啟動的時間,請執行:
wsl -e bash --norc -c "vi ~/.bashrc"
或者
wsl ~ -e bash --norc
vi .bashrc
這將在bash
不採購現有~/.bashrc
.
其他替代方案包括以 root 身分啟動會話:
wsl -u root
然後進行任何所需的編輯。
一般來說,WSL 透過使用wsl
指令的參數來啟動實例,具有一些令人驚訝的復原機制。
答案4
如果您喜歡 GUI 編輯器,請VcXsrv
按照此處的詳細資訊進行安裝:
然後使用gedit ~/.bashrc