Páginas

23 de nov. de 2006

BASH – Bourne-Again Shell - De usuário para usuário





Tentarei fornecer alguma noção básica sobre a utilização do poderoso BASH,o terminal de linha de comandos do linux.Este artigo serve apenas para estimular o leitor a ir em busca de informação mais completa a fim de ter um controle maior sobre seu sistema operacional.Considere este um bate-papo de usuário para usuário que tem seu linux instalado em casa e muitas vezes precisa “se virar sozinho”.O objetivo é eliminar a idéia de bicho-papão que se tem da linha de comandos,tentando mostrar sua utilidade e simplicidade.
Existem vários tipos de shell que são : Csh (C Shell),Tcsh(Tenex/Tops C Shell),Ksh (Korn Shell),Sh (Bourne Shell) e o citado acima,Bash (Bourne-Again Shell),este último geralmente o padrão no linux.
Existem duas formas básicas de acessar o shell,a forma tradicional é o que se chama “shell puro” e para saber como ele é tecle ctrl+alt+F1 e veja o que vai acontecer,não se assuste,para retornar ao modo gráfico simplesmente digite startx .
O usuário pode acessar,usar,vários terminais virtuais (console,shell) simultaneamente conforme descrito no Guia Foca Linux “2.2 Terminal Virtual (console)”.
“Terminal (ou console) é o teclado e tela conectados em seu computador. O GNU/Linux faz uso de sua característica multi-usuária usando os "terminais virtuais". Um terminal virtual é uma segunda seção de trabalho completamente independente de outras, que pode ser acessada no computador local ou remotamente via telnet, rsh, rlogin, etc.
No GNU/Linux, em modo texto, você pode acessar outros terminais virtuais segurando a tecla ALT e pressionando F1 a F6. Cada tecla de função corresponde a um número de terminal do 1 ao 6 (o sétimo é usado por padrão pelo ambiente gráfico X). O GNU/Linux possui mais de 63 terminais virtuais, mas apenas 6 estão disponíveis inicialmente por motivos de economia de memória RAM (cada terminal virtual ocupa aproximadamente 350 Kb de memória RAM, desative a quantidade que não estiver usando para liberar memória RAM para uso de outros programas!) .
Se estiver usando o modo gráfico, você deve segurar CTRL+ ALT enquanto pressiona uma tela de F1 a F6.
Um exemplo prático: Se você estiver usando o sistema no Terminal 1 com o nome "joao" e desejar entrar como "root" para instalar algum programa, segure ALT enquanto pressiona para abrir o segundo terminal virtual e faça o login como "root". Será aberta uma nova seção para o usuário "root" e você poderá retornar a hora que quiser para o primeiro terminal pressionando ALT+F1”.
Em algumas distribuíções é possível que você não consiga retornar ao modo gráfic
o apenas dando um startx,caso aconteça não fique apavorado(a) apenas digite alguns comandos a mais,assim :

/etc/init.d/gdm stop (para gnome)
/etc/init.d/kdm stop (para kde)

Talvez seja necessário usar privilégios de root para fazer isto.Logo após o enter vai aparecer uma mensagem dizendo que o kdm ou gdm foi desativado.Então,aí sim,digite o startx.Se mesmo assim não der certo use o famoso crtl+alt+del,isto vai reiniciar o sistema e tudo volta ao lugar.

Outro detalhe importante que algumas distribuíções não permitem fazer é o login em modo gráfico como root,e estão certas,afinal logar como root é sempre um risco,mas em algumas situações talvez seja necessário fazer isso,resolver o que se pretende rapidamente e depois voltar como usuário comum.Uma forma de fazer é assim:

ctrl + alt + F1 para entrar em modo texto
login como usuario normal
sudo su para virar root ( em algumas é su + senha)
/etc/init.d/gdm stop para desativar o gdm e X ou
/etc/init.d/kdm stop para desativar o kdm e X
startx para iniciar o gnome ou kde como root dependendo de qual é o default.

