terça-feira, 29 de setembro de 2015

Tomada de decisão em script bash

O linguagem de script bash é bem completa. Há comandos para praticamente tudo. E como qualquer linguagem de programação não podia ficar sem os blocos de decisão "if".

A sintaxe do "if" é simples, mas nada melhor do que ver na prática.

#!/bin/bash
if [ $USER == "root" ]
then
    echo "Você é o root"
    comandos_para_root
fi

O script acima checa se quem está executando o script é o root. Agora com o uso da cláusula "else" você pode tomar caminhos diferentes no fluxo do programa.

#!/bin/bash
if [ $USER == "root" ]
then
    echo "Você é o root"
    comandos_para_root
else
    echo "Você não é o root"
    comandos_para_nao_root
fi

Você também pode fazer uma sequência de testes encadeados usando "elif"

#!/bin/bash
if [ $USER == "root" ]
then
    echo "Você é o root"
    comandos_para_root
elif [ $USER == "ricardo" ]
then
    echo "Você é o ricardo"
    comandos_para_ricardo
else
    echo "Você não é o root e nem o ricardo"
    comandos_para_demais
fi

Você pode ter uma infinidade de 'elifs" encadeados. Inclusive pode testar outras condições dentro do mesmo bloco "if/elif/else/fi".

Para mais exemplos de script usando "if" e outros comandos consulte o site http://aurelio.net/shell/canivete/

quinta-feira, 24 de setembro de 2015

Como ver a quais grupos um usuário pertence

Entre as várias formas de checar a quais grupos um usuário pertence, a mais fácil é usando o comando "id".

$ id usuário


Por exemplo

$ id teste
uid=1001(teste) gid=1002(teste) grupos=1002(teste),29(audio),1003(financeiro)


Neste caso, o usuário "teste" tem o grupo padrão "teste" e ainda pertence aos grupos "audio" e "financeiro".

quarta-feira, 23 de setembro de 2015

Por que o Firefox não está nos repositóriso oficias da Debian?

Quem usa Debian já deve ter reparado que não existe Firefox nos repositórios oficiais. No lugar dele há o Iceweasel. Qual o motivo disso?
É simples. A Debian busca ser uma distribuição 100% livre. E o Firefox não é 100% livre. O nome "Firefox" e o Logo não são livres. Por isso a Debian pega o código fonte do Firefox, retira o Logo, muda o nome para Iceweasel, recompila e distribui com sua distribuição.

Tecnicamente falando, o Iceweasel e o Firefox são identicos.

quarta-feira, 16 de setembro de 2015

Testando o desempenho da web com httping

O httping testa a conexão com uma aplicação e mostra o tempo de resposta. Semelhante ao ping, mas ele testa a aplicação e não somente a resposta da interface de rede.

Para entermos melhor, vamos analisar o tempo de resposta do servidor que hospeda o site do Google.

$ ping -c 4 www.google.com
PING www.google.com (173.194.118.52) 56(84) bytes of data.
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=1 ttl=58 time=5.62 ms
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=2 ttl=58 time=7.64 ms
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=3 ttl=58 time=13.5 ms
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=4 ttl=58 time=10.0 ms

--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.625/9.207/13.562/2.952 ms

O tempo médio é de 9,2 milésimos de segundo. Agora vamos testar o tempo de resposta do site do Google.

$ httping -c 4 www.google.com
PING www.google.com:80 (www.google.com):
connected to 173.194.118.51:80 (238 bytes), seq=0 time=28.48 ms
connected to 173.194.118.49:80 (238 bytes), seq=1 time=24.45 ms
connected to 173.194.118.48:80 (238 bytes), seq=2 time=17.44 ms
connected to 173.194.118.52:80 (238 bytes), seq=3 time=11.69 ms
--- www.google.com ping statistics ---
4 connects, 4 ok, 0.00% failed, time 3083ms
round-trip min/avg/max = 11.7/20.5/28.5 ms

Reparem que vários IP respondem à solicitação. Isso porque o site do Google não está hospedado em um único servidor. O tempo médio de resposta foi de 21 milisegundos, mas que o dobro do valor mostrado no ping. Isso porque a requisição do httping exige um processamento pela aplicação, o que o ping não exige.

Outro exemplo, vamos comparar o tempo de resposta do site do Google quando acessado por IPv4 e IPv6.

$ httping -c 4  www.google.com
PING www.google.com:80 (www.google.com):
connected to 173.194.118.48:80 (238 bytes), seq=0 time=15.41 ms
connected to 173.194.118.52:80 (238 bytes), seq=1 time=11.78 ms
connected to 173.194.118.50:80 (238 bytes), seq=2 time=12.96 ms
connected to 173.194.118.49:80 (238 bytes), seq=3 time=25.78 ms
--- www.google.com ping statistics ---
4 connects, 4 ok, 0.00% failed, time 3066ms
round-trip min/avg/max = 11.8/16.5/25.8 ms

