Was ist der Unterschied zwischen ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc…?

68

Antworten auf die Fragen zu SO und askubuntu sowie das Durchsuchen (und Lesen der Überschriften von) $HOMEund /etc/geben eine Reihe von Dateien an, die zum Festlegen von Umgebungsvariablen verwendet werden können, darunter:

  • ~/.profile
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.gnomerc
  • ~/.Rprofile
  • /etc/bash_bashrc
  • /etc/profile
  • /etc/screenrc

Ich sammle diese Dateien in /etc/Arbeit für alle Benutzer, während Dateien in $HOMEbenutzerspezifisch sind. Ich erfahre auch, dass .profilebei der Anmeldung .bashrcgeladen /bin/bashwird, während geladen, wenn ausgeführt wird. Ich verstehe auch, dass verschiedene Programme unterschiedliche Einstellungsdateien haben (zB .Rprofilefür R). Aber ich würde mich über eine Klarstellung freuen:

  • Sind *rcund *profileDateien grundlegend anders?
  • Welchen Umfang haben solche Dateien (z. B. welche Dateien werden üblicherweise unter Linux verwendet)?
  • Gibt es eine Hierarchie (zB .bashrcüberschreibt die eingestellten Variablen .settings)
  • Was ist eine gute Referenz für diese Dateiklasse? Für die Optionen in diesen Dateien?

Verknüpfte Fragen

Abe
quelle
3
Siehe den INVOCATIONAbschnitt in man bash. Siehe den FHSWiki-Artikel über Linux-Dateisysteme. Das gibt Ihnen einen guten Start und beantwortet ein paar dieser Fragen. Dateien mit einem vorangestellten Punkt ( .) sind normalerweise benutzerspezifisch - sie befinden sich im Benutzerverzeichnis $HOME.
3
Alle von ihnen? "Ja wirklich?"
Ignacio Vazquez-Abrams,
@ IgnacioVazquez-Abrams Ich suche nicht die Details, nur eine allgemeine Beschreibung, wie sie sich verhalten und wann einer über den anderen verwendet werden sollte.
Abe

Antworten:

48

Die Organisation der Konfigurationsdateien ist viel weniger einheitlich, als Ihre Fragen zu implizieren scheinen. Es gibt keine "Klasse", es gibt keine "Hierarchie" und es gibt keinen globalen "Konfigurationszar" oder ein Komitee, das eine gemeinsame Syntax oder andere nette, saubere Verallgemeinerungen, wie die, die Sie suchen, festlegt. Es gibt nur eine Vielzahl von separaten Anwendungen wie R, bash, screenund die GNOME - Desktop - Umgebung, die alle ihre eigenen Wege haben , Dinge zu tun, so dass Sie in der Dokumentation aussehen sollte für jedes einzelne Programm alle beantworten spezifische Fragen zu einer bestimmten Datei. Wenn es ad-hoc zu sein scheint, liegt das daran, dass die meisten Unix / Linux-Programme für verschiedene Zwecke von verschiedenen Leuten entwickelt wurden, die alle etwas anders konfiguriert haben.

So beantworten Sie Ihre anderen Fragen gezielt:

  • *rcund *profilebedeuten nicht sehr viel, so dass diese Frage nicht wirklich beantwortet werden kann. "rc" ist lediglich eine häufig verwendete Abkürzung oder ein Suffix für Konfigurationsdateien. Seine Etymologie reicht bis in die Antike (in Computerjahren) zurück und bedeutet wahrscheinlich Ausführen von Befehlen (von runcom ). Nur weil Anwendungen dasselbe Wort verwenden, heißt das nicht, dass sie sich auf Konventionen einigen. "profile" ist ein viel selteneres Suffix.

  • Definieren Sie "Umfang". Die meisten Anwendungen teilen keine Konfigurationsdateien mit anderen nicht verwandten Anwendungen. Die eine mögliche Ausnahme ist /etc/profileund .profile, die von mehreren verschiedenen Shells verwendet werden kann (einschließlich mindestens shund bash). Jedem laufenden Prozess ist eine sogenannte Umgebung zugeordnet, die Variablen enthalten kann, die sich auf das Verhalten des Prozesses auswirken können. Im Allgemeinen werden Umgebungsvariablen von den entsprechenden Shell-Konfigurationsdateien oder möglicherweise von den Konfigurationsdateien der verwendeten grafischen Desktop-Umgebung festgelegt. Es gibt auch Konfigurationsdateien für "Bibliotheken", wie .inputrczum Beispiel für readline und .gtkrc*für GTK, die sich auf jede Anwendung auswirken, die die Bibliothek verwendet.

  • Nein, es gibt keine globale Hierarchie für Konfigurationsdateien. Weitere Informationen finden Sie in der Dokumentation des jeweiligen Programms, z. B. im bashHandbuch für bash. Eine allgemeine Konvention, auf die Sie sich normalerweise verlassen können, ist, dass Benutzereinstellungen $HOMEdie systemweite Konfiguration in überschreiben /etc. Dies wird normalerweise erreicht, indem die Benutzerdatei nach der Systemdatei gelesen wird, sodass spätere Einstellungen frühere überschreiben. Dies ist jedoch keine Garantie, und endgültige Antworten finden Sie in der Dokumentation des jeweiligen Programms, das Sie verwenden.

  • Es gibt keine "Klasse", zumindest keine, die allgemein genug ist, um alle Dateien zu erfassen, die Sie in Ihrer Frage aufgelistet haben. Daher ist die Frage nach einem Verweis für eine solche "Klasse" umstritten. Weitere Informationen finden Sie in der Dokumentation des von Ihnen verwendeten Programms.

jw013
quelle
5

Ich denke, diese Frage ist auf so vielen Ebenen zu weit gefasst. Sie stellen beispielsweise Fragen zu mindestens vier verschiedenen Programmen in einer Frage. Ich werde nur den Unterschied zwischen den Konfigurationsdateien in /etcund betrachten $HOME.

Unix ist ein Multi-User - Betriebssystem bedeutet dies viele verschiedene Personen ein System verwenden können, entweder durch die Verwendung ssh, telnetoder Xorg. Um eine standardisierte Konfiguration für Ihre Benutzer bereitzustellen, können Sie eine systemweite Konfiguration in bereitstellen. /etc/Diese wird normalerweise auch von Ihrer Distribution verwendet, um eine globale Konfiguration für z . B. bashoder bereitzustellen screen.

Auf der anderen Seite möchten einige Benutzer die Einstellungen für ihre Programme wie Tastenkombinationen, Farben oder Aussehen selbst anpassen. Dies geschieht über die Konfigurationsdatei in deren $HOME. Kurz gesagt: /etc/Bietet eine systemweite Konfiguration, während die Konfigurationsdateien in $ HOME Benutzern das Ändern / Überschreiben der systemweiten Konfiguration ermöglichen.

Ulrich Dangel
quelle
3

Ein Teil der Antwort stammt aus diesem Beitrag :

.bashrc ist ein Shell-Skript, das Bash immer dann ausführt, wenn es interaktiv gestartet wird.

Contrast .bash_profileund .profiledie nur zu Beginn einer neuen Login-Shell ausgeführt werden. (bash -l)

Sie wählen, ob ein Befehl in .bashrcvs eingeht, .bash_profileje nachdem, ob er einmal oder bei jedem Start der interaktiven Shell ausgeführt werden soll.

Stan
quelle