quarta-feira, 28 de outubro de 2015

300 artigos!

Após quase 5 anos escrevendo cheguei a 300 artigos. E para comemorar fiz uma modificação na cara do blog.

Alguns artigos são complexos, outros mais simples como uma dica, mas sempre mostrando como você pode aproveitar melhor a tua disribuição Linux. Alguns destes artigos já foram usados como resposta em vários fóruns. Outros foram republicados em outros sites (alguns sem que eu soubesse). Outros viraram apostilas para treinamentos diversos. Fiz até uma coletânea que vai virar um livro a ser lançado em breve pela editora Novatec. Aguardem!

Mas o mais importante é que esse material está sendo útil para várias pessoas, e isso é o que importa! 

quinta-feira, 15 de outubro de 2015

Administração dos módulos do kernel

O kernel (núcleo do sistema operacional) do Linux é modular, ou seja, trabalha com componentes que podem ou não estar carregados. Módulos podem habilitar suporte a algum hardware, habilitar funções especiais ou melhorar a segurança do sistema. Desabilitando os módulos sem uso torna o kernel mais enxuto, podendo ser usado em máquinas menos potentes.

Os módulos ficam instalados na pasta /lib/modules/<kernel>/kernel

$ ls /lib/modules/3.16.0-4-686-pae/kernel/
arch  crypto  drivers  fs  lib  mm  net  sound

Em cada pasta há centenas de módulos. Para listar o módulos atualmente carregados na memória use o comando lsmod.

$ lsmod
Module                   Size  Used by
nls_utf8               12416        0 
nls_cp437            12417        0 
vfat                      16967        0 
fat                        52647        1 vfat
...

Nesta listagem temos os módulos carregados e suas dependências. Por exemplo, o módulo vfat depende do módulo fat. Não é possível retirar o módulo fat sem antes retirar o vfat.

Vamos fazer uma demonstração retirando o módulos que controla a placa de rede. Primeiramente temos que descobrir qual é o módulos usado pela nossa interface.

$ dmesg  | grep eth
[    1.349952] e1000e 0000:00:19.0 eth0: registered PHC clock
[    1.349957] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) 50:e5:49:fc:de:9b
[    1.349959] e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000 Network Connection
[    1.350007] e1000e 0000:00:19.0 eth0: MAC: 10, PHY: 11, PBA No: FFFFFF-0FF
[   11.915452] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   15.036594] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   15.036631] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   69.254588] device eth0 entered promiscuous mode

Vemos que o módulo da placa de rede é o e1000e. Agora, como root, executamos o comando rmmod.

# rmmod e1000e

Agora a interface de rede não está mais disponível.

$ ifconfig eth0
eth0: erro obtendo informações da interface: %s: dispositivo não encontrado

Vamos recarregar o módulo.

# insmod e1000e
insmod: ERROR: could not load module e1000e: No such file or directory

O erro ocorre porque o insmod precisa do endereço completo do arquivo de módulo. Para saber onde o arquivo se encontra podemos usar o comando modinfo, que também fornece outras informações sobre um módulo.

$ modinfo e1000e
filename:       /lib/modules/3.16.0-4-686-pae/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version:        2.3.2-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
srcversion:     95081067188F78203E7ECF8
alias:          pci:v00008086d000015B8sv*sd*bc*sc*i*
alias:          pci:v00008086d000015B7sv*sd*bc*sc*i*
alias:          pci:v00008086d00001570sv*sd*bc*sc*i*
alias:          pci:v00008086d0000156Fsv*sd*bc*sc*i*
alias:          pci:v00008086d000015A3sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A2sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A1sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A0sv*sd*bc*sc*i*
...
alias:          pci:v00008086d0000105Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000105Esv*sd*bc*sc*i*
depends:        ptp
intree:         Y
vermagic:       3.16.0-4-686-pae SMP mod_unload modversions 686 
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
parm:           TxIntDelay:Transmit Interrupt Delay (array of int)
parm:           TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
parm:           RxIntDelay:Receive Interrupt Delay (array of int)
parm:           RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
parm:           InterruptThrottleRate:Interrupt Throttling Rate (array of int)
parm:           IntMode:Interrupt Mode (array of int)
parm:           SmartPowerDownEnable:Enable PHY smart power down (array of int)
parm:           KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)
parm:           WriteProtectNVM:Write-protect NVM [WARNING: disabling this can lead to 
corrupted NVM] (array of int)
parm:           CrcStripping:Enable CRC Stripping, disable if your BMC needs the CRC (array of int)

