BT

Ferramentas de linha de comando que todo desenvolvedor Web deveria conhecer

por Eder Ignatowicz em 06 Ago 2012 |

A linha de comando é, sem dúvida, a interação mais poderosa com o computador, embora não seja tão agradável para quem está acostumado com interfaces visuais de programação.

Para a realização de atividades precisas, exatas e que exijam eficiência, a linha de comando é o meio mais adequado. Contudo, a complexidade de execução de alguns comandos é o preço a ser pago por tal eficácia nos resultados.

Para desenvolvedores web, o conhecimento das possibilidades e técnicas de linha de comando é essencial para a otimização das tarefas diárias. Neste artigo, serão apresentadas algumas ferramentas de linha de comando não tão populares, encontradas em sistemas baseados em Unix, e essenciais a qualquer desenvolvedor web.

As duas primeiras ferramentas que iremos apresentar são o Curl e wget. Estes dois utilitários possuem o mesmo objetivo: transferir o conteúdo de servidores de rede. A principal diferença é que, por padrão, o wget armazena o conteúdo em um arquivo e o Curl exibe o resultado na saída padrão.

Com o Curl é simples obter o endereço IP (via ifconfig.me):

$ curl ifconfig.me
221.83.154.254

E com o wget é simples obter o conteúdo de um arquivo:

$ wget http://cdn1.infoq.com/styles/i/logo-infoq.gif
--2012-07-30 22:45:00--  http://cdn1.infoq.com/styles/i/logo-infoq.gif
Resolvendo cdn1.infoq.com (cdn1.infoq.com)... 63.246.7.157
Conectando-se a cdn1.infoq.com (cdn1.infoq.com)|63.246.7.157|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 4706 (4,6K) [image/gif]
Salvando em: "logo-infoq.gif"
100%[========================================================================>] 4.706       --.-K/s   em 0s
2012-07-30 22:45:03 (47,7 MB/s) - "logo-infoq.gif" salvo [4706/4706]

Também é possível utilizar opções mais avançadas do Curl e do wget para a realização de depuração de requisições HTTP. Há suporte à autenticação Basic HTTP e cookies, entre outras funcionalidades. Para se obter o header http de um endereço, por exemplo:

$ curl -I infoq.com
HTTP/1.1 301 Moved Permanently
Date: Tue, 31 Jul 2012 01:48:43 GMT
Server: Apache/2.2.3 (Red Hat)
Location: http://www.infoq.com/
Connection: close
Content-Type: text/html; charset=iso-8859-1

Ou pode-se utilizar a opção -L para seguir redirects:

$ curl -I -L infoq.com
HTTP/1.1 301 Moved Permanently
Date: Tue, 31 Jul 2012 01:49:24 GMT
Server: Apache/2.2.3 (Red Hat)
Location: http://www.infoq.com/
Connection: close
Content-Type: text/html; charset=iso-8859-1
HTTP/1.1 200 OK
Date: Tue, 31 Jul 2012 01:49:24 GMT
Server: Apache/2.2.3 (Red Hat)
Set-Cookie: UserCookie=11f5I0mrRRPwcsbtI7Y2fcJyT8Hw4xrl; Expires=Fri, 26-Jul-2013 01:49:24 GMT; Path=/
Set-Cookie: JSESSIONID=CA98D3339760C9E049133E5444488C27; Path=/
Connection: close
Content-Type: text/html;charset=utf-8

Os parâmetros necessários para o uso dos comandos, no entanto, não são tão amigáveis. Como alternativa, existe o HTTPie: (que é conhecido como "Curl para humanos"), que permite a construção de requisições HTTP através de uma sintaxe simples, tornando-se útil para testes de serviços RESTful:

$http PATCH api.example.com/person/1 X-API-Token:123 name=John email=john@example.org age:=29
PATCH /person/1 HTTP/1.1
User-Agent: HTTPie/0.1
X-API-Token: 123
Content-Type: application/json; charset=utf-8
{"name": "John", "email": "john@example.org", "age": 29}

