Linha de Comando¶
- Alto nível = mais próximo ao ser humano do que da máquina
 - Baixo nível = mais parto da máquina do que do ser humano
 
Antes de tudo precisamos entender algumas coisas. A linha de comando é de certo modo um ambiente de alto nível.
Quando a gente fala em alto dizemos que está mais próximo do ser humano do que da máquina. Poxa, as pessoas podem
achar que a interfacce gráffica que está mais perto do ser humano do que a linha de comando. Mas antes de existir a interface
gráfica as pessoas escreviam até livros via linha de comando.
As pessoas conseguiam se comuinicar e produzir mídias na linha de comando. E, no fundo no fundo, muitos aplicativos que usamos em
interface gráfica usam por debaixo dos panos a linha de comando.
Sinônimos da linha de comando: shell, tela preta, console, terminal, etc.
A linha de comando utiliza linguagens de expressão que possuem sintaxe, de forma semelhante aos idiomas falados por humanos.
Estruturas clássicas:
- Português → sujeito , verbo, predicado
 - Japonês → sujeito, predicado, verbo
 - Terminal → comando, opções, objeto
 
Podemos comparar o comando ao verbo, as opções ao predicado e o objeto ao sujeito.
$ ls -l /home
(O diretório home será listado com descrições longas)
$ ls /home
Vai ser utilizado a opção padrão :P
$ ls 
Além da opção padrão será usado o local que estou – contexto.
$ dpkg -L util-linux
- dpkg = debian packages
 - -L listar
 
Parte da resposta:
/lib
/lib/i386-linux-gnu
/lib/udev
/lib/udev/hwclock-set
/lib/udev/rules.d
/lib/udev/rules.d/85-hwclock.rules
/etc
/etc/init.d
/etc/init.d/hwclock.sh
/etc/default
/etc/default/hwclock
/etc/fstab.d
/bin
/bin/more
/bin/lsblk
/bin/tailf
/bin/dmesg
$ apt-cache search console
O apt-cache sempre precisa de opção, como se fosse um verbo transitivo, depende de opção/predicado.
Algumas opções costumam ser comuns a vários comandos, por ser uma boa prática de programação incluir ela, como —help que mostra uma ajuda resumida do comando.
Reduzindo Imagens¶
Este será o nosso exemplo!
Instalando como root¶
# apt-get install imagemagick
#exit -> voltando para o usuário ou fechar o terminal
Brincando com o convert¶
$ convert --help
$ convert -resize 50% foto.jpg minifoto.jpg
$ echo "marcelo"
Estrutura de repetição “for”¶
Sintaxe geral:
for (alguma situação); do (alguma comando); done;
$ for i in `ls *.jpg`; do echo $i; done;
Também funciona assim:
$ for i in $(ls *.jpg); do echo $i; done
$ for i in ls *.jpg; do echo $i; done;
$ for i in ls *.png; do echo convert -resize 50% $i; done;
Exemplos:
convert -resize 50% Captura de tela de 2012-09-15 16:48:00.png
convert -resize 50% Captura de tela de 2012-09-15 16:48:18.png
convert -resize 50% Captura de tela de 2012-09-15 17:19:09.png
$ for i in ls *.png; do echo convert -resize 50% $i minifoto.jpg; done;
convert -resize 50% Captura de tela de 2012-09-15 16:48:00.png minifoto.jpg
convert -resize 50% Captura de tela de 2012-09-15 16:48:18.png minifoto.jpg
convert -resize 50% Captura de tela de 2012-09-15 17:19:09.png minifoto.jpg
$ for i in ls *.png; do echo convert -resize 50% $i mini$i; done;
convert -resize 50% Captura de tela de 2012-09-15 16:48:00.png miniCaptura de tela de 2012-09-15 16:48:00.png
convert -resize 50% Captura de tela de 2012-09-15 16:48:18.png miniCaptura de tela de 2012-09-15 16:48:18.png
convert -resize 50% Captura de tela de 2012-09-15 17:19:09.png miniCaptura de tela de 2012-09-15 17:19:09.png
Arquivos com espaços nos nomes ocasionam problemas porque devido aso espaços podem ser entendidos como vários ou várias opções, para previnir isso deve-se aspas nos nomes dos arquivos).
$ for i in ls *.png; do echo convert -resize 50% "$i" "mini$i"; done;
convert -resize 50% "Captura de tela de 2012-09-15 16:48:00.png" "miniCaptura de tela de 2012-09-15 16:48:00.png"
convert -resize 50% "Captura de tela de 2012-09-15 16:48:18.png" "miniCaptura de tela de 2012-09-15 16:48:18.png"
convert -resize 50% "Captura de tela de 2012-09-15 17:19:09.png" "miniCaptura de tela de 2012-09-15 17:19:09.png"
$ for i in ls Cap*.png; do echo convert -resize 50% "$i" "mini$i"; done;
Uma versão simplificada¶
$ for i in *.jpg; do echo $i; done
Escrevendo com formatação de bloco:
  for i in *.jpg; do
    echo $i
  done
