Heim >Technologie-Peripheriegeräte >IT Industrie >Verständnis *Nix -Login -Skripte
Haben Sie jemals ein Szenario ausgesetzt, in dem Sie eine Umgebungsvariable festlegen oder ein Programm ausführen mussten, um Ihre Shell- oder Desktop -Umgebung zu ändern, wusste aber nicht, ob es am besten ist, um es zu nennen?
Dies ist eine häufige Situation. Viele Aufgaben erfordern Umgebungsvariablen, um korrekt zu funktionieren, von der Ausführung von Debian -Verpackungsversorgungsunternehmen bis zum Verwalten von IaaS und allem dazwischen.
Manchmal muss ein Programm normalerweise nur einmal ausgeführt werden, wenn Sie sich zum ersten Mal anmelden, z. B. den Befehl xrandr. Außerdem erwarten Programme gelegentlich, in die Hülle wie RBENV, RVM oder SITEPOINTs eigener Umweltversorger zugefügt.
.Diese Einstellungen sollten nicht einfach von irgendwohin geladen werden. Manchmal gibt es eine Reihe von Faktoren, die berücksichtigt werden sollten, bevor ein Urteil über den besten Ort fällt.
Schauen wir uns einige gängige Optionen an, die auf einer Debian GNU/Linux Jessie -Installation vorhanden sind, und versuchen Sie, alles zu verstehen.
standardmäßig bietet Debian /etc /Profil, mit dem sofort $ Path festgelegt wird (verwendet, um Befehlssuchpfade zu deklarieren).
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>
Für die Bequemlichkeit erhält der Root -Benutzer (Benutzer -ID 0) für alle anderen verschiedene Pfade. Dies liegt daran, dass Systeme Binary (SBIN) -Spositionen idealerweise für die Systemverwaltung oder Programme reserviert sind, die als Root ausgeführt werden müssen. Die Spiele der Spiele werden für Root weggelassen, da Sie niemals Programme als Root -Benutzer ausführen sollten, sofern dies nicht unbedingt erforderlich ist.
Als nächstes wird das Setup von $ PS1 verarbeitet, mit dem die primäre Eingabeaufforderungszeichenfolge festgelegt wird. Die definierten Standardwerte sind '$' (oder '#' für Root), es sei denn, die Shell ist verprügelt. Wenn die Shell bash ist, wird /etc/bash.bashrc stattdessen bezogen, um sie (unter anderem) zu handhaben. Wir sprechen kurz über /etc/bash.bashrc.
Zu diesem Zeitpunkt können wir abschließen, dass /usw. /Profil während des Anmeldes von allen Shells gelesen wird (d. H. Durch den Anmeldungsbefehl). Anstatt die effizientere Bash-integrierte Variable $ {uid} zu verwenden, um die Benutzer-ID zu bestimmen, ruft er stattdessen den Befehl ID dafür auf. Anstatt eine schicke Shell-Eingabeaufforderung zu definieren, wurde eine bash-spezifische Konfiguration bezogen, da Bash Backslash-es geschützt ist, Sonderzeichen wie U (Benutzername) und H (Hostname) zu ergeben, die viele andere Shells nicht tun würden. /etc/Profil sollte versuchen, posix konform zu sein, um mit jeder Shell kompatibel zu sein, die der Benutzer für sich selbst installiert.
debian gnu/linux wird häufig mit Dash vorinstalliert, einer grundlegenden Hülle, die nur die Umsetzung von POSIX (und einigen Berkeley) Erweiterungen implementieren soll. Wenn wir /usw. /Profil (erstellen Sie zuerst eine Sicherung vor!), Damit die PS1 = '$' -Zeile einen anderen Wert festlegen und eine Dash -Anmeldung (über den Befehl Dash -L) simulieren, können Sie sehen, dass Dash die von uns definierte Eingabeaufforderung verwendet . Wenn wir jedoch den Befehl Das DASH ohne das -l -Argument aufrufen, wird /etc /Profil nicht gelesen, und das Dash fällt auf einen Standardwert zurück (was übrigens der ursprüngliche PS1 -Wert war, bevor wir ihn geändert haben).
Das letzte Interessante, das über /etc /Profil bezeichnet wird, ist das folgende Snippet am Ende:
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>
Mit anderen Worten, alles lesbare, was dem /etc/profile.d/*.sh Glob entspricht. Dies ist wichtig, da darauf hingewiesen wird, dass Bearbeitung /etc /Profil direkt nie erforderlich ist (also stellen Sie das frühere Sicherungswechsel wieder her!). Alle oben definierten Variablen können in einer separaten Datei überschrieben werden. Ein Vorteil davon besteht darin, dass System -Upgrades automatisch Änderungen an /etc /profil hinzufügen können, da das APT -Paketverwaltungssystem von Debian in der Regel nicht geänderte Konfigurationsdateien berührt.
Ein potenzielles Problem mit /etc /Profil ist, dass es sich in einem systemweiten Weg befindet. Das bedeutet, dass sich Änderungen dort alle Benutzer auf das System auswirken. Auf einem Personalcomputer scheint dies kein großes Problem zu sein, aber Änderungen daran erfordern Root -Privilegien. Aus diesen Gründen kann jedes einzelne Bash -Benutzerkonto eines der Dateien ~/.bash_profile, ~/.bash_login oder ~/.profile zu beschaffen - und die erste gefundene Datei (durchsucht in der aufgelisteten Reihenfolge) erfolgen, wird verwendet, während jeder verwendet wird Die verbleibenden Dateien werden ignoriert. Andere Muscheln - wie Dash - unterstützen etwas Ähnliches, aber nur ~/.profile. Auf diese Weise kann der Benutzer eine .bash_profile für bash -spezifische Situationen erstellen und wenn sie manchmal zu Dash oder eine andere Shell als Anmeldeschale (z. dieser Anwendungsfall.
Man muss die Bedeutung dieses Rahmens behalten. Das Standard -Debian -Skeleton -Verzeichnis (/etc/skel, das zur Unterbringung von Dateien und Verzeichnissen in neue Benutzerkonten Home -Verzeichnisse verwendet wird) enthält eine .profile -Datei, jedoch nicht eine .bash_profile oder .bash_login -Datei. Außerdem verwendet Debian Bash als Standardbenutzerschale. Daher sind viele Benutzer daran gewöhnt, ihre Einstellungen für die Bash -Login -Shell in .Profile einzulegen.
Ich habe Installationsanweisungen für Projekte wie RVM gesehen, wie RVM den Benutzer anweist, eine .bash_profile -Datei zu erstellen, aber dies ist gefährlich, da sie die Shell -Umgebung des Benutzers brechen kann! Auch wenn der Benutzer .Profile nicht geändert hat, nutzt sie möglicherweise die Standard -~/.profile -Funktionalität, die ~/bin zur $ path -Umgebungsvariable hinzufügt. Dies wird nicht mehr funktionieren. Eine Option, die die Sicherheit verbessern kann, besteht darin, .bash_profile als Symlink zu .bashrc in /etc /skel vor dem Erstellen von Benutzerkonten hinzuzufügen.
Wenn wir uns Debian Jessies Standard -Profil -Skript ansehen, sehen wir das folgende Snippet:
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>
Dies ähnelt dem, was wir in /etc /profil gesehen haben, wobei /etc/bash.bashrc bezogen wird, wenn gefunden und die Hülle verprügelt wird. Die Bedeutung davon wird im nächsten Abschnitt erörtert.
Wenn Bash begonnen hat, wird Bash in dieser Reihenfolge sowohl /etc/bash.bashrc und ~/.bashrc gelesen, aber nur, wenn sie als interaktive Shell gestartet wird, die keine Anmeldebereich ist (was normalerweise bedeutet ). Dies ist ein Standardverhalten für die Bash -Shell. Debian bezieht diese Dateien jedoch aus den Anmeldeskripten/ETC/Profil und ~/.profile. Dies verändert das Verhalten effektiv so, dass /etc/bash.bashrc und .bashrc (falls vorhanden) beide immer aufgerufen werden, wenn eine Bash -Shell gestartet wird, unabhängig davon, ob sie eine Anmeldeschale sind oder nicht. Zählen Sie nicht darauf, dass dieses Verhalten in verschiedenen Verteilungen gleich ist.
.bashrc ist ein großartiger Ort, um Kommando -Aliase hinzuzufügen. Tatsächlich haben einige Leute so viele Aliase, dass sie es vorziehen, sie in einer separaten Datei zu halten. Debians Standard .BasHRC sucht nach ~/.bash_aliases und bewertet es, wenn die Datei vorhanden ist. Daher können Sie alle Ihre Bash -Aliase stattdessen aufbewahren. .Bashrc ist auch der beste Ort für den Benutzer, um Shell -Variablen wie $ PS1 oder $ histsize (die Menge an Befehlsverlauf) zu überschreiben, wenn sie möchte. Debians Standard. Bashrc ist 100 Zeilen lang, ist aber recht einfach und wird gut kommentiert. Wie der Name schon sagt, wird nicht erwartet
~/.xsession und ~/.xsessionRCWenn eine X -Fenster -Systemsitzung gestartet wird (unabhängig von der Verwendung eines Display -Managers oder Startx aus einem virtuellen Terminal), wird das Skript/etc/x11/xsession Shell ausgeführt. Dies ist im Grunde das Äquivalent zu /etc /Profil, das von Anmeldeschalen verwendet wird, nur für x und nicht für die Grafschaft, sondern direkt ausgeführt. Es ist auch wesentlich komplexer. Ähnlich wie/etc/Profil liest in Skripten von /etc/profile.d,/etc/x11/xsessionsquellen Skripte unter /etc/x11/xsession.d. Alle Skripte in diesem Verzeichnis beginnen mit einer Nummer, sodass Skripte in der nummerierten Reihenfolge geladen werden.
Debian Jessie enthält dort eine Datei mit dem Namen 40x11-common_xsessionRC. Alles, was es tut, ist zu prüfen, ob ~/.xsessionRC lesbar ist und (wenn ja) es. Dies macht ~/.xsessionRC zum perfekten Ort zum Laden von Umgebungsvariablen oder zum Start von einmaligen Versorgungsunternehmen (wie Xrandr oder Xmodmap), die nur für X-Sitzungen gelten. Sie können dies auch verwenden, um/etc/profile und ~/.profile zu beenden, wenn Sie möchten, daher werden alle dort angegebenen Umgebungsvariablen auch von Ihrem Sitzungsmanager geerbt (wenn sie noch nicht waren). Beachten Sie, dass .xsessionRC standardmäßig nicht existiert, daher müssen Sie es erstellen.
Wenn wir die Dateien in/etc/x11/xsession weiter stöbern, finden wir 50x11-common_determin-Startups, der den Sitzungsmanager feststellt laden. Wenn die Datei ~/.xsession existiert und ausführbar ist, wird sie später im Rahmen von 99x11-common_start gespeichert und ausgeführt. Da ~/.xsession für das Ausführen des Sitzungsmanagers gedacht ist, meldet sich die X -Sitzung an und Sie werden zu Ihrem Display -Manager -Login -Bildschirm zurückgegeben, wenn dieses Skript endet.
wie ~/.xsessionrc, ~/.xsession existiert standardmäßig nicht, sodass Sie einen erstellen müssen, wenn Sie es wollen. Sie können ein einfaches .xsessionskript erstellen, das wie folgt aussieht:
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>
wobei X-Session-Manager standardmäßig über den Befehl Update-Alternativen konfiguriert wird. Auf diese Weise können Sie den Sitzungsmanager einfach von der systemweiten Standardeinstellung weg ändern, indem Sie den X-Session-Manager durch sagen,/usr/bin/startxfce4 (um zu XFCE zu wechseln) und andere Benutzerkonten vollständig unberührt bleiben .
Natürlich bieten viele Display -Manager die Möglichkeit, gemeinsame Sitzungsmanager direkt aus dem Anmeldebildschirm auszuwählen, sodass diese Datei häufig nicht erforderlich ist. Die .xsession bietet jedoch viel Flexibilität, und Sie könnten hier ein Programm nennen - nicht nur Sitzungsmanager. Sie können beispielsweise Chromium oder Eisweasel in einer Weile aufrufen, um stattdessen ein grundlegendes Kiosk-Mode-Setup zu implementieren.
Wir haben früher die Dateien abgedeckt, die gelesen werden, wenn ein Benutzer eine interaktive Bash -Anmeldeschale ausführt, aber was ist, wenn Sie ein Programm ausführen möchten, wenn Sie sich anmelden? Für diesen Anwendungsfall ist ~/.bash_logout Ihr Freund. Der in Debian enthaltene Standard wird nur verwendet, um den Bildschirm zu löschen (was meiner Meinung nach aus Sicherheitsgründen wichtig ist), aber mit ein wenig Vorstellungskraft kann für andere Zwecke verwendet werden - zum Beispiel, um einige Sekunden vor Ihnen eine Erinnerung anzuzeigen Gehen Sie von Ihrer Maschine weg.
Der Hauptbegrenzungsfaktor ist, dass .bash_logout nur beim Abmelden aus einer interaktiven Shell gelesen wird, und man kann nicht davon ausgehen
Andere OptionenBeispiele
Wenn ein Skript einen persönlichen Verzeichnisort finden und es Ihrem Pfad hinzufügt, müssen Sie berücksichtigen, ob sich das Verzeichnis stark bewegt. Wenn Sie den Code für .Profile hinzufügen, muss sich der Benutzer erneut anmelden, damit der Pfad eine Verzeichnisänderung während der Benutzersitzung widerspiegelt. Wenn Sie den Code stattdessen an .bashrc hinzugefügt haben, bedeutet dies, dass der Code jedes Mal ausgeführt wird, wenn der Benutzer ein Xterm öffnet - was wahrscheinlich nicht ideal ist, wenn er mehr als eine halbe Sekunde dauert, um auszuführen. Es geht also darum, die Kompromisse abzuwägen.
Was ist, wenn Sie eine Umgebungsvariable nur für Ihre persönlichen Anmeldesitzungen wünschen? Wenn es sich nur um X -Sitzungen handelt, können Sie es zu ~/.xsessionRC hinzufügen. Dies hat den Vorteil, dass es normalerweise allen Programmen zur Verfügung steht, die über X Session Manager gestartet wurden, da es vor dem Start des X Session Managers festgelegt wird und daher vererbt wird. Zum Beispiel können einige Grafiktreiber VSYNC deaktiviert lassen, indem er
ausgeführt wird
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>Das Platzieren in .xsessionRC sollte alle Programme beeinflussen.
Wenn diese Zeile zu .Bashrc hinzugefügt würde, wären nur Programme, die über das Xterm gestartet wurden, betroffen. Programme, die über einen Fenstermanager -Launcher gestartet wurden, würden wie gewohnt ausgeführt. Sie können es zu .Profile und Quelle. Profile von .xsessionRC hinzufügen, aber dann exportieren Sie die Umgebungsvariable, auch wenn Ihr X -Server nicht ausgeführt wird.
Hoffentlich haben Sie jetzt ein besseres Verständnis, wie sich Anmeldungs- und Abmeldungsskripte auf Debian GNU/Linux -Systemen funktionieren. Lassen Sie uns in den Kommentaren wissen, ob Sie für diese Login- und Abmeldungsskripte und wie Sie vorgegangen sind, in den Kommentaren wissen oder auf die besonders interessanten oder kreativen Verwendungen gestoßen sind.
In dieser Serie werde ich DOTFILE -Managementoptionen diskutieren.häufig gestellte Fragen (FAQs) zu NIX -Login -Skripten
Verwalten Sie Ihren Pfad mit einem NIX -Anmeldungsskript, beinhaltet das Hinzufügen von Verzeichnissen zur Pfadumgebungsvariable. Dies kann mit einer Linie wie Exportpfad = $ path:/path/to/dir erfolgen, die zum Pfad hinzufügt. Dadurch werden ausführbare Ausführungen in diesem Verzeichnis verfügbar, ohne den vollständigen Pfad anzugeben müssen. Sie können dem Pfad so viele Verzeichnisse hinzufügen, wie Sie möchten, und trennen Sie sie mit Kolons. Automatisieren Sie Aufgaben, die bei der Anmeldung ausgeführt werden müssen. Dies kann alles umfassen, von der Einstellung von Umgebungsvariablen und Startdiensten bis hin zur Installation von Paketen und dem Aktualisieren von Software. Durch die Automatisierung dieser Aufgaben können Sie Zeit sparen und sicherstellen, dass sie jedes Mal, wenn Sie sich anmelden, konsistent durchgeführt werden.
Das obige ist der detaillierte Inhalt vonVerständnis *Nix -Login -Skripte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!