当您在 14.04 上安装 postgresql 时,它会将主服务器程序 postgres 粘贴在:
/usr/lib/postgresql/9.3/bin/postgres
所有数据库集群将存储的数据目录:
/var/lib/postgresql/9.3/main
配置文件位于:
/etc/postgresql/9.3/main/postgresql.conf
现在我明白了为什么 postgresql.conf 和其他配置文件存储在 /etc/postgresql/9.3/main 中。毕竟,/etc 是 Linux 系统中存储配置文件的地方。
但是,为什么要将数据库存储区域放在 /var/lib 中?我可以理解 /var,因为那是非静态数据的位置,而数据库是非静态的。但是为什么特别选择 /var/lib?
此外,我认为 /bin 是用于启动所需的程序。/usr/bin 是用于发行版中包含的程序。而 /usr/local/bin 应该用于发行版中未包含但可供系统范围使用的程序。因此,由于 postgresql 旨在供系统范围使用,因此它应该在 /usr/local/bin 中可用。然而,他们把它放在 /usr/lib 中,我不知道为什么。
我为什么要问这个问题?因为如果没有顺序和结构,就很难记住每天使用的程序的位置。
答案1
在文件系统层次结构标准中,`/var/lib/表述如下(斜体为最重要的部分):
5.8.1 目的
此层次结构保存与应用程序或系统相关的状态信息。状态信息是程序在运行时修改的数据,并且与某个特定主机相关。用户永远不需要修改 /var/lib 中的文件来配置软件包的操作。
状态信息通常用于保存应用程序(或一组相互关联的应用程序)在调用之间以及同一应用程序的不同实例之间的状态。状态信息通常应在重新启动后保持有效,不应记录输出,也不应是假脱机数据。
应用程序(或一组相互关联的应用程序)必须使用 /var/lib 的子目录来存储其数据。有一个必需的子目录 /var/lib/misc,用于存储不需要子目录的状态文件;其他子目录仅当相关应用程序包含在发行版中时才应存在。
/var/lib/ 是所有发行版打包支持必须使用的位置。当然,不同的发行版可能使用不同的名称。
简而言之:/var/lib/ 用于本地使用的数据。
因此,将数据库的数据放入 /var/lib/{mysql|postgress}/ 目录是完全合理的,但是……FHS 是一个主要为以下人员创建的标准:分布。作为用户,你可以自由地将你的数据存储在任何你想要的地方,这主要取决于你的看法。
您误解了“local”这个词。/usr/local/bin/ 不是用于系统软件,而是用于您自己的软件(基本上,任何带有“local”的东西都不能被系统触碰。正如 FHS 所解释的那样:
4.9.1 目的
/usr/local 层次结构供系统管理员在本地安装软件时使用。它需要确保在系统软件更新时不会被覆盖。它可能用于可在一组主机之间共享但在 /usr 中找不到的程序和数据。本地安装的软件必须放在 /usr/local 而不是 /usr 中,除非安装它是为了替换或升级 /usr 中的软件。
从系统软件安装的可执行文件不应该进入任何本地。
现在/usr/lib/。
4.7.1 目的
/usr/lib 包含目标文件、库和内部二进制文件,这些文件不打算由用户或 shell 脚本直接执行。应用程序可以使用 /usr/lib 下的单个子目录。如果应用程序使用子目录,则应用程序独占使用的所有与体系结构相关的数据都必须放在该子目录中。
postgressql 可能是启动时启动的守护进程?如果是这样,把它放在这里是有意义的。您不应该自己使用该命令,而是启动一个服务。/usr/lib/ 中的文件往往有自己的用户和组和/或限制对 /var/lib 的访问的守护进程(例如,只有 mysqld 可以访问 /var/lib/mysql/;对于 postgressql 也是如此)