之后我有一个后续问题https://unix.stackexchange.com/a/435293/674
例如,假设我的备份外部硬盘驱动器或 github 存储库中有一个个人配置或启动文件.profile
(或任何其他配置或启动文件)。
假设我暂时或永久切换到新的 Ubuntu 系统。新操作系统有一个默认的 ~/.profile
.
当我的备份文件部署到新系统时,是否需要手动合并我的备份文件和默认文件,或者我可以用我的备份文件覆盖新系统的默认文件吗?
我不确定覆盖是否是一个好主意,因为以前的系统和新系统的配置文件中的默认部分可能不同。
是否有一些最佳实践可以使部署更简单、更轻松?
例如,我想知道我的备份文件仅包含我手动添加的那些命令是否是个好主意,当我将其部署到新系统时,我只需在备份文件中添加新系统默认的内容文件,并用新修改的备份文件的符号链接替换新系统的默认文件。
谢谢。
答案1
当我的备份文件部署到新系统时,是否需要手动合并我的备份文件和默认文件,或者我可以用我的备份文件覆盖新系统的默认文件吗?
是吗必要的?从技术上来说,不。实际上,是的。事实上,在一般情况下,必须考虑的不仅仅是合并,因为您可能会发现旧文件中的某些命令对于新文件来说是错误的,只需将它们删除即可。
我不确定覆盖是否是一个好主意,因为以前的系统和新系统中配置文件中的默认部分可能会有所不同。
您通常会在环境设置文件中找到两大类命令:
- 与配置相关的设置软件和功能在主机上可用,并且
- 外壳环境定制
后者或多或少可以安全地传输,因为唯一可能的问题是 shell 版本之间的不兼容性引起的问题。这些在实践中很少成为问题。然而,前者可能根本没有意义转移。
设置没有安装的软件将使用的环境变量或添加实际不存在的路径元素通常是无害的,但如果破坏默认 shell 启动文件的相关内容,您可能会失去对可用软件的访问权限。或者,如果您执行了更深入的自定义,那么您可能会发现它们依赖于新系统未提供的软件,或者它们不能按照新机器的软件的要求工作。
是否有一些最佳实践可以使部署更简单、更轻松?
是的。系统应避免依赖每用户 shell 启动文件,或者至少避免放入上述第一种设置。有一些良好且经过充分测试的机制可用于配置用户环境,不需要设置或管理每个用户的文件。理想情况下,系统根本不会提供非空的每用户 shell 启动文件。
就用户而言,可以考虑将 shell 环境自定义与特定工具和应用程序的配置分开,最好放在单独的文件中。理想情况下,很少或不需要后者,并且您所需要的最好是模块化的。
例如,我想知道我的备份文件仅包含我手动添加的那些命令是否是个好主意,当我将其部署到新系统时,我只需在备份文件中添加新系统默认的内容文件,并用新修改的备份文件的符号链接替换新系统的默认文件。
如果您想将默认文件(如果有)与添加内容分开,那么更好的选择是将添加内容保存在完全不同的文件中,例如~/.profile-Tim
,并且仅通过附加命令来读取这些命令来修改默认文件, IE
test -r ~/.profile-Tim && . ~/.profile-Tim
那么,不要备份或传输~/.profile
,而是根据需要重新更新它以获取您的自定义内容。
但即便如此,您也可能会遇到麻烦,因为您迁移的个人软件配置设置可能不适合您的新环境。您可以通过使自定义保持良好的模块化来使其更易于管理,但自定义的本质是对基本系统具有一定程度的特异性。