无论选择哪个组织,这都会使某些事情变得更容易,某些事情变得更加困难。
按类型,Unix的方式组织文件(成bin
,man
,lib/python
,...),使得它更容易使用的文件。如果要运行命令,则无论在哪个程序包中都可以找到命令。如果您要搜索文档,则全部集中在一个地方。如果某些程序提供了Vim语法高亮模块,zsh完成函数或Python绑定,则相关文件将位于vim / zsh / python可以找到它的位置。
Unix还通过使用模式来组织文件。配置文件进入/etc
,在正常操作中/usr
不变的文件进入,而自动变化的文件进入/var
。用户数据不足/home
。这对于配置管理(管理其中的内容/etc
以及已安装软件包的列表)非常有用。定义备份策略也很有用:所包含的内容/etc
和/home
至关重要的内容,而所包含的内容/usr
可以轻松地再次下载。
Unix方式的主要成本是安装软件的过程分散在许多目录中。但是,现代的UNIX系统仍然具有包管理器。到目前为止,管理许多目录中的文件并不是最复杂的事情(跟踪依赖关系非常有用并且更加困难)。
与Windows对比。Windows开始时没有包管理,每个应用程序都在某个地方创建了自己的目录。所有文件通常都位于该目录内:程序,静态数据,用户数据……有时,对于某些库,程序会将它们放到公共系统目录中而不考虑冲突(“ DLL地狱”)。随着时间的流逝,Windows成为多用户,需要将用户目录与系统目录分开。Windows还为配置文件(Unix的/etc
)和一些系统数据(Unix的/var
),注册表。这主要是由于缺乏软件包管理以及作为单用户系统的早期历史而造成的。Windows方法有很多局限性:它不允许软件包轻松交互。例如,大多数已安装的软件并未最终出现在默认的命令搜索路径中,因此它与任何形式的脚本都无法很好地交互。作为特殊情况,安装程序通常会提供一个菜单图标-放入一个单独的系统目录中(在Unix中!)。
Unix方法的局限性在于它不能轻易允许程序包的多个版本共存,这在升级程序包时尤其成问题。兼顾两者的一种方法是将每个程序包解压缩到其自己的目录(/opt
结构)中,并创建从程序包目录到/usr
结构的符号链接林。这就是像stow一样的软件。
总之,Unix方法使使用文件,管理文件和允许程序包交互变得更加容易。它需要软件包管理软件,但这还是很理想的。Windows方法使手动管理软件包变得更容易,但必须转向Unix模型才能获得有用的功能。