Agora, com o caminho completo do arquivo, podemos carregar o módulo logado como root.

# insmod /lib/modules/3.16.0-4-686-pae/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

E agora temos a interface de rede novamente.

# ifconfig eth0
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b  
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:343124704 errors:407 dropped:0 overruns:0 frame:272
          TX packets:13277281 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000 
          RX bytes:59616917901 (55.5 GiB)  TX bytes:1435011340 (1.3 GiB)
          IRQ:20 Memória:fe400000-fe420000 

Se tentarmos remover um módulo que outros módulos dependam dele teremos uma mensagem de erro. 

# rmmod fat
rmmod: ERROR: Module fat is in use by: vfat

Neste caso temos que remover primeiro o módulo vfat para depois remove o fat

# rmmod vfat
# rmmod fat

Agora, para recarregar o módulo vfat temos que primeiro carregar o módulo fat. Ou podemos usar o comando modprobe para carregar o módulo junto com suas dependências. 

# modprobe vfat
# lsmod  | grep fat
vfat                   16967  0 
fat                     52647  1 vfat

Reparem que, diferentemente do comando insmod, modprobe não precisa no endereço completo do arquivo de módulo. Você também pode remover um módulo usando "modprobe -r".

Uma listagem de módulos e suas dependências está no arquivo /lib/modules/3.16.0-4-686-pae/modules.dep. Para vermos as dependências relacionadas ao módulo fat digitamos:

$ grep fat /lib/modules/3.16.0-4-686-pae/modules.dep
kernel/fs/fat/fat.ko:
kernel/fs/fat/vfat.ko: kernel/fs/fat/fat.ko
kernel/fs/fat/msdos.ko: kernel/fs/fat/fat.ko

Podemos notar que os módulos vfat e msdos dependem do módulo fat.

quinta-feira, 8 de outubro de 2015

Inkscape, programa de desenho vetorial

Segundo a própria documentação do programa:

"Inkscape é um editor de ilustração que possui tudo o que é necessário para criar desenhos com qualidade profissional. Você pode utilizá-lo para criar diagramas, ilustrações, desenhos técnicos, gráficos para a web, clip art, ícones e logotipos. Uma coleção de tutoriais práticos mostram como combinar linhas, formas e textos de diferentes tipos e estilos para criar uma figura.

Uma seleção de poderosas ferramentas de edição de gráficos vetoriais está diponível por padrão. Há um excelente suporte para caminhos, gradientes, camadas, transparência alfa e controle de fluxo de texto. Uma extensa biblioteca de filtros permite que você aplique efeitos realistas e extensões permitem que você trabalhe com bitmaps, código de barras, impressão de marcas dentre outras coisas.

São suportados a maioria dos formatos vetoriais comuns incluindo arquivos em PDF, Adobe Illustrator e AutoCAD. O Inkscape possui um suporte incomparável para gráficos web no padrão SVG."


O Inkscape é um dos softwares mais utilizados para criação de desenhos vetoriais e contém várias ferramentas interessantes.

Para instalá-lo, nas distribuições Linux baseadas em Debian, digite o famoso "apt-get install inkscape".

quarta-feira, 7 de outubro de 2015

Tem dúvidas sobre um comando?

Além da vasta documentação existente em páginas de manual, fóruns e comunidades na internet sobre os comandos do Linux há também o programa info.

Digite "info" antes de qualquer comando que você terá uma descrição sobre ele. info pode trazer exemplos de uso do comando além de outras informações que as páginas de manual não trazem.

Por exmplo, para ter uma ajuda sobre o comando "dd" digite:

$ info dd

segunda-feira, 5 de outubro de 2015

Estatísticas de rede com ifstat

O programa ifstat é ótimo para ver de forma online como estão as interfaces de rede no que diz respeito ao download e upload de dados.

Para instalá-lo use:

# apt-get install ifstat

Seu uso é simples. Basta digitar o comando passando "-a" como parâmetro para mostrar os dados de todas as interfaces.

