fbpx Variáveis de Ambiente no Linux: env, export e as Mais Importantes | Certificação Linux

Variáveis de Ambiente no Linux: env, export e as Mais Importantes

📅 01/01/2019 ⏱ 6 min ✍️ Uira Ribeiro
Linuxcomandos
Variáveis de Ambiente no Linux: env, export e as Mais Importantes

Variáveis de ambiente são pares chave=valor que o sistema operacional mantém em memória e disponibiliza para todos os processos em execução. Elas controlam o comportamento do shell, dos programas e dos scripts — desde onde o sistema busca executáveis (PATH) até o idioma exibido nos programas (LANG).

Entender variáveis de ambiente é fundamental para administrar servidores, escrever scripts robustos e passar em certificações como LPIC-1 (tópico 105).

Listar variáveis de ambiente

Existem três comandos para listar variáveis, cada um com escopo diferente:

# env — lista apenas variáveis de ambiente exportadas
env

# printenv — igual ao env, mas pode filtrar por nome
printenv
printenv PATH          # mostra só a variável PATH
printenv HOME USER     # múltiplas variáveis de uma vez

# set — lista variáveis de ambiente + variáveis locais do shell + funções
set

A diferença prática: env e printenv mostram apenas o que os processos filhos herdam. set mostra tudo, inclusive variáveis temporárias que existem só na sessão atual do shell.

Variáveis de ambiente mais importantes

VariávelConteúdoExemplo
PATHDiretórios onde o shell busca executáveis/usr/local/bin:/usr/bin:/bin
HOMEDiretório home do usuário atual/home/joao
USERNome do usuário logadojoao
SHELLShell padrão do usuário/bin/bash
LANGIdioma e codificação padrãopt_BR.UTF-8
PWDDiretório de trabalho atual/var/www/html
OLDPWDDiretório anterior (antes do último cd)/home/joao
EDITOREditor de texto padrão do sistemavim
TERMTipo de terminal em usoxterm-256color
PS1Formato do prompt do shell\u@\h:\w\$
UIDID numérico do usuário1000
HOSTNAMENome do host da máquinaservidor01

Criar e exportar variáveis

Variável local (só existe na sessão atual do shell)

# Cria variável local — processos filhos NÃO herdam
NOME="João"
echo $NOME          # João
bash -c 'echo $NOME' # (vazio — filho não herda)

Variável exportada (processos filhos herdam)

# export torna a variável disponível para processos filhos
export NOME="João"
bash -c 'echo $NOME'  # João — filho herda!

# Criar e exportar em uma linha só
export DB_HOST="localhost"
export DB_PORT=5432

# Ver se uma variável está exportada
export -p | grep NOME

Variável para um único comando (sem afetar o ambiente atual)

# Passa a variável APENAS para aquele comando — não altera a sessão
LANG=en_US.UTF-8 man ls          # manual em inglês

# Muito útil para scripts e testes
NODE_ENV=production npm start
DEBUG=* node app.js
PYTHONDONTWRITEBYTECODE=1 python script.py

# Múltiplas variáveis antes do comando
LANG=en_US DB_HOST=prod ./meu_script.sh

O comando env

Listar variáveis filtradas

# Ver todas as variáveis de ambiente
env

# Filtrar por padrão
env | grep PATH
env | grep -i db   # busca case-insensitive

Executar comando com ambiente modificado

# Sobrescrever PATH para um único comando
env PATH=/usr/local/bin:/usr/bin which python

# Adicionar variável sem afetar o shell atual
env MYSQL_HOST=db.prod.com ./backup.sh

Executar com ambiente limpo (-i)

O flag -i (ou --ignore-environment) inicia o comando com um ambiente completamente vazio — útil para testes e para garantir que nenhuma variável do ambiente do usuário afete a execução:

# Roda bash com ambiente completamente limpo
env -i bash

# Roda script com apenas as variáveis necessárias
env -i HOME=/tmp PATH=/usr/bin:/bin ./script.sh

# Ver quantas variáveis existem normalmente vs. ambiente limpo
env | wc -l         # ~30–50 variáveis normalmente
env -i env | wc -l  # 0

Shebang com env em scripts

