Jan*_*ter 9 linux filesystems directory directory-structure
如果我在 Linux 中安装一个应用程序,例如 Debian/Gnu Linux,应用程序的文件将被复制到文件系统中的许多不同目录中。
一些脚本进入/usr/share .. /usr/local一些其他文件进入/var .. /log .. etc/等等。
对我来说这是可以的,因为我了解了一些关于文件系统的知识,并且大多数目录都是为了特定目的而保存文件的。这非常符合 Unix 哲学“做一件事并做好”
但我的问题是这种目录结构的优点是什么?或者它只是旧Unix时代的遗产。(例如,与一个窗口使用相比,应用程序的所有文件都在一个特定的“文件夹”中)
Gil*_*il' 11
无论选择哪个组织,它都会使一些事情变得容易一些事情变得更加困难。
按类型组织文件,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 模型才能获得有用的功能。
在我看来,最容易想到的优势是类似的文件存在于同一目录树中。配置文件/etc
、日志文件和/或运行时跟踪文件/var/log
、可执行文件/usr/bin
、PID 文件等运行时信息/var/run
。您想知道 NTP 配置文件中的内容吗?将目录更改为/etc
并执行ls ntp*
. 你想让一些程序监视可执行文件,这样一些传统的文件系统病毒就不会感染它们吗?一切都在/usr/bin
和/usr/local/bin
需要观望。
我能想到的第二个优点是 Unix 风格的组织促进了数据和可执行文件的分离。可执行文件所在的目录远离模板所在的位置(/usr/share
可能),并且远离数据所在的位置。这种分离可能是 Unix/Linux/*BSD 比 Windows 或旧的 Pre-OSX Mac 对文件系统病毒具有更强抵抗力的原因。
归档时间: |
|
查看次数: |
7440 次 |
最近记录: |