Heim > Artikel > Betrieb und Instandhaltung > So lösen Sie das Problem, dass die Linux-Benutzerquelle .bashrc oder .profile die Datei nicht finden kann
Diese Situation ist mir schon einmal in Debian, New For, begegnet Bei hinzugefügten Benutzern zeigt der Pfad für jede Anmeldung sh-42$ an, was erfordert, dass su - Benutzername zum Normalzustand zurückkehrt, und die .bashrc- und andere Konfigurationsdateien im Benutzerverzeichnis können nicht bezogen werden, was eine Reihe von Problemen verursacht.
Wenn dies der Fall ist, ist es sehr wahrscheinlich, dass die Standard-Start-Shell von Linux falsch ist und vi /etc/passwd die entsprechende Start-Shell des Benutzers überprüft und vergleicht mit anderen normalen Benutzern. Wenn sie unterschiedlich sind, ändern Sie sie so, dass sie gleich sind. .
Wenn beispielsweise die Shell anderer normaler Benutzer /bin/bash ist und die Shell abnormaler Benutzer /bin/sh ist, ändern Sie sie in /bin/bash.
Die Bash-Shell verwendet einige Startdateien, um Umgebungsvariablen festzulegen, diese Startup Dateien bestimmen bestimmte Bash-Shell-Konfigurationen für die Shell selbst und für Systembenutzer. In diesem Artikel werden wir den Unterschied zwischen .bashrc, .bash-profile und .profile verstehen.
Bash bietet zwei Modusoptionen in der interaktiven Shell: Anmelden und Nicht-Anmelden (Anmelden und Nicht-Anmelden). -Login).
Wenn wir uns mit ssh am System anmelden, erhalten wir eine interaktive Login-Shell (interaktive Login-Shell), die beim Aufruf die Startdatei liest.
Wenn wir jedoch eine neue Shell auf einer bereits angemeldeten Shell aufrufen, erhalten wir eine interaktive Shell ohne Anmeldung. Diese Shell führt nur .bashrc-Dateien aus. Wenn ein Skript beispielsweise eine Subshell erzeugt, um einen Befehl auszuführen, ist die Subshell eine nicht interaktive Shell, die Subshell führt keine Startdateien aus, sondern erbt Umgebungsvariablen von der Shell, die sie erstellt hat.
Die Startdatei enthält die Befehle, die beim Start der Shell ausgeführt werden müssen. Daher führt die Shell automatisch die Befehle in diesen Startdateien aus, um die Shell einzurichten. Dieser Vorgang findet statt, bevor die Eingabeaufforderung angezeigt wird.
3.1 Bedeutung von .bash_profileDie .bash_profile-Datei enthält Befehle zum Festlegen von Umgebungsvariablen, sodass die Shell diese Variablen erbt. In einer interaktiven Login-Shell sucht Bash zunächst nach der Datei /etc/profile. Wenn es gefunden wird, wird es von Bash in der aktuellen Shell gelesen und ausgeführt. Das Ergebnis ist, dass /etc/profile die Umgebungskonfiguration für alle Benutzer festlegt. Falls vorhanden, führt Bash .bash_profile in der aktuellen Shell aus und Bash hört dann auf, nach anderen Dateien wie .bash_login und .profile zu suchen.
Wenn Bash .bash_profile nicht findet, sucht es der Reihe nach nach .bash_login und .profile und führt nur die erste lesbare Datei aus.
Sehen wir uns eine Beispieldatei .bash_profile an. Hier setzen wir die PATH-Variable zurück und exportieren sie
echo "Bash_profile execution starts.." PATH=$PATH:$HOME/bin; export PATH; echo "Bash_profile execution stops.."
Bevor wir uns interaktiv an der Eingabeaufforderung der Shell anmelden, sehen wir die folgende Ausgabe
Bash_profile execution starts.. Bash_profile execution stops.. [example@example ~]$3.2 von bashrc
.bashrc enthält Befehle, die speziell für die Bash-Shell gelten. Jede interaktive Shell ohne Anmeldung liest zuerst .bashrc, und im Allgemeinen ist .bashrc der beste Ort, um Aliase und Bash-bezogene Funktionen hinzuzufügen.
Die Bash-Shell sucht im Home-Verzeichnis nach der .bashrc-Datei und verwendet die Quelle, um sie in der aktuellen Shell auszuführen. Lassen Sie uns die .bashrc-Datei anhand eines Beispiels kennenlernen
echo "Bashrc execution starts.." alias elui='top -c -u $USER' alias ll='ls -lrt' echo "Bashrc execution stops.."
Vor der Eingabeaufforderung der interaktiven Nicht-Anmelde-Shell sehen wir die folgende Ausgabe
[example@example ~]$ bash Bashrc execution starts.. Bashrc execution stops.. [example@example ~]$3.2 Die Bedeutung von .profile
Wenn .bash_profile während des interaktiven Shell-Anmeldevorgangs nicht im Home-Verzeichnis vorhanden ist, sucht Bash nach .bash_login . Wenn **.bash_login** gefunden wird und Bash es ausführt. Wenn .bash_login nicht im Home-Verzeichnis vorhanden ist, sucht Bash nach .profile und führt es aus.
.profile kann die Konfiguration mit .bash_profile oder .bash_login beibehalten. Es steuert, welche Eingabeaufforderungen angezeigt werden, Tastaturtöne, welche Shell geöffnet werden soll und individuelle Profileinstellungen, die in der Datei /etc/profile festgelegte Variablen überschreiben. 4 Unterschied
Bei jeder interaktiven Anmeldung führt die Bash-Shell .bash_profile aus. Wenn .bash_profile nicht im Home-Verzeichnis gefunden wird, führt Bash die erste lesbare Datei aus, die aus .bash_login und .profile gefunden wird. Bei jedem interaktiven Shell-Start ohne Anmeldung erstellt Bash jedoch .bashrc.
Normalerweise werden Umgebungsvariablen in .bash_profile eingefügt. Da die interaktive Login-Shell die erste Shell ist, werden alle für die Umgebungseinrichtung erforderlichen Standardeinstellungen in **.bash_profile** abgelegt. Daher werden sie nur einmal festgelegt und in allen Subshells vererbt.
Allerdings, um Vermeiden Sie Anmeldung und Nicht-Anmeldung. Unterschiede in den interaktiven Shell-Einstellungen für die Anmeldung. .bash_profile ruft .bashrc auf. Daher wird das folgende Code-Snippet in **.bash_profile** eingefügt, sodass bei jeder interaktiven Login-Shell auch .bashrc in derselben Shell ausgeführt wird:
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi PATH=$PATH:$HOME/bin export PATH
注意:
总而言之,在使用环境之前,shell需要其启动文件以配置shell环境。
在本文中,我们检查了各种shell模式。然后,我们了解了各种bash启动文件的重要性。最后,我们检查了这些启动文件之间的差异。
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass die Linux-Benutzerquelle .bashrc oder .profile die Datei nicht finden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!