$ httping -6 -c 4  www.google.com
PING www.google.com:80 (www.google.com):
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=0 time=578.46 ms
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=1 time=586.94 ms
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=2 time=556.28 ms
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=3 time=546.82 ms
--- www.google.com ping statistics ---
4 connects, 4 ok, 0.00% failed, time 5269ms
round-trip min/avg/max = 546.8/567.1/586.9 ms

O IPv4 respondeu a uma média de 17 milisegundo, enquanto o tempo médio do IPv6 foi de 570 milisegundos. Isso não significa que o IPv6 é mais lento. Isso pode ser causado por dois fatores:


  1. Estou usando IPv6 através de um túnel 6to4, o que prejudica o desempenho;
  2. As requisições IPv4 passam por um proxy que faz cache, e isso aumenta o desempenho.


Em todo caso, o httping pode ser uma ótima ferramenta para fazer análises de rede e de aplicações servidoras e pode ser instalado com o apt-get.

# apt-get install httping

sexta-feira, 4 de setembro de 2015

Monitoramento de processos com htop

Em todas as distribuições Linux há um utilitário muito conhecido e bastante usado chamado top que permite monitorar, mudar a prioridade, congelar, continuar e matar processos. Mas o Htop possui mais recursos.



Apertando a tecla F2 você pode personalizar a tela para mostrar os dados de várias maneiras, como gráficos de barra (como na imagem acima), valores ou leds, bem como configurar quais informações serão mostradas.

É possível pesquisar por um processo específico, bem como mostrar os processo em cascata, onde fica evidente os processos pai e filhos. Para alterar a prioridade de um processo basta ir até ele com as setas do teclado e clicar em "+" para aumentar o nice (mais lento) e "-" para diminuir o nice (menos lento). Lembre-se que para diminuir o valor de nice é necessário ter permissões de root.

Vejam como ficou a minha tela personalizada.



Para instalar o Htop, basta usar o apt-get

# apt-get install htop

Para executá-lo, digite

# htop

*** Artigo publicado em 13 de julho de 2012 ***

quinta-feira, 3 de setembro de 2015

Como capturar o texto de um site pela linha de comandos

O comando wget, muito conhecido pelos usuários de Linux, permite baixar uma página HTML de um site pela linha de comandos. Seu uso é simples:

$ wget www.ricardo.olonca.nom.br
--2015-09-03 16:27:00--  http://www.ricardo.olonca.nom.br/
Resolvendo www.ricardo.olonca.nom.br (www.ricardo.olonca.nom.br)... 162.243.226.87, 198.199.92.59
Conectando-se a www.ricardo.olonca.nom.br (www.ricardo.olonca.nom.br)|162.243.226.87|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 302 Found
Localização: http://ricardoolonca.blogspot.com.br [redirecionando]
--2015-09-03 16:27:01--  http://ricardoolonca.blogspot.com.br/
Resolvendo ricardoolonca.blogspot.com.br (ricardoolonca.blogspot.com.br)... 2800:3f0:4003:c01::84, 64.233.190.132
Conectando-se a ricardoolonca.blogspot.com.br (ricardoolonca.blogspot.com.br)|2800:3f0:4003:c01::84|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html”

index.html                   [     <=>                          ] 244,18K   173KB/s   em 1,4s   


2015-09-03 16:27:03 (173 KB/s) - “index.html” salvo [250037]

O wget salva o arquivo index.html (você pode digitar a URL inteira para baixar outro arquivo). Porém, esse arquivo contém todas as marcações e tags HTML. Eis um exemplo de como é o arquivo.

$ head index.html
<!DOCTYPE html>
<html class='v2' dir='ltr'>
<head>
<meta content='width=1100' name='viewport'/>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<script type="text/javascript">(function() { var b=window,f="chrome",g="tick",k="jstiming";(function(){function d(a){this.t={};this.tick=function(a,d,c){var e=void 0!=c?c:(new Date).getTime();this.t[a]=[e,d];if(void 0==c)try{b.console.timeStamp("CSI/"+a)}catch(h){}};this[g]("start",null,a)}var a;b.performance&&(a=b.performance.timing);var n=a?new d(a.responseStart):new d;b.jstiming={Timer:d,load:n};if(a){var c=a.navigationStart,h=a.responseStart;0<c&&h>=c&&(b[k].srt=h-c)}if(a){var e=b[k].load;0<c&&h>=c&&(e[g]("_wtsrt",void 0,c),e[g]("wtsrt_","_wtsrt",h),e[g]("tbsd_","wtsrt_"))}try{a=null,
b[f]&&b[f].csi&&(a=Math.floor(b[f].csi().pageT),e&&0<c&&(e[g]("_tbnd",void 0,b[f].csi().startE),e[g]("tbnd_","_tbnd",c))),null==a&&b.gtbExternal&&(a=b.gtbExternal.pageT()),null==a&&b.external&&(a=b.external.pageT,e&&0<c&&(e[g]("_tbnd",void 0,b.external.startE),e[g]("tbnd_","_tbnd",c))),a&&(b[k].pt=a)}catch(p){}})();b.tickAboveFold=function(d){var a=0;if(d.offsetParent){do a+=d.offsetTop;while(d=d.offsetParent)}d=a;750>=d&&b[k].load[g]("aft")};var l=!1;function m(){l||(l=!0,b[k].load[g]("firstScrollTime"))}b.addEventListener?b.addEventListener("scroll",m,!1):b.attachEvent("onscroll",m);
 })();</script>
