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 |
Introdução
O programa do shell (normalmente diz-se apenas
shell) é um interpretador de comandos de linha. Existe muitos interpretadores
ou 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).
Utilizaremos neste curso o “bash” Shell. Isto
é apenas um ficheiro executável, cujo localização habitualmente é /bin/bash
O bash shell é muito popular, o seu nome é uma
brincadeira das palavras inglesas
born again shell (nascer novamente) e bourne (nome do autor do primeiro shell para Unix).
O bash shell 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 tipicamente 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 ou não e se o
shell aceite interagir com o utilizador ou não (interactive).
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 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
Nota: Ambiente
das salas de D.I.- o ficheiro .bashrc é lido a abrir um terminal ?
Símbolos
Especiais (wildcards)
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
* à qualquer string.
? à qualquer carácter.
.
à se o nome começa com este simbolo é um ficheiro
escondido
· no contexto dum
directório
. à
o
directório actual,
.. à o directório
em cima e
~ à o directório raiz.
Variáveis
do Shell
Variáveis são identificadores (símbolos) que
possuem valores que podem mudar/variar!
Algumas variáveis são
definidas quando se faz o login e por norma são escritas com maiúsculas e
persistem duma instância de Shell para outra (Variáveis do Ambiente) enquanto outras tem um âmbito da validade
(scope) que é o Shell actual.
Exemplos de variáveis
da ambiente são o HOME (directório raiz) o TERM (tipo de terminal) o SHELL
(programa de shell a utilizar por defeito).
Para declara e inicializar uma variável
utilize o sintaxe NOME=VALOR e para aceder ao seu valor utilize-se o sintaxe
$NOME
Para
que as variáveis são validas em sub-shells criados a partir dum shell original
é necessário declarar as 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
Exemplos :
source ~/.alias source ~/.bashrc
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
o próprio ls
alunos:~crocker$
ls –l /bin/ls
alunos:~crocker$ file /bin/ls
Um símbolo especial o
“.” . Este 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
Modificação do prompt:
Num
shell interactive o prompt é que se vê na ecrã quando o programa está a esperar do
próximo input/comando para interpretar. O
valor do prompt está guardado na
variável PS1.
Para modificar o prompt fazer PS1='value' (entre plicas ou aspas)
Exemplos PS1='>' 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=' ls –lt'
>alias cdjoao='
cd ~/sisops/a12345 ; ls'
· Para cancelar um alias usar o comando unalias. Por exemplo
>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 (.bashrc etc) ou muitos vezes poderão
ser inseridos num ficheiro “.alias” ou “.bash_aliases” que contêm
uma lista de atalhos subsequentemente lidos usando o comando
source pelo um dos ficheiros de configuração.
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 fich
Exercícios:
1.
Criar a pasta ~/sisops >mkdir
~/sisops
2.
Criar um ficheiro ~/.alias com alguns dos seguintes
atalhos
alias lst='ls –alt |
less'
alias dir='ls -a'
alias ll='ls –l'
alias rm='rm -i'
alias casa='cd;pwd;date'
alias cdso='cd
~/sisops; ls ; pwd'
alias
indent='indent -npsl
-bl'
alias cc='cc -Wall'
alias stdc='cd /usr/include; ls -l std*.h'
3.
ler o ficheiro
com o comando source ~/.alias e experimente!
> gedit ~/.alias & (Perguntar: que faz o & ?)
>source ~/.alias
>dir
>casa
4.
Crie um ficheiro chamado
“ola.c” com seguinte código usando um editora simples.
main() { printf("\nBem
Vindo\n") ; }
formatar o ficheiro usando o camando “indent” > indent ola.c
e voltar a ver as diferenças no ficheiro > cat ola.c
5.
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.
a. Tem de inserir a linha #include <stdio.h> no
inicio do ficheiro
b. Tratar do tipo e retorno da função main
6.
Tentar executar o
comando “ola” escrevendo
a. > ola
b. > ./ola
7.
Se tiver de
escrever ./ola modifique a variável PATH
para incluir o directório actual
PATH=$PATH:.
E tentar executar novamente
usando > ola
8. Criar o directório
~ /bin com o comando >mkdir ~/bin
9.
Mover o executável
ola para o directório ~/bin com o
comando
>mv ola ~/bin
e executar
>ola
10.
Consegue executar
o comando ola sem escrevendo o caminho completo ? (deverá ver qual o valor do
seu path? )
11.
Alterar o path
para incluir o diretório ~/bin e execute
o comando novamente ola !
Um
Ficheiro Típico ~/.bash_profile ~/.bashrc
PS1='\h \w \u sisops> '
PATH=$PATH:$HOME/bin:.
export PATH
if [ -f ~/.bash_aliases
];
then
source
~/.bash_aliases
fi
set -o noclobber