快轉到主要內容

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

Linux系統 Linux使用技巧 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容器技術,要跑服務方便多了。

參考資料
#

相關文章

Ubuntu系統下make install指令前,三思而後行
Linux系統 Linux使用技巧 Distrobox Flatpak Ubuntu
檔案無法開啟?用FlatSeal調整Linux Flatpak應用程式權限
Linux系統 Linux使用技巧 Flatpak
Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
Linux系統 Linux使用技巧 Linux Flatpak

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。