Esistono variabili di ambiente per migliorare e standardizzare il tuo ambiente shell sui sistemi Linux. Esistono variabili di ambiente standard che il sistema imposta per te, ma puoi anche impostare le tue variabili di ambiente o, facoltativamente, modificare quelle predefinite per soddisfare le tue esigenze.
[ Download gratuito:cheat sheet dei comandi avanzati di Linux. ]
A partire da env
comando
Se vuoi vedere le tue variabili d'ambiente, usa env
comando e cerca le parole in maiuscolo nell'estrema sinistra dell'output. Queste sono le tue variabili di ambiente e i loro valori sono a destra:
$ 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
Ho omesso l'output di LS_COLORS
variabile perché è così lungo. Prova questo comando sul tuo sistema per vedere come appare l'output completo.
Molte variabili di ambiente vengono impostate e quindi esportate da /etc/profile
e il /etc/bashrc
file. C'è una riga in /etc/profile
che recita:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
Per apportare modifiche permanenti alle variabili di ambiente per tutti i nuovi account, vai al tuo /etc/skel
file, come .bashrc
, e cambia quelli che sono già presenti o inserisci quelli nuovi. Quando crei nuovi utenti, questi /etc/skel
i file verranno copiati nella home directory del nuovo utente.
Esplorazione dei livelli della shell (SHLVL
)
Per chiamare il valore di una singola variabile di ambiente, immetti il seguente comando, utilizzando SHLVL
(Livello shell) ad esempio:
$ echo $SHLVL 1
Questa variabile cambia a seconda di quante subshell hai aperto. Ad esempio, inserisci bash
due volte e quindi emettere nuovamente il comando:
$ bash
$ bash echo $SHLVL 3
Un livello di shell di tre significa che hai due subshell in profondità, quindi digita exit
due volte per tornare alla normale shell.
[Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente.]
Manipolazione del tuo PATH
variabile
Il PATH
variabile contiene il percorso di ricerca per l'esecuzione di comandi e script. Per vedere il tuo PATH
, inserisci:
$ echo $PATH /home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
Modifica temporaneamente il tuo PATH
immettendo il seguente comando per aggiungere /opt/bin
:
$ 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
La modifica è temporanea per la sessione corrente. Non è permanente perché non è inserito nel .bashrc
file. Per rendere permanente la modifica, inserisci il comando PATH=$PATH:/opt/bin
nel .bashrc
della tua home directory file.
Quando lo fai, stai creando un nuovo PATH
variabile aggiungendo una directory al PATH
corrente variabile, $PATH
. I due punti (:
) separa PATH
voci.
Scoprire $USER
, $PWD
e $LOGNAME
Avevo una teoria che penso sia stata sfatata dal mio stesso buon io. La mia teoria era che i comandi pwd
e whoami
probabilmente ha appena letto e riprodotto il contenuto delle variabili della shell $PWD
e $USER
o $LOGNAME
, rispettivamente. Con mia sorpresa, dopo aver esaminato il codice sorgente, non lo fanno. Forse dovrei riscriverli per fare proprio questo. Non c'è motivo di aggiungere più librerie e quasi 400 righe di codice C per visualizzare la directory di lavoro. Puoi semplicemente leggere $PWD
ed echeggialo sullo schermo (stdout). Lo stesso vale per whoami
con $USER
o $LOGNAME
.
Se vuoi dare un'occhiata al codice sorgente per te stesso, è su GitHub e in altri posti. Se trovi che questi programmi (o altri) usano variabili di shell, mi piacerebbe saperlo. Certo, non sono così bravo a leggere il codice sorgente C, quindi potrebbero benissimo usare le variabili della shell e non lo saprei mai. Semplicemente non sembravano da quello che ho letto e ho potuto capire.
Riproduzione di $SHELL
gioco
In quest'ultima panoramica delle variabili d'ambiente, voglio mostrarti come il $SHELL
la variabile torna utile. Non devi rimanere nella tua shell predefinita, che è probabilmente Bash. Puoi entrare e lavorare in qualsiasi shell installata sul sistema. Per scoprire quali shell sono installate sul tuo sistema, usa il seguente comando:
$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
Tutti quelli sono in realtà Bash, quindi non eccitarti. Se sei fortunato, potresti anche vedere le voci per /bin/tcsh
, /bin/csh
, /bin/mksh
, /bin/ksh
e /bin/rksh
.
Puoi usare una di queste shell e avere cose diverse in ognuna di esse se sei così incline. Ma supponiamo che tu sia un amministratore Solaris e desideri utilizzare la shell Korn. Puoi cambiare la tua shell predefinita in /bin/ksh
usando il chsh
comando:
$ chsh Changing shell for khess. New shell [/bin/bash]: /bin/ksh Password: Shell changed.
Ora, se digiti echo $SHELL
, la risposta sarà /bin/bash
, quindi devi disconnetterti e accedere di nuovo per vedere la modifica. Dopo esserti disconnesso e aver effettuato l'accesso, riceverai una risposta diversa a echo $SHELL
.
Puoi inserire altre shell e echo $SHELL
dovrebbe segnala la tua shell attuale e $SHLVL
, che ti manterrà orientato su quante conchiglie sei profondo.
Impostazione delle proprie variabili di ambiente
Puoi impostare le tue variabili dalla riga di comando per sessione, o renderle permanenti inserendole nel ~/.bashrc
file, ~/.profile
o qualsiasi file di avvio che utilizzi per la tua shell predefinita. Sulla riga di comando, inserisci la tua variabile d'ambiente e il suo valore come hai fatto in precedenza quando hai cambiato il PATH
variabile.
Conclusione
Le variabili di shell o di ambiente sono utili per utenti, amministratori di sistema e programmatori allo stesso modo. Sono utili sulla riga di comando e negli script. Li ho usati nel corso degli anni per molti scopi diversi e, sebbene alcuni di loro siano probabilmente un po' non convenzionali, hanno funzionato e continuano a funzionare. Crea il tuo o usa quelli forniti dal sistema e dalle applicazioni installate. Possono davvero arricchire la tua esperienza utente Linux.
Come nota a margine su variabili e shell, qualcuno pensa che coloro che programmano in JSON dovrebbero essere autorizzati solo a utilizzare Bourne Shell? Discuti.