在 Linux 中,點文件是隱藏的文本文件,從 Bash、Git 到 i3 或 VSCode 等更復雜的許多應用程序,都用它存儲配置設置。-- Ryan Walter(作者)
在 Linux 中,點文件是隱藏的文本文件,從 Bash、Git 到 i3 或 VSCode 等更復雜的許多應用程序,都用它存儲配置設置。
這些文件大多數都放在 ~/.config 目錄中或用戶主目錄中。編輯這些文件使你可以自定義也許沒有提供設置菜單的應用程序,並且它們可以跨設備甚至是跨其它 Linux 發行版移植。但是,整個 Linux 發燒友社區的討論焦點是如何管理這些點文件以及如何共享它們。
我們將展示一個名為 Chezmoi 的工具,該工具與其它工具略有不同。
點文件管理的歷史
如果你在 GitHub 上搜索“dotfiles” ,那麼你將看到有超過 10 萬個存儲庫在解決一個目標:將人們的點文件存儲在可共享且可重複的領地中。但是,除了都在使用 Git 之外,它們存儲文件的方式各有不同。
雖然 Git 解決了代碼管理問題,也將其轉換為配置文件管理,但它並沒有解決如何區分發行版、角色(例如家用計算機與工作計算機)、機密信息管理以及按設備配置的問題。
因此,許多用戶決定製定自己的解決方案,多年來,社區已經做出了許多成果。本文將簡要介紹已有的一些解決方案。
在孤立的環境中進行實驗
你想在封閉的環境中快速嘗試以下解決方案嗎?運行:
<code>$ podman run /<code>
來創建一個 Fedora 容器嘗試應用程序。退出容器時,該容器將自動刪除自身。
安裝問題
如果將點文件存儲在 Git 存儲庫中,你肯定希望可以讓更改輕鬆地自動應用到主目錄之中,乍一看,最簡單的方法是使用符號鏈接,例如 ln -s ~/.dotfies/bashrc ~/.bashrc。這可以使你的更改在更新存儲庫時立即就緒。
符號鏈接的問題在於管理符號鏈接可能很麻煩。Stow 和 RCM (在 Fedora 雜誌上介紹過)可以幫助你管理這些,但是這些並不是非常舒服的解決方案。下載後,需要對私有文件進行適當的修改和設置訪問模式。如果你在一個系統上修改了點文件,然後將存儲庫下載到另一個系統,則可能會發生衝突並需要進行故障排除。
解決此問題的另一種方法是編寫自己的安裝腳本。這是最靈活的選項,但要權衡花費更多時間來構建自定義解決方案是否值得。
機密信息問題
Git 旨在跟蹤更改。如果你在 Git 存儲庫中存儲密碼或 API 密鑰之類的機密信息,則會比較麻煩,並且需要重寫 Git 歷史記錄以刪除該機密信息。如果你的存儲庫是公開的,那麼如果其他人下載了你的存儲庫,你的機密信息將不再保密。僅這個問題就會阻止許多人與公共世界共享其點文件。
多設備配置問題
問題不在於如何將配置拉到多個設備,而是當你有多個需要不同配置的設備的問題。大多數人通過使用不同的文件夾或使用不同的 復刻(fork)來處理此問題。這使得難以在不同設備和角色集之間共享配置。
Chezmoi 是如何幹的
Chezmoi 是一種考慮了以上問題的用於管理點文件的工具,它不會盲目地從存儲庫複製或符號鏈接文件。 Chezmoi 更像是模板引擎,可以根據系統變量、模板、機密信息管理器和 Chezmoi 自己的配置文件來生成你的點文件。
Chezmoi 入門
目前,Chezmoi 並不在 Fedora 的默認軟件庫中。你可以使用以下命令下載 Chezmoi 的當前版本。
<code>$ sudo dnf installhttps:
//github.com/twpayne
/chezmoi/releases
/download/v
1.7.17
/chezmoi-1.7
.17
-x86_64.rpm/<code>
這會將預打包的 RPM 安裝到你的系統中。
讓我們繼續使用以下方法創建你的存儲庫:
<code>$ chezmoiinit
/<code>
它將在 ~/.local/share/chezmoi/ 中創建你的新存儲庫。你可以使用以下命令輕鬆地切換到該目錄:
<code>chezmoi
cd
/<code>
讓我們添加第一個文件:
<code>chezmoiadd
~/.bashrc/<code>
這將你的 .bashrc 文件添加到 chezmoi 存儲庫。
注意:如果你的 .bashrc 文件實際上是一個符號鏈接,則需要添加 -f 標誌以跟隨它來讀取實際文件的內容。
現在,你可以使用以下命令編輯該文件:
<code>$ chezmoi edit ~/.bashrc
/<code>
現在讓我們添加一個私有文件,這是一個具有 600 或類似權限的文件。我在 .ssh/config 中有一個文件,我想通過使用如下命令添加它:
<code>$ chezmoi add ~/.ssh/config
/<code>
Chezmoi 使用特殊的前綴來跟蹤隱藏文件和私有文件,以解決 Git 的限制。運行以下命令以查看它:
<code>chezmoi
cd
/<code>
請注意,標記為私有的文件實際上並不是私有的,它們仍會以純文本格式保存在你的 Git 存儲庫中。稍後會進一步解釋。
你可以使用以下方法應用任何更改:
<code>$ chezmoi apply/<code>
並使用如下命令檢查有什麼不同:
<code>$ chezmoi diff/<code>
使用變量和模板
要導出 Chezmoi 可以收集的所有數據,請運行:
<code>$ chezmoidata
/<code>
其中大多數是有關用戶名、架構、主機名、操作系統類型和操作系統名稱的信息。但是你也可以添加我們自己的變量。
繼續,運行:
<code>$ chezmoi edit-config
/<code>
然後輸入以下內容:
<code>[ ] email = name ="Fedora Mcdora"
/<code>
保存文件,然後再次運行 chezmoi data。你將在底部看到你的電子郵件和姓名已經添加成功。現在,你可以將這些與 Chezmoi 的模板一起使用。運行:
<code>$ chezmoiadd
-T --autotemplate ~/.gitconfig/<code>
來將你的 .gitconfig 作為模板添加到 Chezmoi 中。如果 Chezmoi 成功地正確推斷了模板,你將獲得以下信息:
<code>[ ] email ="{{ .email }}"
name ="{{ .name }}"
/<code>
如果沒有,則可以將文件更改為這樣。
使用以下方法檢查文件:
<code>$ chezmoi edit ~/.gitconfig
/<code>
然後使用:
<code>$ chezmoi cat ~/.gitconfig
/<code>
來查看 Chezmoi 為此文件生成什麼。我生成的示例如下:
<code>[ ] [ ] email = name ="Fedora Mcdora"
[ ]/<code>
它將在我們的 Chezmoi 配置中生成一個充滿變量的文件。你也可以使用變量執行簡單的邏輯語句。一個例子是:
<code>{{-if
eq .chezmoi.hostname"fsteel"
}} # 如果主機名為"fsteel"
才包括此部分 {{-end
}}/<code>
請注意,要使其正常工作,該文件必須是模板。你可以通過查看文件是否在 chezmoi cd 中的文件名後附加 .tmpl 或使用 -T 選項讀取文件來進行檢查。
讓機密信息保持機密
要對設置進行故障排除,請使用以下命令。
<code>$ chezmoi doctor/<code>
這裡重要的是它還向你顯示了 所支持的密碼管理器 。
<code>[root@a6e273a8d010 ~] warning: version dev ok: runtime.GOOS linux, runtime.GOARCH amd64 ok: /root/.local/share/chezmoi (source directory, perm 700) ok: /root (destination directory, perm 550) ok: /root/.config/chezmoi/chezmoi.toml (configuration file) ok: /bin/bash (shell) ok: /usr/bin/vi (editor) warning: vimdiff (merge
command,not
found
) ok: /usr/bin
/git (source
VCS command,version
2.25
.1
) ok: /usr/bin
/gpg (GnuPG,version
2.2
.18
)warning
: op (1
Password
CLI,not
found
)warning
: bw (Bitwarden CLI,not
found
)warning
: gopass (gopass CLI,not
found
)warning
: keepassxc-cli (KeePassXC CLI,not
found
)warning
: lpass (LastPass CLI,not
found
)warning
: pass (pass CLI,not
found
)warning
: vault (Vault CLI,not
found
) [root@a6e273a8d010 ~]/<code>
你可以使用這些客戶端,也可以使用 通用客戶端 ,也可以使用系統的 密鑰環 。
對於 GPG,你需要使用以下命令將以下內容添加到配置中:
<code>$ chezmoi edit-config
/<code>
<code>[ ] recipient ="
/<code>
你可以使用:
<code>$ chezmoiadd
--encrypt/<code>
來添加任何文件,這些文件將在你的源存儲庫中加密,並且不會以純文本格式公開。Chezmoi 會在應用時自動將其解密。
我們也可以在模板中使用它們。例如,存儲在 Pass (已在 Fedora 雜誌上介紹)中的機密令牌。繼續,生成你的機密信息。
在此示例中,它稱為 githubtoken:
<code>rwaltr@fsteel:~
] $ pass ls Password Store └── githubtoken [rwaltr@fsteel:~
] $/<code>
接下來,編輯你的模板,例如我們之前創建的 .gitconfig 並添加以下行。
<code>token
= {{ pass"githubtoken"
}}/<code>
然後讓我們使用檢查:
<code>$ chezmoi cat ~/.gitconfig
/<code>
<code>[rwaltr@fsteel:~] $ chezmoi cat ~/.gitconfig Thisis
Git's per-user configuration file. [user] name = Ryan Walter email = [email protected] token = mysecrettoken [rwaltr@fsteel:~] $
/<code>
現在,你的機密信息已在密碼管理器中妥善保護,你的配置可以公開共享而沒有任何風險!
最後的筆記
這裡僅僅涉及到表面。請訪問 Chezmoi 的網站 瞭解更多信息。如果你正在尋找有關如何使用 Chezmoi 的更多示例,作者還可以公開了他的 點文件 。
via: https://fedoramagazine.org/take-back-your-dotfiles-with-chezmoi/
作者: Ryan Walter 選題: lujun9972 譯者: wxy 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出