fbpx Variáveis de Ambiente no Linux: env, export e Exemplos Práticos | 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
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponível no
Google Play
Disponível na
App Store

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

Depois de anos vendo profissionais perderem horas em tarefas simples por não conhecer as ferramentas certas do Linux, decidi ensinar.
Hoje sou autor da maioria dos Materiais de Aprendizado oficiais da LPI e mentor de mais de 14.000 alunos certificados.

Conheça minha história completa →

Isso foi só uma peça. O curso ensina o caminho completo — do primeiro comando ao dia da prova.

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