Linux Set Environment Variable Command Tutorial
È possibile utilizzare le variabili di shell per memorizzare i dati, impostare le opzioni di configurazione e personalizzare l’ambiente della shell sotto Linux. La shell predefinita è Bash sotto Linux e può essere utilizzata per i seguenti scopi:
- Configurare l’aspetto della shell.
- Impostare il percorso di ricerca come JAVA_HOME e ORACLE_HOME.
- Creare variabili d’ambiente come richiesto dai programmi.
- Esegui i comandi che vuoi eseguire ogni volta che entri o esci.
- Imposta alias e/o funzioni di shell per automatizzare i compiti e risparmiare tempo.
- Cambia il prompt di bash.
- Imposta le opzioni di shell.
Due tipi di variabili di shell
- Variabili di ambiente (GLOBALE): In genere, gli utenti finali non dovrebbero pasticciare con le variabili d’ambiente perché sono disponibili a livello di sistema, e le subshell e i processi figli possono accedervi. In certi scenari, possiamo modificarle secondo le nostre esigenze. Per esempio, impostiamo un percorso a livello di sistema per l’applicazione JAVA o PATH per cercare i binari. In quasi tutti i casi, usiamo il comando export per definire o modificare le variabili d’ambiente.
- Shell e variabili definite dall’utente (LOCAL): come suggerisce il nome, queste sono definite dagli utenti e si applicano attualmente alla sessione di shell corrente.
Puoi usare i seguenti comandi per visualizzare e configurare l’ambiente.
Visualizza le variabili d’ambiente correnti su Linux
Il comando printenv mostra tutte o le variabili d’ambiente date. Aprire il prompt del terminale e poi digitare: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'
comando env
Il comando env esegue un comando Linux con un ambiente modificato. La sintassi è:
env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1
Si noti che se non viene specificato alcun nome di comando dopo le specifiche dell’ambiente, l’ambiente risultante viene visualizzato sullo schermo. Questo è come specificare il comando printenv come discusso in precedenza. Per esempio:
envenv | moreenv | grep 'PS1'
Come impostare ed elencare le variabili di ambiente in Linux usando il comando set
Il comando env/printenv visualizza solo le variabili di ambiente della shell Linux. E se avete bisogno di vedere una lista di tutte le variabili, incluse quelle della shell, dell’ambiente e delle funzioni della shell definite dall’utente? Provate il seguente comando set per stampare le variabili d’ambiente:set
set | grep BASH
Ecco cosa vediamo:
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 )}
La $PATH definisce il percorso di ricerca dei comandi. È una lista separata da due punti di directory in cui la shell cerca i comandi. Il $PS1 definisce le vostre impostazioni di prompt.Vedere la lista di tutte le variabili di shell comunemente usate per maggiori informazioni. Puoi visualizzare il valore di una variabile usando il comando printf o il comando echo:
echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"
Output dell’ultimo comando che visualizza la posizione della mia directory home impostata dalla variabile d’ambiente $HOME su Linux:/home/vivek
Impostazione delle variabili d’ambiente su comando Linux
La sintassi è abbastanza semplice:
# 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
Alcuni punti chiave da ricordare quando si creano o si impostano variabili d’ambiente su Linux quando si usa bash:
- Non mettere spazio intorno al simbolo =.
- Come i comandi di Linux, i nomi delle variabili di bash sono sensibili alle maiuscole. In genere si definiscono le variabili d’ambiente solo con nomi in MAIUSCOLO e sono considerate una buona pratica, ma questo non è richiesto.
- Di default, lo scopo delle variabili di Linux è LOCALE. Possiamo renderle GLOBALI (o variabili d’ambiente) usando il comando export.
Stampiamo i valori delle nostre VAR_NUM, VAR_NUM, MY_OS, e altre variabili definite in precedenza usando vari comandi:
echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed
Sistemazione / rimozione di variabili e valori di shell
Possiamo disinserire valori e attributi di variabili e funzioni di shell utilizzando il comando unset:
unset var_nameunset MY_OSunset is_backup_failed
Come impostare variabili di ambiente in sola lettura in Linux quando si usa bash
Utilizziamo il comando readonly come segue:
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Impostare una variabile immutabile di sola letturasolo variabile di bash sul mio desktop Ubuntu Linux
Accedere alle variabili definite dall’utente nelle sub-shell e in altre istanze
Avviamo una nuova istanza di bash, entrare e provare a stampare i valori come segue:
# 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
Impostare ed elencare le variabili LOCALI d’ambiente su Linux
Al passo # 4, l’output è vuoto. Ma perché? Significa che le variabili che abbiamo definito non sono variabili d’ambiente, e sono LOCALI. In una sub-shell e in altre nuove istanze della shell, i valori delle variabili non vengono esportati. Quindi, usiamo il comando export per renderle GLOBALI o variabili d’ambiente. Per esempio:
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"
Impostare variabili d’ambiente (GLOBALI) in Linux usando export per la sessione bash dell’utente corrente ed esportata
comando export
Puoi modificare ogni variabile ambientale o di sistema usando il comando export. Imposta la variabile d’ambiente PATH per includere la directory dove hai installato la directory bin con gli script perl e shell:
export PATH=${PATH}:/home/vivek/bin
O
export PATH=${PATH}:${HOME}/bin
Per impostare la variabile d’ambiente JAVA_HOME sulla directory in cui è stata installata l’applicazione J2SE SDK, inserire:
export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin
Puoi impostare più percorsi come segue:
export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
Una nota su env e l’impostazione delle variabili
Prima imposta la variabile NFS_ROOT su /efs/ec2/wwwdata ed esegui lo script perl chiamato check_for_files.plenv NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
In questo esempio, eseguire ‘vim’ con l’ambiente contenente ‘LOGNAME=nixcraft’,e ‘DISPLAY=desktop2:0’:env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Impostare FOO su bar e stamparlo con perl:env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
Non possiamo vedere $FOO dalla shell perché è stato definito solo per il codice perl:echo "$FOO"
Come posso rendere permanenti tutte le impostazioni delle variabili d’ambiente su Linux?
Il file ~/.bash_profile ($HOME/.bash_profile) o ~/.profile viene eseguito quando si effettua il login tramite console o da remoto tramite ssh. Digitare il seguente comando per modificare il file ~/.bash_profile, inserire:$ vi ~/.bash_profile
Applicare le impostazioni $PATH, inserire:export PATH=${PATH}:${HOME}/bin
Salvare e chiudere il file.
Imposta il nome dell’istanza IBM DB2
Digita il seguente comando:
export DB2INSTANCE=prod_sales
Una nota sul file /etc/profile
/etc/profile o /etc/profile.d/ contiene l’ambiente del sistema Linux e i programmi di avvio. È usata da tutti gli utenti con le shell bash, ksh, sh. Di solito viene usata per impostare la variabile PATH, i limiti dell’utente e altre impostazioni per l’utente. Funziona solo per la shell di login. Se vuoi fare grandi cambiamenti o modifiche specifiche all’applicazione usa /etc/profile.d/ directory come spiegato qui e qui.
Vedi le seguenti risorse:
- Personalizza gli ambienti della shell bash dal wiki dello scripting della shell Linux.
- UNIX Set Environment Variable
File | Scopo | Esempi (usare il cat per visualizzare un file) | |
---|---|---|---|
/etc/ambiente | Imposta le variabili d’ambientevariabili d’ambiente a livello di sistema. |
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" |
|
/etc/profile | Linux system-wide .per la shell Bourne (sh) e le shell Bourne compatibili come bash, ksh, ash e altre. |
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/ | Tutte le personalizzazioni dell’ambiente specifiche dell’utente e del sito dovrebbero essere messe in questa directory. Questo è anche a livello di sistema. | $ 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 | Il file di inizializzazione personale, eseguito per le shell di login. |
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh |
|
$HOME~/.bashrc | Il file di avvio individuale per ogni shell interattiva. |
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 | Il file di pulizia della singola shell di login, eseguito quando una shell di login esce |
if ; then && /usr/bin/clear_console -qfi |
Riassumendo
Hai imparato come impostare ed elencare le variabili d’ambiente su Linux quando usi bash:
Comando | Descrizione | Esempio(i) | |
---|---|---|---|
declare comando | Dichiarare variabili bash e dare loro attributi come interi, array indicizzati, array associativi, readonly e così via Se non vengono date variabili o opzioni da dichiarare, verranno visualizzati gli attributi e i valori di tutte (variabili uguali a quelle impostate in esecuzione) | Vedi ‘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 |
|
comando env | Esegui un programma in un ambiente modificato. Stampa tutte le variabili d’ambiente. |
envenv | moreenv | grep SERVER_ROOT |
|
comando export | Comando che imposta le variabili d’ambiente (GLOBAL) ed esporta l’ambiente in una sub-shell o altre istanze. | export NFS_ROOT=/aws/ec2/efs | |
comando printintenv | Stampa di tutte o parte (date) delle variabili di ambiente su Linux. |
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2' |
|
comandoreadonly | Marcare le variabili di shell come immutabili cioè variabile di shell di sola lettura o costante |
readonly K_VERSION="1.9.52" |
|
comando set | Imposta o annulla i valori delle opzioni di shell e dei parametri posizionali. Inoltre, visualizza tutte le variabili d’ambiente. | Vedi ‘aiuto 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 |
|
comando unset | Rimuove le variabili di shell e di ambiente. Non tutte le variabili possono essere disinserite. Per esempio, le variabili di sola lettura non possono essere disinserite. | unset FOO |
🐧 23 commenti finora… aggiungine uno ↓
Categoria | Elenco di comandi Unix e Linux |
---|---|
Gestione dei file | cat |
Firewall | Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04 |
Utilità di rete | dig – host – ip – nmap |
OpenVPN | CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04 |
Package Manager | apk – apt |
Gestione Processi | bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – tempo |
Ricerca | grep – whereis – quale |
Informazioni utente | gruppi – id – lastcomm – last – lid/libuser-lid – logname – members – users – whoami – who – w |
WireGuard VPN | Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04 |