Trabalhando com shell e variáveis de ambiente

Este artigo contém informações sobre os interpretadores de comando do Linux, variáveis de ambiente locais e globais, criação váriaveis de ambiente, configuração dos arquivos /etc/profile, .bash_profile, /etc/bashrc, .bashrc e /etc/skel. Descreve a aplicação de aliases locais e globais e um pouco do comando history.

[ Hits: 272.124 ]

Por: Cristian Alexandre Castaldi em 05/04/2004


Variáveis de ambiente



O shell é executado no sistema controlado por variáveis de ambiente. Variáveis de ambiente são espaços de memória que armazenam valores. Estas variáveis podem ser locais, que são as variáveis disponíveis somente pelo shell corrente e que não está sendo acessado por subprocessos do sistema. E as variáveis globais, que estão disponíveis tanto para o shell corrente como para os subprocessos que fazem uso delas. Descreverei algumas variáveis de ambiente que acho importantes para facilitar o entendimento:
  • HOME - Esta variável identifica o diretório do usuário doméstico, use o comando echo $HOME para saber qual é o seu diretório HOME.
  • SHELL - Esta variável identifica qual shell está sendo usado, use o comando echo $SHELL para saber qual é o shell que o seu sistema está usando.
  • TERM - Esta variável define o tipo de terminal que está sendo usado, use o comando echo $TERM para saber qual o tipo de terminal está sendo usado pelo sistema.
  • USER - Pré-define o nome de conta como variável de ambiente, ou seja, ao se logar ao sistema a ID do usuário é combinada com um nome de conta, para saber qual é o usuário corrente use o comando "echo USER".
  • PATH - Esta é a variável de ambiente que define quais diretórios pesquisar e a ordem na qual eles são pesquisados para encontrar um determinado comando, para saber como o sistema faz esta pesquisa e quais diretórios ele procura um comando use o comando "echo $PATH".
  • MAIL - Esta é a variável de correio eletrônico. Para saber como seu mail está definido use o comando "echo $MAIL".
  • LOGNAME - Esta variável é um sinônimo para USER. Para saber qual é o seu logname use o comando "echo $LOGNAME".
  • OSTYPE - Essa variável define o tipo de sistema operacional em uso. Para saber qual é o sistema operacional em uso use o comando "echo $OSTYPE".

Para visualizar as variáveis de ambiente no sistema pode-se utilizar os comandos a seguir.

Variáveis locais:

$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="04" [2]="0" [3]="1" [4]="release" [5]="i386-conectiva-linux-gnu")
BASH_VERSION='2.04.0(1)-release'
COLORTERM=
COLUMNS=142
...

Variáveis globais:

$ env
ou
$ printenv
PWD=/root
WM=kde
TMPDIR=/root/tmp
KONSOLE_DCOP=DCOPRef(konsole-985,konsole)
GS_LIB=/root/.kde/share/fonts
...

Para atribuir um valor a uma variável local veja o exemplo:

$ LINUX=free
$ echo $LINUX

free

O comando echo exibe o valor de uma variável de ambiente. Agora vamos verificar se a variável aparece na relação de variáveis locais, veja o exemplo:

$ set | grep LINUX
LINUX=free

Agora vamos tornar esta variável local em uma variável global. Para isso devemos usar o comando export:

# export LINUX
# env | grep LINUX

LINUX=free

Para deletar uma variável de ambiente da memória usamos o comando unset e para verificarmos se a variável foi excluída usaremos o comando echo, veja o exemplo:

# unset LINUX
# echo $LINUX


Agora vamos editar o nosso prompt de comando que é representado pela variável PS1. Podemos utilizar os seguintes argumentos para esta tarefa:
Argumento Descrição
\hHost da máquina.
\WDiretório corrente.
\wCaminho completo do diretório corrente.
\uNome do usuário.
\t Hora do sistema.
\dData.
\\$$ para usuário comum e # para root.

# export PS1="[\h@\w]\\$" [crildo@~]#

Vejam que o meu prompt foi mudado, ele mostra o host (crildo), o caminho completo do diretório corrente (~) e o tipo de caracter que faz referência ao prompt.

