Skip to main content
  1. Comandi/

printenv - print environment

·2 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

`

Cosa fa
#

Stampa le variabili d'ambiente del processo corrente — solo quelle esportate con export, visibili ai processi figli. Non mostra variabili shell locali ne' funzioni bash. Per vedere tutto (variabili locali + d'ambiente + funzioni) si usa set.

Sintassi
#

printenv [variabile]

Comandi essenziali
#

ComandoFlagSignificato flagCosa fa
printenvMostra tutte le variabili d'ambiente
printenv USERMostra solo il valore di USER
printenv PATHMostra il PATH completo
printenv | lessNaviga l'elenco completo con paginazione
printenv | grep -i editorCerca una variabile per nome parziale

printenv vs set — differenza
#

printenv mostra solo le variabili d'ambiente — quelle esportate, ereditate dai processi figli. set mostra tutto: variabili d'ambiente + variabili shell locali + funzioni bash definite nella sessione corrente.

# Definisci una variabile locale (senza export)
x=5

printenv x     # nessun output — x non e' esportata
set | grep "^x"   # mostra: x=5

# Esporta la variabile
export x

printenv x     # ora mostra: 5

printenv vs echo $VAR — differenza
#

Il risultato e' identico ma il meccanismo e' diverso. echo $USER fa espandere la variabile dalla shell prima di stampare — la shell non sa niente di variabili d'ambiente, vede gia' la stringa espansa. printenv USER interroga direttamente l'ambiente del processo.

printenv USER   # interroga l'ambiente → barno
echo $USER      # la shell espande $USER → barno, poi echo stampa la stringa

Combinazioni utili
#

# Tutte le variabili d'ambiente in ordine alfabetico
printenv | sort

# Cerca variabili che contengono un percorso specifico
printenv | grep /usr/bin

# Confronta l'ambiente prima e dopo aver modificato un file di startup
printenv > prima.txt
source ~/.bashrc
printenv > dopo.txt
diff prima.txt dopo.txt

Scenario Reale
#

Durante un'analisi forense su un sistema compromesso, un analista confronta le variabili d'ambiente dell'utente sospetto con quelle di un utente normale. Una variabile LD_PRELOAD impostata a un path insolito e' un segnale di library hijacking — una tecnica usata per intercettare chiamate di sistema.

Dove l'ho usato
#

Note personali
#

printenv | less e' il punto di partenza quando vuoi capire l'ambiente di una shell sconosciuta — ti da' un quadro completo di PATH, HOME, SHELL, EDITOR e tutte le variabili custom impostate.

Collegato a
#

  • system — categoria
  • export — per esportare variabili nell'ambiente
  • shell-environment — concetto teorico
  • echo — alternativa per leggere singole variabili

Related