Variáveis de ambiente no Linux

As variáveis de ambiente são usadas para armazenar valores, que podem ser usados por scripts, executados a partir da shell.
Algumas variáveis de ambiente já fazem parte do sistema. Outras podem ser criadas por você.
No Bash, há 2 tipos de variáveis de ambiente ou (environment variables):

  1. locais — visíveis apenas dentro da shell, na qual foram criadas.
  2. globais — visíveis a todos os processos em execução numa shell.

Você pode usar o comando printenv, para ver quais são e como estão definidas as variáveis globais no seu ambiente atual:
Veja algumas das minhas:


printenv

LS_COLORS=di=7;32:fi=32:ln=4;32:pi=5;32:so=5;32:bd=5;32:cd=5;32:or=5;32:mi=5;32:ex=1;32:*.png=1;4;32:*.jpg=1;4;32
XDG_MENU_PREFIX=gnome-
LANG=pt_BR.UTF-8
GDM_LANG=pt_BR.UTF-8
DISPLAY=:0
COLORTERM=truecolor
USERNAME=justincase
DESKTOP_SESSION=gnome-xorg
WINDOWPATH=2
TERM=xterm-256color
SHELL=/bin/bash
VTE_VERSION=4602
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-xorg
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
PATH=/opt/Komodo-Edit-10/bin:/opt/Telegram/Telegram:/usr/local/bin:/usr/bin:/bin:/usr/games
_=/usr/bin/printenv

Para ver apenas uma das variáveis, use o comando echo:


echo $HOME

/home/justincase

Experimente ver outras variáveis no seu sistema.
Depois, experimente criar sua primeira variável de sistema:


meusite="https://elias.praciano.com"

echo $meusite

https://elias.praciano.com

Fique atento: os nomes das variáveis são sensíveis à caixa (case sensitive).
Por isso, $meusite e $MEUSITE são coisas totalmente diferentes.
variáveis de ambiente sistema linux

Como prática recomendada, use sempre as letras minúsculas, para nomear as suas variáveis.
Assim você evita confusão com as variáveis do sistema.

Antes de abordarmos o próximo tópico, vale lembrar que as variáveis declaradas em uma sessão ou dentro de uma janela de um console não terão validade em outra sessão ou console.

Como declarar uma variável global

Para definir uma variável global, é necessário declarar (como você já deve saber) uma variável local.
Depois disto, a exportamos com o comando export:


autor='Elias Praciano'
echo $autor

Elias Praciano

export autor

Note que não se usa o ‘$’ à frente do nome da variável, quando a passamos para o comando export.
O último passo, para tornar uma variável persistente entre as sessões, é editar o arquivo ~/.bashrc.
Inclua, ao final dele, a linha com o comando export:


export autor='Elias Praciano'

Após este procedimento, a variável autor poderá ser sempre invocada no seu sistema, com o valor ‘Elias Praciano” — ou até você mudar o seu valor ou remover a linha do arquivo .bashrc.

Como descartar variáveis de ambiente no Linux

O comando unset pode ser usado para remover variáveis da memória do sistema:


echo $autor

Elias Praciano

unset autor
echo $autor

Remova também as declarações referentes à variável do seu arquivo .bashrc, ou ela ressurgirá na próxima sessão.

Use o calendário incluído na shell CLI do Android

A shell mksh, incluída nos dispositivos Android, desde a versão 4.2, vem acompanhada de uma série de utilitários interessantes.
O seu smartphone tem possibilidades que você mal desconfia.

Quando estiver sem Internet e sem nada pra fazer e apenas com o seu smartphone na mão, brincar na shell CLI (Command Line Interface, ou “Interface da Linha de Comando”) pode ser uma alternativa.

Sei que a grande maioria das pessoas, não vai achar este tipo de coisa interessante… mas, enfim, eu nunca fiz parte desta “grande maioria” e adoro descobrir coisas novas no terminal.
Antes de continuar, certifique-se de ter instalado um emulador de terminal em seu smartphone ou tablet.
Feito isso, vamos conhecer o comando cal.

Como obter informações sobre datas e calendários no Android com o comando cal

Já adivinhou que “cal” é abreviatura de calendar ou “calendário”?
É um utilitário tradicional do mundo UNIX/Linux.


cal

     Junho 2017       
