快轉到主要內容

管理Linux系統家目錄泛濫成災的dotfile

分類   Linux系統 Linux使用技巧
標籤   Freedesktop Specifications Dotfile Flatpak
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Linux系統用久了,就會有氾濫成災的dotfile。

劉德華 - 相思成災

你打開用了多年的Linux系統檔案總管,進入家目錄,點選顯示隱藏檔案

映入眼簾的可能是這種慘況,應用程式到處亂丟dotfile和空白的資料夾。

關掉檔案總管,你默默的說:假的!我眼睛業障重呀。

…不對,他們還是在那裡。讓我們來討論要如何解決應用程式亂丟dotfile的問題。

這個議題在英文圈也多有討論,通常稱作home directory dotilfe pollution、dotfile littering in home directory…

1. 什麼是dotfile,問題在哪
#

dotfile,通俗的講,就是寫著應用程式設定檔的檔案。

程式多半會將設定檔寫到設定檔裡面,再於檔案名稱前面加個點,隱藏檔案。

設定檔要放在哪裡,開源社群多半有默契,遵守Freedesktop.org所制定的XDG規範(後述)

但,XDG標準畢竟不是強迫性的,開發者沒有遵守的義務,這就導致了dotfile亂放的問題。就是在說你啦,Java、Android Studio、AWS cli、Visual Studio Code。

有些程式開發者可能認為,使用者只會在一台Linux伺服器幹一件事而已,故沒有詳細考慮dotfile的位置。時間久了為了相容性也就忘記改,給桌面Linux使用者帶來困擾。

你為什麼要逼我啊

很多程式都不按照XDG標準,亂丟檔案呀!於是有了文章一開始見到的慘況。Linux不是一人開發的產品,每個開發者的意見不同,設定檔位置就會一團混亂,氾濫成災。

本文不是要討論 如何備份dotfile,而是針對這些應用程式亂丟dotfile的對策。

2. 了解XDG標準的路徑
#

Freedesktop.org制定的一系列XDG標準可作為應用程式放置檔案路徑的參考。

Arch Wiki對此有詳細解釋: XDG Base Directory,Wiki頁面甚至列出了不遵守XDG標準的調皮程式。

大部分桌面環境遵守XDG標準,不用特別設定環境變數。

下面講幾個比較重要的:

XDG_CONFIG_HOME

設定檔放置的目錄,應為~/.config

XDG_CACHE_HOME

快取存放路徑,應為~/.cache

XDG_DATA_HOME

使用者資料存放路徑,跟設定檔不同,使用者資料應該是偏資料庫那一類的。路徑應為~/.local/share

XDG_STATE_HOME

使用者狀態檔放置路徑,應為~/.local/state

3. 對程式亂丟dotfile的對策
#

如果你的家目錄已經一堆dotfile,遷移時務必注意備份檔案。

3.1. 將程式容器化
#

以容器技術打包的程式可以有效控管應用程式亂丟dotfile的問題。

Flatpak:程式通常會將設定檔統一放到~/.vars自身的目錄下。如果還是有程式檔案不聽話跑出來,那就用 Flatseal鎖住其存取家目錄的權限。

Snap:同上,不過權限系統不明朗。

AppImage:嚴格來說AppImage不是容器,但是它有一個 Portable Mode功能可以偽裝成程式的家目錄,把程式的dotfile鎖在裡面。

Distrobox:利用Docker容器特性,隔離應用程式目錄。Distrobox有指定程式家目錄的效果。

FireJail:容器化的做法,實行起來很麻煩。

Chroot:最古老的容器做法,設定起來很麻煩。

3.2. 手動於程式指定路徑
#

編輯程式的Desktop Entry檔案,修改啟動參數。

例如Chrome可以用參數調整設定檔目錄。

google-chrome --user-data-dir=/home/user/.config/google-chrome/default

不推薦,不是每個程式都有參數讓你調。

3.3. 程式攔截系統呼叫
#

Libetc或rewritefs的解決方案。

可能導致系統出現預期外的行為。

3.4. 符號連結
#

把dotfile移到其他地方去,再於原處建立symlink。

派大星:我們應該把比奇堡推到別的地方去!

其實沒差就是了,檔案看上去還是一樣亂。如果你偏要這樣做,那還不如安裝個 dotfile管理程式來統一整理。

3.5. 一個程式一個使用者帳號
#

比如,執行某伺服器服務的時候,就用su指令切換到該使用者帳號,任其往家目錄傾倒dotfile,與現有使用者的家目錄隔開。

太搞剛,單人桌面系統不要這樣搞。現在有Docker容器技術,要跑服務方便多了。

參考資料
#

相關文章

Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications
Ubuntu系統下make install指令前,三思而後行
分類   Linux系統 Linux使用技巧
標籤   Distrobox Flatpak Ubuntu
fontconfig調整Linux中文預設字體的優先順序,修正字體模糊、Emoji亂碼的問題
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Arch Linux Freedesktop Specifications

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。