通过apt-get安装时postgresql的默认位置

当您在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中,我不明白为什么。

为什么我问这个问题? 因为没有顺序和结构,很难记住你每天使用的程序的位置。

在Filesystem Hierarchy Standard中, `/ var / lib /表示为(斜体中最重要的部分):

5.8.1目的

该层次结构保存与应用程序或系统有关的状态信息。 程序状态信息是程序在运行时修改的数据,属于一个特定主机。 用户必须永远不需要修改/ var / lib中的文件来配置程序包的操作。

状态信息通常用于保持调用之间以及同一应用程序的不同实例之间的应用程序(或一组相互关联的应用程序)的状况。 状态信息通常在重新启动后仍然有效,不应该记录输出,也不应该是假脱机数据。

应用程序(或一组相互关联的应用程序)必须使用/ var / lib的子目录作为其数据。 有一个必需的子目录/ var / lib / misc,用于不需要子目录的状态文件; 如果相关应用程序包含在分发中,则只应存在其他子目录。

/ var / lib /是必须用于所有分发包装支持的位置。 当然,不同的发行版可能使用不同的名称。

简而言之:/ var / lib /用于本地使用的数据。

因此将数据库的数据放入/ var / lib / {mysql | postgress} /目录是完全合理的,但是… FHS是一个主要供分发使用的标准。 作为用户,您可以随意将数据放在任何地方,而且主要是意见问题。


你误解了“本地”这个词。 / usr / local / bin /不是用于系统软件,而是用于您自己的软件(基本上任何带有“本地”的东西都不能被系统触及。如FHS所解释的那样:

在/ usr /本地/

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 /;这对于PostgreSQL中)