2009-09-23 5 views
5

Ich verstehe, dass es bei der Installation eines C++ Befehlszeilenprogramms unter Linux/UNIX üblich ist, es in seinem ursprünglichen Verzeichnis zu belassen, um es in ein Verzeichnis zu verschieben, das sich bereits auf dem Pfad befindet ich habe eine make install Eintrag:Linux/UNIX Installationsdateien

mv ayane /usr/local/bin 

weiter in der Zukunft ein wenig Sehen, ich werde mit einem Verzeichnis oder zwei voller Konfiguration, Daten und Skriptdateien, um am Ende, die das Programm lesen muss, einige an Startup, einige später auf Anfrage, und in einigen Fällen später ändern und speichern erneut.

Dies führt zu der Frage, wie das Programm wissen kann, wo sich seine Datendateien befinden. Wenn ich in/bin auf meiner virtuellen Ubuntu Linux-Maschine suche, scheint es seinem Namen gerecht zu werden, indem er nur Binärdateien enthält, so dass die Datendateien normalerweise nicht im selben Verzeichnis wie das Programm abgelegt werden.

Was ist die übliche Lösung, um Datendateien an einem Speicherort abzusetzen, der dem Programm bekannt sein kann?

+0

Relevant: http://stackoverflow.com/questions/528399/what-should-linux-unix-make-install-consist-of – dmckee

Antwort

7

Es gibt einige Dateisystemstandards, lesen Sie auf FHS oder etwas ähnliches (beachten Sie, dass es verschiedene Ansätze für Dateisystemlayout gibt).

Grundsätzlich setzen Sie Ihre ausführbaren Binärdateien in $prefix/bin/, pro-Host-Konfiguration in $prefix/etc/ geht, pro Benutzer in dem Benutzer-Home-Verzeichnis, Architektur-unabhängige statische Daten in $prefix/share, bogenabhängige Daten und Bibliotheken in $prefix/lib und die änderbaren Daten geht normalerweise in /var/lib/.

Es ist besser, diese Dinge sowohl zur Kompilierungszeit als auch zur Laufzeit konfigurierbar zu haben. Und es ist auch üblich, nicht Makefiles mit install Ziele von Hand zu schreiben, können Sie die autotools Suite oder ähnliches (eine Frage des Geschmacks) betrachten.

+2

Es ist sinnvoller, Daten in $ prefix/share/ und $ prefix zu schreiben/lib/. Und wenn es mehr als eine Konfigurationsdatei gibt:/etc/ PiedPiper

+2

PiedPiper, richtig, wenn ich '$ prefix/lib' und' $ prefix/share' beziehe, implizierte ich nicht, dass die Dateien unbedingt direkte Nachkommen der besagten sein sollten Verzeichnisse. –

2

Sie sollten sich den Standard File System Hierarchy ansehen.

Kurz gesagt, wenn das Programm systemweite Dateien benötigt, sollte config in /etc gehen. Ressourcen wie Skripte und Bilddateien gehen in /usr/share. Laufzeitdaten gehen in /var/run.

Dateien pro Benutzer werden natürlich im Benutzerverzeichnis des Benutzers gespeichert.

Verwandte Themen