Outra ferramenta útil é a jsonpp, que permite formatar dados JSON obtidos de um servidor HTTP:

curl -s -L http://t.co/tYTq5Pu | jsonpp

Embora existam ferramentas mais completas de testes de carga em servidores web (como o JMeter, por exemplo, de interface visual), o Siege e o Apache AB são alternativas poderosas para teste de carga com base em linhas de comando. Por exemplo, para testar o site www.infoq.com através de 10 conexões concorrentes com duração de 30 segundos cada, pode-se executar o seguinte comando:

$ siege -c10 www.infoq.com -b -t30s
** SIEGE 2.72
** Preparing 10 concurrent users for battle.
The server is now under siege...
Lifting the server siege...      done.
Transactions:                      139 hits
Availability:                      100.00 %
Elapsed time:                       29.50 secs
Data transferred:                   10.72 MB
Response time:                       2.03 secs
Transaction rate:                    4.71 trans/sec
Throughput:                          0.36 MB/sec
Concurrency:                         9.57
Successful transactions:           139
Failed transactions:                 0
Longest transaction:                 3.63
Shortest transaction:                1.53

Outra função, a fim de se obter detalhes de execução do um servidor web, por exemplo, a ferramenta top pode ser utilizada e mostra um resumo em tempo real da utilização do processador, consumo de memória e lista em detalhes os processos em execução:

$ top
top - 09:45:01 up 42 days, 17:58,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  75 total,   1 running,  74 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    509424k total,   437136k used,    72288k free,    76508k buffers
Swap:   262140k total,     1144k used,   260996k free,   161528k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1 root      20   0  2732 1476 1188 S    0  0.3   0:03.80 init
2 root      20   0     0    0    0 S    0  0.0   0:00.13 kthreadd
3 root      20   0     0    0    0 S    0  0.0   0:00.70 ksoftirqd/0
4 root      20   0     0    0    0 S    0  0.0   1:08.29 kworker/0:0
5 root      20   0     0    0    0 S    0  0.0   0:00.05 kworker/u:0
6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0

A fluência na utilização de ferramentas de linha de comando contribui, além da realização de atividades precisas, também à produtividade dos desenvolvedores, através da automação ou da otimização do trabalho realizado.

Mais informações podem ser encontradas no post de Ben Dowling (que inspirou esta publicação), ou ainda em tutoriais de introdução a linha de comando e no post de Gabriel Saldana. Sentiu falta de algum utilitário? Utilize a seção de comentários abaixo e contribua citando suas ferramentas favoritas.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Excelente! by Leandro Guimarães

Na verdade, comandos da linha de comando deveriam ser conhecidos e dominados não só por desenvolvedores WEB mas sim por todo e qualquer desenvolvedor. Como citado pelo autor contribui para a realização de atividades precisas e, principalmente em minha opinião, para o aumento da produtividade do trabalho.

Um cara que me ajuda bastante e eu gosto muito é o canivete suíço do shell que pode ser encontrado e baixado neste endereço: aurelio.net/shell/canivete/ . É um manual de sobrevivência pra automatização de tarefas!

"curl -I" = HEAD by Daniel Serodio

"curl -I" não mostra simplesmente os cabeçalhos HTTP, e sim faz uma requisição HEAD. Teoricamente o servidor HTTP deveria responder a um HEAD com os mesmos cabeçalhos que mostraria a uma requisição GET, mas nem sempre é assim.

Byobu by Rafael Nunes

-Eu não sei mais viver sem o byobu/screen para gerenciar múltiplos terminais.
-No lugar do top costumo usar o 'htop' que fica mais organizada a apresentação dos dados
-Outra que tem me ajudado bastante também é p 'ngrep' para analisar conteúdo nos tráfegos de rede,

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

3 Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT