Unix文件系统结构有什么优点

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 模型才能获得有用的功能。


Bru*_*ger 9

在我看来,最容易想到的优势是类似的文件存在于同一目录树中。配置文件/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 对文件系统病毒具有更强抵抗力的原因。

  • 世界上许多(但不是全部)病毒和蠕虫的传播都是由于能够将数据更改为可执行文件:堆栈溢出、SQL 注入和代码注入都以这种方式工作。“Word”宏病毒传播至少部分是因为“Word”宏包含在 .doc 文件中。按文件将数据与可执行文件分开是一种保护级别,将数据放在一个目录中,第二个目录中可执行,第三个是模板,第四个是配置,这为混淆数据和可执行文件设置了更多障碍。 (3认同)
  • 数据和可执行文件分离的论点完全是无稽之谈。文件系统组织是为了人类的利益;并不是说这些位之间存在某种物理分离,从而阻止了它们彼此之间或任何事物之间的交流。UNIX 的安全性在历史上更好,因为它通常具有更强大、更严格执行的权限模型。 (2认同)