Usuários do slackware não precisam destas instruções porque o default do sistema é o login em modo texto,o usuário tem a liberdade de escolher se vai logar como usuário comum ou root.
A estrutura do sistema operacional pode ser dividida em três níveis : O kernel,o Shell(terminal virtual,console) e as ferramentas e aplicativos.
Atualmente quando falamos em interface de usuário pensamos logo em tela gŕafica com botões,ícones,barras e links para interagirmos com o computador,mas o verdadeiro poder de uso de um sistema operacional é em modo texto e no linux isso é uma verdade e frequentemente uma necessidade se a pessoa quer saber realmente como as coisas funcionam.Finalmente,no linux o Shell é a interface mais simples entre o ser humano e o computador,técnicamente falando o shell é o interpretador de comandos.O trabalho dele é analisar o texto digitado,os comandos digitados,e executá-los produzindo algum tipo de resultado.É a ferramenta que nos possibilita comunicar com o kernel (núcleo) do sistema operacional.

Outra detalhe importante é saber identificar quando se está como root ou usuário comum no shell.fazemos isso observando os caracteres :

~$ significa vocẽ está como usuário comum ( com privilégios limitados,mas suficientes para tarefas comuns,rotineiras e sem condições de danificar o sistema)

~# significa que vocẽ está como root (que é o administrador todo-poderoso,podendo até destruir o sistema inteiro,porque tem-se acesso a todos os arquivos críticos do sistema com ampla permissão de leitura,escrita e execução ) .
Outro detalhe igualmente interessante de saber é o que siginifica os caracteres que aparecem antes do cursor,o formato do prompt de comandos padrão do Bash,que tem a seguinte sintaxe :

\u@\h:\w\$

Sendo,

O \u é para o nome do usuário,o \h é para o nome do sistema (hostname),o \w é o diretório atual.Por exemplo :

usuário@ubuntu:~$ ( o til representa o diretório /home)

É possível alterar o nome do hostname,existe um comando para fazer isso,chamado de hostname,sua sintaxe é:

hostname [nome]

Onde [nome] é o nome a ser atribuído ao host local,preferêncialmente em letras minúsculas e evitando usar os caracteres especiais(você foi avisado!).Caso omitido e nenhuma opção passada hostname retornará o nome do host tal qual obtido pela função gethostname().Para saber quais as opções disponíveis para o comando hostname digite:

~$ info hostname

Outra coisa interessante é saber qual shell está instalado e que fica disponível logo que o usuário faz o login,para saber digite no terminal:

~$ echo $SHELL
Se for o bash a resposta será

/bin/bash

Precisamos estar atentos para um detalhe importante no mundo linux,quando digitamos os comandos no terminal,porque existe diferenças entre maiúsculas e minúsculas,sendo isto técnicamente chamdo de case sensitive,ou seja cd é diferente de CD,mv difere de MV,arquivo difere de ARQUIVO e assim por diante,portanto muito cuidado quando digitar comandos.

Para sair do shell ou encerrar a sessão,use os comandos:

~$ exit ( este encerra apenas o shell em uso )

~$ logout (encerra a sessão do usuário)

Os especialistas recomendam utilizar preferencialmente o exit porque pode acontecer que o usuário tenha invocado um shell a partir do outro.

Quando estamos no modo texto ou linha de comando no linux temos uma diversidade enorme de comandos a nossa disposição para usar .Após digtarmos um comando qualquer sempre teclamos enter e a informação é examinada pelo interpretador de comandos (shell,terminal virtual,console ) e logo em seguida repassados para o linux (kernel) que então executa a ação desejada ou retorna uma mensagem de erro.A sintaxe comumente usada pelos comandos é esta:
$ comando [opções] [argumentos]

Outra coisa legal de saber é como usar a ajuda do sistema estando no shell,ou seja a ajuda nativa do sistema. Vamos lá.

No terminal é só digitar :

~$ Help

A saída do comando é esta ( aqui está em português porque eu instalaei os arquivos de tradução,mas normalmente estará em inglês mesmo):

~$ help
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Esses comandos do shell são definidos internamente. Digite `help' para ver essa lista.
Digite `help nome' para saber mais sobre a função `nome'.
Use `info bash' para saber mais sobre shell em geral.
Use `man -k' ou `info' para saber mais sobre comandos que não estão nessa lista.


Um asterísco (*) próximo ao nome significa que o comando está desabilitado.
.....

Depois deste texto acima vem uma lista de comandos internos do shell .
Segundo nosso guru de shell Julio Cézar Neves,em seu livro “Programação shell linux” na página 06,na 5ª edição explica o seguinte :

“O comando help é utilizado para mostrar informações gerais dos built-ins do shell ( chama-se built-ins os comandos que são incorporados ao shell,isto é,não são instruções autônomas como o who,por exemplo.São comandos cujos códigos se encontram incorporados ao código do shell).Este comando é muito útil para novos usuários.”

