${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011




            ${CLI}
Sobrevivendo na Linha de Comando


           Leandro Martelli
        martelli@tawala.com.br
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Por que a linha de comando?
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Por que a linha de comando?

- velocidade.
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Por que a linha de comando?

- velocidade.

- acesso remoto.
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Por que a linha de comando?

- velocidade.

- acesso remoto.

- flexibilidade.
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Por que a linha de comando?

- velocidade.

- acesso remoto.

- flexibilidade.

- poder!
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell 101:

  - interface entre usuário e sistema.
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell 101:

  - interface entre usuário e sistema.

  - interpretação de comandos.
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell 101:

  - interface entre usuário e sistema.

  - interpretação de comandos.

  - exemplos de shell:
     * bash
     * tcsh
     * ksh
     * zsh
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell 101:

  - interface entre usuário e sistema.

  - interpretação de comandos.

  - exemplos de shell:
     * bash
     * tcsh
     * zsh
     * ksh (Greg Sullivan, MPM)
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Acessando o Sistema:

  - local:
       * xterm (Linux)
       * gnome-terminal (Linux)
       * iTerm (Mac)
       * cmd (Windows)
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Acessando o Sistema:

  - local:
       * xterm (Linux)
       * gnome-terminal (Linux)
       * iTerm (Mac)
       * cmd (Windows) ??????????
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Acessando o Sistema:

  - local:
       * xterm (Linux)
       * gnome-terminal (Linux)
       * iTerm (Mac)
       * cmd (Windows) ??????????

  - remoto:
       * PuTTY (Windows)
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Acessando um Sistema Remoto:
$ ssh martelli@srv.tawala.com.br -p 23514
martelli@srv.tawala.com.br's password:
Last login: Thu Nov 10 00:44:48 2011 from 201.222.4.136
[martelli@srv ~]$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Acessando um Sistema Remoto:
$ ssh martelli@srv.tawala.com.br -p 23514
martelli@srv.tawala.com.br's password:
Last login: Thu Nov 10 00:44:48 2011 from 201.222.4.136
[martelli@srv ~]$


Versão Preguiçosa:
$ ssh servidor
Last login: Thu Nov 10 00:45:34 2011 from 201.222.4.136
[martelli@srv ~]$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Acessando um Sistema Remoto:
$ ssh martelli@srv.tawala.com.br -p 23514
martelli@srv.tawala.com.br's password:
Last login: Thu Nov 10 00:44:48 2011 from 201.222.4.136
[martelli@srv ~]$


Versão Preguiçosa:
$ ssh servidor
Last login: Thu Nov 10 00:45:34 2011 from 201.222.4.136
[martelli@srv ~]$



                 ???
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Passo [1] - arquivo .ssh/config:
Host servidor
   HostName srv.tawala.com.br
   User martelli
   Port 23514
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Passo [1] - arquivo .ssh/config:
Host servidor
   HostName srv.tawala.com.br
   User martelli
   Port 23514



Editando sem editor:
$ cat > ~/.ssh/config << FIM
Host servidor
    HostName srv.tawala.com.br
    User martelli
    Port 23514
FIM
$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Passo [2] - Autenticação por chave pública:
$ ssh-keygen -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key
(/home/teste/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
/home/teste/.ssh/id_rsa.
Your public key has been saved in ...


$ ssh-copy-id -i ~/.ssh/id_rsa servidor
martelli@srv's password:
Now try logging into the machine, with "ssh 'servidor'",
and check in:

 .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't
expecting.
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Editando sem editor[2] - perl:
$   for i in 1 2 3
>   do
>   echo 'text errado' > f${i}
>   done

$ cat f*
text errado
text errado
text errado

$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Editando sem editor[2] - perl:
$   for i in 1 2 3
>   do
>   echo 'text errado' > f${i}
>   done

$ cat f*
text errado
text errado
text errado

$ perl -i -pe 's/ errado/o certo/' f{1,3}
$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Editando sem editor[2] - perl:
$   for i in 1 2 3
>   do
>   echo 'text errado' > f${i}
>   done

$ cat f*
text errado
text errado
text errado

$ perl -i -pe 's/ errado/o certo/' f{1,3}
$ cat f*
texto certo
text errado
texto certo
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Navegando por diretórios - pushd/popd:
$ pwd
/tmp/scti2011
$ find .
.
./a
./a/b
./a/b/c
./a/d
./a/d/e
./a/f
./a/f/g
$ pushd .
$ cd /Users/martelli
$ cd tmp
$ pwd
/Users/martelli/tmp
$ popd
/tmp/scti2011
$ pwd
/tmp/scti2011
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Navegando por diretórios[2] - cdspell:
$ cd /tpm/stci2011
-bash: cd: /tpm/stci2011: No such file or directory
$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Navegando por diretórios[2] - cdspell:
$ cd /tpm/stci2011
-bash: cd: /tpm/stci2011: No such file or directory
$ shopt -s cdspell
$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Navegando por diretórios[2] - cdspell:
$ cd /tpm/stci2011
-bash: cd: /tpm/stci2011: No such file or directory
$ shopt -s cdspell
$ cd /tpm/stci2011
/tmp/scti2011
$ pwd
/tmp/scti2011
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell multi-tarefa - jobs/fg/bg:
$ vi demo.txt
^Z
[1]+ Stopped                   vi demo.txt
$ vi demoNovo.txt
^Z
[2]+ Stopped                   vi demoNovo.txt
$ find / > lista.txt 2>&1
^Z
[3]+ Stopped                   find / > lista.txt
$ jobs
[1]    Stopped                 vi demo.txt
[2]- Stopped                   vi demoNovo.txt
[3]+ Stopped                   find / > lista.txt
$ bg 3
[3]+ find / > lista.txt 2>&1 &
$ fg 1
(de volta ao arquivo demo.txt)
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Criando comandos - function:
$ $ function demo() {
> echo "a: $1"
> echo "b: $2"
> echo "c: $3"
> }
$ demo primeiro segundo terceiro
a: primeiro
b: segundo
c: terceiro
$
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell Scripts:
“shabang”: #!/bin/bash

$ cat > demo.sh <<FIM
#!/bin/bash
MSG=$1
for ((i=0;i<10;i=$i+1))
do
    echo $i: $MSG
done
FIM
$ chmod +x demo.sh
$ ./demo.sh “Olá Mundo”
0: Olá Mundo
1: Olá Mundo
2: Olá Mundo
3: Olá Mundo
4: Olá Mundo
...
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Shell Scripts - depuração:
$ bash -x ./demo.sh 'Olá Mundo'
+ MSG='Olá Mundo'
+ (( i=0 ))
+ (( i<10 ))
+ echo 0: Olá Mundo
0: Olá Mundo
+ (( i=0+1 ))
+ (( i<10 ))
+ echo 1: Olá Mundo
1: Olá Mundo
+ (( i=1+1 ))
+ (( i<10 ))
+ echo 2: Olá Mundo
2: Olá Mundo
+ (( i=2+1 ))
+ (( i<10 ))
+ echo 3: Olá Mundo
...
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Terminais Múltiplos - screen:
$ screen -S demo
CTRL+a-d
[detached]
neutrino:scti2011 martelli$ screen -ls
There is a screen on:
   462.demo (Detached)
1 Socket in
/var/folders/gt/kqs2wvxd4yl7kfdm6x_b9rph0000gn/T/.screen.
$ screen -x demo
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Comandos amigos do dia-a-dia:

- awk
- sed
- sort
- uniq
- grep / egrep
- bc
- xargs
- tr
- curl
falta algo...
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Comandos amigos do dia-a-dia:

- awk
- sed
- sort
- uniq
- grep / egrep
- bc
- xargs
- tr
- curl
Não esqueçamos o pipe:              |
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011



Hands-on:

- screen (para os vários exemplos)
- bash -x
- netstat
- meetings.log
- /proc - file descriptors
- bash: $() $? - script com “quiet grep”
- tunneling com SSH
- openssl
${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011




    Obrigado!

Leandro Martelli
martelli@tawala.com.br
 www.tawala.com.br

[SCTI 2011] - CLI: sobrevivendo na linha de comando

  • 1.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 ${CLI} Sobrevivendo na Linha de Comando Leandro Martelli martelli@tawala.com.br
  • 2.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Por que a linha de comando?
  • 3.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Por que a linha de comando? - velocidade.
  • 4.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Por que a linha de comando? - velocidade. - acesso remoto.
  • 5.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Por que a linha de comando? - velocidade. - acesso remoto. - flexibilidade.
  • 6.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Por que a linha de comando? - velocidade. - acesso remoto. - flexibilidade. - poder!
  • 7.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell 101: - interface entre usuário e sistema.
  • 8.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell 101: - interface entre usuário e sistema. - interpretação de comandos.
  • 9.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell 101: - interface entre usuário e sistema. - interpretação de comandos. - exemplos de shell: * bash * tcsh * ksh * zsh
  • 10.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell 101: - interface entre usuário e sistema. - interpretação de comandos. - exemplos de shell: * bash * tcsh * zsh * ksh (Greg Sullivan, MPM)
  • 11.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Acessando o Sistema: - local: * xterm (Linux) * gnome-terminal (Linux) * iTerm (Mac) * cmd (Windows)
  • 12.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Acessando o Sistema: - local: * xterm (Linux) * gnome-terminal (Linux) * iTerm (Mac) * cmd (Windows) ??????????
  • 13.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Acessando o Sistema: - local: * xterm (Linux) * gnome-terminal (Linux) * iTerm (Mac) * cmd (Windows) ?????????? - remoto: * PuTTY (Windows)
  • 14.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Acessando um Sistema Remoto: $ ssh martelli@srv.tawala.com.br -p 23514 martelli@srv.tawala.com.br's password: Last login: Thu Nov 10 00:44:48 2011 from 201.222.4.136 [martelli@srv ~]$
  • 15.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Acessando um Sistema Remoto: $ ssh martelli@srv.tawala.com.br -p 23514 martelli@srv.tawala.com.br's password: Last login: Thu Nov 10 00:44:48 2011 from 201.222.4.136 [martelli@srv ~]$ Versão Preguiçosa: $ ssh servidor Last login: Thu Nov 10 00:45:34 2011 from 201.222.4.136 [martelli@srv ~]$
  • 16.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Acessando um Sistema Remoto: $ ssh martelli@srv.tawala.com.br -p 23514 martelli@srv.tawala.com.br's password: Last login: Thu Nov 10 00:44:48 2011 from 201.222.4.136 [martelli@srv ~]$ Versão Preguiçosa: $ ssh servidor Last login: Thu Nov 10 00:45:34 2011 from 201.222.4.136 [martelli@srv ~]$ ???
  • 17.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Passo [1] - arquivo .ssh/config: Host servidor HostName srv.tawala.com.br User martelli Port 23514
  • 18.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Passo [1] - arquivo .ssh/config: Host servidor HostName srv.tawala.com.br User martelli Port 23514 Editando sem editor: $ cat > ~/.ssh/config << FIM Host servidor HostName srv.tawala.com.br User martelli Port 23514 FIM $
  • 19.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Passo [2] - Autenticação por chave pública: $ ssh-keygen -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/home/teste/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/teste/.ssh/id_rsa. Your public key has been saved in ... $ ssh-copy-id -i ~/.ssh/id_rsa servidor martelli@srv's password: Now try logging into the machine, with "ssh 'servidor'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
  • 20.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Editando sem editor[2] - perl: $ for i in 1 2 3 > do > echo 'text errado' > f${i} > done $ cat f* text errado text errado text errado $
  • 21.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Editando sem editor[2] - perl: $ for i in 1 2 3 > do > echo 'text errado' > f${i} > done $ cat f* text errado text errado text errado $ perl -i -pe 's/ errado/o certo/' f{1,3} $
  • 22.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Editando sem editor[2] - perl: $ for i in 1 2 3 > do > echo 'text errado' > f${i} > done $ cat f* text errado text errado text errado $ perl -i -pe 's/ errado/o certo/' f{1,3} $ cat f* texto certo text errado texto certo
  • 23.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Navegando por diretórios - pushd/popd: $ pwd /tmp/scti2011 $ find . . ./a ./a/b ./a/b/c ./a/d ./a/d/e ./a/f ./a/f/g $ pushd . $ cd /Users/martelli $ cd tmp $ pwd /Users/martelli/tmp $ popd /tmp/scti2011 $ pwd /tmp/scti2011
  • 24.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Navegando por diretórios[2] - cdspell: $ cd /tpm/stci2011 -bash: cd: /tpm/stci2011: No such file or directory $
  • 25.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Navegando por diretórios[2] - cdspell: $ cd /tpm/stci2011 -bash: cd: /tpm/stci2011: No such file or directory $ shopt -s cdspell $
  • 26.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Navegando por diretórios[2] - cdspell: $ cd /tpm/stci2011 -bash: cd: /tpm/stci2011: No such file or directory $ shopt -s cdspell $ cd /tpm/stci2011 /tmp/scti2011 $ pwd /tmp/scti2011
  • 27.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell multi-tarefa - jobs/fg/bg: $ vi demo.txt ^Z [1]+ Stopped vi demo.txt $ vi demoNovo.txt ^Z [2]+ Stopped vi demoNovo.txt $ find / > lista.txt 2>&1 ^Z [3]+ Stopped find / > lista.txt $ jobs [1] Stopped vi demo.txt [2]- Stopped vi demoNovo.txt [3]+ Stopped find / > lista.txt $ bg 3 [3]+ find / > lista.txt 2>&1 & $ fg 1 (de volta ao arquivo demo.txt)
  • 28.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Criando comandos - function: $ $ function demo() { > echo "a: $1" > echo "b: $2" > echo "c: $3" > } $ demo primeiro segundo terceiro a: primeiro b: segundo c: terceiro $
  • 29.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell Scripts: “shabang”: #!/bin/bash $ cat > demo.sh <<FIM #!/bin/bash MSG=$1 for ((i=0;i<10;i=$i+1)) do echo $i: $MSG done FIM $ chmod +x demo.sh $ ./demo.sh “Olá Mundo” 0: Olá Mundo 1: Olá Mundo 2: Olá Mundo 3: Olá Mundo 4: Olá Mundo ...
  • 30.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Shell Scripts - depuração: $ bash -x ./demo.sh 'Olá Mundo' + MSG='Olá Mundo' + (( i=0 )) + (( i<10 )) + echo 0: Olá Mundo 0: Olá Mundo + (( i=0+1 )) + (( i<10 )) + echo 1: Olá Mundo 1: Olá Mundo + (( i=1+1 )) + (( i<10 )) + echo 2: Olá Mundo 2: Olá Mundo + (( i=2+1 )) + (( i<10 )) + echo 3: Olá Mundo ...
  • 31.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Terminais Múltiplos - screen: $ screen -S demo CTRL+a-d [detached] neutrino:scti2011 martelli$ screen -ls There is a screen on: 462.demo (Detached) 1 Socket in /var/folders/gt/kqs2wvxd4yl7kfdm6x_b9rph0000gn/T/.screen. $ screen -x demo
  • 32.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Comandos amigos do dia-a-dia: - awk - sed - sort - uniq - grep / egrep - bc - xargs - tr - curl falta algo...
  • 33.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Comandos amigos do dia-a-dia: - awk - sed - sort - uniq - grep / egrep - bc - xargs - tr - curl Não esqueçamos o pipe: |
  • 34.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Hands-on: - screen (para os vários exemplos) - bash -x - netstat - meetings.log - /proc - file descriptors - bash: $() $? - script com “quiet grep” - tunneling com SSH - openssl
  • 35.
    ${CLI}: Sobrevivendo naLinha de Comando :: SCTI 2011 Obrigado! Leandro Martelli martelli@tawala.com.br www.tawala.com.br