在Linux中,点文件是许多应用程序使用的隐藏文本文件,从Bash和Git到更复杂的i3或VSCode,用于存储配置设置。这些文件中的大部分都放在~/.config目录或用户的主目录中。编辑这些文件允许您自定义可能不提供设置菜单的应用程序,并且它们可以跨设备甚至跨其他Linux发行版移植。然而,整个Linux爱好者社区的讨论都集中在如何管理这些点文件以及如何共享它们上。我们将展示一个名为Chezmoi的工具,它与其他工具略有不同。点文件管理的历史如果您在GitHub上搜索“点文件”,您会看到超过100,000个存储库都在实现一个目标:将人们的点文件存储在可共享和可重复的飞地中。然而,除了他们都使用Git之外,他们存储文件的方式不同。虽然Git解决了代码管理的问题并将其转化为配置文件管理,但它并没有解决如何区分分布、角色(例如家庭计算机与工作计算机)、机密管理和每个设备配置的问题。因此,许多用户决定开发自己的解决方案,社区多年来也取得了很多成果。本文简要介绍了一些现有的解决方案。在隔离环境中进行实验您想在封闭环境中快速尝试以下解决方案吗?运行:$podmanrun--rm-itfedora创建一个Fedora容器来试用该应用程序。退出容器时容器会自动删除自身。安装问题如果您将点文件存储在Git存储库中,您希望能够轻松地自动将更改应用到您的主目录。乍一看,最简单的方法是使用符号链接,例如ln-s~/.dotfies/bashrc~/.bashrc。这使您的更改在存储库更新时立即准备就绪。符号链接的问题在于管理符号链接可能很麻烦。Stow和RCM(在FedoraMagazine中有介绍)可以帮助您管理这些,但这些都不是很舒服的解决方案。下载后需要适当修改私有文件,设置访问方式。如果您在一个系统上修改点文件,然后将存储库下载到另一个系统,则可能会出现冲突并需要进行故障排除。解决这个问题的另一种方法是编写自己的安装脚本。这是最灵活的选择,但权衡是是否值得花更多时间构建自定义解决方案。机密信息问题Git旨在跟踪更改。如果您在Git存储库中存储密码或API密钥等机密信息,这可能会很麻烦,并且需要重写Git历史记录才能删除该机密信息。如果您的存储库是公开的,那么如果其他人下载您的存储库,您的机密信息将不再保密。仅这个问题就阻止了许多人与公众分享他们的点文件。多设备配置问题问题不是如何将配置拉到多个设备,而是当您有多个需要不同配置的设备时。大多数人通过使用不同的文件夹或使用不同的分支来处理这个问题。这使得难以跨不同的设备和角色集共享配置。Chezmoi是如何做的Chezmoi是一个考虑到上述因素的管理点文件的工具,它不会盲目地从存储库复制或符号链接文件。Chezmoi更像是一个模板引擎,它根据系统变量、模板、机密管理器和Chezmoi自己的配置文件生成您的点文件。Chezmoi入门目前,Chezmoi不在默认的Fedora存储库中。您可以使用以下命令下载当前版本的Chezmoi。$sudodnfinstallhttps://github.com/twpayne/chezmoi/releases/download/v1.7.17/chezmoi-1.7.17-x86_64.rpm这会将预打包的RPM安装到您的系统中。让我们继续创建您的存储库:$chezmoiinit它将在~/.local/share/chezmoi/中创建您的新存储库。您可以使用以下命令轻松切换到此目录:$chezmoicd让我们添加第一个文件:chezmoiadd~/.bashrc这会将您的.bashrc文件添加到chezmoi存储库。注意:如果您的.bashrc文件实际上是一个符号链接,您将需要添加-f标志以跟随它读取实际文件的内容。现在,您可以使用以下命令编辑该文件:$chezmoiedit~/.bashrc现在让我们添加一个私有文件,这是一个具有600或类似权限的文件。我在.ssh/config中有一个文件,我想使用如下命令添加该文件:$chezmoiadd~/.ssh/configChezmoi使用特殊前缀来跟踪隐藏和私有文件以解决Git限制。运行以下命令来查看它:$chezmoicd请注意,标记为私有的文件实际上并不是私有的,它们仍将以纯文本形式保存在您的Git存储库中。稍后会详细介绍。您可以应用任何更改:$chezmoiapply并检查有什么不同:$chezmoidiff使用变量和模板要导出Chezmoi可以收集的所有数据,请运行:$chezmoidata其中大部分是关于用户名、体系结构、主机名、操作系统类型和操作系统名称信息。但您也可以添加我们自己的变量。继续,运行:$chezmoiedit-config并输入以下内容:[data]email="fedorauser@example.com"name="FedoraMcdora"保存文件,然后再次运行chezmoidata。您将在底部看到您的电子邮件和姓名已成功添加。现在,您可以将这些与Chezmoi的模板一起使用。运行:$chezmoiadd-T--autotemplate~/.gitconfig将你的.gitconfig作为模板添加到Chezmoi。如果Chezmoi成功地正确推断出模板,您将得到以下内容:[user]email="{{.email}}"name="{{.name}}"如果没有,您可以将文件更改为此。使用以下命令检查文件:$chezmoiedit~/.gitconfig然后使用:$chezmoicat~/.gitconfig查看Chezmoi为该文件生成的内容。我生成的例子如下:[root@a6e273a8d010~]#chezmoicat~/.gitconfig[user]email="fedorauser@example.com"name="FedoraMcdora"[root@a6e273a8d010~]#它会在我们的Chezmoi配置中生成了一个充满变量的文件。您还可以使用变量来执行简单的逻辑语句。一个例子是:{{-ifeq.chezmoi.hostname"fsteel"}}#Onlyincludethissectionifthehostnameis"fsteel"{{-end}}注意这个文件必须是模板才能工作。您可以通过查看文件是否将.tmpl附加到chezmoicd中的文件名或通过使用-T选项读取文件来检查。保持机密信息机密要对您的设置进行故障排除,请使用以下命令。$chezmoidoctor这里重要的是它还向您显示支持的密码管理器。[root@a6e273a8d010~]#chezmoidoctorwarning:versiondevok:runtime.GOOSlinux,runtime.GOARCHamd64ok:/root/.local/share/chezmoi(sourcedirectory,perm700)ok:/root(destinationdirectory,perm550)ok:/root/.config/chezmoi/chezmoi.toml(configurationfile)ok:/bin/bash(shell)ok:/usr/bin/vi(editor)警告:vimdiff(mergecommand,notfound)ok:/usr/bin/git(sourceVCScommand,version2.25.1)ok:/usr/bin/gpg(GnuPG,version2.2.18)warning:op(1PasswordCLI,notfound)警告:bw(BitwardenCLI,未找到)警告:gopass(gopassCLI,未找到)警告:keepassxc-cli(KeePassXCCLI,未找到)警告:lpass(LastPassCLI,未找到)警告:pass(通过CLI,未找到)警告:保险库(VaultCLI,notfound)[root@a6e273a8d010~]#Youcanusetheseclients,generalclients,orsystemkeyrings.对于GPG,您需要将以下内容添加到您的配置中:$chezmoiedit-config[gpg]recipient="