SAPO Sessions Linux Power Tools   Armando Reis - DTP3
Linux Power Tools <ul><li>'Power tools' são ferramentas, comandos ou utilitários, que nos permitem maior eficácia/rapidez/...
s hell  – A primeira 'power tool' <ul><li>A shell é a primeira interface com o sistema; </li></ul><ul><li>Seja qual for a ...
shell builtins (bash) <ul><li>bash  defines  the  following  built-in commands: </li></ul><ul><li>:, ., [, alias, bg, bind...
man – man is your friend <ul><li>O comando ' man ' permite aceder às páginas do manual. </li></ul><ul><li>Contém a descriç...
alias <ul><li>alias [-p] [name[=value] ... ] </li></ul><ul><li>Permite definir nomes que serão interpretados pela shell e ...
Text processing tools <ul><li>awk ;  sed ;  tr ... </li></ul><ul><li>Originalmente desenvolvidos no âmbito do  UNIX , fora...
Text processing – awk  I <ul><li>Pattern scanning and text processing language </li></ul><ul><li>O awk processa um ' fiche...
Text processing – awk  II <ul><li>Formas mais comuns </li></ul><ul><li>$ awk 'pattern {program}' file </li></ul><ul><li>$ ...
Text processing – awk  III <ul><li>Padrões. </li></ul><ul><li>Podem ser strings, regexps... </li></ul><ul><li>/string/ - V...
Text processing – awk  IV <ul><li>Programa. </li></ul><ul><li>São as instruções a serem executadas. </li></ul><ul><li>São ...
Text processing – awk  V <ul><li>Exemplo simples: </li></ul><ul><li>$ cat /etc/resolv.conf </li></ul><ul><li>search old.bk...
Text processing – awk  VI <ul><li>Exemplo mais elaborado: </li></ul><ul><li>BEGIN { </li></ul><ul><ul><ul><li>FS=”
” </li>...
Text processing – awk  VII <ul><li>Exemplo mais elaborado: </li></ul><ul><li>BEGIN { </li></ul><ul><ul><ul><li>FS=”
” </li...
Text processing – sed  I <ul><li>Stream editor. </li></ul><ul><li>Actua sobre o seu input, permitindo efectuar tarefas de ...
Text processing – sed  II <ul><li>Formas mais comuns: </li></ul><ul><li>$ sed -e 'comandos' ficheiro </li></ul><ul><li>$ c...
Text processing – sed  III <ul><li>Comandos... </li></ul><ul><li>s – Substitute </li></ul><ul><li>s/XX/YY/ - Substitui pri...
Text processing – sed  IV <ul><li>Aceita regexps </li></ul><ul><li>Retirar comentários? </li></ul><ul><li>$ sed -e '/^#/d'...
Text processing – sed  V <ul><li>Inline editing. </li></ul><ul><li>$ sed -i -e 's/Hello/Goodbye/g'  ficheiro </li></ul><ul...
Text processing – tr  I <ul><li>Translate or delete characters. </li></ul><ul><li>$ tr [options] [set1 [set2] ] </li></ul>...
Text processing – tr  II <ul><li>Exemplos: </li></ul><ul><li>$ echo 'text' | tr “[:lower:]” “[:upper:]” </li></ul><ul><li>...
Text processing – tr  III <ul><li>$ tr -s ' ' ' ' < input-file > outputfil e </li></ul><ul><ul><li>(agrega os espaços no f...
Text processing – grep  I <ul><li>Pesquisa por padrões no seu input. </li></ul><ul><li>$ grep [options] patterns [files......
Text processing – grep  II <ul><li>Algumas opções mais comuns: </li></ul><ul><li>-i Case Insensitive </li></ul><ul><li>-e ...
Text processing – grep  III <ul><li>Contexto: </li></ul><ul><li>-A n Mostra as n linhas depois (after) do match </li></ul>...
Text processing – grep  IV <ul><li>Regexps vs Extended Regexps. </li></ul><ul><li>(  -e  vs  -E ) </li></ul><ul><li>Inicia...
seq <ul><li>Print a sequence of numbers </li></ul><ul><li>$ seq 1 5 </li></ul><ul><li>$ seq 1 2 10 </li></ul><ul><li>$ seq...
seq <ul><li>$ seq 1 5 </li></ul><ul><li>1 </li></ul><ul><li>2 </li></ul><ul><li>3 </li></ul><ul><li>4 </li></ul><ul><li>5 ...
seq <ul><li>$ for a in `seq -f”%02.f” 1 3` </li></ul><ul><li>> do </li></ul><ul><li>> scp file$a web${a}.domain </li></ul>...
find and xargs  I <ul><li>Procura recursiva de ficheiros. </li></ul><ul><li>$ find início [ filtro] [comandos] </li></ul><...
find and xargs  II <ul><li>$ for a in `seq 1 100000` do touch /path/ola.$a; done </li></ul><ul><li>$ rm /path/ola* </li></...
find and xargs  III <ul><li>$ for a in `seq 1 100000` do touch /path/ola.$a; done </li></ul><ul><li>$ rm /path/ola* </li><...
find and xargs  IV <ul><li>Mover um grande número de ficheiros? </li></ul><ul><li>$ find . -maxdepth 1 -type f -name “*.lo...
screen  I <ul><li>Multiplex between multiple processes. </li></ul><ul><li>screen  permite ter várias sessões dentro do mes...
screen  II <ul><li>Execução do screen na shell </li></ul><ul><li>$ screen comando [args]   - executa o comando </li></ul><...
screen  III <ul><li>Dentro do screen </li></ul><ul><li>CTRL A – C   : Lança uma nova sessão </li></ul><ul><li>CTRL A – W  ...
screen  IV <ul><li>$ hostname </li></ul><ul><li>HOST1 </li></ul><ul><li>$ screen ssh user@sistema1  </li></ul><ul><li>.......
strace  I <ul><li>Trace system calls. </li></ul><ul><li>É uma ferramenta de  debug  interessante. </li></ul><ul><li>Mostra...
strace  II <ul><li>$ strace -p PID  - Para um processo já a correr. </li></ul><ul><li>$ strace program args – Para um novo...
strace  III <ul><li>$ strace pwd </li></ul><ul><li>execve(&quot;/bin/pwd&quot;, [&quot;pwd&quot;], [/* 41 vars */]) = 0 </...
strace  IV <ul><li>Algumas flags </li></ul><ul><li>-c Conta stats de chamadas, erros, e tempos. </li></ul><ul><li>-f Follo...
strace  V <ul><li>$ strace -c ps aux </li></ul><ul><li>... </li></ul><ul><li>% time  seconds  usecs/call  calls  errors sy...
strace  VI <ul><li>$ strace -eopen pwd  (Output parcial) </li></ul><ul><li>open(&quot;/etc/ld.so.cache&quot;, O_RDONLY)  =...
strace  VII <ul><li>$ strace -p 8547 </li></ul><ul><li>attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted </li></...
Closing time... <ul><li>Mais info? --> man pages, google, friends? </li></ul><ul><li>Outras  power tools : </li></ul><ul><...
SAPO Sessions Linux Power Tools   Armando Reis - DTP3
Upcoming SlideShare
Loading in...5
×

Sapo sessions linux power tools

741

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
741
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sapo sessions linux power tools

  1. 1. SAPO Sessions Linux Power Tools Armando Reis - DTP3
  2. 2. Linux Power Tools <ul><li>'Power tools' são ferramentas, comandos ou utilitários, que nos permitem maior eficácia/rapidez/automatismo na execução de tarefas. </li></ul><ul><li>Significam diferentes coisas para diferentes pessoas. </li></ul>
  3. 3. s hell – A primeira 'power tool' <ul><li>A shell é a primeira interface com o sistema; </li></ul><ul><li>Seja qual for a vossa shell preferida aprendam a tirar partido dela. </li></ul><ul><li>Goodies: command completion, command line editing... </li></ul><ul><li>builtins – Existem vários comandos embutidos na própria shell. </li></ul>
  4. 4. shell builtins (bash) <ul><li>bash defines the following built-in commands: </li></ul><ul><li>:, ., [, alias, bg, bind, break, builtin, case, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, if, jobs, kill, let, local, logout, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, until, wait, while. </li></ul><ul><li>Alguns ficheiros para visitar... </li></ul><ul><li>.bash_profile </li></ul><ul><li>.bashrc </li></ul><ul><li>.bash_aliases </li></ul><ul><li>.bash_history </li></ul>
  5. 5. man – man is your friend <ul><li>O comando ' man ' permite aceder às páginas do manual. </li></ul><ul><li>Contém a descrição de cada comando, com a sua função, parâmetros e qualificadores. </li></ul><ul><li>$ man man <- a 'manpage' do próprio comando man. </li></ul><ul><li>$ apropos </li></ul><ul><li>$ info </li></ul>
  6. 6. alias <ul><li>alias [-p] [name[=value] ... ] </li></ul><ul><li>Permite definir nomes que serão interpretados pela shell e substituídos pelo valor; </li></ul><ul><li>$ alias SSH=”eval 'ssh-agent -s'; ssh-add” </li></ul><ul><li>$ alias ll=”ls -l” </li></ul>
  7. 7. Text processing tools <ul><li>awk ; sed ; tr ... </li></ul><ul><li>Originalmente desenvolvidos no âmbito do UNIX , foram mais tarde re-escritas pelo projecto GNU . </li></ul><ul><li>Existem na distribuição base de qualquer linux comum. </li></ul>
  8. 8. Text processing – awk I <ul><li>Pattern scanning and text processing language </li></ul><ul><li>O awk processa um ' ficheiro ' de input. </li></ul><ul><li>Avalia o input ' record ' a 'record' procurando 'padrões' </li></ul><ul><li>Se o ' padrão ' existir executa os ' comandos ' associados. </li></ul><ul><li>Cada record pode ter vários ' fields ' - $1...$n </li></ul><ul><li>Variáveis especiais: $0 ; NR; RS; NF; FS; OFS ... </li></ul><ul><li>Padrões pré-definidos: <nada>; BEGIN; END; </li></ul>
  9. 9. Text processing – awk II <ul><li>Formas mais comuns </li></ul><ul><li>$ awk 'pattern {program}' file </li></ul><ul><li>$ cat file | awk 'pattern {program}' </li></ul><ul><li>$ awk -f program-file input-file </li></ul><ul><li>O ficheiro program-file conterá os padrões e expressões que constituem o nosso 'programa'. </li></ul>
  10. 10. Text processing – awk III <ul><li>Padrões. </li></ul><ul><li>Podem ser strings, regexps... </li></ul><ul><li>/string/ - Valida a string “string”. </li></ul><ul><li>/[0-9]+/ - Valida se existem dígitos. </li></ul><ul><li>Podem referenciar campos /$1/ </li></ul><ul><li>Podem usar && e || </li></ul><ul><ul><li>( $1 == “foo” ) && ( $2 == “bar” ) { print } </li></ul></ul>
  11. 11. Text processing – awk IV <ul><li>Programa. </li></ul><ul><li>São as instruções a serem executadas. </li></ul><ul><li>São muitas instruções e operadores entre os quais: </li></ul><ul><li>print; print0; </li></ul><ul><li>= +=... </li></ul><ul><li>== < > <= </li></ul><ul><li>(e muita coisa familiar para quem usa C) </li></ul><ul><li>Suporta ARRAYS... </li></ul>
  12. 12. Text processing – awk V <ul><li>Exemplo simples: </li></ul><ul><li>$ cat /etc/resolv.conf </li></ul><ul><li>search old.bk.sapo.pt co.sapo.pt sapo.pt </li></ul><ul><li>nameserver 212.55.154.194 </li></ul><ul><li>nameserver 212.55.154.174 </li></ul><ul><li>$ cat /etc/resolv.conf | awk '/nameserver/ {print $2}' </li></ul><ul><li>212.55.154.194 </li></ul><ul><li>212.55.154.174 </li></ul>
  13. 13. Text processing – awk VI <ul><li>Exemplo mais elaborado: </li></ul><ul><li>BEGIN { </li></ul><ul><ul><ul><li>FS=” ” </li></ul></ul></ul><ul><ul><ul><li>RS=”” </li></ul></ul></ul><ul><ul><ul><li>ORS=”” </li></ul></ul></ul><ul><li>} </li></ul><ul><li>{ x=1 </li></ul><ul><ul><li>while (x < NF ) { </li></ul></ul><ul><ul><ul><li>print $x “; ” </li></ul></ul></ul><ul><ul><ul><li>x++ </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>print $NF “ ” </li></ul></ul><ul><li>} </li></ul>
  14. 14. Text processing – awk VII <ul><li>Exemplo mais elaborado: </li></ul><ul><li>BEGIN { </li></ul><ul><ul><ul><li>FS=” ” </li></ul></ul></ul><ul><ul><ul><li>RS=”” </li></ul></ul></ul><ul><ul><ul><li>ORS=”” </li></ul></ul></ul><ul><li>} </li></ul><ul><li>{ x=1 </li></ul><ul><ul><li>while (x < NF ) { </li></ul></ul><ul><ul><ul><li>print $x “; ” </li></ul></ul></ul><ul><ul><ul><li>x++ </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>print $NF “ ” </li></ul></ul><ul><li>} </li></ul><ul><li>$ cat textfile </li></ul><ul><li>texto linha 1 </li></ul><ul><li>2 </li></ul><ul><li>Três </li></ul><ul><li>linha 5 </li></ul><ul><li>e acaba na 6 </li></ul><ul><li>$ awf -f programa textfile </li></ul><ul><li>texto linha 1; 2; Três </li></ul><ul><li>linha 5; e acaba na 6 </li></ul>
  15. 15. Text processing – sed I <ul><li>Stream editor. </li></ul><ul><li>Actua sobre o seu input, permitindo efectuar tarefas de edição. </li></ul><ul><li>Sintaxe semelhante à do vi . </li></ul><ul><li>Editor de linha. </li></ul><ul><li>Aceita expressões regulares. </li></ul>
  16. 16. Text processing – sed II <ul><li>Formas mais comuns: </li></ul><ul><li>$ sed -e 'comandos' ficheiro </li></ul><ul><li>$ cat ficheiro | sed -e 'comandos' </li></ul><ul><li>$ sed -f ficheiro-comandos ficheiro </li></ul><ul><li>Os comandos são executados em sequência. </li></ul>
  17. 17. Text processing – sed III <ul><li>Comandos... </li></ul><ul><li>s – Substitute </li></ul><ul><li>s/XX/YY/ - Substitui primeiro XX por YY </li></ul><ul><li>s/XX/YY/g - Substitui todos os XX por YY </li></ul><ul><li>d - Delete </li></ul><ul><li>d - Apaga a linha </li></ul><ul><li>1d - Apaga a linha 1 </li></ul><ul><li>1,5d - Apaga as linhas 1 a 5 </li></ul>
  18. 18. Text processing – sed IV <ul><li>Aceita regexps </li></ul><ul><li>Retirar comentários? </li></ul><ul><li>$ sed -e '/^#/d' ficheiro | more </li></ul><ul><li>Ver apenas a função main de um programa em C ? </li></ul><ul><li>$ sed -n -e '/main[[:space:]]*(/,/^}/p' source.c | more </li></ul><ul><ul><li>(2 regexps: /main[[:space:]]*(/ e /^}/ ) </li></ul></ul>
  19. 19. Text processing – sed V <ul><li>Inline editing. </li></ul><ul><li>$ sed -i -e 's/Hello/Goodbye/g' ficheiro </li></ul><ul><li>Muda todas as strings 'Hello' para 'Goodbye' no ficheiro. </li></ul><ul><li>Sem um parâmetro no '-i' não faz backup! </li></ul><ul><li>$ sed -i.bak -e 's/Hello/Goodbye/g' ficheiro </li></ul>
  20. 20. Text processing – tr I <ul><li>Translate or delete characters. </li></ul><ul><li>$ tr [options] [set1 [set2] ] </li></ul><ul><li>Lê o input e substitui caracteres com base em dois sets, escreve no output. </li></ul><ul><li>Um dos poucos comandos que apenas recebe input via STDIN. </li></ul>
  21. 21. Text processing – tr II <ul><li>Exemplos: </li></ul><ul><li>$ echo 'text' | tr “[:lower:]” “[:upper:]” </li></ul><ul><li>$ echo 'text' | tr “a-z” “A-Z” </li></ul><ul><li>Flags: </li></ul><ul><li>-c Complement set1 </li></ul><ul><li>-d Delete </li></ul><ul><li>-s Squeeze (Converte caracteres repetidos num só) </li></ul><ul><li>-t Truncate (Trunca o set1 para ficar com o mesmo tamanho que o set2. Obriga a especificar os dois sets) </li></ul>
  22. 22. Text processing – tr III <ul><li>$ tr -s ' ' ' ' < input-file > outputfil e </li></ul><ul><ul><li>(agrega os espaços no ficheiro) </li></ul></ul><ul><li>$ echo $PATH | tr ':' ' ' </li></ul><ul><li>/home/areis/bin </li></ul><ul><li>/usr/local/bin </li></ul><ul><li>/usr/local/sbin </li></ul><ul><li>/usr/bin </li></ul><ul><li>/usr/sbin </li></ul>
  23. 23. Text processing – grep I <ul><li>Pesquisa por padrões no seu input. </li></ul><ul><li>$ grep [options] patterns [files...] </li></ul><ul><li>$ grep -f pattern-file [files...] </li></ul><ul><li>Pesquisa por texto simples ou por expressões regulares, processando linha a linha o input. </li></ul>
  24. 24. Text processing – grep II <ul><li>Algumas opções mais comuns: </li></ul><ul><li>-i Case Insensitive </li></ul><ul><li>-e Interpretar o padrão como uma regexp </li></ul><ul><li>-v Inverter o match </li></ul><ul><li>-c Contar o número de matches </li></ul><ul><li>-l Mostrar apenas o nome dos ficheiros onde houve match </li></ul><ul><li>-n Mostrar o número da linha que fez match </li></ul><ul><li>-R Pesquisar recursivamente nos vários ficheiros </li></ul>
  25. 25. Text processing – grep III <ul><li>Contexto: </li></ul><ul><li>-A n Mostra as n linhas depois (after) do match </li></ul><ul><li>-B n Mostra as n linhas antes (before) do match </li></ul><ul><li>-C n Mostra n linhas antes e depois do match </li></ul><ul><li>--color Destaca o padrão com texto colorido </li></ul>
  26. 26. Text processing – grep IV <ul><li>Regexps vs Extended Regexps. </li></ul><ul><li>( -e vs -E ) </li></ul><ul><li>Inicialmente as expressões regulares do grep e do egrep eram muito básicas. Não suportavam vários dos metacaracteres como '?', '+','{' etc... </li></ul><ul><li>O GNU grep já as suporta, no entanto há que decidir entre retro-compatibilidade ( -e ) e a implementação correcta das regexps ( -E ). </li></ul><ul><li>Portability Warning! </li></ul>
  27. 27. seq <ul><li>Print a sequence of numbers </li></ul><ul><li>$ seq 1 5 </li></ul><ul><li>$ seq 1 2 10 </li></ul><ul><li>$ seq -sSEP 1 5 </li></ul><ul><li>$ seq -f”%03.f” 1.6 0.5 4 </li></ul>
  28. 28. seq <ul><li>$ seq 1 5 </li></ul><ul><li>1 </li></ul><ul><li>2 </li></ul><ul><li>3 </li></ul><ul><li>4 </li></ul><ul><li>5 </li></ul><ul><li>$ seq 1 2 10 </li></ul><ul><li>1 </li></ul><ul><li>3 </li></ul><ul><li>5 </li></ul><ul><li>7 </li></ul><ul><li>9 </li></ul>$ seq -s: 1 5 1:2:3:4:5 $ seq -f”%0.3f” 1.6 0.5 4 1.600 2.100 2.600 3.100 3.600
  29. 29. seq <ul><li>$ for a in `seq -f”%02.f” 1 3` </li></ul><ul><li>> do </li></ul><ul><li>> scp file$a web${a}.domain </li></ul><ul><li>> done </li></ul><ul><li>$ for a in “01 02 03” </li></ul><ul><li>> do </li></ul><ul><li>> scp file$a web${a}.domain </li></ul><ul><li>> done </li></ul>
  30. 30. find and xargs I <ul><li>Procura recursiva de ficheiros. </li></ul><ul><li>$ find início [ filtro] [comandos] </li></ul><ul><li>$ find / -type f -size +10000c -ls </li></ul><ul><li>$ find / -mount -type -f -size 100M -ls </li></ul><ul><li>$ find /path -type f -newer file </li></ul><ul><li>$ find / -type f -iname “*.log” -mtime +15 -ls </li></ul><ul><li>$ find / -type f -name “*log” -mtime +15 -exec gzip {} ; </li></ul>
  31. 31. find and xargs II <ul><li>$ for a in `seq 1 100000` do touch /path/ola.$a; done </li></ul><ul><li>$ rm /path/ola* </li></ul><ul><li>/bin/rm: Argument list too long <--- ??? </li></ul><ul><li>$ find /path -type f -exec rm {} ; </li></ul><ul><li>Quantos ficheiros apaga? </li></ul><ul><li>Como confirmar que vai apagar o que queremos? </li></ul>
  32. 32. find and xargs III <ul><li>$ for a in `seq 1 100000` do touch /path/ola.$a; done </li></ul><ul><li>$ rm /path/ola* </li></ul><ul><li>/bin/rm: Argument list too long <--- ??? </li></ul><ul><li>xargs constrói e executa comandos. </li></ul><ul><li>Controla o tamanho da lista de argumentos </li></ul><ul><li>$ find /path -type f -print | xargs rm </li></ul><ul><li>$ find /path -type f -print0 | xargs -0 rm </li></ul>
  33. 33. find and xargs IV <ul><li>Mover um grande número de ficheiros? </li></ul><ul><li>$ find . -maxdepth 1 -type f -name “*.log” -print0 </li></ul><ul><li>> | xargs -0 -I XXX mv XXX /dead-archive </li></ul><ul><li>-maxdepth - Número de directorias a processar. </li></ul><ul><li>-I XXX - 'Replace-string' – Identifica os parâmetros </li></ul><ul><ul><ul><ul><ul><li>para o comando que se vai construir. </li></ul></ul></ul></ul></ul><ul><li>(XXX a seguir ao 'mv' é onde se irão colocar os ficheiros a mover) </li></ul>
  34. 34. screen I <ul><li>Multiplex between multiple processes. </li></ul><ul><li>screen permite ter várias sessões dentro do mesmo terminal. Efectua um 'decoupling' do terminal das sessões por ele iniciadas. </li></ul><ul><li>Permite “desligar” e “retomar mais tarde”. </li></ul><ul><li>CTRL A – Sequência de comando do screen. </li></ul>
  35. 35. screen II <ul><li>Execução do screen na shell </li></ul><ul><li>$ screen comando [args] - executa o comando </li></ul><ul><li>$ screen -opções comando [args] - idem </li></ul><ul><li>$ screen -ls - Lista as sessões existentes </li></ul><ul><li>$ screen -r [sessão] - Resume de uma sessão </li></ul>
  36. 36. screen III <ul><li>Dentro do screen </li></ul><ul><li>CTRL A – C : Lança uma nova sessão </li></ul><ul><li>CTRL A – W : Lista as sessões criadas </li></ul><ul><li>CTRL A – N : Next </li></ul><ul><li>CTRL A – P : Previous </li></ul><ul><li>CTRL A – D : Detach </li></ul>
  37. 37. screen IV <ul><li>$ hostname </li></ul><ul><li>HOST1 </li></ul><ul><li>$ screen ssh user@sistema1 </li></ul><ul><li>.... </li></ul><ul><li>user@sistema1:~$ hostname </li></ul><ul><li>sistema1 </li></ul><ul><li>user@sistema1:~$ </li></ul><ul><li>CTRL A - D <- Detach </li></ul><ul><li>[detached] </li></ul><ul><li>$ hostname </li></ul><ul><li>HOST1 </li></ul><ul><li>$ screen -ls </li></ul><ul><ul><li>8551.pts-2.HOST1 ... </li></ul></ul><ul><li>$ screen -r </li></ul><ul><li>user@sistema1:~$ </li></ul>
  38. 38. strace I <ul><li>Trace system calls. </li></ul><ul><li>É uma ferramenta de debug interessante. </li></ul><ul><li>Mostra as várias chamadas ao sistema que um programa executa. </li></ul><ul><li>Pode ser aplicado a um programa em execução. </li></ul><ul><li>Profiling rudimentar. </li></ul>
  39. 39. strace II <ul><li>$ strace -p PID - Para um processo já a correr. </li></ul><ul><li>$ strace program args – Para um novo processo. </li></ul><ul><li>$ strace pwd 2>&1 | wc -l </li></ul><ul><li>115 </li></ul><ul><li>$ strace uptime 2>&1 | wc -l </li></ul><ul><li>218 </li></ul><ul><li>$ ltrace pwd 2>&1 | wc -l </li></ul><ul><li>16 </li></ul><ul><li>$ ltrace uptime 2>&1 | wc -l </li></ul><ul><li>4 </li></ul>
  40. 40. strace III <ul><li>$ strace pwd </li></ul><ul><li>execve(&quot;/bin/pwd&quot;, [&quot;pwd&quot;], [/* 41 vars */]) = 0 </li></ul><ul><li>brk(0) = 0xe70000 </li></ul><ul><li>... </li></ul><ul><li>open(&quot;/etc/ld.so.cache&quot;, O_RDONLY) = 3 </li></ul><ul><li>... </li></ul><ul><li>getcwd(&quot;/home/areis&quot;..., 4096) = 10 </li></ul><ul><li>... </li></ul><ul><li>write(1, &quot;/home/areis &quot;..., 10/home/areis </li></ul>
  41. 41. strace IV <ul><li>Algumas flags </li></ul><ul><li>-c Conta stats de chamadas, erros, e tempos. </li></ul><ul><li>-f Follow child processes. </li></ul><ul><li>-ff Follow childs in files. (-o filename) </li></ul><ul><li>-r Relative timestamp </li></ul><ul><li>-e Expression (-etrace=open,close) (!open) (=signal) </li></ul>
  42. 42. strace V <ul><li>$ strace -c ps aux </li></ul><ul><li>... </li></ul><ul><li>% time seconds usecs/call calls errors syscall </li></ul><ul><li>------ ----------- ----------- --------- --------- -------- </li></ul><ul><li>55.56 0.000060 0 495 read </li></ul><ul><li>36.11 0.000039 0 505 2 open </li></ul><ul><li>8.33 0.000009 0 158 write </li></ul><ul><li>... </li></ul><ul><li>0.00 0.000000 0 1 geteuid </li></ul><ul><li>0.00 0.000000 0 1 arch_prctl </li></ul><ul><li>------ ----------- ----------- --------- --------- -------- </li></ul><ul><li>100.00 0.000108 2327 16 total </li></ul>
  43. 43. strace VI <ul><li>$ strace -eopen pwd (Output parcial) </li></ul><ul><li>open(&quot;/etc/ld.so.cache&quot;, O_RDONLY) = 3 </li></ul><ul><li>open(&quot;/lib/libc.so.6&quot;, O_RDONLY) = 3 </li></ul><ul><li>open(&quot;/dev/urandom&quot;, O_RDONLY) = 3 </li></ul><ul><li>open(&quot;/usr/lib/locale/locale-archive&quot;, O_RDONLY) = -1 ENOENT (No such file or directory) </li></ul><ul><li>open(&quot;/usr/share/locale/locale.alias&quot;, O_RDONLY) = 3 </li></ul><ul><li>open(&quot;/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION&quot;, O_RDONLY) = -1 ENOENT (No such file or directory) </li></ul><ul><li>open(&quot;/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION&quot;, O_RDONLY) = 3 </li></ul><ul><li>open(&quot;/usr/lib/locale/en_US.utf8/LC_CTYPE&quot;, O_RDONLY) = 3 </li></ul><ul><li>/home/areis </li></ul>
  44. 44. strace VII <ul><li>$ strace -p 8547 </li></ul><ul><li>attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted </li></ul><ul><li>$ strace -efile hostname </li></ul><ul><li>execve(&quot;/bin/hostname&quot;, [&quot;hostname&quot;], [/* 41 vars */]) = 0 </li></ul><ul><li>access(&quot;/etc/ld.so.nohwcap&quot;, F_OK) = -1 ENOENT (...) </li></ul><ul><li>access(&quot;/etc/ld.so.preload&quot;, R_OK) = -1 ENOENT (...) </li></ul><ul><li>open(&quot;/etc/ld.so.cache&quot;, O_RDONLY) = 3 </li></ul><ul><li>access(&quot;/etc/ld.so.nohwcap&quot;, F_OK) = -1 ENOENT (...) </li></ul><ul><li>open(&quot;/lib/libc.so.6&quot;, O_RDONLY) = 3 </li></ul><ul><li>open(&quot;/dev/urandom&quot;, O_RDONLY) = 3 </li></ul><ul><li>aqua </li></ul>
  45. 45. Closing time... <ul><li>Mais info? --> man pages, google, friends? </li></ul><ul><li>Outras power tools : </li></ul><ul><li>lsof – List open files. </li></ul><ul><li>netcat - “Swiss-army knife” for TCP/IP. </li></ul><ul><li>netstat – Print network information </li></ul><ul><li>tcpdump – Dump network traffic </li></ul><ul><li>terminator – Multiple terminals in one window. </li></ul>
  46. 46. SAPO Sessions Linux Power Tools Armando Reis - DTP3
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×