3. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Por que a linha de comando?
- velocidade.
4. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Por que a linha de comando?
- velocidade.
- acesso remoto.
5. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Por que a linha de comando?
- velocidade.
- acesso remoto.
- flexibilidade.
6. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Por que a linha de comando?
- velocidade.
- acesso remoto.
- flexibilidade.
- poder!
7. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Shell 101:
- interface entre usuário e sistema.
8. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Shell 101:
- interface entre usuário e sistema.
- interpretação de comandos.
9. ${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
10. ${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)
11. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Acessando o Sistema:
- local:
* xterm (Linux)
* gnome-terminal (Linux)
* iTerm (Mac)
* cmd (Windows)
12. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Acessando o Sistema:
- local:
* xterm (Linux)
* gnome-terminal (Linux)
* iTerm (Mac)
* cmd (Windows) ??????????
13. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Acessando o Sistema:
- local:
* xterm (Linux)
* gnome-terminal (Linux)
* iTerm (Mac)
* cmd (Windows) ??????????
- remoto:
* PuTTY (Windows)
14. ${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 ~]$
15. ${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 ~]$
16. ${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 ~]$
???
17. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Passo [1] - arquivo .ssh/config:
Host servidor
HostName srv.tawala.com.br
User martelli
Port 23514
18. ${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
$
19. ${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.
20. ${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
$
21. ${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}
$
22. ${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
23. ${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
24. ${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
$
25. ${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
$
26. ${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
27. ${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)
28. ${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
$
29. ${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
...
30. ${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
...
31. ${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
32. ${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...
33. ${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: |
34. ${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
35. ${CLI}: Sobrevivendo na Linha de Comando :: SCTI 2011
Obrigado!
Leandro Martelli
martelli@tawala.com.br
www.tawala.com.br