it-swarm.com.de

Unterschied zwischen bash.bashrc und / etc / environment file

Bis zu dem Datum, an dem ich meine Umgebungsvariablen in der Datei bash.bashrc festgelegt habe. Kürzlich wurde mir gesagt, ich solle die /etc/environment -Datei verwenden. Nun, beide funktionieren gut.

Also, was ist der Unterschied zwischen ihnen?

Ich habe dies gegoogelt und festgestellt, dass "bashrc für bestimmte Benutzer und Umgebungen systemweit verwendet wird". Was ist hier mit systemweit gemeint? /etc/bash.bashrc wendet Änderungen vermutlich auch systemweit an. Korrigiere mich, wenn ich falsch liege. Jede Art von Hilfe wird geschätzt.

41
trapaank

Ein Unterschied besteht darin, dass /etc/environment nur Variablendefinitionen enthält und anscheinend keine Art von Variablenerweiterung/Interpolation durchläuft. Daher können Sie in Definitionen keine Variablen referenzieren. Das funktioniert zum Beispiel nicht:

A="else"
B="something $A"

B wird buchstäblich something $A sein, nicht der erwartete something else.

Siehe diese Frage .

Übrigens bezieht sich die Antwort, die Sie über Google gefunden haben, anscheinend auf den ~/.bashrc eines Nutzers und nicht auf den systemweiten /etc/bash.bashrc. Das kann zu Verwirrung führen.

35
roadmr

Die /etc/environment -Datei legt das variable System für jeden Benutzer beim Booten fest. Befehle im /etc/bash.bashrc werden ausgeführt, wenn die bash Shell von einem Benutzer geöffnet wird. Die Variablen würden also nur gesetzt, wenn eine bash Shell mindestens einmal geöffnet wird.

18
André Stannek

Und wenn Sie nach "systemweit" fragen:

Konfigurationsdateien im Verzeichnis /etc gelten für alle Benutzer im System. Für /etc/bash.bashrc würde dies für alle und alles bedeuten, die die "Borne Again Shell" (auch bekannt als Bash) auf dieser Maschine verwenden. Auch wenn Sie der einzige Mensch sind, der es verwendet, kann es sein, dass "technische Benutzer" betroffen sind (schauen Sie einfach in den /etc/passwd und überprüfen Sie, wie oft der Begriff "/ bin/bash" dort angegeben ist - oder verwenden Sie ihn grep bash /etc/passwd | wc -l, das Ihnen diese Nummer direkt geben sollte (was bedeutet: "greifen" Sie alle Zeilen ab, die den String "bash" aus der Datei "/ etc/passwd" enthalten, und senden Sie die Ergebnisse ("|") an den Befehl " wc "(Word count), um die Zeilen zu zählen (" -l ").

Daher ist es für Ihren Benutzer viel sicherer, stattdessen ~/.bashrc zu ändern (dh die Datei ".bashrc" - mit einem führenden Punkt, ja - in Ihrem Home-Verzeichnis, z. B. /home/ankur/.bashrc) wirkt sich dann nur noch auf Ihren Benutzer aus und lässt alles andere in Ruhe. Dateien in /etc sollten nur geändert werden, wenn systemweite Änderungen tatsächlich beabsichtigt sind.

Außerdem: Beide Konfigurationen werden verwendet, wenn sie existieren. Zuerst wird die systemweite Datei (hier: /etc/bash.bashrc) gelesen und "bezogen" (die Einstellungen werden auf die aktuelle Sitzung angewendet), und dann werden die Benutzer /home/username/.bashrc gleich behandelt und können diese hinzufügen Einstellungen aus der globalen /etc/bash.bashrc -Datei ändern oder sogar überschreiben.

6
Izzy

Abgesehen von der systemweiten und benutzerweiten Diskussion ist der wichtigste Unterschied, dass /etc/environment kein anderes Skript als ~/.bashrc ist .

Sie können keine Variablen in /etc/environment dereferenzieren, deren Variablenzuordnung den Zeilenwert wörtlich nimmt (wie bereits von roadmr erwähnt).

Dein Ubuntu wird dich aussperren, wenn du den $PATH in /etc/environment vermasselst, indem du versuchst, einen neuen Pfad anzufügen

PATH=$PATH:/new_path

Wenn Ihre Ubuntu Gnome- oder Unity-Anmeldeseite Sie nicht ohne Beschwerde über ein falsches Passwort einlässt. Und Sie haben vor kurzem /etc/environment geändert, es ist höchstwahrscheinlich der Fall.

Eine Lösung besteht darin, die virtuelle Konsole anzumelden CTRL+ALT+F1 Anmeldekonsole, überprüfen Sie $PATH manuell und korrigieren Sie die /etc/environment Datei.

Gemäß wird dieses , /etc/environment vom PAM-Stapel geladen, der die Umgebungsvariable Zeile für Zeile auffüllt.

3
legendbb