Ich erstelle eine Befehlszeilenanwendung und muss einige temporäre Daten in Dateien speichern. Ich weiß nicht, wo die Konvention für Anwendungen ist, ihren Cache auf Unix-basierten Systemen zu speichern (in diesem Fall Ubuntu 12.0.4).
"Unix-basierte Systeme" ist eine viel zu allgemeine Kategorie, um eine allgemein gültige Bestimmung zu treffen, die für alle Unix-basierten Systeme gilt. Das Problem ist, dass die Dateisystemstruktur (und der "richtige" / "konventionelle" Ort, an dem Dinge abgelegt werden sollen) sich zwischen den verschiedenen Varianten von "Unix" (wenn man es überhaupt so nennen kann) so stark unterscheidet, dass man so ziemlich damit umgehen muss von Fall zu Fall.
Einige Beispiele:
Die Antwort ist, dass die kanonische, sozial verträgliche, gut integrierte Konvention für das Speichern von Inhalten auf jedem Betriebssystem, unabhängig davon, ob es sich um eine Distribution von Linux, BSD, Solaris, HP-UX usw. handelt, von den genauen Umständen abhängt . Speziell:
apt-get
oder yum
direkt installieren können, ohne ein Installationsprogramm von einer Website herunterladen zu müssen?Es gibt keine klare Antwort darauf, ohne alle Faktoren zu berücksichtigen. Insbesondere für Ubuntu 12.04 würde ich empfehlen, den Cache zu speichern , wenn Sie Ihr Paket in eine .deb
Datei einbauen, die in einer PPA verteilt werden soll, oder wenn Sie es an Ubuntus eigene Paket-Repositores ( main
oder universe
) senden möchten /var/cache
. Dies gilt jedoch nur für Ubuntu, und Sie sollten auf keinen Fall davon ausgehen, dass jede Distribution oder jedes Unix-basierte Betriebssystem dies für akzeptabel hält.
Wenn das Speichern der Cache-Daten über Systemstarts hinweg keine Vorteile bietet, könnte dies auch zu / tmp gehören.
Beachten Sie, dass diese Probleme mit der Pfadkonvention für jeden Dateityp auftreten, den Ihr Programm verwendet: freigegebene Daten, ausführbare Dateien, Bibliotheken, Hilfedateien, Bilder, Sound, Webseiten usw. Ich muss mich also fragen, wenn Sie nach Cache-Dateien fragen, wie Sie mit den anderen Dateitypen umgehen möchten. Machen Sie nur naive Annahmen und hoffen, dass niemand mit Ihnen nicht einverstanden ist? Wenn Sie keine Ubuntu-Dokumente oder -Standards gelesen haben, in denen vorgeschlagen wird, wo sie abgelegt werden sollen, ist es eine schlechte Idee, nur die eine oder andere Sache anzunehmen. Zum Beispiel könnte es ein Fehler sein, Bibliotheken immer in / usr / lib zu stecken, da sie von der Situation abhängen, in die sie möglicherweise anderswo gehören.
Als Softwareentwickler ist es meiner Meinung nach am verantwortungsvollsten, dem Endbenutzer zu ermöglichen, zu entscheiden, wo seine Dateien abgelegt werden sollen. Sie können Standardeinstellungen festlegen, aber Benutzer (und Distributoren) können und werden den Build an ihre Distribution anpassen.
Der einfachste Weg, dies zu tun, besteht darin, Ihr Programm mit GNU Autoconf zu erstellen . Autoconf ist ein Build-System, bei dem der Benutzer Befehlszeilenargumente an das Build-Skript übergeben kann, um die Pfade der verschiedenen "Verzeichnistypen" von den Standardeinstellungen zu ändern. Fast jede Distribution verfügt über ein Build-Skript für jedes Autoconf-Paket, das die für die Distribution geeigneten herkömmlichen Verzeichnisse für jeden Typ festlegt. Sie haben sogar speziell einen Verzeichnis-Typ für den Cache: sharedstatedir .
/tmp
Ordner. Antworten auf Ihre Fragen wären (Download, nein, nein, nein, nein, nein, nein). Wahrscheinlich scheint es für die meisten Leute normal zu sein,/tmp
aber ich bin neu in Unix-Systemen und Ubuntu-basierte Konventionen sind mir unbekannt. Dies eröffnet Gem eine interessante Idee, um das Agnostic Disk Caching (User Agnostic) zu ermöglichen. Danke, +1 von mir.gem
Tool installiert werden . Es wäre jedoch wahrscheinlich nicht angebracht, Dateien zur Laufzeit in demselben Verzeichnis zu erstellen, in das Ihre Anwendung vom Gem heruntergeladen wird. Wenn Sie die App jedoch als Benutzer ausführen, benötigen Sie ein Verzeichnis, das für Benutzer schreibgeschützt ist. Dies bedeutet , dass Sie entweder die Berechtigungen ändern müssen (was zur Installationszeit noch mehr Systemintegrationsarbeit erfordert, z. B. das Erstellen einer Gruppe) usw.) oder unter Verwendung eines globalen Lese- / Schreibverzeichnisses, z. B. / tmp./usr
,/lib
oder/bin
in Ihrer Anwendung.