do se te qu qu se sá  
             1  2  3  
 4  5  6  7  8  9 10  
11 12 13 14 15 16 17  
18 19 20 21 22 23 24  
25 26 27 28 29 30  

No Linux, o utilitário vai destacar o dia atual, do mês — o que não ocorreu na CLI do meu celular (Android 7 Nougat).
linux shell cal command
Você pode obter o calendário de um determinado mês e ano, com o seguinte comando:


cal 8 2019

Em que o primeiro parâmetro é o número do mês do ano e o segundo o ano.
calendar 8 August 2019
Desta forma, sempre que precisar saber em que dia da semana cai um determinado dia do ano ou do mês, você pode usar este método autenticamente geek para descobrir.

10 dicas para personalizar o prompt do seu terminal

Quem usa o terminal com frequência pode ver grande utilidade na exibição de determinadas informações na linha de comando, na parte que vem antes do cursor.
A personalização pode ser uma brincadeira muito divertida para usuários comuns — mas os administradores, que precisam acessar servidores diferentes podem se beneficiar com command line prompts diferenciados (o que ajuda a saber exatamente em que servidor e diretório você está executando algum comando).
Na série de artigos Como personalizar o prompt da linha de comando no UNIX/Linux, abordei várias formas de configurar:

  • parte 1  — ajustes básicos do prompt
  • parte 2  — como adicionar informações do sistema ao prompt e tornar as mudanças definitivas
  • parte 3  — como colorir o prompt de comando
  • parte 4  — como passar informações do prompt para a barra de títulos do seu terminal

Se você tiver dúvidas, sugiro a leitura dos textos acima. Assim evitamos redundâncias neste artigo e que ele fique mais longo do que o necessário. 😉

Em outras palavras, este post assume que você já detém o conhecimento do que foi discutido naqueles artigos, de forma que possamos ser bem mais objetivos aqui.

Se você acompanhar as tags emulador de terminal e bash vai encontrar outros textos interessantes relacionados a este assunto também.

Exemplos de prompt que você pode experimentar agora

Os exemplos, que seguem, podem ser experimentados de imediato. Basta copiar e colar no seu terminal Linux, Unix ou mesmo no Bash do Windows (eu não testei isso).
Sinta-se encorajada(o) a modificá-los para atender melhor às suas necessidades. Se quiser compartilhar alguma dica de uso, fique á vontade para postar nos comentários.
Como primeiro exemplo, veja este prompt que exibe um smiley sorrindo para comandos normais e um triste para quando você digitar um comando errado:

PS1="\t \w \`if [ \$? = 0 ]; then echo \:\); else echo \:\(; fi\` " 

experimente digitar comandos errados, para ver a mudança no “humor” do smiley.
O código abaixo, exibe uma carinha um pouco diferente para cada tipo de “humor”:

PS1="\`if [ \$? = 0 ]; then echo \\\^\\\_\\\^; else echo \\\-\\\_\\\-; fi\`*\u \w:\h)"

Uma variação deste prompt, exibe um smiley mais simples:

PS1="\t \w \`if [ \$? = 0 ]; then echo \:\); else echo \:\(; fi\` " 

Os próximos exemplos usam smileys coloridos:

PS1="\[\e[01;32m\]\u@\h \[\e[01;34m\]\W \`if [ \$? = 0 ]; then echo -e '\e[01;32m:)'; else echo -e '\e[01;31m:('; fi\` \[\e[01;34m\]$\[\e[00m\]"

A configuração abaixo acrescenta o número do comando no histórico, no começo da linha.

PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ "

Se quiser saber mais sobre as cores e seus códigos, clique aqui.
Prompts em múltiplas linhas, podem conter uma quantidade maior de informações. Por outro lado, alguns usuários acham que isto polui o visual do terminal, que deveria ser um pouco mais espartano.
exemplo de prompt de comando
Se você não se importa com uma ou duas linhas a mais no prompt, mas prefere obter algumas informações imediatas, o exemplo que segue exibe o número de arquivos presentes no diretório atual e o espaço ocupado por eles.

PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"

Ao contrário do anterior, este é simples (espartano), só que usa cores. Você pode usá-lo, como base, para criar algo mais sofisticado.

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

Segue uma versão minimalista em 2 linhas:

PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"

