Auf einem Server, wenn ich mich als root anmelde, sehe ich .bashrc
(Ubuntu 10.10).
Auf meinem Mac habe ich eine .bash_profile
Hat Ubuntu immer nur eine .bashrc
Datei und nicht .bash_profile
? (Ich bin nur verwirrt, also frage ich, ich merke, dass sie verschiedene O / s sind, aber vielleicht gibt es irgendwie eine Beziehung?)
Soll ich auf meinem Server einen Alias erstellen .bashrc
?
Was ist, wenn ich möchte, dass dieser Alias angewendet wird, damit alle Benutzer ihn verwenden können?
Antworten:
Bash-Aliase sollten in den
.bash_aliases
oder.bashrc
-Dateien in den einzelnen Basisverzeichnissen abgelegt werden. Wenn Sie globale Bash-Aliase erstellen müssen, können diese eingehen./etc/bash.bashrc
Oft ist es jedoch am besten, sie einfach zu den.bash_aliases
oder.bashrc
-Dateien hinzuzufügen,/etc/skel
damit sie von neu erstellten Benutzern geerbt werden.Es ist fast immer falsch ein Alias in in zu definieren
.profile
,.bash_profile
oder/etc/profile
.Um zu verstehen, warum, muss man verstehen, unter welchen Umständen Befehle aus jeder dieser Dateien ausgeführt werden. Es gibt Missverständnisse darüber, die ich unten anspreche.
Auch wenn Sie Aliase für mehrere Benutzer definieren möchten, sollten Sie mit deren Definition für einzelne Benutzer vertraut sein, damit Sie entscheiden können, welche Methode am besten für Sie geeignet ist.
Aliase für einzelne Benutzer
Insbesondere wenn Sie eine grafische Benutzeroberfläche verwenden , handelt es sich bei den meisten interaktiven Shells wahrscheinlich um nicht angemeldete Shells. Auch wenn Sie nie eine GUI verwenden, verwenden Sie wahrscheinlich immer noch nicht angemeldete Shells mit einer gewissen Häufigkeit. Sie möchten, dass Ihre Aliase in diesen Shells funktionieren.
Insbesondere wenn Sie sich jemals nicht grafisch in einer virtuellen Konsole oder über SSH anmelden, verwenden Sie wahrscheinlich manchmal Anmelde-Shells. Sie möchten also, dass Ihre Aliase auch in interaktiven Login-Shells funktionieren.
Wenn eine interaktive Shell ohne Anmeldung gestartet wird , wird sie im Basisverzeichnis
.bashrc
des Benutzers gespeichert. Standardmäßig bezieht jeder Benutzer in Ubuntu.bashrc
selbst Quellen.bash_aliases
, falls vorhanden.Das Lesen der Kommentare in Ubuntus Standard
.bashrc
zeigt, dass es offiziell beabsichtigt ist, dass Aliase in.bashrc
oder gehen.bash_aliases
..bashrc
Enthält bereits einige Alias-Definitionen (führen Sie sie ausgrep '^[[:blank:]]*alias' ~/.bashrc
, um sie anzuzeigen) und gibt explizite Hinweise dazu, wo solche Definitionen eingefügt werden sollen:Aber was ist mit interaktiven Login- Shells? Anstelle von "
.bashrc
login shells source".profile
..bash_login
vorhanden, wird es stattdessen beschafft..bash_profile
vorhanden, wird es stattdessen beschafft.Allerdings ist die gute Nachricht , dass in Ubuntu standardmäßig Befehle in
.bashrc
werden auch in der interaktiven Login - Shells laufen , weil der Standard.profile
Standardprüft , ob der aktuell Shell bash (und wenn ist.bashrc
vorhanden), und wenn ja, Quellen.bashrc
:Ich schlage vor, dass Benutzer
.bash_aliases
in ihren Home-Verzeichnissen neue Bash-Aliase definieren (die erstellt werden, wenn sie noch nicht vorhanden sind). Dies ist eine besonders saubere und einfache Methode, um Aliasdefinitionen auf Benutzerebene permanent zu machen.Aliase sollten nicht definiert werden,
.profile
da sie in nicht angemeldeten Shells undefiniert bleiben würden. Im Gegensatz zu einem Großteil der Umgebung einer Bash-Shell sind Aliase dies nicht in untergeordnete Shells exportiert:Insbesondere verursachen standardmäßig die meisten Desktop-Umgebungen
.profile
bei der grafischen Anmeldung bereitgestellt, aber:Aliase sollten nicht aus
.bash_profile
.bash_login
demselben Grund, sondern auch aus einem anderen Grund in (oder ) definiert werden . Naives Erstellen einer dieser Dateien und Putten nur Alias - Definitionen in es in einem der Code verhindert die.profile
Ausführung von!In Situationen, in denen
.bash_profile
oder.bash_login
wirklich nützlich ist, gibt es normalerweise.profile
irgendwo eine Quelle , die dieses Problem löst. (Dann ist das einzige verbleibende Problem, wie bei.profile
Definieren von Aliasen wie bei.bash_profile
oder.bash_login
nicht richtig funktioniert.)Aliase für neue Benutzer, automatisch
Wenn ein Benutzerkonto des Typs erstellt wird, der einen echten Menschen darstellen soll, wird in der Regel ein neues Verzeichnis erstellt, das als Basisverzeichnis dient. Der Inhalt von
/etc/skel
wird dann in das Ausgangsverzeichnis kopiert. Auf diese Weise beginnen mehrere Benutzer mit ähnlichen Konfigurationsdateien in ihren Basisverzeichnissen. In Ubuntu schließt dies ein.profile
,.bashrc
und einige andere Dateien.Um zu ändern, welche Aliase für neue Benutzer definiert sind, können Sie diese einfach eingeben
/etc/skel/.bash_aliases
(Sie müssen sie erstellen) oder/etc/skel/.bashrc
.Wenn Sie eine bereits vorhandene Datei in bearbeiten
/etc/skel
möchten Sie diese möglicherweise zuerst sichern. Sie sollten die Sicherungskopie jedoch nicht ablegen/etc/skel
, da sie sonst ebenfalls in die Home-Verzeichnisse der neuen Benutzer kopiert wird.Dies ist wahrscheinlich die beste Möglichkeit, um neue Aliase für mehrere Benutzer hinzuzufügen. Bestehende Benutzer können die Aliase einfach selbst hinzufügen. Wenn Sie die Aliase in definieren
/etc/skel/.bash_aliases
, können Sie sie einfach an diese Datei weiterleiten, die sie möglicherweise in ihre Ausgangsverzeichnisse kopieren (oder in ihre eigene benutzerdefinierte.bash_aliases
Datei einfügen).Es ist für einen Benutzer trivial, einen Alias zu definieren. Darüber hinaus sind Aliase nicht extrem robust . Sie funktionieren nur unter bestimmten Umständen. Wenn Sie einen neuen Befehl erstellen müssen, der die ganze Zeit funktioniert , für alle , sollten Sie nicht den Befehl als Alias implementieren. Und Sie können Benutzern, die sie nicht möchten, keine Aliase aufzwingen - sie können sie einfach
unalias
.Globale Aliase für alle Benutzer
Obwohl ich Ihnen raten , diesen Ansatz zu vermeiden, Sie können Aliase in der die definieren globale
/etc/bash.bashrc
Datei. Sie werden dann sowohl für interaktive Shells ohne Anmeldung als auch für interaktive Anmeldeshells definiert. Der Grund ist, vor Dateien im Home-Verzeichnis des Benutzers bezogen werden:/etc/profile
automatisch aus./etc/bash.bashrc
automatisch, aber/etc/profile
prüft, ob es sich bei der laufenden Shell um Bash handelt (und falls/etc/bash.bashrc
vorhanden) und wenn ja, um Sources/etc/bash.bashrc
.Dies ist analog dazu, wie die Standardeinstellung pro Benutzer
.profile
den pro Benutzer ausgibt,.bashrc
wenn die Shell bash ist (wie oben beschrieben).So sieht der eigentliche Code dafür im Standard aus
/etc/profile
:Dieser Block führt auch andere Aufgaben aus. Insbesondere
if
prüft der Outer , ob die Shell wahrscheinlich interaktiv ist (indem er prüft, ob der Aufforderungstext nicht leer ist), und prüft dann, ob die aktuelle Shell eine Bash ist und gibt Quellen an/etc/bash.bashrc
, wenn dies nicht der Fall ist ist schon fertig in/etc/bash.bashrc
.Sie sollten nicht globale Aliase in definieren
/etc/profile
für die gleichen Grund sollten Benutzer sie nicht in ihrem lokalen definieren.profile
s: wenn Sie das tun, werden sie nur für Login - Shells, und nicht für ihr Kind Schalen definiert werden.Schließlich ist zu beachten , dass im Gegensatz zu der Standard - pro-Benutzer
.bashrc
, der Standard/etc/bash.bashrc
hat Datei nichts über Aliase enthalten. Es ist etwas ungewöhnlich, Benutzern Aliase in einer Datei zu geben, in der sie sie nicht bearbeiten oder deaktivieren können. (Natürlich, sie noch kann das tun, durch zwingende ihre Definitionen in ihrem eigenen lokalen.bashrc
,.bash_aliases
oder anderswo.)Weitere Lektüre
. .bash_profile
jedes Mal einen neuen Alias erstellen?quelle
Hier ist eine nette Lektüre darüber. ".bash_profile wird für Login-Shells ausgeführt, während .bashrc für interaktive Shells ohne Login ausgeführt wird"
Verwenden Sie für Ihren Alias .bash_profile
quelle
.bash_profile
ist nicht korrekt. In Ubuntu.profile
(das für Login-Shells ausgeführt wird) wird.bashrc
als Quelle eine interaktive Bash-Shell verwendet. Das Einfügen von Aliasen in.bashrc
(oder das Eingeben von.bash_aliases
Quellen.bashrc
) definiert sie in allen interaktiven Bash-Shells. Aliase in.bash_profile
ergeben unter anderem dieses Problem . Siehe dies , das , meine Antwort und die~/.bashrc
Kommentare der Standardeinstellung , die empfehlen, Aliase dort oder dort abzulegen.bash_aliases
.