Umgebungsvariablen existieren, um Ihre Shell-Umgebung auf Linux-Systemen zu verbessern und zu standardisieren. Es gibt Standard-Umgebungsvariablen, die das System für Sie einrichtet, aber Sie können auch Ihre eigenen Umgebungsvariablen einrichten oder optional die Standard-Umgebungsvariablen ändern, um sie an Ihre Bedürfnisse anzupassen.
[ Kostenloser Download:Spickzettel für fortgeschrittene Linux-Befehle. ]
Beginnend mit env
Befehl
Wenn Sie Ihre Umgebungsvariablen sehen möchten, verwenden Sie env
Befehl und suchen Sie ganz links in der Ausgabe nach den Wörtern in Großbuchstaben. Dies sind Ihre Umgebungsvariablen, und ihre Werte stehen rechts:
$ env
LS_COLORS=(long output)
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=rhel8t
XDG_SESSION_ID=5
USER=khess
SELINUX_ROLE_REQUESTED=
PWD=/home/khess
HOME=/home/khess
SSH_CLIENT=192.168.1.94 53911 22
SELINUX_LEVEL_REQUESTED= XDG_DATA_DIRS=/home/khess/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_TTY=/dev/pts/1
MAIL=/var/spool/mail/khess
TERM=xterm-256color
SHELL=/bin/bash SELINUX_USE_CURRENT_RANGE=
SHLVL=1
LOGNAME=khess
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000 PATH=/home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/bin
HISTSIZE=1000
LESSOPEN=||/usr/bin/lesspipe.sh %s _=/usr/bin/env
Ich habe die Ausgabe von LS_COLORS
weggelassen variabel, weil es so lang ist. Probieren Sie diesen Befehl auf Ihrem System aus, um zu sehen, wie die vollständige Ausgabe aussieht.
Viele Umgebungsvariablen werden gesetzt und dann aus /etc/profile
exportiert Datei und die /etc/bashrc
Datei. Es gibt eine Zeile in /etc/profile
das lautet:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
Um dauerhafte Änderungen an den Umgebungsvariablen für alle neuen Konten vorzunehmen, gehen Sie zu Ihrem /etc/skel
Dateien wie .bashrc
, und ändern Sie die bereits vorhandenen oder geben Sie die neuen ein. Wenn Sie neue Benutzer erstellen, werden diese /etc/skel
Dateien werden in das Home-Verzeichnis des neuen Benutzers kopiert.
Erkunden von Shell-Ebenen (SHLVL
)
Um den Wert einer einzelnen Umgebungsvariablen abzurufen, geben Sie den folgenden Befehl mit SHLVL
ein (Shell-Level) als Beispiel:
$ echo $SHLVL 1
Diese Variable ändert sich je nachdem, wie viele Subshells Sie geöffnet haben. Geben Sie beispielsweise bash
ein zweimal und geben Sie dann den Befehl erneut ein:
$ bash
$ bash echo $SHLVL 3
Ein Shell-Level von drei bedeutet, dass Sie zwei Subshells tief sind, geben Sie also exit
ein zweimal, um zu Ihrer normalen Shell zurückzukehren.
[Möchten Sie Red Hat Enterprise Linux ausprobieren? Jetzt kostenlos herunterladen.]
Manipulieren Ihres PATH
Variable
Der PATH
Variable enthält den Suchpfad zum Ausführen von Befehlen und Skripten. Um Ihren PATH
zu sehen , geben Sie ein:
$ echo $PATH /home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
Ändern Sie vorübergehend Ihren PATH
indem Sie den folgenden Befehl eingeben, um /opt/bin
hinzuzufügen :
$ PATH=$PATH:/opt/bin
$ echo $PATH /home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/bin
Die Änderung ist temporär für die aktuelle Sitzung. Es ist nicht dauerhaft, da es nicht in .bashrc
eingetragen wird Datei. Um die Änderung dauerhaft zu machen, geben Sie den Befehl PATH=$PATH:/opt/bin
ein in die .bashrc
Ihres Home-Verzeichnisses Datei.
Wenn Sie dies tun, erstellen Sie einen neuen PATH
Variable durch Anhängen eines Verzeichnisses an den aktuellen PATH
Variable, $PATH
. Ein Doppelpunkt (:
) trennt PATH
Einträge.
Entschlüsseln von $USER
, $PWD
und $LOGNAME
Ich hatte eine Theorie, von der ich glaube, dass sie von meinem eigenen guten Selbst widerlegt wurde. Meine Theorie war, dass die Befehle pwd
und whoami
wahrscheinlich nur den Inhalt der Shell-Variablen $PWD
gelesen und ausgegeben und $USER
oder $LOGNAME
, bzw. Zu meiner Überraschung tun sie das nicht, nachdem sie sich den Quellcode angesehen haben. Vielleicht sollte ich sie umschreiben, um genau das zu tun. Es gibt keinen Grund, mehrere Bibliotheken und fast 400 Zeilen C-Code hinzuzufügen, um das Arbeitsverzeichnis anzuzeigen. Sie können einfach $PWD
lesen und geben Sie das auf dem Bildschirm aus (stdout). Dasselbe gilt für whoami
entweder mit $USER
oder $LOGNAME
.
Wenn Sie sich den Quellcode selbst ansehen möchten, finden Sie ihn auf GitHub und an anderen Stellen. Wenn Sie feststellen, dass diese Programme (oder andere) Shell-Variablen verwenden, würde ich gerne davon erfahren. Zugegeben, ich bin nicht so gut darin, C-Quellcode zu lesen, also könnten sie sehr gut Shell-Variablen verwenden, und ich würde es nie erfahren. Sie schienen einfach nicht nach dem, was ich gelesen und verstanden habe.
Die $SHELL
spielen Spiel
In dieser letzten Übersicht über Umgebungsvariablen möchte ich Ihnen zeigen, wie die $SHELL
Variable ist praktisch. Sie müssen nicht in Ihrer Standard-Shell bleiben, was wahrscheinlich Bash ist. Sie können jede auf dem System installierte Shell aufrufen und darin arbeiten. Um herauszufinden, welche Shells auf Ihrem System installiert sind, verwenden Sie den folgenden Befehl:
$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
Alle diese sind eigentlich Bash, also seien Sie nicht aufgeregt. Wenn Sie Glück haben, sehen Sie möglicherweise auch Einträge für /bin/tcsh
, /bin/csh
, /bin/mksh
, /bin/ksh
, und /bin/rksh
.
Sie können jede dieser Muscheln verwenden und in jeder unterschiedliche Dinge vor sich haben, wenn Sie dazu neigen. Angenommen, Sie sind ein Solaris-Administrator und möchten die Korn-Shell verwenden. Sie können Ihre Standard-Shell in /bin/ksh
ändern mit dem chsh
Befehl:
$ chsh Changing shell for khess. New shell [/bin/bash]: /bin/ksh Password: Shell changed.
Wenn Sie jetzt echo $SHELL
eingeben , lautet die Antwort /bin/bash
, Sie müssen sich also abmelden und erneut anmelden, um die Änderung zu sehen. Sobald Sie sich ab- und wieder anmelden, erhalten Sie eine andere Antwort auf echo $SHELL
.
Sie können andere Shells eingeben und echo $SHELL
sollte Melden Sie Ihre aktuelle Shell und $SHLVL
, die Sie darüber informiert, wie viele Granaten tief Sie sind.
Eigene Umgebungsvariablen setzen
Sie können Ihre eigenen Variablen in der Befehlszeile pro Sitzung festlegen oder sie dauerhaft machen, indem Sie sie in ~/.bashrc
einfügen Datei, ~/.profile
, oder die Startdatei, die Sie für Ihre Standard-Shell verwenden. Geben Sie in der Befehlszeile Ihre Umgebungsvariable und ihren Wert ein, wie Sie es zuvor beim Ändern des PATH
getan haben Variable.
Abschluss
Shell- oder Umgebungsvariablen sind für Benutzer, Systemadministratoren und Programmierer gleichermaßen hilfreich. Sie sind in der Befehlszeile und in Skripten nützlich. Ich habe sie im Laufe der Jahre für viele verschiedene Zwecke verwendet, und obwohl einige von ihnen wahrscheinlich etwas unkonventionell sind, funktionierten und tun sie es immer noch. Erstellen Sie Ihre eigenen oder verwenden Sie die, die Ihnen vom System und den installierten Anwendungen zur Verfügung gestellt werden. Sie können Ihre Linux-Benutzererfahrung wirklich bereichern.
Als Randbemerkung zu Variablen und Shells:Glaubt jemand, dass diejenigen, die in JSON programmieren, nur die Bourne-Shell verwenden dürfen sollten? Diskutieren.