Teclas de atalho básicas no terminal “bash”:
- Ctrl+k —> apaga o resto da linha decomando que vc está editando (tudo o que está à direita).
 - Ctrl+u —> apaga o resto (tudo à esquerda)
 - Ctrl-w —> apagua uma palavra à esquerda
 - Ctrl+??? 
→ apaga uma palavra à direita :P -exercício para pesquisar :) :) :) - Ctrl-e —> vai para o fim da linha
 - Ctrl-a —> vai para o início da linha
 
Expansão de linhas de comando¶
$ ls [cd]*.jpg
Equivale ls c*.jpg seguido de ls d*.jpg
$ ls [c-f]*.jpg
Qualquer arquivo jpg com letras que começam entre c e f c f é um intervalo aplicando expansão no exemplo da conversão de várias imagens.
$ for i in ls [ap]*.png; do echo convert -resize 50% "$i" "mini$i"; done;
Usando um nome mais interessante para a variável
$ for arq in ls [ap]*.png; do echo convert -resize 50% "$arq" "mini$arq"; done;
ou
$ for arquivo in ls [ap]*.png; do echo convert -resize 50% "$arquivo" "mini$arquivo"; done;
Escrevendo um script para redimensionar imagens, com opções¶
Criando uma estrutura para o comando/script estrutura do comando:
redimensionar (porcentagem) (arquivos)
Exemplo:
$ ./redimensionar 50% [ap]*.png
Neste caso:
- $1 = 50%
 - $2 = [ap]*.png
 
Aí vai nosso código, copie e cole num arquivo o conteúdo entre as linhas pontilhadas:
---8<---   redimensionar.sh   --------
#!/bin/dash
for arquivo in ls $2;
  do
    echo convert -resize $1 "$arquivo" "mini$arquivo";
    # mensagem simpática para mostrar qual o arquivo do momento
    echo criada miniatura para $arquivo;
  done;
---8<------------------------------------------
Versão hardcore:
ls -1 $2 | while read arquivo; do
  echo convert ...
done
Alternativa:
OLDIFS="$IFS"
IFS="\n"
for arquivo in `ls -1 $2`; do
  # block code here
done
IFS="$OLDIFS"
Mais comandos!¶
Comandos que mostra processos¶
$ ps
$ ps -A
$ pstree
Pipeline (indo pelos canos) ou pipe¶
- wc (word count) → dá contagem linhas palavras caracteres
 
O wc neste caso, não é banheiro, mas contador de linhas ou caracteres. Exemplos de uso do wc:
- wc -c arquivo # conta o número de caracteres do arquivo
 - wc -l arquivo # conta o número de linhas do arquivo
 
Agora vamos entrar nos encanamentos!!
$ ls
$ ls | wc
$ ls | wc -c --> caracteres
$ ls | wc -l --> linhas
$ ps -A | less
Ctrl+z para sair!
Um pouco de vocabulário¶
- www.cheat-sheets.org (site com diversas “colas”, procurar por Bash)
 - qref.sourceforge.net/Debian/reference/c...
 - www.guiafoca.org/?page_id=14 – Guia Foca (básico+intermediário) – Capítulos do 7 ao 13
 - Guia Foca para download: www.guiafoca.org/?page_id=326
 - Mudando permissão do redimensionar.sh
 
Permissões e posse de arquivos¶
-rw-r--r-- (isso eh um exemplo de permissão de arquivo).
Para saber mais sobre permissões de arquivo: qref.sourceforge.net/Debian/reference/c...
- - (arquivo)
 - rw- (usuario)
 - r— (grupo de usuario)
 - r— (outros usuarios)
 
ou
- primeiro dígito opcional: soma de set user ID (=4), set group ID (=2), e sticky bit (=1)
 - segundo dígito: soma de permissões de leitura (=4), escrita (=2), e execução (=1) para o usuário
 - terceiro dígito: idem para o grupo
 - quarto dígito: idem para outros
 
$ chmod u+x redimensionar.sh
$ ls -l redimensionar
$ cat redimensionar.sh
$ ./redimensionar 30% f*.jpg
Comandos e atalhos diversos¶
- sync —> sincroniza ações nos diversos drives externos
 - traceroute qqsite.explo —> traça o caminho que vc faz para chegar até o site especificado
 - NOME DO PROGRAMA & —> abre o programa em background
 - ps —> lista os programas em execução, tanto em background como em up
 - fg NUMERODALINHA —> reabre um programa em execução em background
 - Ctrl+z —> coloca o programa em execução no momento na shell em background
 - q —> quit / sair