Usar /usr/bin/env no shebang em vez do caminho direto do interpretador torna o script mais portável — o env encontra o interpretador no PATH do sistema, onde quer que ele esteja instalado:

#!/usr/bin/env python3
# Funciona em qualquer sistema onde python3 está no PATH

#!/usr/bin/env bash
# Melhor que #!/bin/bash em sistemas onde bash pode estar em outro local

#!/usr/bin/env node
# Comum em scripts Node.js

Variáveis permanentes: onde definir

Variáveis criadas no terminal somem quando a sessão encerra. Para torná-las permanentes, escolha o arquivo certo conforme o escopo desejado:

ArquivoEscopoQuando é lido
~/.bashrcUsuário atualA cada shell interativo (não-login)
~/.bash_profile ou ~/.profileUsuário atualLogin via terminal ou SSH
/etc/environmentSistema inteiroLogin de qualquer usuário (PAM)
/etc/profileSistema inteiroLogin de qualquer usuário (shell login)
/etc/profile.d/*.shSistema inteiroLogin de qualquer usuário
# Adicionar variável permanente para o usuário atual
echo 'export EDITOR=vim' >> ~/.bashrc
echo 'export JAVA_HOME=/usr/lib/jvm/java-17' >> ~/.bashrc
source ~/.bashrc   # Recarrega sem precisar fechar o terminal

# Adicionar ao PATH do usuário (sem sobrescrever o PATH existente)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

# Variável para todos os usuários do sistema
echo 'EDITOR=vim' | sudo tee -a /etc/environment

# Verificar se foi aplicado após recarregar
source ~/.bashrc
echo $EDITOR

Manipular o PATH

O PATH é a variável mais importante do sistema — ela define onde o shell procura por executáveis. A ordem dos diretórios importa: o shell usa o primeiro executável que encontrar.

# Ver o PATH atual (separado por :)
echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Adicionar diretório no início do PATH (maior prioridade)
export PATH="/opt/meu_programa/bin:$PATH"

# Adicionar no final (menor prioridade)
export PATH="$PATH:/opt/meu_programa/bin"

# Verificar qual executável o shell vai usar
which python3
type python3

# Ver todos os executáveis com aquele nome no PATH
type -a python

Remover variáveis

# unset remove a variável completamente
unset NOME
echo $NOME     # (vazio)

# Remover do export (mantém como local)
export -n NOME

Variáveis em scripts

#!/usr/bin/env bash

# Boas práticas em scripts
set -euo pipefail   # sai em erro, trata variáveis não definidas, propaga erros em pipes

# Ler variável de ambiente com valor padrão
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"

# Checar se variável obrigatória está definida
if [ -z "${API_KEY:-}" ]; then
    echo "ERRO: API_KEY não definida" >&2
    exit 1
fi

# Exibir variáveis definidas para debug
env | sort | grep "^DB_"

Arquivos .env e dotenv

Projetos modernos (Node.js, Python, Docker) usam arquivos .env para centralizar variáveis de configuração:

# Arquivo .env típico
DB_HOST=localhost
DB_PORT=5432
DB_NAME=meuapp
SECRET_KEY=chave-super-secreta

# Carregar no shell manualmente
export $(grep -v '^#' .env | xargs)

# Com Docker
docker run --env-file .env minha_imagem

# Com Docker Compose (lê .env automaticamente)
# Mas também pode definir explicitamente:
# env_file:
#   - .env

Referência rápida

# Listar todas as variáveis exportadas
env | sort

# Criar variável local
VARIAVEL="valor"

# Exportar para processos filhos
export VARIAVEL="valor"

# Variável só para um comando
VAR=valor comando

# Ambiente limpo
env -i comando

# Remover variável
unset VARIAVEL

# Tornar permanente (usuário)
echo 'export VARIAVEL="valor"' >> ~/.bashrc && source ~/.bashrc

# Ver de onde vem um executável
which python3
type -a python3

# Adicionar ao PATH permanentemente
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Especialista Linux com mais de 20 anos de experiência.
Autor de 5 livros e mentor de mais de 14.000 alunos certificados.
20 certificações de alto nível, incluindo LPIC-3, CKA, RHCE e AWS Solutions Architect.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp