Linha de Comando

Como usar linha de comando!

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

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