本文為 Docker 進階介紹 系列文,第 10 篇:
- 初學者指南:深入了解 WSL 2(Windows Subsystem for Linux 2)
- 虛擬機器(VM)是什麼?完整入門指南
- 什麼是核心(Kernel)?初學者完整指南
- Docker vs. 虛擬機器(VM):初學者完整比較指南
- 如何在 WSL 2 + Docker 環境中開發 Django:安裝順序與最佳實踐
- 初學者指南:什麼是 Dockerfile?—— 以實際範例解析
- Docker Compose 初學者指南:使用範例解析
- Docker Compose:up vs up -d 的差異與應用
- Linux 常見指令入門:從 sudo 到日常操作
- Linux 解決方案:VSCode 無法儲存檔案權限問題 👈進度
閱讀本文前,建議先理解 Docker 基本介紹系列文 相關概念。
在使用 Visual Studio Code (VSCode) 搭配 Linux 環境開發時,特別是在 Windows Subsystem for Linux(WSL)或是遠端開發模式(Remote-WSL)底下,有時候會出現以下的權限錯誤訊息:
無法儲存 'settings.py': 無法寫入檔案 'vscode-remote://wsl+ubuntu-20.04/home/user/music-event-db/core/settings.py' (NoPermissions (FileSystemError): Error: EACCES: permission denied, open '/home/user/music-event-db/core/settings.py')遇到這種情況,通常代表你沒有足夠的檔案權限去修改或儲存檔案。
本文將針對此狀況做詳細的說明,教你如何透過 Linux 中的 chown 指令快速解決問題,並帶你深入理解該指令的作用。
問題分析:為什麼會發生權限錯誤?
這個錯誤的核心在於:
EACCES: permission denied(權限被拒絕)
Linux 是一個多使用者系統,它對 檔案與目錄的權限管理 相當嚴格,每個檔案和資料夾都有一個特定的:
- 擁有者(Owner)
- 擁有群組(Group)
- 權限設定(Permissions)
如果你想要修改一個檔案,但該檔案的擁有者不是你,或者你沒有適當的寫入權限,Linux 會直接拒絕你的存取請求,並顯示「權限不足」的錯誤訊息。
具體的權限問題是什麼?
你可以使用以下指令來查看目錄內檔案的擁有者與權限:
ls -l /home/user/music-event-db/core/settings.py可能會看到類似的輸出:
-rw-r--r-- 1 root root 123 Feb 18 14:30 settings.py這行資訊拆解如下:
-rw-r--r--👉 檔案權限1👉 硬連結數量root root👉 擁有者(Owner)和擁有群組(Group)123👉 檔案大小Feb 18 14:30👉 最後修改時間settings.py👉 檔案名稱
🔴 問題關鍵:
settings.py的擁有者是 rootsettings.py的群組也是 root- 你的帳號(例如
user)並沒有寫入權限,導致 VSCode 無法儲存檔案。
解決方式
最直接有效的解法,就是利用以下 Linux 指令,更改整個專案目錄的權限,讓你能順利地存取並修改檔案。
使用 chown 指令修改目錄權限
在終端機內輸入以下指令:
sudo chown -R user:user /home/user/music-event-db⚠️ 注意: 如果你目前使用的帳號名稱不是
user,需要將上面的user替換為你的真實使用者名稱。
如何知道你的使用者名稱呢?可以使用:
whoami輸入上述指令後,假設回傳結果是 john,那麼你應該執行的完整指令為:
sudo chown -R john:john /home/user/music-event-db這樣整個目錄下的檔案擁有權限將被轉移到你當前使用的使用者身上,你也就能自由操作這些檔案。
深入解析 chown 指令
為什麼要這樣做呢?我們來一個字一個字拆解指令含義:
sudo chown -R user:user /home/user/music-event-dbsudo:- 以超級管理員(root)身份執行後續的指令。
chown:- 為 “change owner” 的縮寫,用來變更檔案或目錄的擁有者。
-R:- recursive(遞迴)的縮寫,表示不僅僅更改指定的目錄,也會同時改變其下方所有的檔案和子目錄。
user:user:- 前面的
user指的是新的使用者擁有者,後面的user指的是新的群組擁有者。 - Linux 中,每個檔案都有一個使用者擁有者(owner)和一個群組擁有者(group),我們在此指令中把兩者都設為你的使用者名稱。
- 前面的
/home/user/music-event-db:- 這是你想要修改權限的目標路徑。
範例說明
假設你執行這個指令前,檔案狀態如下:
-rw-r--r-- 1 root root 123 Feb 18 14:30 settings.py這表示:
root為該檔案的使用者擁有者。root為該檔案的群組擁有者。
當你成功執行指令後,會變成:
-rw-r--r-- 1 john john 123 Feb 18 14:30 settings.py從此以後,你的帳號(例如 john)就可以自由存取與修改這個檔案,而不會再遇到無法寫入的權限錯誤訊息。
為什麼這些檔案變成 root 擁有?
你可能會問:「這些檔案原本是我創建的,為什麼變成 root 擁有?」
這通常發生在以下幾種情況:
你曾經用 sudo 建立檔案或目錄
如果你用 sudo 建立目錄或檔案,例如:
sudo mkdir /home/user/music-event-db這樣 music-event-db 這個目錄的擁有者會變成 root,而不是你的帳號。
同樣地,如果你用 sudo 建立檔案:
sudo touch settings.py這個 settings.py 會屬於 root,而非你的使用者。
📌 解決方法:
如果這些檔案應該由你來管理,請使用 chown 來變更擁有者:
sudo chown -R user:user /home/user/music-event-db你透過 sudo 執行了 Git 操作
如果你 不小心用 sudo 來執行 git clone,整個專案目錄的擁有者可能都變成 root:
sudo git clone https://github.com/example/repo.git這會導致下載的所有檔案都歸 root 所有,因此你無法編輯、修改或刪除它們。
📌 解決方法: 請使用 chown 修正這些檔案的擁有權:
sudo chown -R user:user repo🚨 避免未來再次發生:
千萬不要用 sudo git clone,因為 Git 操作不需要管理員權限。
你透過 sudo 來安裝軟體或修改專案
如果你曾經使用 sudo 來執行某些安裝命令,例如:
sudo apt install some-package
sudo pip install some-library這些操作可能會影響專案內的權限,導致某些資料夾的擁有者變成 root,從而影響你的正常操作。
📌 解決方法: 如果你的專案目錄內有某些檔案因為這些指令變成 root 擁有,可以用 chown 修正:
sudo chown -R user:user /home/user/music-event-db如何避免這些問題?
為了防止未來再次發生「權限不足」的問題,這裡提供一些最佳實踐:
✅ 1. 盡量不要使用 sudo 來操作專案目錄
- 錯誤做法(不要這樣做):
sudo mkdir my_project- 正確做法:
mkdir my_project✅ 2. 不要用 sudo 執行 Git 操作
- 錯誤做法(不要這樣做):
sudo git clone https://github.com/example/repo.git- 正確做法:
git clone https://github.com/example/repo.git✅ 3. 確保你的帳號擁有正確的檔案權限 如果你的專案發生權限錯誤,可以執行:
sudo chown -R $(whoami):$(whoami) /home/user/music-event-db✅ 4. 檢查檔案權限 在遇到問題時,先用 ls -l 檢查檔案屬性:
ls -l /home/user/music-event-db/settings.py✅ 5. 使用 chmod 來調整權限(如有需要) 如果你確定某些檔案應該開放給你的使用者帳號存取,可以使用:
chmod u+w /home/user/music-event-db/settings.py結語與重點回顧
本篇文章教會你在 VSCode 編輯 Linux 環境下的檔案時,遇到無法儲存的權限問題時:
- 使用 Linux 中的
chown指令快速解決問題。 - 掌握並理解指令中每個部分的意義。
- 學會檢查並替換自己真正的使用者名稱。
透過這些技巧,未來你在 Linux 或 WSL 開發環境中遇到類似問題時,就能快速排除,提升你的開發效率與系統管理能力!