Hat Linux eine Registry oder so etwas ähnliches?



  • Hallo!

    Mein Programm speichert eine Konfigurationsdatei im Homeverzeichnis des Benutzers.
    Ich möchte ein Deinstallationsprogramm schreiben, das die Konfigurationsdateien aller Benutzer entfernt.
    Da ich mit Linux bisher nicht viel gemacht habe, sind mir einige Dinge unklar:

    Wo speichere ich am besten die Pfade zu den Dateien? Gibt es so etwas wie eine Registry?
    Und in welchen Ordner kommt mein Programm? Unter Windows wäre es z.B. C:\Programme.

    Danke,
    m.u.



  • multi us0r schrieb:

    Hallo!

    Mein Programm speichert eine Konfigurationsdatei im Homeverzeichnis des Benutzers.
    Ich möchte ein Deinstallationsprogramm schreiben, das die Konfigurationsdateien aller Benutzer entfernt.
    Da ich mit Linux bisher nicht viel gemacht habe, sind mir einige Dinge unklar:

    Wo speichere ich am besten die Pfade zu den Dateien? Gibt es so etwas wie eine Registry?
    Und in welchen Ordner kommt mein Programm? Unter Windows wäre es z.B. C:\Programme.

    Danke,
    m.u.

    Speichere das einfach in $HOME oder $HOME/config ab und beim Deinstallieren kannst du die Datei /etc/passwd durchgehen dort steht für jeden Benutzer das Home-Verzeichnis (wenn er eines hat) drin, dann kannst du nachschauen ob dieser Benutzer die Datei besitzt und falls ja sie löschen.
    Wobei es unüblich ist bei der Deinstallation die Dateien in $HOME zu löschen (gibt iirc auch ein Projekt das ein Programm zur Bereinigung entwickelt).



  • man "deinstalliert" nicht unter linux. man löscht einfach die programme die man nicht mehr benutzt.

    Configdateien vom Benutzer werden dabei natürlich NICHT gelöscht!



  • DrGreenthumb schrieb:

    man "deinstalliert" nicht unter linux. man löscht einfach die programme die man nicht mehr benutzt.

    Configdateien vom Benutzer werden dabei natürlich NICHT gelöscht!

    Und warum erzeugt dann meine IDE unter Linux Debian ein Makefile, das mit dem Aufruf

    make install

    mein Programm installiert und mit

    make uninstall

    wieder entfernt?
    😕

    Linux-User schrieb:

    Speichere das einfach in $HOME oder $HOME/config ab und beim Deinstallieren kannst du die Datei /etc/passwd durchgehen dort steht für jeden Benutzer das Home-Verzeichnis (wenn er eines hat) drin, dann kannst du nachschauen ob dieser Benutzer die Datei besitzt und falls ja sie löschen.
    Wobei es unüblich ist bei der Deinstallation die Dateien in $HOME zu löschen (gibt iirc auch ein Projekt das ein Programm zur Bereinigung entwickelt).

    Die Idee mit der Passwortliste werde ich mal überdenken. Gibt es keinen Ort/Ordner, in dem alle Benutzer Schreibrechte haben? Wieso ist es unüblich Dateien im Homeverzeichnis zu löschen, sollte eine saubere Deinstallation das nicht tun?



  • multi us0r schrieb:

    DrGreenthumb schrieb:

    man "deinstalliert" nicht unter linux. man löscht einfach die programme die man nicht mehr benutzt.

    Configdateien vom Benutzer werden dabei natürlich NICHT gelöscht!

    Und warum erzeugt dann meine IDE unter Linux Debian ein Makefile ...

    naja, "einfach löschen" war schöngeredet. Beim Installieren wird alles mögliche irgendwo hinkopiert und beim Deinstallieren genau das wieder gelöscht.

    Wieso ist es unüblich Dateien im Homeverzeichnis zu löschen, sollte eine saubere Deinstallation das nicht tun?

    stell dir vor du deinstallierst firefox, installierst wieder neu und die bookmarks sind weg. So kann das ja nicht gehen.
    Man könnte aber netterweise eine Möglichkeit bereitstellen, mit der die Einstellungen vom Benutzer selbst gelöscht werden können.



  • multi us0r schrieb:

    Und in welchen Ordner kommt mein Programm? Unter Windows wäre es z.B. C:\Programme.

    Hängt von der Art des Programms ab. Standard-Systemprogramme kommen meist nach /bin oder /sbin.

    Standard Anwendungsprogramme schiebt man gerne nach /usr/bin, /usr/sbin.
    Große Programmpakete mit vielen Einzelkomponenten liegen oft auch unter /opt.

    Zuviel Gedanken brauchst du dir aber in der Regel nicht zu machen, denn die Distributoren werden das letztendlich für ihre Distribution anpassen.



  • GNU-Fan schrieb:

    Zuviel Gedanken brauchst du dir aber in der Regel nicht zu machen, denn die Distributoren werden das letztendlich für ihre Distribution anpassen.

    Mein Programm erzeugt für jeden Benutzer ein Verzeichnis mit einer Konfigurationsdatei. Diese Datei wird im Verzeichnis /home/usr als /home/usr/.MyProg/my_config.cfg gespeichert.

    Beim Start müsste das Hauptprogramm also erstmal alle Benutzer speichern, die das Programm benutzt haben, z.B. in die Datei Users.txt:
    /home/user_a/.MyProg/my_config.cfg
    /home/user_b/.MyProg/my_config.cfg
    /home/user_c/.MyProg/my_config.cfg

    Fürs Deinstallieren möchte ich gern ein Programm schreiben, das alle .MyProg/my_config.cfg löscht, wird ja nicht mehr gebraucht. Stellt sich mir die Frage:
    wohin mit der Users.txt?



  • frag ihn einfach, ob er seine config löschen will und entferne danach ~/.prog/config.cfg (oder wie auch immer die heißt).
    In fremden Benutzerverzeichnissen sollte man nicht einfach was löschen, wenn es dafür keinen guten Grund gibt. Und sofern deine Config nicht ~100MiB groß ist, gibt es den auch nicht. Der Benutzer kann sie ja selbst löschen, wenn er sie nicht mehr braucht (oder sie einfach liegen lassen)

    Und wenn du wirklich rumpfuschen willst, nimm besagte /etc/passwd und lauf dort alle Home-Verzeichnisse durch



  • zwutz schrieb:

    frag ihn einfach, ob er seine config löschen will und entferne danach ~/.prog/config.cfg (oder wie auch immer die heißt).

    Ja, aber das Deinstallationsprogramm läuft ja mit Adminrechten. Ich muss irgendwo die Benutzer speichern können.



  • multi us0r schrieb:

    zwutz schrieb:

    frag ihn einfach, ob er seine config löschen will und entferne danach ~/.prog/config.cfg (oder wie auch immer die heißt).

    Ja, aber das Deinstallationsprogramm läuft ja mit Adminrechten. Ich muss irgendwo die Benutzer speichern können.

    Wieso denn? Das steht doch bereits in /etc/passwd. Die Datei musst du nur zeilenweise durchgehen und dann prüfen ob der Benutzer Konfigurationsdateien von deinem Programm hat und ggf. löschen.
    Aber wie gesagt: das ist unter Unix nicht üblich. Und wenn du darüber nachdenkst macht es auch prinzipiell keinen Sinn, denn die einzige Person die (de-)installieren kann ist der Administrator und er müsste dann an dieser Stelle entscheiden ob er einfach einmal Dateien aus den Home-Verzeichnissen der Benutzer löscht (unter Windows ist das nicht anders). Und die Mehrheit der Benutzer hätte da ganz sicher etwas dagegen.
    Als nächstes sind die Dateien auch nicht versteckt und unauffindbar wie unter Windows, so kann jeder Benutzer in seinem Verzeichnis einfach suchen und alte Dateien löschen, wenn er sie nicht mehr will.
    Spar dir die Arbeit solch ein Antifeature einzubauen und alle sind glücklich 🙂



  • Ich finde es eigentlich normal, das ein Programm beim Deinstallieren seine Dateien löscht. Dazu gehören meiner Meinung nach auch Konfigurationsdateien, die nicht mehr benötigt werden. Die meisten Benutzer drüften verärgert sein, wenn ein deinstalliertes Programm Datenschrott auf der Festplatte hinterlässt?



  • multi us0r schrieb:

    Ich finde es eigentlich normal, das ein Programm beim Deinstallieren seine Dateien löscht. Dazu gehören meiner Meinung nach auch Konfigurationsdateien, die nicht mehr benötigt werden. Die meisten Benutzer drüften verärgert sein, wenn ein deinstalliertes Programm Datenschrott auf der Festplatte hinterlässt?

    Du solltest ggf. erst einmal mit einem Unix arbeiten bevor du dafür Software entwickeln willst.
    Unix ist nicht Windows unter Unix kann deine Anwendung nur an ganz wenige ausgewählte Orte schreiben, meist nur in das Home-Verzeichnis des Benutzers, d.h. alles was der Benutzer löschen muss ist eine Datei .deine_anwendung oder ein .deine_anwendung Ordner vielleicht liegt der Ordner oder die Datei auch in .config, aber all das findest er ganz leicht mit einem find "$HOME" -iname *deine_anwendung* heraus.
    Im Gegensatz zu Windows wo Anwendung überall hinschreiben können, z.B. die Registry und der Benutzer praktisch keine Chance hat je alle Einträge wieder selber zu löschen.

    Du solltest eine Anwendung so entwickeln, dass sie unter jedem System das intuitive tut, d.h. unter Unix keine Konfigurationsdateien bei der Deinstallation zu löschen. Normal tritt das Problem auch nicht auf, weil der Paketmanager die Software installiert und globale Konfigurationsdateien bei der Deinstallation entfernt, wenn sie nicht händisch modifiziert wurden. Und Dateien in den Verzeichnissen der Benutzer bleiben bestehen.



  • Ich frag mich grad auch wie du es schaffst (wie du sagtest) dass du beim Installieren bei jedem Benutzer eine Config anlegst, diese aber nicht schaffst zu löschen 😃

    Aber prinzipiell läuft die Sache ja so:

    1. Programm wird installiert. Dabei wird (falls überhaupt benötigt) eine GLOBALE config-Datei abgelegt z.B. in einem bestimmten Verzeichnis unterhalb von /usr/share
    2. Wenn der User seine Einstellungen ändern will wird eine Userspezifische Config-Datei in dessen $HOME erstellt. Diese wird natürlich von deinem Programm bevorzugt.
    3. Programm wird deinstalliert. Dabei werden alle Dateien entfernt, die das Programm beim Installieren auf die Festplatte gelegt hat. Mehr ist nicht nötig, denn ein User hat niemals (!) Schreibrechte in Systemverzeichnissen, einzig in $HOME und /tmp (außer der Admin hat ihm mehr erlaubt, z.B. in /var/www/... oder so). /tmp wird hoffentlich beim Runterfahren geleert, $HOME geht niemanden was an. das sind die Files des Users.
      Es wurde ja bereits erwähnt, dass das Programm nur kurz deinstalliert und dann neu installiert werden soll, und dabei die Usereinstellungen gefälligst nicht verloren gehen sollen...

    Außerdem solltest du im Hinterkopf behalten, dass es unter Linux Package-Manager gibt. Diese enthalten meist eine eigene DB, in der festgehalten wird, welche Dateien bei der Installation auf die Platte kamen. Zur Deinstallation wird dann nicht deine Deinstallations-Routine genommen, sondern (oh Wunder) nur das gelöscht was bei der Installation drauf kam.

    Mach dir also nicht die Mühe eine dermaßen hirnrissige (sry) Deinstallationroutine auszudenken, die wird eh niemand nutzen, und wenn dann hagelts Bugreports...



  • Lexomane schrieb:

    Ich frag mich grad auch wie du es schaffst (wie du sagtest) dass du beim Installieren bei jedem Benutzer eine Config anlegst, diese aber nicht schaffst zu löschen 😃

    Erkläre ich dir gern:
    Admin installiert Programm.
    Benutzer X1 loggt sich ein, startet Programm. Programm liest
    HOME Variable, schreibt Konfigdatei /home/X1/config.cfg
    Benutzer X2 loggt sich ein, startet Programm. Programm liest
    HOME Variable, schreibt Konfigdatei /home/X2/config.cfg
    usw.
    Das Programm kennt also die Pfade zu den Konfigdateien nicht
    im Voraus. Die Pfade müssten also beim Aufruf des Programms
    irgendwo gespeichert werden(Registry, Textdatei, etc).
    Oder aber es müssten alle Benutzerverzeichnisse abgeklappert und
    die Existenz von home/X*/config.cfg geprüft werden.



  • Wurde zwar schon gesagt, aber lass mich das nochmal unterstreichen: Die Configfiles rührst Du beim Entfernen des Programms nicht an.

    Wenn Deine User sie entfernen wollen, dann löschen sie einfach selbst ~/.namedeinesprogramms und die Sache ist erledigt.


Log in to reply