OFICINA DE SHELLSCRIPT III Semana Acadêmica do II 24 de Outubro de 2008 Grupo PET Computação Felipe A. Chies Bruno L. Albrecht
SHELL
SHELL Programa que recebe comandos do teclado e os envia ao SisOp para serem executados; É um meio de interação entre o usuário e a máquina; Antigamente, era a única interface disponível nos computadores; Pode ser considerada um tipo de linguagem de programação > Shell Programming Resumindo: É um intepretador de comandos!
SHELL Tarefas executadas: Espera o usuário fornecer um comando (prompt) Analisa e trata caracteres especiais da linha de comando Procura arquivo executável do comando Cria um processo filho (fork) para executá lo Espera que o comando termine para retornar ao prompt Exceção: comandos em background (&)
SHELL Bourne Shell (sh) Korn Shell (ksh) Boune Again Shell (bash) C Shell (csh)
TERMINAL É um programa de terminal gráfico emulador de terminal; Permite que façamos uma interação com a shell através de uma janela, dentro da interface gráfica. A seguir, alguns comandos úteis que serão utilizados ao longo da oficina
man Principal comando de todos!!! Acessa as páginas de manuais (manpages); Exemplo: man ls Mostra a página do comando ls (descrição do comandos, uso, etc...); Opção man k <palavra> : lista todos os comandos onde a palavra aparece em sua descrição ou nome. Exemplo: man k java man man > comando válido! Obs.: sudo apt get install manpages manpages dev
ESTRUTURA DE DIRETÓRIOS A árvore de diretórios do Linux segue um padrão estabelecido pelo unix durante a maior parte de sua existência, mas controlada por um conjunto de regras estabelecidas pelo Linux FileSystem Standard, ou FSSTND.
cd Descrição: permite nos a navegação entre os diretórios do sistema; Exemplo: cd /usr Vamos para o diretório usr. Opções: cd ~ : vai para o diretório home do usuário; cd. : diretório atual; cd.. : vai para o diretório pai (na árvore); cd : vai para o último diretório acessado.
pwd Descrição: permite saber em qual diretório estamos no momento, onde pwd significa "print working directory"; Exemplo: pwd
cat Descrição: Utilizado, em geral, para concatenar arquivos ou exibir arquivos de texto na tela; Exemplos: cat n arq.txt exibe o conteúdo do arquivo na tela ( n com as linhas numeradas) cat arq1 arq2 arq3 > arq_final concatena os 3 arquivos e coloca o resultado no arq_final;
tac Descrição: Comando similar ao cat, mas exibe ou concatena os arquivos na ordem inversa; Exemplo: tac arq.txt exibe o conteúdo do arquivo na tela na ordem inversa;
ls Descrição: lista os arquivos do diretório desejado; Exemplo: ls Lista os arquivos do diretório atual; Opções: ls a : mostra também os arquivos ocultos; ls l : listagem com mais detalhes; ls lhs : com tamanhos de arquivos legíveis ( h) e classificados por tamanho ( S); ls R : lista também os sub diretórios; ls 1 : um arquivo por linha.
dir Descrição: comando similar ao ls; Exemplo: dir lh Lista os arquivos do diretório atual no formato longo com tamanhos legíveis ;
mkdir Descrição: cria um diretório vazio; Exemplo: mkdir /home/felipe/pet cria uma pasta 'pet' no local desejado.
rm Descrição: remove arquivos e diretórios. Exemplos: rm a.txt remove o arquivo a.txt; rm r /home/felipe remove o diretório 'felipe' e todos os seus arquivos e subdiretórios recursivamente; Nota: Use este comando com muito cuidado!
rmdir Descrição: outra forma de remover diretórios, mas apenas remove diretório vazios; Exemplo: rmdir /home/felipe/pet remove a pasta vazia 'pet'.
mv Descrição: move arquivos e diretórios, sendo muito usado também para renomear um determinado arquivo. Exemplos: mv ~/a.txt /tmp/a.txt move o arquivo do diretório pessoal do usuário para a pasta /tmp ; mv teste1.txt teste2.txt renomeia o arquivo teste1.txt para teste2.txt.
cp Descrição: faz cópias de arquivos e diretórios. Exemplos: cp /home/felipe /tmp faz uma cópia de toda a pasta do usuário felipe para a pasta tmp; cp a.txt a_copia.txt cria uma cópia do arquivo a.txt no diretório corrente; cp *.txt /tmp copia todos arquivos com extensão '.txt' para a pasta tmp;
scp Descrição: copia remotamente um arquivo/diretório (de uma máquina para outra) Exemplos: scp fachies@portal.inf.ufrgs.br:public_html/index.htm ~/ copia o arquivo index.htm remoto para o diretório home local, sem renomeá lo scp ~/arquivo.htm fachies@portal.inf.ufrgs.br:public_html/index.html Copia o arquivo arquivo.htm local para o diretório remoto e renomeia o para index.html
wget Descrição: baixa um arquivo (qualquer) da internet Exemplo: wget http://www.inf.ufrgs.br/~fachies/index.htm Baixa o arquivo e coloca o na pasta onde o comando foi executado wget http://www.inf.ufrgs.br/~blalbrecht/oficina/arquivo.tgz O ~/pet/oficina/shell.tgz Baixa o arquivo arquivo.tgz e coloca o na pasta indicada, com o novo nome
ln Descrição: cria ligações (links, atalhos) entre arquivos ou diretórios. Exemplo: ln s /home/felipe/mp3 /mp3 cria um link simbólico (soft link) 'mp3' na raiz para o diretório localizado dentro do home do usuário felipe; ln /home/felipe/mp3 /mp3 Semelhante ao anterior, mas cria um hard link
ln Para quem já fez SisOp: Hard link: ponteiro para um i node Soft link: ponteiro para um ponteiro para um i node (mais parecido com um 'atalho') Ou seja: Apagar um arquivo significa apagar um ponteiro para seu i node Apagar um hard link apaga um ponteiro para um i node Apagar um soft link apaga somente o soft link Exercício: Crie um arquivo, escreva teste nele. Crie um hard link e um soft link para ele. Dê um 'cat' nos 3 arquivos. Apague o arquivo. Dê um 'cat' nos links.
touch Descrição: muda a data e hora que um arquivo foi criado. Também pode ser usado para criar arquivos vazios (utilização mais comum). Exemplos: touch arq cria um arquivo vazio se ele não existir, ou modifica a data de última alteração para a atual; touch t 10201830 arq altera a data do arquivo (ou cria) para 20/Out às 18h30;
Execução de Comandos Pipe ( ): concatena a saída de um comando com a entrada de outro ls grep txt Cat arquivo.txt less Seqüencial ( ; ): comandos executados em seqüência Background ( & ): executa um comando em background, deixando o terminal livre firefox &
grep Descrição: Procura por uma expressão dentro de um arquivo(s) ou no dispositivo de entrada padrão. Exemplos: grep Curso Linux arq1.txt arq2.txt Procura a expressão ( Curso Linux ) nos dois arquivos; ls grep linux Procura a expressão (linux) na saída do comando ls;
more / less Descrição: Mostra arquivos na tela de forma paginada; Navegação: para sair do aplicativo digite q use as teclas Page Down, Ctrl+F ou Space para avançar use as teclas Page Up ou Ctrl+B para voltar. use Enter para avançar apenas uma linha por vez. Exemplo: more arq.txt less arq.txt Obs.: tecle 'h' no less para saber mais teclas de navegação
vi / vim Descrição: editor de texto vim (vi improved); No Ubuntu ambos os comandos abrem o vim! Exemplo: vim arq.txt Abre o arquivo para edição ou cria (desde que ao fecharmos salvarmos) um novo se não existir;
diff Descrição: compara o conteúdo de dois arquivos, exibindo a diferença entre eles; Exemplos: diff arq1.txt arq2.txt exibe a diferença na tela dos dois arquivos; diff i arq1.txt arq2.txt > arq.txt salva no arq.txt a difença entre os dois arquivos, ignorando as diferenças entre maisúculas e minúsculas ( i);
sort Descrição: organiza as linhas de um arquivo texto ou da entrada padrão; Exemplos: sort d nomes.txt exibe na tela os nomes em ordem alfabética ( d) sort n numeros.txt > crescente.txt ordena os números ( n) em ordem crescente, colocando o resultado no arquivo crescente.txt;
PERMISSÕES No Linux, como em outros sitemas Unix, cada arquivo tem uma permissão. As permissões são atributos dos arquivos que especificarão se ele pode ser lido, escrito ou executado, e por quem; Trata se de um conjuto de 10 letras; Exemplo: drwxr xr x 1 : tipo (arquivo normal, diretório, link, etc); 2 a 4 : permissões para o dono (rwx); 5º a 7º: permissões para os membros do grupo (rwx); 8 a 10 : permissões para os outros (rwx);
PERMISSÕES O Linux (na verdade, qualquer sistema operacional baseado em Unix) possui um tipo de usuário que tem acesso irrestrito aos arquivos e processos do sistema: trata se do usuário root ou super usuário; Use o com moderação e tome cuidado! No ambiente shell (antes do primeiro caractere): $: usuário normal; #: root;
PERMISSÕES E TIPOS Tipo: d: diretório; l: link; : arquivo normal; Demais bits (rwx): r: permissão para leitura (read); w: permissão para escrita (write); x: permissão para execução; : ausência de permissão; Outro exemplo: rw r r
chmod / chown / chgrp chmod: altera a permissão do arquivo/diretório; chmod u+x exec Adiciona (+) permissão de execução(x) ao dono do arquivo (u); chmod 770 liberado Permissão (rwx = 111 em binário = 7 em octal) para o dono e membros do grupo, e nenhuma ( = 0) para os outros; chown: altera o dono do arquivo/diretório chown R bruno /home/felipe/oficina chgrp: altera o grupo do arquivo/diretório chgrp R pet /home
sudo Descrição: Permite a execução de um comando como outro usuário ou como super usuário; A configuração do sudo geralmente é feita através do arquivo /etc/sudoers; Exemplo: sudo u felipe vim /home/felipe/arq.txt executa um comando como o usuário felipe; sudo vim /etc/passwd executa o comando acima como root;
locate Descrição: pesquisa em uma base de dados de nomes de arquivos por nomes que satisfaçam um determinado padrão. Essa base de dados é atualizada com o comando Exemplo: $ sudo updatedb # updatedb locate oficina_shell /home/felipe/oficinashell/oficina_shell.parte1.pdf /home/felipe/oficinashell/oficina_shell.parte2.pdf
find Descrição: Comando utilizado para procurar por arquivos (ou diretórios) na árvore de diretórios, a partir de um caminho. Exemplos: find. name a.txt busca todos arquivos que tenham nome a.txt, a partir do diretório atual; find / size +10000k busca no computador todos arquivos com tamanho maior que 10.000 Kb;
mount / umount Descrição: inclui o sistema de arquivos de um dispositivo qualquer à grande árvore de arquivos do sistema Linux; Exemplos: sudo mount t ntfs /dev/hda1 /mnt/windows monta o hda1 com sistema de arquivos ntfs no ponto /mnt/windows; sudo mount t vfat /dev/sda /mtn/usb monta o dispositivo USB (localizado em /dev/sda), com o sistema de arquivos fat no diretório /mnt/usb; sudo umount /dev/hda1 desmonta o hda1, se este não estiver em uso Se hda1 estiver em uso, pode se utilizar o comando fuser para descobrir quais processos estão utilizando o
OUTROS COMANDOS uname: exibe informações sobre o sistema; uname a mostra todas as informações ( a), como o nome do kernel, o nome de rede da máquina, a versão e a data de compilação do sistema operacional e o hardware da máquina. shutdown: programa o desligamento / reinicialização do sistema sudo shutdown r 20:00 Reinicia o sistema às 20h
(DES)COMPACTAÇÃO DE ARQUIVOS zip / unzip: formato Zip zip compactado.zip descompactado.txt compacta o arquivo (2º argumento) no arquivo compactado.zip unzip compactado.zip descompacta o arquivo no diretório atual gzip / gunzip: formato GZ bzip2: formato BZ2 bzip2 z compactado.bz2 descompactado.txt Compacta arquivos Bzip2 d compactado.bz2 Descompacta arquivos
tar Descrição: agrupa/desagrupa arquivos no formato tar; Exemplos: tar cvf arquivos.tar *.txt Agrupa todos os arquivos (*.txt) em um.tar com nome arquivos.tar; tar xvf arquivos.tar desagrupa o arquivo no diretório atual; tar xzvf arquivos.tar.gz descompacta o arquivo (Tar + Gz); tar xjpvf arquivos.tar.bz2 descompacta o arquivo (tar + bz2)
Redirecionador de fluxo > envia a saída de um comando para um arquivo (sobrescreve o arquivo) >> igual ao '>', mas faz um append < envia o conteúdo de um arquivo para o comando Mais informações: Google!
STDIN. STDOUT. STDERR STDIN: entrada para os programas (padrão: teclado) STDOUT: saída para os programas (padrão: terminal) STDERR: saída de erro para os programas (padrão: variável de ambiente $?) Obs.: Os redirecionadores de fluxo '>' e '>>' mudam o STDOUT, enquanto o '<' muda o STDIN
/dev/null É um buraco negro! Tudo o que for mandado para lá desaparece! Bom para evitar mensagens desnecessárias until! who grep pet > /dev/null do sleep 60 done echo usuário pet foi embora às $(date %H:%Mh )!! $./testeuntil2 usuário pet foi embora às 17:39!! $