19 de abr de 2013

Aprendendo Shell / Bash


Em uma aula de Software Livre, abordei as questões da necessidade de uma certa fluência na utilização dos comandos mais conhecidos por linha de comando, ou CL (Command Line); Quando menciono certa fluência, o que quero dizer é o conhecimento básico para administração de um sistema, manipulação de arquivos de configuração, cópias de arquivos, uso de utilitários de atualização do sistema, como "aptitude", "apt-get", "dpkg" ou edição de textos com "vim".

Quem não conhece ou nunca utilizou os comandos presentes no shell, não imagina o ganho de produtividade e versatilidade em administrar Sistemas Linux. Naturalmente, o aprendizado não é somente memorização de comandos e suas sintaxes, mas no curto e médio prazo, ja é possível tirar bons proveitos do estudo de cada domando. Além disso, altamente recomendado como uma primeira linguagem para aprender os primeiros passos em programação de computadores conforme Jon "Maddog" Hall no seu blog em [1].

Então, o shell é um interpretador que está entre o usuário e o kernel do sistema operacional, fazendo todas as análises dos comandos, checando por exemplo sua sintaxe, se o comando é válido e enviando as requisições para execução. Costumo dizer que o shell é o ponto mais próximos que podemos estar do kernel de um sistema Linux e, lógicamente, o kernel é o ponto mais próximo dos dispositivos de hardware própriamente dito, como execução de comandos de leitura e gravação em disco ou comunicação com impressoras por exemplo. Como dito no paragráfo anterior, outra grande utilidade do shell é ser uma linguagem de programação, conhecida como "script shell" com objetivos de automatizar programas, configurações, instalações, etc.

Crédito imagem: http://apoie.org/JulioNeves/PapoI.htm


O Shell mais conhecido no mundo Linux é o  bash − GNU Bourne-Again SHell. O Bash é um interpretador de comando compatível com sh capaz de executar comandos pela entrada padrão ou através de um arquivo. Também incorpora características úteis do ksh e csh, fielmente seguindo as especificações POSIX (IEEE Standard 1003.1).

Caso necessite informações sobre o bash, instale o bash-doc e vefifique sua documentação em /usr/share/doc/bash-doc ou sua man page (man bash);


Para trabalhar com eficácia no Shell, recomendo o estudo de alguns comandos simples e ter disciplina para aprender todo dia um pouco, por exemplo, iniciando por aqueles comandos mais simples, com manipulação de arquivos e diretórios; ao surgir dúvidas, a ferramenta mais acessível para ter informações sobre um comando é o próprio comando seguido do --help, como por exemplo ls --help, ou usando a man page (man ls); Abaixo vou listar comandos que julgo ser necessário seu estudo para uma utilização do estudante de Software Livre:


pwd mostra o diretório atual
ls                 lista arquivos no diretório corrente (ls -l, ls -lhat)
man             exibe um manual do comando especificado (man ls)
mkdir          cria um diretório
rm               remove arquivo
rm -rf          cuidado, remove diretório de forma recursiva
|                  pipe, concatena comandos
>            cria arquivo
>>     cria ou adiciona dados em um arquivo
/dev/null      direciona a saida descartando os resultados
find             comando útil para localização de arquivos
ps               mostra os processos correntes, ex ps -aux
kill              mata um processo pelo seu número
pkill            mata um processo pelo seu nome
alias           útil para dar "apelidos" a comandos, ex: alias cp='cp -i'
cal             apresenda o calendário
chmod       permite atribuir modos a um arquivo
less            similar ao more, premite visualizar o conteúdo de um arquivo
chown       permite alterar dono e grupo de um arquivo
clear (ctrl+l)  limpa a tela
tar             comando para backup
gzip           comprime ou expande um arquivo
date           mostra a data corrente, configura data no sistema
du              disk user
df               reporta o espaço usado no disco
file             determina um tipo de arquivo
find            procura por arquivos na hierarquia de diretórios          
head          mostra o inicio de um arquivo
ln              cria links simbólicos
mail            envia e-mail
more            controla a saida de um comando
password        cria, altera senha, bloqueio/desbloqueio de usuário
ping            não conhece o ping?
hostname        retorna ou configura o hostname de uma máquina
reboot          reinicia o sistema
shutdown        desliga o sistema
rmdir           exclui um diretório
tail            útil para checagem de logs
su              sudo user
wc              util para contar linhas, palavras de um arquivo
whereis         mostra o local de um comando    
who             who am i
top             mostra informações sobre o sistema, atividade, uptime, etc
uptime          mostra tempo do sistema ligado
mount           monta dispositivos de blocos, discos, etc
umount        

Alguns comandos, podem necessitar de poderes de sudo ou ainda utilizar a conta de root! Sobre isto, veja mais em root, direitos, privilégios e segurança;

O domínio dos comandos acima, mesmo que básico, já ajuda o estudante a ter fluência na manipulação de dados via linha de comando; Aproveite as possibilidades de usar Linux e divirta-se.


[1] http://www.lpi.org/blog/shell-powerful-first-computer-language