Linux Set Environment Variable Command Tutorial
Bash shell wordt onder Linux voor verschillende doeleinden gebruikt. Hoe pas ik de omgevingsvariabele van de shell aan onder Linux besturingssystemen? Hoe kan ik onder Linux omgevingsvariabelen instellen en bekijken?
U kunt onder Linux shellvariabelen gebruiken om gegevens op te slaan, configuratieopties in te stellen en de shellomgeving aan te passen. De standaard shell is Bash onder Linux en kan worden gebruikt voor de volgende doeleinden:
- Het uiterlijk en gevoel van shell configureren.
- Terminalinstellingen instellen, afhankelijk van welke terminal u gebruikt.
- Stel het zoekpad in, zoals JAVA_HOME, en ORACLE_HOME.
- Maak omgevingsvariabelen aan zoals nodig voor programma’s.
- Commando’s uitvoeren die u wilt uitvoeren wanneer u inlogt of uitlogt.
- Aliassen en/of shell functie instellen om taken te automatiseren om typewerk en tijd te besparen.
- De bash prompt veranderen.
- Shell opties instellen.
Twee soorten shell variabelen
- Omgevingsvariabelen (GLOBAL): Normaal gesproken moeten eindgebruikers niet rommelen met Omgevingsvariabelen, omdat ze systeembreed beschikbaar zijn, en subshells en kindprocessen hebben er toegang toe. In bepaalde scenario’s kunnen we ze aanpassen aan onze behoeften. We stellen bijvoorbeeld een systeembreed pad in voor de JAVA app of PATH voor het zoeken van binaries. In bijna alle gevallen gebruiken we het export commando om omgevingsvariabelen te definiëren of te wijzigen.
- Shell- en door de gebruiker gedefinieerde variabelen (LOCAL) : Zoals de naam al zegt, worden deze door gebruikers gedefinieerd en zijn ze momenteel van toepassing op de huidige shellsessie.
U kunt de volgende commando’s gebruiken om de omgeving te bekijken en te configureren.
Toon huidige omgevingsvariabelen op Linux
Het commando printv toont alle of de gegeven omgevingsvariabelen. Open de terminal prompt en typ dan: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 commando
Het env commando voert een Linux commando uit met een gewijzigde omgeving. De syntaxis is:
env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1
Merk op dat als er geen opdrachtnaam wordt opgegeven na de omgevingsspecificaties, de resulterende omgeving op het scherm wordt weergegeven. Dit is hetzelfde als wanneer u de opdracht printenv opgeeft, zoals eerder is besproken. Bijvoorbeeld:
envenv | moreenv | grep 'PS1'
Hoe omgevingsvariabelen in Linux in te stellen en op te sommen met het commando set
Het commando env/printenv geeft alleen de Linux-shell-omgevingsvariabelen weer. Wat als je een lijst van alle variabelen wilt zien, inclusief shell, omgeving, door de gebruiker gedefinieerde shell functies? Probeer het volgende set-commando voor het afdrukken van omgevingsvariabelen:set
set | grep BASH
Hier ziet u wat we zien:
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 )}
De $PATH definieert het zoekpad voor commando’s. Het is een door dubbele punten gescheiden lijst van mappen waarin de shell naar commando’s zoekt. De $PS1 definieert uw prompt instellingen.Zie de lijst van alle veelgebruikte shell variabelen voor meer informatie. U kunt de waarde van een variabele weergeven met het commando printf of echo:
echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"
Uitvoer van het laatste commando dat de locatie van mijn thuismap weergeeft, ingesteld door de omgevingsvariabele $HOME onder Linux:/home/vivek
Omgevingsvariabelen instellen op Linux-commando
De syntaxis is vrij eenvoudig:
# 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
Enige belangrijke punten om te onthouden bij het maken of instellen van omgevingsvariabelen op Linux bij gebruik van bash:
- Geef geen spatie rond het = symbool.
- Net als Linux-commando’s zijn de namen van de bash-variabelen hoofdlettergevoelig. Gewoonlijk definiëren we omgevingsvariabelen alleen in HOOFDLETTERS en dit wordt beschouwd als best practice, maar dit is niet vereist.
- De standaard Linux variabele scope is LOCAL. We kunnen ze GLOBAL (of omgevingsvariabele) maken met het export commando.
Laten we de waarden van onze VAR_NUM, VAR_NUM, MY_OS en andere eerder gedefinieerde variabelen afdrukken met behulp van verschillende commando’s:
echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed
Shell-variabele en waarden unset / verwijderen
We kunnen waarden en attributen van shell-variabelen en functies unset maken met behulp van het unset-commando:
unset var_nameunset MY_OSunset is_backup_failed
Hoe stel je in Linux alleen-lezen omgevingsvariabelen in bij gebruik van bash
We gebruiken het commando readonly als volgt:
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Het instellen van onveranderlijke alleen-lezenalleen bash variabele op mijn Ubuntu Linux desktop
Toegang tot door gebruiker gedefinieerde variabelen in sub-shells en andere instanties
Laten we een nieuwe instantie van bash starten, enter en probeer als volgt waarden af te drukken:
# 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
LOKALE omgevingsvariabelen in te stellen en op te sommen in Linux
In stap # 4, is de uitvoer leeg. Maar waarom? Dat betekent dat de variabelen die we gedefinieerd hebben geen omgevingsvariabelen zijn, en ze zijn LOKAAL. In een sub-shell en andere nieuwe shell instanties, worden variabelen waarden niet geëxporteerd. Daarom gebruiken we het export commando om ze GLOBAL of omgevingsvariabelen te maken. Bijvoorbeeld:
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"
Het instellen van omgevingsvariabelen (GLOBAL) in Linux met behulp van export voor de huidige en geëxporteerde gebruiker bash sessie
export commando
U kunt elke omgevings- of systeemvariabele wijzigen met behulp van het export commando. Stel de omgevingsvariabele PATH in op de map waarin u de bin-map met perl- en shellscripts hebt geïnstalleerd:
export PATH=${PATH}:/home/vivek/bin
Of
export PATH=${PATH}:${HOME}/bin
Om de omgevingsvariabele JAVA_HOME in te stellen op de directory waar u de J2SE SDK-toepassing hebt geïnstalleerd, voert u in:
export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin
U kunt als volgt meerdere paden instellen:
export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
Een opmerking over env en het instellen van variabelen
Stel eerst NFS_ROOT variabele in op /efs/ec2/wwwdata en voer perl script genaamd check_for_files.plenv NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
In dit voorbeeld, voer ‘vim’ uit met de omgeving die ‘LOGNAME=nixcraft’,en ‘DISPLAY=desktop2:0’ bevat:env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Stel FOO in op bar en druk het af met perl:env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
We kunnen $FOO niet zien vanuit shell omdat het alleen is gedefinieerd voor perl code:echo "$FOO"
Hoe maak ik alle omgevingsvariabelen instellingen permanent/permanent op Linux?
Het ~/.bash_profile ($HOME/.bash_profile) of ~/.profile bestand wordt uitgevoerd wanneer u inlogt via console of op afstand via ssh. Typ het volgende commando om het ~/.bash_profile bestand te bewerken, voer in:$ vi ~/.bash_profile
Voeg de $PATH instellingen toe, voer in:export PATH=${PATH}:${HOME}/bin
Bewaar en sluit het bestand.
Set IBM DB2 Instance Name
Type het volgende commando:
export DB2INSTANCE=prod_sales
Een opmerking over /etc/profile bestand
/etc/profile of /etc/profile.d/ directory bevat Linux systeemomgevingen en opstartprogramma’s. Het wordt gebruikt door alle gebruikers met bash, ksh, sh shell. Meestal gebruikt om PATH variabele, gebruikerslimieten, en andere instellingen voor de gebruiker in te stellen. Het draait alleen voor login shell. Als u grote veranderingen wilt maken of applicatie-specifieke veranderingen, gebruik dan /etc/profile.d/ directory zoals hier en hier uitgelegd.
Zie de volgende bronnen:
- Pas de bash shell omgevingen aan van de Linux shell scripting wiki.
- UNIX Set Environment Variable
File | Purpose | Voorbeelden (gebruik de cat om een bestand te bekijken) |
---|---|---|
/etc/environment | Instellen van systeem-omgevingsvariabelen in. |
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" |
/etc/profile | Linux systeem-wijde .profielbestand voor de Bourne-shell (sh) en Bourne-compatibele shells zoals bash, ksh, ash, en 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 grote gebruiker- en site-specifieke omgevingsaanpassingen moeten in deze directory worden geplaatst. Dit is ook systeembreed. | $ 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 | Het persoonlijke initialisatiebestand, uitgevoerd voor login shells. |
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh |
$HOME~/.bashrc | Het individuele per-interactieve-shell opstartbestand. |
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 | Het individuele login-shell opruimbestand, dat wordt uitgevoerd wanneer een login-shell wordt afgesloten |
if ; then && /usr/bin/clear_console -qfi |
Samenvattend
Je hebt geleerd hoe je onder Linux omgevingsvariabelen kunt instellen en opnoemen als je bash gebruikt:
Commando | Beschrijving | Voorbeeld(en) |
---|---|---|
declare commando | Declare bash variabelen en geef ze attributen, zoals integer, geïndexeerde arrays, associatieve arrays, readonly enzovoort Als er geen variabelen of opties worden opgegeven om te declareren, worden de attributen en waarden van alle (variabelen hetzelfde als running set) | Zie ‘help declareren’
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 commando |
envenv | moreenv | grep SERVER_ROOT |
export commando | Commando dat omgevingsvariabelen (GLOBAL) instelt en omgeving exporteert naar een subshell of andere instanties. | export NFS_ROOT=/aws/ec2/efs |
printenv commando | Print alle of een deel (gegeven) van omgevingsvariabelen onder Linux. |
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2' |
readonly commando | Markeer shellvariabelen als onveranderlijk, d.w.z. alleen-lezen of constante shellvariabele |
readonly K_VERSION="1.9.52" |
commando | Zet of deactiveert waarden van shellopties en positionele parameters. Geeft ook alle omgevingsvariabelen weer. | Zie ‘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 |
unset commando | Verwijdert shell- en omgevingsvariabelen. Niet alle variabelen kunnen worden gedeactiveerd. Bijvoorbeeld, read-only variabelen kunnen niet worden gedeactiveerd. | unset FOO |
🐧 23 reacties tot nu toe… voeg er een toe ↓
Categorie | Lijst van Unix- en Linux-commando’s |
---|---|
Bestandsbeheer | cat |
Firewall | Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04 |
Network Utilities | dig – host – ip – nmap |
OpenVPN | CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04 |
Package Manager | apk – apt |
Processenbeheer | bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – tijd |
Onderzoek | grep – whereis – welke |
Gebruikersinformatie | groepen – id – lastcomm – last – lid/libuser-lid – lognaam – leden – gebruikers – whoami – wie – w |
WireGuard VPN | Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04 |