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