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: 01/01/2016
Introdução

 

O programa do shell /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 (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 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 sem alterações.

 

Ficheiros de Configuração

 

Ficheiros de configuração do shell são em primeiro lugar os ficheiros configurados pelo administrador do systemgeneric 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

Nota:  Ambiente das salas de D.I.- o ficheiro .bashrc é lido a abrir um terminal ?

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 “*” que indica qualquer string e o “?” que indique qualquer carácter.

·        no contexto dum directório o “.” indique o directório actual,  o  “..” o directório em cima e 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:

 

Para definir um alias o sintaxe é   alias  comand=valor.  

 

Exemplos                >alias adeus=' logout'   

              >alias more='less'

              >alias dir=' lslt'

                                  >alias xsjoao=' cd ~/so2016/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 directamente 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.      Criar um ficheiro ~/.alias com alguns dos seguintes aliases

 

alias lst='ls -alt|less'

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

alias dir='ls -a'

alias ll='ls –l'

alias rm='rm -i'

alias cc='cc -Wall'

alias casa='cd;pwd;date'

alias indent='indent -npsl -bl'

alias  cdso='cd so2016; ls ; pwd'

 

2.      ler o ficheiro com o comando source  ~/.alias e experimente!

 

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

>source ~/.alias

>dir

>casa

>mkdir ~/so206

>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

a.      >./ola

b.      >ola

 

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

PATH=$PATH:/.

 

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

>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

 

PS1='\h \w  \u so2016> '

PATH=$PATH:$HOME/bin:.

export PATH

if   [  -f   ~/.alias   ];  then

  source  ~/.alias

fi

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.