1

Configuração do

Interpretador de Comandos

 

(Bash Shell)

 

 

 

 

 

 

Os objectivos deste módulo são os seguintes:

 

·       Configuração do Bash Shell

·       Variáveis de Ambiente

·       Path

·       Alias

·       Ficheiros de Configuração

 

 

 

Revisão: 21/02/2018
Introdução

 

O programa do Shell, por defeito, /bin/bash (normalmente diz-se apenas shell) é um interpretador de comando de linha. Existe muitos programas shell para Linux como o csh, sh, tcsh etc. O seu shell por defeito faz parte da definição do utilizador (ver ficheiro /etc/passwd). O bash shell é muito popular, o seu nome é uma brincadeira das palavras ingleses born again (nascer) e bourne (nome do autor do primeiro shell para Unix). O Bash utilize um conjunto de ficheiros de iniciação para criar um ambiente de trabalho e execução. Os ficheiros globais de configuração estão no directório /etc , a seguir ficheiros no seu directório raiz (home directory) podem depois adicionar ou reconfigurar o ambiente. Também o tipo de configuração varie conforme se o shell é do tipo login e se o shell aceite interage com o utilizador ou não.

 

Uma sessão “interactive login shell” é iniciado depois de fazer um login. Este tipo de Shell normalmente leia o ficheiro  ~/.bash_profile  e/ou o ficheiro o ~/.bashrc

 

Uma sessão “interactive non-login shell” é normalmente inicializada na linha de comando invocando o próprio programa do shell  (escrevendo, /bin/bash) ou pelo comando su ou através dum xterm ou console iniciado dentro duma ambiente gráfica. Este tipo de Shell normalmente leia o ficheiro ~/.bashrc do utilizador para mais configurações do ambiente.

 

Uma sessão “non-interactive shell” pode ser iniciado, por exemplo executando um script (ficheiro de comandos). Não e “interactive” porque o script execute sem necessidade de comunicar com o utilizador, neste caso o ambiente do shell do progenitor é herdado.

 

Ficheiros de Configuração

 

Ficheiros de configuração do shell são em primeiro lugar os ficheiros configurados pelo administrador do system “generic system-wide” e depois os ficheiros de configuração controlado por cada utilizador .

 

o   /etc/profile     : generic system-wide  profile

o   /etc/bashrc    : generic system-wide .bashrc file for interactive bash shells.

o   .bash_profile  : user profile - processado no login

o   .bashrc           : setup-file processado cada vez se-inicia um interactive non-login shell

o   .bash_login    : processado no login

o   .bash_logout : processado no logout

Reference: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Símbolos Especiais e Variáveis do Ambiente

Alguns símbolos são interpretados duma maneira especial pelo Shell e também pelo seu contexto de utilização.  Exemplos são:

·       no contexto dum nome dum ficheiro

·       o “*”  à qualquer string.

·       o “?”  à qualquer carácter.

·       no contexto dum directório

·       o “.”   à o directório actual.

·       o  “..” à o directório em cima.

·       o “~”  à o directório raiz.

 

Outros símbolos tem valores que podem mudar (variáveis), alguns são definidos quando se faz o login e por norma são escritos com maiúsculas . Exemplos são o HOME (directório raiz) o TERM (tipo de terminal) o SHELL (programa de shell a utilizar por defeito).

 

 

A Variável do Ambiente (Environment Variable) PATH

A variável PATH contem uma lista de directórios separados por “:”.  (Nota. Em Windows  “;”)

Para ver o seu path pode utilizar o comando echo.

alunos:~ crocker$ echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/Network/Servers/docentes/crocker/bin:.

A escrever o nome dum comando o sistema operativo pesquisará esta lista pela ordem definido até encontrar um ficheiro executável com o nome indicado. Depois executará o comando. Por exemplo a escrever o comando “ls” estamos a executar o ficheiro localizado no directório /bin que normalmente constará como um dos directórios no PATH.

Para ver se um comando especifico esta no path utilize-se o comando which

alunos:~crocker$ which ls

/bin/ls              

 

 

Deverás inspeccionar o tipo e a as propriedades do ficheiro /bin/ls com os comandos  file e  ls

 

alunos:~crocker$ ls  –l /bin/ls

alunos:~crocker$ file  /bin/ls

Um símbolo especial o “.”indique o “directório actual”. Se este directório não estiver incluído no seu path estará condenado a escrever  ./a.out para executar o ficheiro a.out localizado no directório actual porque a escrever apenas a.out   o bash shell do sistema operativo não localizará o ficheiro e responderá com “bash: a.out command not found” Para  rectificar esta situação altera o path assim :

PATH=$PATH:.

export PATH

 

Variáveis do Shell

 

Variáveis do shell são definidos com um simples sintaxe nomeVariavel=valor.

 

O valor é usado usando o sintaxe   $nomeVariavel

 

No entanto variáveis são apenas validas na ambiente do shell actual.

 

Para que as variáveis são validas em sub-shells criados a partir dum shell original é necessário declarar a variáveis “global” usando o comando “export.

 

Se tiver variáveis, definições etc. definidos num ficheiro pode carregar este ficheiro dentro da ambiente do shows actual com o comando source

 

>source  .alias

>source .bashrc

>source .bash_profile

 

 

 


Modificação do prompt:

 

