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:
- Configurar o aspecto e a sensação da shell.
- Configurar definições do terminal, dependendo do terminal que estiver a utilizar.
- Configurar o caminho de pesquisa tal como JAVA_HOME, e ORACLE_HOME.
- Criar variáveis de ambiente conforme necessário pelos programas.
- Executar comandos que pretende executar sempre que iniciar ou terminar a sessão.
- Configurar pseudónimos e/ou função shell para automatizar tarefas para poupar digitação e tempo.
- Mudar o prompt de bash.
- 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
br>>aqui está o que vemos:
set | grep BASH
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:
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:
- Não colocar espaço em torno do símbolo =.
- 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.
- 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>
p>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
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"
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
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.plenv 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_profile
br>Aplicar as definições $PATH, enter:export PATH=${PATH}:${HOME}/bin
br>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
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:
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 |
🐧 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 |