Outra explicação muito boa nos é oferecida pelo Guia Focalinux,deste jeito,no ítem 31.4 HELP:
“Ajuda rápida, útil para saber que opções podem ser usadas com os comandos internos do interpretador de comandos. O comando help somente mostra a ajuda para comandos internos...”

Outra fonte de ajuda são as famosas man pages,páginas de manual,acessível também pelo shell. É a documentação padrão do linux,ali está a ajuda para todos os comandos padrão do sistema.Os utilitários e aplicativos podem incluir instruções nas man pages,mas isso tem de ser feito por eles mesmos na sua instalação,espera-se que o desenvolvedor do aplicativo ou utilitário tenha programado isto.As man pages são divididas em oito seções.,como descrito abaixo.

  • 1 – Comandos do usuários(User Commands): Comandos para serem executados a partir do shell.
  • 2 – Chamadas do sistema(System Calls): Funções executadas pelo kernel.
  • 3 – Bibliotecas de funções(Library Subroutines): A maioria das funções da biblioteca libc
  • 4 – Formatos de arquivos especiais(File Formats): Drivers e hardware
  • 5 – Arquivos de configuração(Miscellaneous): Formatos de arquivos e convenções
  • 6 – Jogos e demonstrações(Games): Jogos do X11
  • 7 – Pacotes de macros e convenções(Devices): Sistemas de arquivos,protocolos de rede,códigos ASCII e outros.
  • 8 – Comandos de administração do sistema(System Administration): Comandos que geralmente só o root pode executar.

Para fazer uma consulta nas man pages basta usar uma sintaxe muito simples e eficiente:

man [seção] [tópico] ou

man + comando

Exemplo

man 1 ls
man mkdir

sendo,

[seção] Indica uma das selões do manual
[tópico] Qual tópico pesquisar.Deve ser o nome do comando,chamada do sistema,biblioteca,etc.

Ou simplesmente:

man -k + palavra chave
(não se esqueça que sua palavra chave tem de estar em inglês ) Faz uma pesquisa com base na palavra chave que foi digitada listando comandos que possuam esta descrição.Exemplo:

~$ man -k copy
bcopy (3) - copy byte sequence
btcopyannounce (1) - copy torrent announce information to other torrents
copysign (3) - copy sign of a number
copysignf (3) - copy sign of a number
copysignl (3) - copy sign of a number
cp (1) - copy files and directories
.....

Uma diferença básica se faz necessária ao utilizar o termo man,porque existe o comando man e o utilitário man,o comando apresenta as páginas de manual,entretanto man é também o utilitário de documenmtação padrão.
Depois de encontrar o tópico selecionado o programa aceita comandos diretamente.Alguns são:
  • -h Mostra a ajuda
  • q Sai do man
  • [N]e Avança uma linha ou N linhas
  • [N]y Volta uma linha ou N linhas
  • f Avança uma tela
  • b Volta uma tela
  • /texto Pesquisa um texto no texto apresentado pelo man
  • Mostra a pŕoxima linha
  • Mostra a pŕoxima página

Um comando muito útil que se pode utilizar no shell para obter informações é tembém o apropos

Sintaxe : apropos comando

Pesquisa um banco de dados que tem a descrição do comando desejado.Útil quando se deseja executar alguma tarefa e não se sabe o nome do comando.
Para descobrir por exemplo qual o compilador está instalado bastaria digitar:

$ apropos compiler
c++ (1) - GNU project C and C++ compiler
c89 (1) - ANSI (1989) C compiler
c89-gcc (1) - ANSI (1989) C compiler
c99 (1) - ANSI (1999) C compiler
c99-gcc (1) - ANSI (1999) C compiler
cc (1) - GNU project C and C++ compiler
ccmakedep (1x) - create dependencies in makefiles using a C compiler
g++ (1) - GNU project C and C++ compiler
g++-4.1 (1) - GNU project C and C++ compiler
gcc (1) - GNU project C and C++ compiler
gcc-4.1 (1) - GNU project C and C++ compiler
i486-linux-gnu-g++ (1) - GNU project C and C++ compiler
i486-linux-gnu-g++-4.1 (1) - GNU project C and C++ compiler
i486-linux-gnu-gcc (1) - GNU project C and C++ compiler
i486-linux-gnu-gcc-4.1 (1) - GNU project C and C++ compiler
.......