<meta content='blogger' name='generator'/>
<link href='http://ricardoolonca.blogspot.com.br/favicon.ico' rel='icon' type='image/x-icon'/>


Se você quiser somente os textos "úteis" sem as tags e marcações você pode usar o programa html2txt que pode ser instalado via apt-get.

# apt-get install html2txt

Após instalar o programa basta executá-lo passando como parámetro o arquivo index.html

$ html2text index.html
****** Informática, Rede, Software Livre ****** 
Neste espaço eu pretendo escrever pequenos artigos, dicas e opiniões sobre Software Livre e Redes, além de comentários pertinentes ao mundo da Informática. 
***** quarta-feira, 2 de setembro de 2015 ***** 
**** Teste_de_rede_com_hping3 **** 
Se você costuma testar a estabilidade da rede usando o ping, experimente o hping3. 
Com o hping3 você pode controlar melhor o uso do ping. Uma opção que costumo usar faz com que centenas de pacotes icmp sejam enviados para o alvo em um segundo. Muito bom para testar a estabilidade da rede, ou para testar o quanto uma máquina aguenta de requisições. Por exemplo, o comando: 
# hping3 -i u1000 8.8.8.8 -c 1000 -1 
envia 1000 pacotes (-c 1000) icmp (-1) para o alvo (8.8.8.8), cada pacote com um intervalo de 1000 microsegundos (-i u1000). Em outras palavras, 1000 "pings" por segundo. O resultado do comando está resumido abaixo. 
HPING 8.8.8.8 (eth0 8.8.8.8): icmp mode set, 28 headers + 0 data bytes 
len=46 ip=8.8.8.8 ttl=57 id=36829 icmp_seq=0 rtt=7.3 ms 
len=46 ip=8.8.8.8 ttl=57 id=36830 icmp_seq=1 rtt=6.3 ms 
len=46 ip=8.8.8.8 ttl=57 id=36832 icmp_seq=3 rtt=4.9 ms 

quarta-feira, 2 de setembro de 2015

Teste de rede com hping3

Se você costuma testar a estabilidade da rede usando o ping, experimente o hping3.

Com o hping3 você pode controlar melhor o uso do ping. Uma opção que costumo usar faz com que centenas de pacotes icmp sejam enviados para o alvo em um segundo. Muito bom para testar a estabilidade da rede, ou para testar o quanto uma máquina aguenta de requisições. Por exemplo, o comando:

# hping3 -i u1000 8.8.8.8 -c 1000 -1

envia 1000 pacotes (-c 1000) icmp (-1) para o alvo (8.8.8.8), cada pacote com um intervalo de 1000 microsegundos (-i u1000). Em outras palavras, 1000 "pings" por segundo. O resultado do comando está resumido abaixo.

HPING 8.8.8.8 (eth0 8.8.8.8): icmp mode set, 28 headers + 0 data bytes
len=46 ip=8.8.8.8 ttl=57 id=36829 icmp_seq=0 rtt=7.3 ms
len=46 ip=8.8.8.8 ttl=57 id=36830 icmp_seq=1 rtt=6.3 ms
len=46 ip=8.8.8.8 ttl=57 id=36832 icmp_seq=3 rtt=4.9 ms
len=46 ip=8.8.8.8 ttl=57 id=36831 icmp_seq=2 rtt=5.9 ms
len=46 ip=8.8.8.8 ttl=57 id=36834 icmp_seq=4 rtt=6.0 ms
len=46 ip=8.8.8.8 ttl=57 id=36833 icmp_seq=5 rtt=5.5 ms
len=46 ip=8.8.8.8 ttl=57 id=36835 icmp_seq=6 rtt=4.5 ms
len=46 ip=8.8.8.8 ttl=57 id=36836 icmp_seq=7 rtt=4.1 ms
(...)
len=46 ip=8.8.8.8 ttl=57 id=37804 icmp_seq=994 rtt=5.4 ms
len=46 ip=8.8.8.8 ttl=57 id=37805 icmp_seq=995 rtt=4.7 ms
len=46 ip=8.8.8.8 ttl=57 id=37806 icmp_seq=996 rtt=4.8 ms
len=46 ip=8.8.8.8 ttl=57 id=37807 icmp_seq=997 rtt=4.1 ms
len=46 ip=8.8.8.8 ttl=57 id=37808 icmp_seq=998 rtt=6.7 ms
len=46 ip=8.8.8.8 ttl=57 id=37809 icmp_seq=999 rtt=6.3 ms
--- 8.8.8.8 hping statistic ---
1000 packets transmitted, 978 packets received, 3% packet loss
round-trip min/avg/max = 1.9/5.8/1002.6 ms

Na minha máquina esse comando demorou 2 segundos, com 3% de perda. Uma boa marca.
O hping3 pode ser instalado via apt-get.

# apt-get install hping3