Gosto muito desta versão, abaixo, com informações sobre o diretório atual e sem excesso de cores:

PS1="\n\[\e[30;1m\]\[\016\]l\[\017\(\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"

Atualmente, gosto do meu assim:

PS1="\n\[\e[34;1m\]\u@\h\[\e[30;1m\] \[\e[34;1m\][ \d, \@]\[\e[30;1m\]\n\[\e[30;1m\]kernel: \$(/bin/uname -r)\n\[\e[32;1m\]\w\[\e[30;1m\] (\[\e[34;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') arquivos, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"

Referências

https://slashdot.org/comments.pl?sid=108424&cid=9219400.
https://www.maketecheasier.com/8-useful-and-interesting-bash-prompts/.

Como personalizar o prompt da linha de comando no UNIX/Linux — parte 4

A personalização do prompt da linha de comando pode ir além de todas aquelas as informações sobre o sistema antes do cursor.
Se você prefere ter menos “coisas” no prompt, mas não quer abrir mão de algumas informações, saiba que é possível enviar alguns destes itens para a barra de títulos do console.
Tudo o que você precisa é acrescentar um pouquinho de código ao que você já tem no seu PS1 — como foi abordado na parte 1, parte 2 e parte 3 desta série de artigos.
O pedaço de código a mais segue aí, embaixo:

"\e]2;texto para a barra de titulo\a"

Basta substituir a cadeia “texto para a barra de titulo” pelo que você achar melhor.
O código para inserir data e hora na barra de título segue abaixo:

\e]2;\d, \t - \u@\h\a

Para ter efeito imediato, acrescente este código ao valor do seu PS1, conforme destacado, abaixo:

PS1='\e]2;\d, \t - \u@\h\a \[\e[0;33m\][\T]\n\[\e[1;36m\] \w > \[\e[0;32m\]'

data hora barra de título

Obviamente, o recurso nem sempre vai funcionar. Quando você estiver usando uma interface 100% caractere (CLI), conectado remotamente a um sistema headless ou, simplesmente, usando o terminal em tela cheia (F11), por exemplo.
Nestes casos, não será possível ver qualquer barra de títulos.

Como pesquisar eficientemente no histórico de comandos da Bash shell

Na linha de comandos, frequentemente queremos repetir algum procedimento, na íntegra ou com algumas modificações.
Para isso, há o histórico do Bash.
Você pode acessar o histórico da shell no arquivo .bash_history, que fica no seu diretório “home”. Veja como:

less ~/.bash_history

Você pode obter a mesma listagem, acrescida do número da linha de comando, com o próprio comando history:

history | less

Os números das linhas são úteis, por que podem ser evocados a qualquer momento no terminal. Ou seja, você não precisa redigitar o comando inteiro — basta fornecer o número dele no histórico.
Você pode combinar o history com o comando grep, para obter um histórico sobre um determinado item, que você tenha usado recentemente.
O exemplo abaixo lista o histórico de uso do comando apt:

history | grep apt

Veja como ficou a minha saída:

 1637  sudo apt install toilet
 1666  sudo apt update
 1667  apt list --upgradable 
 1668  apt show firmware-amd-graphics 
 1670  sudo apt autoremove 
 1671  sudo apt update
 1672  sudo apt full-upgrade 
 1673  sudo apt purge firmware-amd-graphics 
 1998  apt show zenity

Note que cada linha tem um número.
Se você quiser executar uma determinada linha de comando, use o símbolo ‘ ! ‘ (ponto de exclamação) seguido do número da linha correspondente:

!1668

history bash shell

Faça buscas por palavras dentro do histórico de comandos do Bash

Novamente, o comando grep pode ser usado para encontrar um nome de comando ou qualquer outra string dentro do .bash_history:

history | grep snap

Com o atalho de teclado ‘Ctrl+R’, é possível também fazer uma busca por uma string qualquer:

  • pressione simultaneamente as teclas ‘Ctrl’ e ‘R’
  • comece a digitar parte da palavra que deseja buscar
  • continue a pressionar ‘Ctrl+R’ até encontrar a linha de comando desejada

Quando encontrar, use a tecla de direcionamento para a direita ‘ → ‘, se quiser alterar o comando ou apenas tecle Enter, para executá-lo do jeito que ele já está.