Depois de obtaer a informação bastaria:

man gcc

Como nem tudo são flores,caso apareça a seguinte mensagem:

~$ apropos compiler
apropos : file /usr/local/main/whatis not found
Create the whatis database using the catman -w comand

Isto significa que o tal banco de dados ainda não foi criado e a mensagem está te dizendo para fazer isso e te fornece inclusive qual o comando para criar o banco de dados que o apropos vai utilizar.Então para construir o banco de dados basta digitar:
~$ catman -w

Depois de criado o banco de dados o comando apropos ou man -k estará disponível.

Outro comando disponível para ajuda é o whatis.A diferença dele para o apropos é que o whatis obtém uma breve descrição do comando:

Sintaxe: whatis comando

~$ whatis chmod
chmod (1) - change file access permissions
chmod (2) - change permissions of a file

Com apropos

~$ apropos chmod
chmod (1) - change file access permissions
chmod (2) - change permissions of a file
fchmod (2) - change permissions of a file
fchmodat (2) - change permissions of a file relative to a directory file descriptor

Algumas teclas de atalho úteis do shell:

  • Ctrl+A = Move o cursor para o inicio da linha;
  • Ctrl+E = Move o cursor para o fim da linha;
  • Ctrl+U = Apaga o que estiver a esquerda do cursor;
  • Ctrl+K = Apaga o que estiver a direita do cursor;
  • Ctrl+L = Limpa a tela e mantém o texto que estiver sendo digitado.
  • Ctrl+f = Avança o cursor um caracter
  • Ctrl+b = Volta o cursor um caracter
  • Ctrl+d = Deleta o caracter sob o cursor
  • Ctrl+h = Deleta o caracter antes do cursor
  • ESC-f = Avança o cursor até o final de uma palavra
  • ESC-b = Volta o cursor até o início de uma palavra
  • ESC-d = Deleta a partir do cursor (inclusive) até o final da palavra
  • ESC-C+h = Deleta a partir do cursor até o início da palavra
  • ESC-\ = Deleta espaços em branco antes e depois do cursor
  • ESC-[TAB] = Idem ao anterior, porém procura apenas os comandos que estão no histórico
  • ESC-/ = Tenta completar procurando apenas no diretório corrente
  • Ctrl+x-/ = Lista todas as possibilidades de completar o texto que precedeu o comando
  • ESC-~ = Tenta completar procurando no passwd pelo nome do usuário
  • Ctrl+x-~ = Lista todos os usuários que podem ser completados
  • ESC-u = Passa para maiúsculo desde a posição do cursor até o final da palavra
  • ESC-l = Passa para minúsculo desde a posição do cursor até o final da palavra
  • ESC-c = Passa para maiúsculo apenas a letra sob o cursor e muda para minúscula a partir do caracter seguinte até o final da palavra.
  • [Ctrl+x][Ctrl+e] =Edita a linha corrente usando o programa setado em $EDITOR executando o comando assim que finalizar o mesmo.
  • [Ctrl+x][Ctrl+v] = Mostra a versão do shell
  • TAB = Autocompletar - se for pressionada logo após alumas letras, ele tentará completar o comando procurando por programas executáveis. A ordem e os locais de procura são tirados do $PATH
Com estas dicas já temos condições de fuçar bastante nas man pages e ir testando os comandos. Entretanto vocẽ pode também adquirir algum livro ou baixar o Guia focalinux,o guia é grátis,os livros lógicamente não,mas comprando-os nós estaremos contribuíndo com os autores que se esforçam para disponibilizar material de qualidade,dê preferêrencia aos escritores Brasileiros sempre que possível.Espero que tenha contribuído,ainda que pouco,para seu estudo pessoal.Sucesso. :)

Bibliografia:

  • Programação Shell Linux – 5ª edição – Julio Neves
  • Certificação Linux – Uirá Ribeiro
  • Linux Modo Texto Para Profissionais – Moisés pereira Alves
  • Linux para profissionais – Do Básico à Conexão de Redes – George L. jamil &Bernardo A. Gouvêa
  • Guia Foca Linux – Gleidysom mazioli da Silva
  • Comandos do Linux – Guia de Consulta Rápida - Roberto G. A. Veiga
  • Atalhos de teclado no Bash - Rodrigo Zarth - http://br-linux.org/tutoriais/002229.html

Nenhum comentário:

Postar um comentário