Linux Setze Umgebungsvariable Befehl Tutorial
Die Bash-Shell wird unter Linux für verschiedene Zwecke verwendet. Wie kann ich die Shell-Umgebungsvariable unter Linux-Betriebssystemen anpassen? Wie kann ich die Umgebungsvariable unter Linux setzen und anzeigen?
Sie können Shell-Variablen verwenden, um Daten zu speichern, Konfigurationsoptionen zu setzen und die Shell-Umgebung unter Linux anzupassen. Die Standard-Shell unter Linux ist Bash und kann für folgende Zwecke verwendet werden:
- Konfigurieren Sie das Aussehen der Shell.
- Konfigurieren Sie die Terminaleinstellungen, je nachdem, welches Terminal Sie verwenden.
- Suchpfad einstellen, z. B. JAVA_HOME und ORACLE_HOME.
- Umgebungsvariablen anlegen, wie sie von Programmen benötigt werden.
- Befehle ausführen, die bei jeder An- und Abmeldung ausgeführt werden sollen.
- Aliase und/oder Shell-Funktionen einrichten, um Aufgaben zu automatisieren und so Tipparbeit und Zeit zu sparen.
- Bash-Prompt ändern.
- Shell-Optionen einstellen.
Zwei Arten von Shell-Variablen
- Umgebungsvariablen (GLOBAL): Normalerweise sollten Endanwender nicht mit Umgebungsvariablen herumspielen, da sie systemweit verfügbar sind und Subshells und Kindprozesse auf sie zugreifen können. In bestimmten Szenarien können wir sie nach unseren Bedürfnissen modifizieren. Zum Beispiel richten wir einen systemweiten Pfad für die JAVA-App oder PATH für die Suche nach Binärdateien ein. In fast allen Fällen verwenden wir den Befehl export, um Umgebungsvariablen zu definieren oder zu ändern.
- Shell- und benutzerdefinierte Variablen (LOCAL) : Wie der Name schon sagt, werden diese vom Benutzer definiert und gelten aktuell für die aktuelle Shell-Sitzung.
Sie können die folgenden Befehle verwenden, um die Umgebung anzuzeigen und zu konfigurieren.
Aktuelle Umgebungsvariablen unter Linux anzeigen
Der Befehl printenv zeigt alle oder die angegebenen Umgebungsvariablen an. Öffnen Sie die Terminal-Eingabeaufforderung und geben Sie dann ein:printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'
env-Befehl
Der env-Befehl führt einen Linux-Befehl mit einer modifizierten Umgebung aus. Die Syntax lautet:
env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1
Bitte beachten Sie, dass die resultierende Umgebung auf dem Bildschirm angezeigt wird, wenn nach den Umgebungsangaben kein Befehlsname angegeben wird. Dies ist vergleichbar mit der Angabe des Befehls printenv, wie zuvor beschrieben. Beispiel:
envenv | moreenv | grep 'PS1'
Mit dem set-Befehl Umgebungsvariablen in Linux setzen und auflisten
Der env-Befehl/printenv-Befehl zeigt nur die Umgebungsvariablen der Linux-Shell an. Was aber, wenn Sie eine Liste aller Variablen, einschließlich Shell-, Umgebungs- und benutzerdefinierten Shell-Funktionen, sehen wollen? Versuchen Sie den folgenden set-Befehl, um Umgebungsvariablen auszugeben:set
set | grep BASH
Hier sehen wir, was wir sehen:
BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}
Der $PATH definiert den Suchpfad für Befehle. Es ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen die Shell nach Befehlen sucht. Das $PS1 definiert Ihre Prompt-Einstellungen, siehe die Liste aller häufig verwendeten Shell-Variablen. Sie können den Wert einer Variablen mit dem printf-Befehl oder dem echo-Befehl anzeigen:
echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"
Die Ausgabe des letzten Befehls zeigt den Speicherort meines Heimatverzeichnisses an, der unter Linux durch die Umgebungsvariable $HOME festgelegt wird:/home/vivek
Umgebungsvariablen auf Linux-Befehl setzen
Die Syntax ist ziemlich einfach:
# A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false
Ein paar wichtige Punkte, die man sich merken sollte, wenn man Umgebungsvariablen unter Linux mit der Bash erstellt oder einrichtet:
- Keine Leerzeichen um das =-Symbol setzen.
- Wie bei Linux-Befehlen wird auch bei den Namen der Bash-Variablen zwischen Groß- und Kleinschreibung unterschieden. Normalerweise definieren wir Umgebungsvariablen nur in Namen in GROSSBUCHSTABEN, was als beste Praxis gilt, aber nicht erforderlich ist.
- Der Geltungsbereich von Linux-Variablen ist standardmäßig LOCAL. Wir können sie mit dem Befehl export zu GLOBAL (oder Umgebungsvariablen) machen.
Lassen Sie uns die Werte unserer VAR_NUM, VAR_NUM, MY_OS und anderer Variablen ausgeben, die wir zuvor mit verschiedenen Befehlen definiert haben:
echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed
Shell-Variable und Werte aufheben / entfernen
Wir können Werte und Attribute von Shell-Variablen und -Funktionen mit dem unset-Befehl aufheben:
unset var_nameunset MY_OSunset is_backup_failed
Wie man unter Linux mit bash schreibgeschützte Umgebungsvariablen setzt
Wir verwenden den Befehl readonly wie folgt:
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Einrichten von unveränderbaren read-einzige Bash-Variable auf meinem Ubuntu-Linux-Desktop
Zugriff auf benutzerdefinierte Variablen in Sub-Shells und anderen Instanzen
Starten wir eine neue Instanz der Bash, eingeben und versuchen, Werte wie folgt auszugeben:
# 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
Setzen und Auflisten von Umgebungsvariablen LOCAL unter Linux
In Schritt # 4, ist die Ausgabe leer. Aber warum? Das bedeutet, dass die Variablen, die wir definiert haben, keine Umgebungsvariablen sind, sondern LOCAL. In einer Sub-Shell und anderen neuen Shell-Instanzen werden die Variablenwerte nicht exportiert. Daher verwenden wir den Befehl export, um sie zu GLOBAL- oder Umgebungsvariablen zu machen. Zum Beispiel:
export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
Setzen von Umgebungsvariablen (GLOBAL) in Linux mit export für die aktuelle und exportierte Bash-Sitzung des Benutzers
Befehl export
Mit dem Befehl export können Sie jede Umgebungs- oder Systemvariable ändern. Setzen Sie die Umgebungsvariable PATH so, dass sie das Verzeichnis enthält, in dem Sie das bin-Verzeichnis mit Perl- und Shell-Skripten installiert haben:
export PATH=${PATH}:/home/vivek/bin
OR
export PATH=${PATH}:${HOME}/bin
Um die Umgebungsvariable JAVA_HOME auf das Verzeichnis zu setzen, in dem Sie die J2SE-SDK-Anwendung installiert haben, eingeben:
export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin
Sie können mehrere Pfade wie folgt setzen:
export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
Ein Hinweis zu env und das Einrichten von Variablen
Zunächst setzen Sie die Variable NFS_ROOT auf /efs/ec2/wwwdata und führen das Perl-Skript check_for_files.plenv NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
In diesem Beispiel führen Sie ‚vim‘ mit der Umgebung aus, die ‚LOGNAME=nixcraft‘,und ‚DISPLAY=desktop2:0‘ enthält:env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Setzen Sie FOO auf bar und geben Sie es mit perl aus:env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
Wir können $FOO von der Shell aus nicht sehen, da es nur für Perl-Code definiert wurde:echo "$FOO"
Wie mache ich alle Umgebungsvariablen-Einstellungen unter Linux permanent/persistent?
Die Datei ~/.bash_profile ($HOME/.bash_profile) oder ~/.profile wird ausgeführt, wenn Sie sich über die Konsole oder per Fernzugriff über ssh anmelden. Geben Sie den folgenden Befehl ein, um die Datei ~/.bash_profile zu bearbeiten, geben Sie ein:$ vi ~/.bash_profile
Fügen Sie die $PATH-Einstellungen ein, geben Sie ein:export PATH=${PATH}:${HOME}/bin
Speichern Sie die Datei und schließen Sie sie.
Set IBM DB2 Instance Name
Geben Sie den folgenden Befehl ein:
export DB2INSTANCE=prod_sales
Ein Hinweis zur Datei /etc/profile
/etc/profile oder /etc/profile.d/ Verzeichnis enthält die systemweite Linux-Umgebung und Startprogramme. Es wird von allen Benutzern mit der bash-, ksh- und sh-Shell verwendet. Normalerweise wird es verwendet, um die PATH-Variable, Benutzergrenzen und andere Einstellungen für Benutzer zu setzen. Sie läuft nur für die Login-Shell. Wenn Sie größere Änderungen oder anwendungsspezifische Änderungen vornehmen möchten, verwenden Sie das Verzeichnis /etc/profile.d/, wie hier und hier erklärt.
Sehen Sie sich die folgenden Ressourcen an:
- Anpassen der Bash-Shell-Umgebungen aus dem Linux-Shell-Skripting-Wiki.
- UNIX-Umgebungsvariable setzen
File | Zweck | Beispiele (verwenden Sie cat, um eine Datei anzuzeigen) |
---|---|---|
/etc/environment | Setzen Sie system-breite Umgebungsvariablen. |
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" |
/etc/profile | Linux-Systemweite .Profildatei für die Bourne-Shell (sh) und Bourne-kompatible Shells wie bash, ksh, ash und andere. |
if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi |
/etc/profile.d/ | Alle großen benutzer- und standortspezifischen Umgebungsanpassungen sollten in diesem Verzeichnis abgelegt werden. Dies gilt auch systemweit. | $ ls -l /etc/profile.d/ $ cat /etc/profile.d/gawk.csh gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"} |
$HOME/.bash_profile | Die persönliche Initialisierungsdatei, die bei Anmelde-Shells ausgeführt wird. |
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh |
$HOME~/.bashrc | Die individuelle Startdatei pro interaktiver Shell. |
PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i' |
$HOME/.bash_logout | Die individuelle Aufräumdatei der Login-Shell, wird ausgeführt, wenn eine Login-Shell beendet wird |
if ; then && /usr/bin/clear_console -qfi |
Zusammenfassung
Sie haben gelernt, wie Sie unter Linux mit der Bash Umgebungsvariablen setzen und auflisten können:
Befehl | Beschreibung | Beispiel(e) |
---|---|---|
Befehl deklarieren | Bash-Variablen deklarieren und ihnen Attribute wie integer, indizierte Arrays, assoziative Arrays, readonly und so weiter Wenn keine Variablen oder Optionen zum Deklarieren angegeben werden, werden die Attribute und Werte aller (Variablen wie im laufenden Betrieb) | Siehe ‚help declare‘
declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096 |
env-Befehl | Ein Programm in einer veränderten Umgebung ausführen. Geben Sie alle Umgebungsvariablen aus. |
envenv | moreenv | grep SERVER_ROOT |
Exportbefehl | Befehl, der Umgebungsvariablen (GLOBAL) setzt und die Umgebung in eine SubShell oder andere Instanzen überträgt. | export NFS_ROOT=/aws/ec2/efs |
printenv-Befehl | Drucke alle oder einen Teil (gegeben) der Umgebungsvariablen unter Linux. |
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2' |
Shell-Variablen als unveränderbar markieren, d.h. schreibgeschützte oder konstante Shell-Variable |
readonly K_VERSION="1.9.52" |
Setzen oder Aufheben von Werten von Shell-Optionen und Positionsparametern. Zeigt außerdem alle Umgebungsvariablen an. | Siehe ‚help set‘
set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done |
Befehl „unset“ | Löscht Shell- und Umgebungsvariablen. Nicht alle Variablen können zurückgesetzt werden. Zum Beispiel können schreibgeschützte Variablen nicht zurückgesetzt werden. | unset FOO |
🐧 Bisher 23 Kommentare… einen hinzufügen ↓
Kategorie | Liste der Unix- und Linux-Befehle |
---|---|
Dateiverwaltung | cat |
Firewall | Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04 |
Netzwerkdienstprogramme | dig – host – ip – nmap |
OpenVPN | CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04 |
Package Manager | apk – apt |
Prozessverwaltung | bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – time |
Suchen | grep – whereis – which |
Benutzerinformationen | groups – id – lastcomm – last – lid/libuser-lid – logname – members – users – whoami – who – w |
WireGuard VPN | Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04 |