emplacement par défaut de postgresql lors de l'installation via apt-get

15

Lorsque vous installez postgresql le 14.04, il colle le postgres du programme serveur principal à:

/usr/lib/postgresql/9.3/bin/postgres

le répertoire de données où tous les clusters de base de données seront stockés:

/var/lib/postgresql/9.3/main

et le fichier de configuration à:

/etc/postgresql/9.3/main/postgresql.conf

Je peux maintenant comprendre pourquoi postgresql.conf et d'autres fichiers de configuration sont stockés dans /etc/postgresql/9.3/main. Après tout, / etc est l'endroit où les fichiers de configuration sont stockés dans un système Linux.

Cependant, pourquoi placer la zone de stockage de la base de données dans / var / lib? Je peux comprendre / var, car c'est l'endroit pour les données non statiques et les bases de données sont non statiques. Mais pourquoi / var / lib en particulier?

De plus, je crois que / bin est pour les programmes requis pour le démarrage. / usr / bin est pour les programmes inclus dans la distribution. et / usr / local / bin devrait être pour les programmes non inclus dans la distribution mais disponibles pour une utilisation à l'échelle du système. Et donc, puisque postgresql est destiné à une utilisation à l'échelle du système, il devrait être disponible dans / usr / local / bin. Pourtant, ils le placent dans / usr / lib, dont je ne sais pas pourquoi.

Pourquoi est-ce que je pose cette question? Parce que sans ordre et structure, il est difficile de se souvenir de l'emplacement des programmes que vous utilisez tous les jours.

Donato
la source

Réponses:

11

Dans le Filesystem Hierarchy Standard, `/ var / lib / est indiqué comme (en italique la partie la plus importante):

5.8.1 Objet

Cette hiérarchie contient des informations d'état relatives à une application ou au système. Les informations d'état sont des données que les programmes modifient pendant leur exécution et qui se rapportent à un hôte spécifique. Les utilisateurs ne doivent jamais avoir à modifier des fichiers dans / var / lib pour configurer le fonctionnement d'un package.

Les informations d'état sont généralement utilisées pour préserver l'état d'une application (ou d'un groupe d'applications interdépendantes) entre les invocations et entre différentes instances de la même application. Les informations d'état doivent généralement rester valides après un redémarrage, ne doivent pas être une sortie de journalisation et ne doivent pas être des données spoulées.

Une application (ou un groupe d'applications interdépendantes) doit utiliser un sous-répertoire de / var / lib pour ses données. Il existe un sous-répertoire requis, / var / lib / misc, qui est destiné aux fichiers d'état qui n'ont pas besoin d'un sous-répertoire; les autres sous-répertoires ne doivent être présents que si l'application en question est incluse dans la distribution.

/ var / lib / est l'emplacement qui doit être utilisé pour toute la prise en charge des packages de distribution. Bien entendu, différentes distributions peuvent utiliser des noms différents.

En bref: / var / lib / est pour les données qui sont utilisées localement.

Il est donc parfaitement logique de placer les données d'une base de données dans le répertoire / var / lib / {mysql | postgress} / mais ... le FHS est un standard créé principalement pour être utilisé par les distributions . En tant qu'utilisateur, vous êtes libre de placer vos données où vous le souhaitez et c'est surtout une question d'opinion.


Vous comprenez mal le mot «local». / usr / local / bin / n'est pas pour le logiciel système mais pour votre propre logiciel (fondamentalement, tout ce qui a une entrée "locale" ne doit jamais être touché par le système. Comme expliqué par FHS:

/ usr / local /

4.9.1 Objet

La hiérarchie / usr / local doit être utilisée par l'administrateur système lors de l'installation locale du logiciel. Il doit être protégé contre l’écrasement lors de la mise à jour du logiciel système. Il peut être utilisé pour des programmes et des données qui peuvent être partagés entre un groupe d'hôtes, mais qui ne se trouvent pas dans / usr. Le logiciel installé localement doit être placé dans / usr / local plutôt que dans / usr, sauf s'il est installé pour remplacer ou mettre à niveau le logiciel dans / usr.

Un exécutable installé à partir du logiciel système ne doit jamais aller vers quelque chose de local.


Maintenant pour / usr / lib / .

4.7.1 Objet

/ usr / lib inclut des fichiers objets, des bibliothèques et des fichiers binaires internes qui ne sont pas destinés à être exécutés directement par les utilisateurs ou les scripts shell. Les applications peuvent utiliser un seul sous-répertoire sous / usr / lib. Si une application utilise un sous-répertoire, toutes les données dépendantes de l'architecture utilisées exclusivement par l'application doivent être placées dans ce sous-répertoire.

postgressql est probablement un démon démarré au démarrage? Si c'est le cas, il est logique de le mettre ici. Vous n'êtes pas censé utiliser la commande vous-même mais démarrer un service. Les fichiers dans / usr / lib / ont tendance à avoir leur propre utilisateur et groupe et / ou un démon qui restreint l'accès à / var / lib (seul mysqld peut accéder à / var / lib / mysql / par exemple; ce sera la même chose pour postgressql)

Rinzwind
la source