Num shell interactive o prompt é que se vê na ecrã quando o programa está a esperar do próximo comando para interpretar. O valor do prompt está guardado na variável PS1.

Para modificar o prompt fazer PS1='value'   (entre plicas ou aspas)            

 

Dois Exemplos     PS1='Bom Dia>'       PS1='`ls`\nOla'

 

Alguns códigos que possam ser incluídos no prompt

Por defeito  PS1='\h:\w \u\$ '  e está definido no ficheiro /etc/bashrc.

Agora verifique e altere o seu prompt !

Aliases or Shortcuts:

Um “alias” é um atalho para uma ou mais comandos: Para definir um alias:

 o sintaxe é   alias  comand=valor.  

 

Exemplos                >alias adeus=' logout'   

              >alias more='less'

              >alias dir=' ls –lt'

                                >alias xsjoao=' cd ~/so2018/a3456 ; ls'

 

Para cancelar um alias >unalias adeus

Para visualizar os aliases definidos basta escrever o comando sem opções:   >alias

 

Os aliases podem ser inseridos num ficheiro de configuração ou muitos vezes poderão ser inseridos num ficheiro “.alias” que contêm os seus aliases e subsequentemente lidos usando o comando source.

 

Bash Shell Options - NoClobber:

 

Existe muitas opções do shell que possam ser configurados. Um exemplo é a opção “noclobber”.  Se a opção noclobber estiver ligado não se pode, por engano, apagar um ficheiro utilizando redireccionamento.  O comando para ligar a opção noclobber é: 

 

set -o noclobber  e para desligar  set +o noclobber

 

 Exemplo:

[crocker@penhas]$  PS1='Ola bash>'

Ola bash> set -o noclobber

Ola bash> touch trash

Ola bash> cat ficheiro > trash

bash: trash: cannot overwrite existing file

Ola bash> set +o noclobber

Ola bash> cat ficheiro > trash

Ola bash>


Exercícios:

 

1.    Visualizar os seus atalhos existentes (>alias) e as suas variáveis de ambiente (>env)

 

2.    Criar um ficheiro ~/.alias com alguns dos seguintes aliases. A seguir carrgera/ler o ficheiro com o comando source  ~/.alias e experimente!

 

alias lst='ls -alt|less'

alias  stdc='cd /usr/include; ls  -l  std*.h'

alias dir='ls -a'

alias rm='rm -i'

alias cc='cc -Wall'

alias casa='cd;pwd;date'

alias indent='indent -npsl -bl'

alias  cdso='cd so2018; ls ; pwd'

 

>nano ~/.alias   (ou gedit ~/.alias &)

>source ~/.alias

>dir

>casa

>mkdir ~/so2018

>cdso

 

3.    Crie um ficheiro chamado “ola.c”com o seguinte código.

 

main(){char *s=”ola” ; printf(“\n%s Bem Vindo ao SO\n”,ola);}

 

4.    Compile com as opções seguintes:     cc  –Wall  –o ola ola.c   e a seguir alterar o código fonte para eliminar os avisos da compilação do programa.

 

5.    Execute o comando “ola” escrevendo

>ola

>./ola

 

6.    Se tiver de escrever ./ola modifique  a variável PATH para incluir o directório actual

>PATH=$PATH:.

>ola

 

7.    Criar o directório  ~ /bin com o comando >mkdir ~/bin

 

8.    Mover o executável ola para o directório ~/bin  com o comando  >mv  ola  ~/bin  e executar

>$HOME/bin/ola

>ola

 

9.    Consegue executar o comando ola sem escrevendo o caminho completo ? (deverá ver qual o valor do seu path? )

 

10.  Alterar o path para incluir o directório ~/bin (fazer o commando >hash -r se for necessário) e execute o comando ola ! 

 

Um Ficheiro Típico  ~/.bash_profile     ~/.bashrc

 

Acrescentar e testar source ~/.bash_profile

PS1='\h \w  so2018> '

export PATH=$PATH:$HOME/bin:.

if   [  -f   ~/.alias   ];  then

  source  ~/.alias

fi

#Live Dangerously Don’t set  -o  noclobber


Exercícios Para Casa - Criação de Aliases

 

Investigue os comandos: 

grep,  tree,  chmod, cp e dd

usando o online help do Linux (the manual pages) fazendo por exemplo   >man grep

 

Podem usar a ajuda do Internet do “google” mas a ajuda online “man” é muito útil!

 

Exercício nº1

 

Implemente um comando Unix, designado por linubi, que mostre todas as linhas dum ficheiro que contém a palavra UBI.

 

Exercício nº2

 

Implemente um comando Unix, designado por mst, que mostre todos os ficheiros duma directoria (pasta) e suas subdirectorias.

 

Exercício nº3

 

Implemente um comando Unix, designado por inib, que iniba a permissão de leitura dum ficheiro ao grupo a que pertence o seu proprietário.

 

Exercício nº4

 

Verificar se existir no seu sistema o comando “tree”. Se existir implemente um comando, designado por dls, que faça a listagem da estrutura de directorias (apenas directorias) a partir da directoria fornecida como argumento.

 

 

 

 

Soluções :

 

alias linubi='grep UBI'

alias mst='ls -R'

alias inib='chmod g-r'

alias dls='tree -d'