Articles

Tutorial de Comando da Variável de Ambiente do Conjunto Linux

Bash shell é utilizado para vários fins sob Linux. Como é que personalizo a variável de ambiente shell sob os sistemas operativos Linux? Como posso definir e visualizar a variável de ambiente em Linux?
Pode usar variáveis shell para armazenar dados, definir opções de configuração e personalizar o ambiente shell em Linux. A shell padrão é Bash sob Linux e pode ser utilizada para os seguintes fins:

  1. Configurar o aspecto e a sensação da shell.
  2. Configurar definições do terminal, dependendo do terminal que estiver a utilizar.
  3. Configurar o caminho de pesquisa tal como JAVA_HOME, e ORACLE_HOME.
  4. Criar variáveis de ambiente conforme necessário pelos programas.
  5. Executar comandos que pretende executar sempre que iniciar ou terminar a sessão.
  6. Configurar pseudónimos e/ou função shell para automatizar tarefas para poupar digitação e tempo.
  7. Mudar o prompt de bash.
  8. Configurar opções shell.

Dois tipos de variáveis shell

  • Variáveis de ambiente (GLOBAL): Tipicamente, os utilizadores finais não devem mexer nas variáveis de Ambiente, uma vez que estas estão disponíveis em todo o sistema, e as subcasas e os processos infantis podem aceder a elas. Em certos cenários, podemos modificá-las de acordo com as nossas necessidades. Por exemplo, estabelecemos um caminho para todo o sistema para a aplicação JAVA ou PATH para a pesquisa de binários. Em quase todos os casos, utilizamos o comando de exportação para definir ou modificar variáveis de ambiente.
  • Shell e variáveis definidas pelo utilizador (LOCAL) : Como o nome sugere, estas são definidas pelos utilizadores e aplicam-se actualmente à sessão shell actual.

P>Pode usar os seguintes comandos para visualizar e configurar o ambiente.

Exibir variáveis de ambiente actuais no Linux

O comando printenv mostra todas ou as variáveis de ambiente dadas. Abra o prompt do terminal e depois digite:
printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'

comando env

O comando env executa um comando Linux com um ambiente modificado. A sintaxe é:

env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1

Por favor note que se nenhum nome de comando for especificado de acordo com as especificações do ambiente, o ambiente resultante é exibido no ecrã. Isto é como especificar o comando printenv, tal como discutido anteriormente. Por exemplo:

envenv | moreenv | grep 'PS1'

Como definir e listar variáveis de ambiente no Linux usando o comando set

O comando env/printenv exibe apenas as variáveis de ambiente shell do Linux. E se precisar de ver uma lista de todas as variáveis, incluindo shell, ambiente, funções shell definidas pelo utilizador? Experimente o seguinte comando set para imprimir variáveis de ambiente:
set
set | grep BASH
br>>aqui está o que vemos:

BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}

O $PATH definiu o caminho de pesquisa de comandos. É uma lista de directórios separados por dois pontos em que a concha procura por comandos. O $PS1 define as suas definições de prompt. Veja a lista de todas as variáveis da shell normalmente utilizadas para mais informações. Pode exibir o valor de uma variável utilizando o comando printf ou comando echo:

div>>

echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"

Saídas do último comando exibindo a localização do meu directório home definido pela variável de ambiente $HOME no Linux:
/home/vivek

Configurar variáveis de ambiente no comando Linux

A sintaxe é bastante simples:

# A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false

Alguns pontos-chave a lembrar ao criar ou configurar variáveis de ambiente no Linux ao usar bash:

  1. Não colocar espaço em torno do símbolo =.
  2. Tal como os comandos Linux, os nomes das variáveis bash são sensíveis a maiúsculas e minúsculas. Tipicamente definimos variáveis de ambiente apenas em nomes de CASO UPPER e são consideradas melhores práticas, mas isto não é necessário.
  3. Por defeito, o âmbito da variável Linux é LOCAL. Podemos fazê-las GLOBAL (ou variável ambiental) usando o comando de exportação.

Deixe-nos imprimir valores das nossas VAR_NUM, VAR_NUM, MY_OS, e outras variáveis definidas anteriormente usando vários comandos:

echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed

Desactivação / remoção de variáveis e valores de shell

Podemos desactivar valores e atributos de variáveis e funções de shell utilizando o comando desactivar:

unset var_nameunset MY_OSunset is_backup_failed

Como definir variáveis de ambiente só de leitura no Linux ao utilizar o comando bash

Usamos o comando só de leitura como se segue:

readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI

/div>

Bash set up read only varible Linux commandp>Configurar leitura imutável…apenas bash variable on my Ubuntu Linux desktop

Acesso a variáveis definidas pelo utilizador em sub-camadas e outras instâncias

Deixe-nos iniciar uma nova instância de bash, introduzir e tentar imprimir valores como se segue:

# 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
Como definir e listar variáveis de ambiente em Linuxp>Configurar e listar variáveis de ambiente LOCAL em Linux

No passo # 4, a saída está vazia. Mas porquê? Significa que as variáveis que definimos não são variáveis ambientais, e que são LOCAL. Numa subcasa e noutras novas instâncias de shell, os valores das variáveis não são exportados. Assim, utilizamos o comando de exportação para as tornar GLOBAL ou variáveis de ambiente. Por exemplo:

export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
Como definir variáveis de ambiente no Linuxp>Configuração variáveis de ambiente (GLOBAL) no Linux usando exportação para a sessão de bash do utilizador actual e exportado