Podemos criar variáveis globais editando-as no arquivo /etc/profile:

# vi /etc/profile

# /etc/profile

# System wide environment and startup programs
# Functions and aliases go in /etc/bashrc


PATH="$PATH:/usr/bin/X11:/usr/games:/usr/local/bin:/usr/java/j2sdk1.4.2/bin"
MANPATH="$MANPATH:/usr/local/man"
# This is the original ksh default PS1 value
# Bash will get its own from /etc/bashrc

PS1='$(/bin/hostname -s) [$PWD] > '

ulimit -c 1000000
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
        umask 002
else
        umask 022
fi

USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000
HISTFILESIZE=1000

INPUTRC=/etc/inputrc

export PATH MANPATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC

for i in /etc/profile.d/*.sh ; do
        if [ -x $i ]; then
                . $i
        fi
done

unset i

Podemos criar variáveis que são executadas somente no ambiente do usuário editando o arquivo ~/.bash_profile, sendo executadas automaticamente no login:

# vi /home/cris/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
ENV=$HOME/.bashrc
USERNAME="root"

export USERNAME ENV PATH

mesg n
Página anterior     Próxima página

Páginas do artigo
   1. Interpretadores de linha de comando Unix
   2. Variáveis de ambiente
   3. O diretório /etc/skel, aliases e histórico
   4. Bibliografia
Outros artigos deste autor

Criando, monitorando e terminando processos

Sistema de boot, níveis de execução e shutdown

Autenticando usuários

Trabalhando com coringas, filtros e expressões regulares no shell

Lynis: Sistema de auditoria e segurança para Linux

Leitura recomendada

Servidor de backup Bacula 7 + Webacula 5.5 no Debian Wheezy

OpenVPN em Linux

Execução automática de comandos na inicialização do modo gráfico

PHP5 + Apache2 no Ubuntu 7.04, com suporte ao MySQL e SQL Server

Funtoo + bspwm + Polybar + Rofi - Instalação e Configuração

  
Comentários
[1] Comentário enviado por butters em 06/04/2004 - 14:47h

legal sua dica....

[2] Comentário enviado por tiagoarcosta em 26/04/2005 - 13:29h

Boa tarde crildo.

Como faço para que os avisos de alerta, advertencia, etc. do bash sejem exibidas em portugues?

[3] Comentário enviado por tiagoarcosta em 26/04/2005 - 13:30h

E como faço para que o comando man tambem seje exibido em portugues. Onde localiza-se os arquivos de ajuda em Portugues do man?

[4] Comentário enviado por cordobel em 26/07/2009 - 06:36h

Muito obrigado por seu artigo.
Eu estava procurando como personalizar comandos ou criar atalhos para eles e aqui encontrei a resposta.
Lendo a sua orientação e comparando ela com a estrutura do Ubuntu 9.04 encontrei em meu diretório home o arquivo /home/~/.bashrc que você mencionou.
Não foi preciso muito esforço para alcançar o meu objetivo, bastou des-comentar algumas linhas e então pude habilitar atalhos como ll (é igual a ls - la, mencionado no artigo) que me fazia muita falta no Ubuntu pois sou muito acostumado com ele, que é presente nos servidores CentOS de minha empresa. E também já fiquei conhecendo novos comandos.
Mais uma vez, muito obrigado.

[5] Comentário enviado por s.martins em 02/02/2010 - 01:13h

Muito legal o Artigooo com certeza vai agregar conhecimentos para que eu passe no LPIC 1. Abraço!!!

[6] Comentário enviado por fmj1988 em 01/09/2011 - 00:07h

Boa noite crildo,

acredito que na pagina 2 onde tem escrito assim: "# export LINUX"
deva ser substituido por "$ export LINUX".

pois acredito que o exporte deva ser apenas para o usuario atual ou porque só conseguir fazer o camando após tirar o "sudo" do comando.

Boa noite a todos.
Att.
Felipe

[7] Comentário enviado por wldnet1 em 26/07/2016 - 11:46h

Muito esclarecedor me ajudou muito além de agregar mais o meu conhecimento.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts