O documento fornece uma introdução abrangente sobre o shell do Linux (bash), cobrindo tópicos como:
1) O que é o shell e como ele se comunica com o núcleo do sistema;
2) Comandos internos do shell como cd, ls, mkdir e redirecionamento;
3) Estrutura de pastas, permissões e editores de texto;
4) Configuração de rede, serviços e ferramentas de gerenciamento como apt.
1. O que é o shell (bash)? É através do shell que nos comunicamos com o núcleo do sistema (kernel) shell significa concha ou algo que envolve http://linuxdicas.wikispaces.com/comandos-linux Esta apresentação também foi postada no blog do Sérgio neste link: http://vivaotux.blogspot.com/2009/08/material-para-uma-aula-que-vou.html
2. O que é o shell (bash)? imagem do terminal do linux
9. Entrada e saída de comandos Por padrão a entrada de dados no shell é o teclado, é o que se denomina em inglês de stdin (standard input) A saída padrão é o monitor stdout (standard output) Por exemplo podemos redirecionar a saída padrão de qualquer comando para um arquivo: cal 2007 > cal2007.txt Redirecionamento não destrutivo: Para redirecionar a saida de um comando para um arquivo sem destruir o que já existe previamente no mesmo, use o redirecionamento duplo >> cal 2008 >> cal2007.txt assim teremos dois calendários, já se
10. Redirecionando o terminal cada sessão do shell tem uma identidade acessível através do comando ' tty ' Exercício: 1 - abra um terminal e digite 'tty' sem aspas e anote esta identiciação, por exemp '/dev/pts/0' 2 - abra outro terminal e digite: cal > /dev/pts/0 O que aconteceu? A saída do comando 'cal' que deveria ser a saída padrão 'monitor' foi redirecionada para o outro terminal. Obs: o comando cal sem argumentos retorna o calendário do mês atual
13. ./ ../ ./ ...... pasta atual ../ ...... pasta acima
14. O linux é case sensitive Isto significa que você pode criar uma pasta Casa outra CASA e outra casa no mesmo diretório
15. Comandos internos do shell São chamados built-in e são mais rápidos pois já estão na memória cd ......... mudar de diretório mkdir ...... criar diretórios > .......... cria arquivos pwd ........ exibe pasta atual ls ......... listar conteúdo
16. Listando o conteúdo da pasta ls ............... listagem simples ls –l ............ listagem com permissões ls –a ............ lista inclusive ocultos ls -1 ............ listagem simples 1 por linha ls -Ssh1 ......... exibição detalhando o tamahno Como exercício acesse o manual do ls " man ls " e busque com o uso da barra " / " as opções do último comando desta lista. Para sair do man pressione 'q'
17. O comando cal Exibe o calendário cal ........ exibe o calendário do mês cal 2 2007 exibe fevereiro de 2007 veja o manual do 'cal' man cal
18. O comando cd mudar de diretório cd /usr/bin ... local específico cd – ......... último local cd .......... pasta pessoal (cd sem nada)
19. Table completion Ao começar a digitar um comando você pode usar o <tab> para solicitar a complementação do nome. cd /etc/init. <tab> ls ~/De <tab>
20. Limpando a tela ^l O comando Ctrl-l limpa a tela, equivale ao comando “clear”
21. O comando mkdir mkdir pasta mkdir ../teste mkdir $(date +%d-%m-%Y) mkdir -p docs/{img/{fotos,icons,wallpapers,svg},textos/{artigos,man},tmp} O comando acima mostra todo o poder da linha de comandos, não poderia-mos criar uma extrutura de pastas como esta usando o mouse de forma tão rápida e precisa.
22. O comando mkdir mkdir -p docs/{img/{fotos,icons,wallpapers,svg},textos/{artigos,man},tmp} o comando acima cria a extrutura abaixo
23. Mover ou renomear mv origem destino Obs: Se o nome de destino não existir ele renomeia
24. Deletando uma pasta e seu conteudo rm -rf pasta A letra "r" indica recursividade, ou seja, a pasta e tudo que estiver nela, para arquivos não é necessário o "r".
25. O comando echo Exibe uma mensagem na tela echo "teste" echo "agora são $(date +%H:%M) horas" echo "você está em $(pwd)" Dica: o bash substitui o conteúdo do $(pwd) por sua saida que corresponde à pasta atual
26. Quem sou ? whoami se notar-mos este comando é abreviação do ingles "who am i?" echo "olá `whoami`"
27. Onde estou? pwd O comando pwd exibe em que pasta você está echo "você está em $(pwd)"
28. Atalhos do bash - shell Considere o circunflexo como Ctrl ^u ...... Apaga até o começo da linha ^y ...... Cola o que foi apagado ^e ...... Vai para o fim da linha ^a ...... Vai para o começo da linha ^p ...... comando anterior ^n ...... próximo comando ^k ...... Apaga até o final da linha ^d ...... Fecha a seção ^c ...... interrompe um comando alt. ... insere argumento ultimo comando
29. O comando man Acessa o manual de um comando qualquer / ...... Ativa a busca n ...... Repete a busca (next) N ...... Repete a busca em sentido inverso gg ..... Vai para a linha 1 G ...... Vai para o final q ...... Sai do comando man
30. Histórico de comandos Seta acima exibe o históico de comandos O comando history exibe uma lista de todos os comandos executados para paginar usamos: history | less Na verdade o comando less é um paginador e esta barra vertical é um modo de repassar um comando para dentro de outro (redirecionamento), seu nome é pipe . Para sair do less pressione q
31. Sobre o comando tail Para exibir as últimas 5 linhas de um arquivo - por padrão o comando tail exibe as últimas 10 linhas history | tail –n 5
32. Mas sobre o comando tail Para acompanhar interativamente a saída de um log tail -f /var/log/squid /access.log | awk '{print $3" "$7}' Obs: usando a barra invertida podemos digitar comandos longos em várias linhas
33. Mais sobre o histórico de comandos Cada comando do histórico tem um número, vamoz exibir os últimos 10 comandos? history 10 O comando acima é um exemplo de que a pesquisa nunca para history | tail
34. Repetindo o comando “n” do histórico history | less Uma vez que você saiba o numero de um comando que lhe interessa faça !1234 Este comando repete o comando 1234
35. Repetindo o último comando do " history " Há duas formas legais de repetir um comando no shell seta acima - enter !! enter Para paginar os comandos do histórico sem tirar as mãos do teclado use Ctrl-n Ctrl-p
36. Repetindo o último comando Na verdade há outra forma legal de acessar o histórico de comandos... se testarmos se o google está acessível assim : ping -c 2 www.google.com Podemos em seguida fazer assim: !ping
37. Listando os ultimos 16 comandos O comando fc -l Lista os ultimos 16 comandos, para mais detalhes "man fc"
38. Interrompendo um comando Ctrl-c Quando um comando longo está em execução e você quizer cancela-lo use a combinação de teclas acima, lembre-se que nos manuais Ctrl-c equivale a ^c É uma forma facilitada de anotações :)
39.
40.
41. Permissões... Ao usar o comando ls -l Obtemos algo como: drwx------ 2 sergio sergio 4096 2009-08-21 01:15 bin drwxr-xr-x 5 sergio sergio 4096 2009-08-24 15:17 Desktop drwxr-xr-x 11 sergio sergio 4096 2009-08-11 11:49 docs drwxr-xr-x 2 sergio sergio 4096 2009-08-24 16:07 dwhelper -rw-r--r-- 1 sergio sergio 56 2009-08-18 14:27 limpafirefox.sh -rwxr-xr-x 1 sergio sergio 5028 2009-08-18 14:27 ramprofile.sh A primeira letra indica se é arquivo "-" ou diretório "d" rwx indica que pode ler "read" escrever "write" e executar "execute" para o dono (os três primeiros flags) os outros grupos são flags para grupo e outros.
47. O editor nano É um editor básico sudo nano /etc/network/interfaces O comando acima edita o arquivo /etc/network/interfaces como root Para salvar Ctrl-o Para sair Ctrl-x
48. Gerenciamento de pacotes como instalar e remover pacotes como funciona o apt como procurar pacotes sudo apt-cache search nome como editar o /etc/apt/sources.list sudo nano /etc/apt/sources.list
49. Como editar o sources.list sudo nano /etc/apt/sources.list Adicionando repositórios Atualizando o apt sudo apt-get update
50. Script para automatizar instalação #!/bin/bash # Criado em:Qua 02/Set/2009 hs 17:18 # Last Change: Qua 02/Set/2009 hs 17:18 # vim:ft=sh:fdm=syntax:nu: # Instituicao: <+nome+> # Proposito do script: <+descreva+> # Autor: <+seuNome+> # site: <+seuSite+> # testa se está logado como root if [ "$(id -u)" != "0" ]; then echo " Need be root" sleep 2 exit 1 fi apt-get install quanta
51. Como configurar a rede sudo /etc/init.d/networking stop ... stop na rede sudo /etc/init.d/networking start .. inicia a rede sudo nano /etc/network/interfaces .. edite o arquivo auto eth0 ............... qual a interface iface eth0 inet static .... ip estático address 10.3.0.12 ......... endereço de rede netmask 255.255.255.0 ..... máscara gateway 10.3.0.1 .......... computador que fornece sinal sudo nano /etc/resolv.conf .. indica o DNS search domain.velox ......... dns do velox nameserver 200.165.132.155 .. primário Nameserver 200.165.132.148... secundário
52. Como configurar a rede Em alguns casos é necessário também parar o serviço NetworkManager pois ele reescreve o arquivo /etc/resolv.conf e você não consegue navegar se configurar a rede na mão. sudo find / -iname networkmanager No linux educacional ele não fica em /etc/init.d/ por isso é bom saber o nome e como busca-lo No linux educacional /usr/bin/NetworkManager
53. Qual o endereço de rede atual? ifconfig ifc<tab> "Seja esperto o bash completa com TAB"
54. Qual o gatway da rede? O gateway é o local por onde sua rede chega, ou seja, se na configuração de rede não colocar-mos o mesmo você não navega! route -n na segunda coluna da última linha ou: route -n | awk '/UG/ {print $2}'
55. Dica sobre o ping O comando ping é um comando para testar se um computador (host) está ativo. O comando ping no linux por padrão fica mandando um ping indefinidamente isto é útil quando você está testando cabos de rede, você pinga para uma máquina local e vai testando os cabos. Usamos a opção -c do ping apenas para limitar o número de pings ping -c 2 www.google.com
56. Dica sobre o ping (2) O comando nmap (por padrão não instalado) é capaz de dar um ping numa faixa inteira de ip's sudo apt-get install nmap nmap -sP 192.168.0.1-254 | awk '/^Host/ {print $2 " ativo"}' O comando acima testa uma faixa inteira de ips retornando o ip e a palavra "ativo" para cada host que responder ao ping. Caso queira gerar um relatório redirecione a saida para um arquivo>> relatorio.txt
57. Copia simples via rede scp ./pastalocal usuario@ip:/caminho/para/pasta scp usuario@ip:/home/usuario/imagens ./ Ele vai pedir a senha do usuário e colocará a pasta “imagens” inteira no diretório corrente --> ./ Obs: na primeira vez que este comando for executado ele vai perguntar sobre a criação da chave (digite yes)
58. Gerenciando serviços Como parar e iniciar a interfaçe de rede sudo /etc/init.d/networking stop ... stop na rede sudo /etc/init.d/networking start .. inicia a rede Serviço de impressão sudo /etc/init.d/cups stop ... stop cups sudo /etc/init.d/cups start .. inicia cups
59. Gerenciando serviços II Serviço de impressão Pelo navegador acesse: http://localhost:631/ para configurar o servidor de impressão Obs: defina uma senha para o root com o comando sudo passwd (o cups necessita deste passo) sudo /etc/init.d/cups stop ... stop cups sudo /etc/init.d/cups start .. inicia cups
60. Administração remota via ssh Nas máquinas que irão ser administradas remotamente faça: sudo apt-get install ssh Para acessar --> ssh usuario@ip o servidor irá perguntar sobre a criação de uma chave de acesso "Yes" em seguida pedirá a senha do usuário indicado acima
61. backup com rsync rsync origem destino Se você precisar do pendrive para transportar um arquivo muito grande e o espaço estiver pouco você pode fazer isto rsync –avz /media/<tab> ~/backup-pendrive rm -rf /media/<tab> indique o pendrive agora pode copiar o arquivo para o pendrive Duas outras opções interessantes do rsync: --update --delete (veja man rsync)
62. backup com rsync rsync origem usuario@destino:/home/usuario/backup Backup via rede: A extrutura usuario@ip:/dir pode estar na origem ou no destino, assim se eu desejar trazer para a máquina atual faço: [ -d ~/img ] || mkdir ~/img && cd ~/img O comando acima diz "se a pasta existir [ -d ~/img ] ou tiver que cria-la || mkdir ~/img e entre na mesma && cd ~/img. rsync –avz sergio@10.3.0.154:/home/sergio/img/wallpapers ./ Obs: o rsync vai perguntar sobre a criação de uma chave de acesso digite yes em seguida a senha do usuário veja também: https://help.ubuntu.com/community/RsyncCdImage
65. O que é o UDEV volid Identificação de discos à partir de indentificadores únicos permitindo o encaixe de hds em locais distintos sem perder a referência. vol_id --uuid /dev/sda5 Referência: http://jfmitre.com/2006/11/descobrindo-o-cdigo-uuid-de-uma-partio.html
66. Qual o espaço ocupado? du –sh ./ ./ ..... pasta atual
67. Qual o espaço livre? df –h /media/disk Pendrives cds e hds são montados em /media
69. Liberando o cd ou pendrive para desmontar Quando você tenta remover um pendrive e o sistema diz que o mesmo está ocupado faça: fuser -mkv /media/<tab> Referências: http://linuxdicas.wikispaces.com/fuser
70. Acessando linux e windows via live-cd Usar a mini distro goblinx para acessar dados locais e enviar peloa rede usando rsync
71.
72. Compactando com tar.bz2 tar cjvf nome.tar.bz2 ./pasta -c .......... Create -j .......... Gera tar.bz2 -v .......... Gera saida visual -f .......... Nome a ser usado ./pasta ...... Será compactada Obs: para visualizar o conteúdo de um pacote tar jtvf (para tar.bz2), para mais detalhes 'man tar'
73. Descompactando com tar.bz2 tar jxvf arquivo.tar.bz2 Podemos indicar o destino assim: tar jxvf file.tar.bz2 –C destino
74. O comando grep Usado para filtrar conteúdo ps aux | grep firefox “ ps aux” exibe todos os processos em execução, já o grep filtra somente os processos que contiverem a palavra firefox
75. Mais sobre o comando grep grep “^admin ” /etc/passwd Se filtrassemos apenas a palavra "admin" o grep filtraria esta palavra em qualquer posição, contudo usamos expressões regulares para buscar no começo da linha. Para aprender sobre expressões regulares acesse: http://guia-er.sourceforge.net/
76. Mais sobre o comando grep grep -v “^#” /etc/apt/apt.conf Usando a opção –v do grep estamos dizendo: mostre as linhas que não contém “#” no começo, ou seja, linhas comentadas. A mesma saida do comando anterior poderia ser paginada com o less grep -v “^#” /etc/apt/apt.conf | less
77. Mais sobre o comando grep vim $(grep –irl “sergio” ~/) O comando $(grep –irl “sergio” ~/) retornará uma lista de arquivos que contenham a palavra “sergio” e entregará para o editor vim. Um livro sobre o vim pode ser baixado aqui: http://vivaotux.blogspot.com/2009/01/nosso-livro-sobre-o-vim.html
78. Matando um programa com o comando pkill Cada processo (daí a letra ‘p’ no nome) tem uma identidade chamada pid (process id). O pkill é um comando que mistura o kill com o grep (busca por padrões) na prática podemos forçar o fechamento de um programa de forma trivial. pkill firefox
79. Modo arcaico para matar programas listar todos os processos, filtrar o processo desejado com o grep e em seguida dar um kill -9 ps aux | grep firefox digamso que o numero do processo do firefox seja 1342 kill -9 1342
80. O comando find find [local] opções find ~/ -iname “*.txt” Contando a quantidade find ~/ -iname “*.txt” | wc -l Obs: se o local da busca for omitido o find considera a pasta atual como lugar da busca
81. Mais sobre o comando find find –size +10M | less No próximo comando vamos usar o continuador de linha “ find ~/ -iregex ".*doc.*odt" O comando acima usa expressões regulares para buscar arquivos do word ou openoffice (ignorando maiúsculas ou minúsculas)
82. Gerando relatórios com o comando find find –size +10M | less Ao invés de paginar na tela usamos um redirecionamento find –size +10M > ~/Desktop/bigfiles.txt Para adicionar algo ao final use >> Ou fazer uma contagem com o wc find –size +10M | wc -l
83. backup com find Vamos criar um backup de arquivos odt criados nos últimos 10 minutos mkdir ~/backup find . -name '*.odt' -cmin -10 -print0 | xargs -0 cp -ft ~/backup find . -iname "*.odt" -cmin -120 | xargs cp -t ~/backup Obs: digitar os comandos é melhor pois ao copiar e colar os caracteres podem não ser os mesmos.
84. Sobre comandos longos Quando digitamos uma barra invertida em um comando estamos protegendo o Enter, isto significa que o shell não reconhecerá o enter como tal, veja: tail -f /var/log/squid /access.log | awk '{print $3" "$7}' É como se a linha fosse uma só, apenas estamos jogando a saida do tail para o comando awk, veja mais sobre ele aqui . Obs: o comando acima depende da existência do squid.
85. Mais sobre o comando less Ele é muito útil para ler a saida de comandos muito longos O comando find por exemplo tem um man muito extenso man find | less / .......... o less também tem busca n .......... repete a busca gg ......... vai para linha 1 G .......... vai para o final q .......... sai do less
86. O comando date http://linuxdicas.wikispaces.com/date date +%d .... dia date +%H .... hora man date data no padrão americano ano-mes-dia : date -I
87. Dica do comando mkdir Caso necessite criar uma pasta e entrar na mesma pode fazer [ -d pasta ] || mkdir pasta && cd pasta O comando acima diz "se a pasta existir [ -d pasta ] ou tiver que cria-la || mkdir pasta e entre na mesma && cd pasta . Na prática isto fará com que você termine na pasta de qualquer modo, tanto faz, se houver ou não o sistema entra na mesma, se não houver ele cria e entra na mesma.
88. Usando o comando cat para ler conteúdo cat arquivo.txt Exibe na tela o conteúdo do arquivo. Quando o conteúdo tiver que ser pipeado use-o ao invés do less.
89. Baixando arquivos com o wget wget -c http://www.rau-tu.unicamp.br/nou-rau/softwarelivre/document/?down=143 wget –c –i urls.txt -c .......... continuar dowload -i .......... Lista de links a baixar --limit-rate taxa de download wget –c –-limit-rate=15k –i links.txt
90. Desligamento programado O comando shutdown pode ser usado das seguintes formas sudo shutdown -r +10 sudo shutdown -h 0 No primeiro caso reinicia em 10 minutos (restart) no segundo caso desliga agora (halt)
92. Referências É impressindível dominar técnicas de busca no google para solucionar problemas cotidianos: http://sergioaraujo.pbworks.com/Como-usar-melhor-o-google http://www.hackmyidea.com/wordpress/2007/12/09/google-sre-question-on-mass-changing-file-extensions/ Buscar livros: -inurl:htm -inurl:html intitle:"index of" +("/ebooks""/book") +(chm | pdf | zip) nome livro