$ ifstat -a
        lo                          eth0                             eth1      
 KB/s in   KB/s out    KB/s in   KB/s out    KB/s in  KB/s out
   927.83     927.83    2808.16    7165.52    7147.57   2213.80
 1462.99   1462.99    2871.27    5219.12    5217.93   2355.21
 1552.99   1552.99    2221.81    7943.48    7928.80   1651.37
 1797.99   1797.99    1875.98    4431.78    4461.20   1312.80
 1785.94   1785.94    2260.76    6935.33    6837.54   1716.26
 1556.27   1556.27    2305.75  10295.63  10265.04   1749.11
 1218.54   1218.54    2495.21    8426.51    8388.47   1907.51
 1412.53   1412.53    2203.23    3878.96    3805.40   1606.59
 1724.88   1724.88    2108.79    3065.37    3049.91   1584.52
 1904.21   1904.21    2035.68    4292.38    3783.56   1505.63
 2534.54   2534.54    2225.66    5805.82    5645.50   1673.03
 1496.73   1496.73    2059.95    6998.29    6922.70   1491.80
 2038.61   2038.61    2121.71    4985.27    4879.74   1620.98
 2285.01   2285.01    2503.31    7688.86    7701.65   1926.83
 2753.78   2753.78    2347.53    6013.30    5902.92   1760.96
 2729.05   2729.05    2114.76  10035.34  10072.93   1612.32
 2443.32   2443.32    2295.35    9228.05    9239.88   1751.52
 3334.26   3334.26    2031.68    3971.51    3974.47   1528.43
 1907.00   1907.00    2495.21    7763.01    7460.65   1997.91
 1942.95   1942.95    2519.77    6173.28    6276.35   2029.58
 1846.70   1846.70    2911.25    3885.63    3634.37   2350.52
 1633.02   1633.02    2722.14    7003.83    5225.66   2079.18
^C

Os dados são mostrados as cada segundo e os valores estão em Kbytes. Para outras opções você pode consultar a página de manual digitando:

$ man ifstat

sexta-feira, 2 de outubro de 2015

Exemplo de uso do comando ifconfig

Apesar de não ser mais recomendado o uso do comando "ifconfig" no Linux (dê preferência ao comando "ip"), seu uso para administrar as configurações de rede ainda é muito difundido. Neste artigo  vou descrever os principais exemplos de uso do ifconfig.

Para listar as interfaces digite:

$ ifconfig
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:1085395808 errors:573 dropped:0 overruns:0 frame:390
          TX packets:48841639 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:140423994889 (130.7 GiB)  TX bytes:11754979934 (10.9 GiB)
          IRQ:20 Memória:fe400000-fe420000

lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:65536  Métrica:1
          RX packets:4957670 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4957670 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:740981008 (706.6 MiB)  TX bytes:740981008 (706.6 MiB)

Para ver todas as interfaces de rede, inclusive as que não estão em uso, digite:

$ ifconfig -a

Para ver as configurações de uma única interface é só passar o nome dela como parâmetro.

$ ifconfig eth0
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b  
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:1085463928 errors:573 dropped:0 overruns:0 frame:390
          TX packets:48842438 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000 
          RX bytes:140430606152 (130.7 GiB)  TX bytes:11755089960 (10.9 GiB)
          IRQ:20 Memória:fe400000-fe420000 

Para baixar uma interface digite:

# ifconfig eth0 down

Para levantá-la use:

# ifconfig eth0 up

Só lembrando que levantar uma interface com "ifconfig" não vai fazer o roteamento ser configurado. Neste caso é também necessário usar o comando "route".

Para configurar um IP manualmente use o seguinte comando:

# ifconfig eth0 172.20.120.45 netmask 255.255.0.0

Você também pode levantar outros IPs em interfaces virtuais.

# ifconfig eth0:1 172.20.45.45 netmask 255.255.0.0
# ifconfig
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:49050651 errors:585 dropped:0 overruns:0 frame:391
          TX packets:1729648 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:5815050436 (5.4 GiB)  TX bytes:439443643 (419.0 MiB)
          IRQ:20 Memória:fe400000-fe420000

eth0:1   Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b
          inet end.: 172.20.45.45  Bcast:172.20.255.255  Masc:255.255.0.0
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          IRQ:20 Memória:fe400000-fe420000

lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:65536  Métrica:1
          RX packets:59191 errors:0 dropped:0 overruns:0 frame:0
          TX packets:59191 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:8481802 (8.0 MiB)  TX bytes:8481802 (8.0 MiB)