comando de exportação

P>Pode modificar cada variável de ambiente ou de sistema usando o comando de exportação. Defina a variável de ambiente PATH para incluir o directório onde instalou o directório de lixo com perl e shell scripts:

export PATH=${PATH}:/home/vivek/bin

OR

div>

div>>

export PATH=${PATH}:${HOME}/bin

Para definir a variável de ambiente JAVA_HOME para o directório onde foi instalada a aplicação J2SE SDK, entrar:

export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin

Pode-se definir múltiplos caminhos como se segue:

export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin

Uma nota sobre env e configuração de variáveis

P>Primeira variável NFS_ROOT definida para /efs/ec2/wwwdata e executar um script perl chamado check_for_files.pl
env NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
neste exemplo, executar ‘vim’ com o ambiente contendo ‘LOGNAME=nixcraft’,e ‘DISPLAY=desktop2:0’:
env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
>>definir FOO para barrar e imprimir com perl:
env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'br> Não conseguimos ver $FOO a partir da casca, pois só foi definido para o código perl:
echo "$FOO"

Como faço para que todas as definições de variáveis de ambiente sejam permanentes/persistentes no Linux?

O ~/.bash_profile ($HOME/.bash_profile) ou ~/.profile é executado quando se faz o login usando a consola ou remotamente usando o ssh. Digite o seguinte comando para editar ~/.bash_profile file, enter:
$ vi ~/.bash_profilebr>Aplicar as definições $PATH, enter:
export PATH=${PATH}:${HOME}/binbr>Guardar e fechar o ficheiro.

Configurar o nome da instância IBM DB2

Digite o seguinte comando:

export DB2INSTANCE=prod_sales

Nota Sobre /etc/profile File

/etc/profile ou /etc/profile.O directório d/ contém um ambiente de sistema Linux e programas de arranque. É utilizado por todos os utilizadores com bash, ksh, sh shell. Normalmente utilizado para definir a variável PATH, limites do utilizador, e outras definições para o utilizador. Funciona apenas para a shell de login. Se quiser fazer grandes alterações ou alterações específicas da aplicação utilize o directório /etc/profile.d/ como explicado aqui e aqui.
Ver os seguintes recursos:

  • Personalizar os ambientes bash shell a partir do wiki shell scripting do Linux.
  • UNIX Set Environment Variable

>>div>

div>>div>>div>>div>>

PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i'

>/div>/div>>/td>

>>>td>$HOME/.bash_logout

if ; then && /usr/bin/clear_console -qfi
File Purpose Exemplos (use o gato para ver um ficheiro)
/etc/environment Set up system-amplas variáveis ambientais.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
/etc/profile Linux em todo o sistema .ficheiro de perfil para a concha Bourne (sh) e conchas compatíveis com Bourne, tais como bash, ksh, ash, e outros.
if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi

/div>

/etc/profile.d/ Toda a personalização de grandes utilizadores e ambiente específico do sítio deve ser colocada neste directório. Isto é também em todo o sistema. $ ls -l /etc/profile.d/
$ cat /etc/profile.d/gawk.csh

gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"}
$HOME/.bash_profile O ficheiro de inicialização pessoal, executado para as shells de login.
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh

/td>

$HOME~/.bashrc O ficheiro de arranque individual per-interactivo.
O ficheiro individual de limpeza da shell de login, executado quando uma shell de login sai

Summing up

Aprendeu a definir e listar variáveis de ambiente no Linux quando usa bash:

>th>Descriptionth>Exemplo(s)

>>Veja ‘ajuda a declarar’

div>

declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096
comando só de leitura

>> comando set

Command
declare command Declare bash variables and give them attributes such as integer, matrizes indexadas, matrizes associativas, apenas leitura e assim por diante Se não forem dadas variáveis ou opções a declarar, exibirá os atributos e valores de todos (variáveis iguais ao conjunto em execução)
comandoenv Executar um programa num ambiente modificado. Imprimir todas as variáveis de ambiente.
envenv | moreenv | grep SERVER_ROOT

/div>

comando de exportação Comando que define variáveis de ambiente (GLOBAL) e ambiente de exportação para uma subconcha ou outras instâncias. export NFS_ROOT=/aws/ec2/efs
comando printenv Imprimir todas ou parte (dadas) das variáveis de ambiente no Linux.
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2'

/td>

Variáveis de shell de marca como inalteráveis, isto é variável de shell apenas de leitura ou constante
div>>

readonly K_VERSION="1.9.52"
Valores definidos ou não definidos de opções de shell e parâmetros posicionais. Além disso, apresenta todas as variáveis de ambiente. Veja ‘help set’

div>>div>

set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done
comando de caducidade Retira variáveis de shell e de ambiente. Nem todas as variáveis podem ser desajustadas. Por exemplo, as variáveis só de leitura não podem ser desajustadas. unset FOO

🐧 Obtenha os últimos tutoriais sobre Linux, Open Source & DevOps via RSS feed ou Weekly email newsletter.
🐧 23 comentários até agora… adicionar um ↓

>br>

Categoria Lista de comandos Unix e Linux
Gestão de ficheiros cat
Firewall Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04
Utilitários de rede dig – host – ip – nmap
OpenVPN CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04
Package Manager apk – apt
Process Management bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – time
Searching grep – whereis – which
Informação do utilizador grupos – id – lastcomm – último – tampa/libuser-lid – logname – membros – utilizadores – whoami – quem – w
WireGuard VPN Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *