segunda-feira, 4 de janeiro de 2010

Comandos de Informações do Sistema

Uma das funções principais de um administrador de sistemas é monitorar e obter informações do sistema que está sendo administrado. No Linux, existem dezenas de comandos que ajudam o administrador obter informações diversas como: espaço em disco, mensagens do kernel, bibliotecas carregadas, arquivos abertos, arquivos travados, informações de hardware e muito mais.

Este tutorial pretende ensinar a maior quantidade possível de comandos para obter informações sobre o sistema, mesmo que isso faça com que ele fique grande demais…

Antes de mais nada, é bom saber que além dos comandos citados a seguir, os mais diversos tipos de informação podem ser encontrados nos diretórios /proc (sistema/kernel) e /sys (hardware). Geralmente são arquivos texto e podem ser visualizados com o cat ou qualquer editor de texto. Não que os comandos a seguir sejam inúteis (pelo contrário), mas mais informações sobre estes diretórios em um tutorial perto de você ;)

date – Data do sistema

Sintaxe: $ date [+formato]

A simples execução do date mostra a data do sistema atual, por exemplo:

$ date

Tue Nov 11 23:02:26 BRST 2008

Como podemos ver, há informações da data, da hora e do fuso-horário. Neste caso, a sintaxe está em inglês, porque o sistema utilizado na execução está configurado para inglês. No caso do português, ficaria:

$ date

Ter Nov 11 21:20:00 BRST 2008

Para mudar o formato dessa mostragem, usamos caracteres especiais depois do símbolo “+”, como neste exemplo:

$ date "+%d/%m/%Y"

11/11/2008

Neste caso, formatei de forma %d/%m/%Y, onde %d é o dia, %m é o mês e %Y é o ano. Uma lista completa de caracteres especiais pode ser encontrada na página de manual do comando date:

$ man date

Além de apenas mostrar a hora atual, este comando pode ser muito útil na hora de criar arquivos com nomes específicos, por exemplo: backups com a data e hora no nome dos arquivos. O uso deste comando com shell-script pode ser muito extenso e útil!

cal – Calendário

Sintaxe: $ cal [opções]

Se você não tem um calendário visual em algum lugar e estiver com a linha de comando na sua frente, o comando cal vai te mostrar um calendário formatado de forma amigável e de fácil consulta. Por exemplo:

$ cal

November 2008

Su Mo Tu We Th Fr Sa

1

2  3  4  5  6  7  8

9  10 11 12 13 14 15

16 17 18 19 20 21 22

23 24 25 26 27 28 29

30

Sem parâmetro nenhum, o cal me mostrou o calendário do mês atual. Note que em um terminal texto, o dia atual vai estar marcado com as cores invertidas.

Mais uma vez, este exemplo foi em inglês, mas se o sistema for configurado para português as palavras vão mudar, como no exemplo a seguir:

$ cal -3

    outubro 2008         novembro 2008         dezembro 2008

Do Se Te Qu Qu Se Sá  Do Se Te Qu Qu Se Sá  Do Se Te Qu Qu Se Sá

          1  2  3  4                     1      1  2  3  4  5  6

 5  6  7  8  9 10 11   2  3  4  5  6  7  8   7  8  9 10 11 12 13

12 13 14 15 16 17 18   9 10 11 12 13 14 15  14 15 16 17 18 19 20

19 20 21 22 23 24 25  16 17 18 19 20 21 22  21 22 23 24 25 26 27

26 27 28 29 30 31     23 24 25 26 27 28 29  28 29 30 31

                      30

O parâmetro -3 mostrou não apenas o mês atual, mas também o mês anterior e o próximo. Por fim, se você colocar como opção o ano, ele vai mostrar o calendário de todos os mêses do ano determinado:

$ cal 2010

df – Mostra informações de espaço em disco

Sintaxe: $ df [opções] [arquivo]

Se quisermos saber informações de espaço em disco como quanto está sendo usado e quanto está livre, podemos usar o comando df. Sem nenhuma opção, o df lista todos os sistemas de arquivos montados, qual seu espaço total em blocos de 1K, quanto desse espaço está sendo usado (em blocos e em porcentagem), quanto está disponível e em que diretório do sistema estão montados. Exemplo:

$ df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda3             63838084  60116572   3072952  96% /

tmpfs                  1037464         0   1037464   0% /lib/init/rw

udev                     10240       104     10136   2% /dev

tmpfs                  1037464         0   1037464   0% /dev/shm

/dev/sda2               101105     49225     51880  49% /boot

/dev/sdb2             58464080  33914736  24549344  59% /media/IPOD

Podemos notar que, por exemplo, a raiz do meu sistema (/) tem 4% livre, ou seja, 3072952 blocos de 1K livres, o que dá aproximadamente 3GB.

Ao utilizar a opção -h, podemos ver melhor o resultado:

$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              61G   58G  3.0G  96% /

[...]

Note que agora ao invés dele mostrar os blocos de 1K “crus”, o comando deixou de uma forma mais legível convertendo as unidades de bytes em Megabytes, Gigabytes, Terabytes, Pentabytes e por aí vai :)

Se você especificar o parâmetro [arquivo], sendo [arquivo] um arquivo ou diretório qualquer, o df vai mostrar as informações de espaço para apenas o sistema de arquivos desse arquivo ou diretório, por exemplo:

$ df -h /

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              61G   58G  3.0G  96% /

 

$ df -h /boot

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2              99M   49M   51M  49% /boot

Veja que ao especificar o diretório, eu peguei apenas as informações de espaço deste diretório.

Há também outras opções úteis, porém não tanto usadas. A primeira é verificar, ao invés do espaço em disco, verificar a capacidade de inodes de um sistema de arquivos. Em outras palavras, dá para ver quantos arquivos ou diretórios o sistema pode ter. Exemplo:

$ df -i /boot

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/sda2              26208      38   26170    1% /boot

Neste caso, existem 38 inodes usados e a cada arquivo ou diretório novo que eu criar, esse número vai aumentando. Felizmente a quantidade de inodes é, na grande maioria dos casos, mais do que o suficiente. Se por acaso você utilizar o resto dos 26170 arquivos, o sistema vai lhe avisar que não há mais espaço em disco, olhe isso:

$ ls -l /boot/teste | wc -l

26170

 

$ df -i /boot

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/sda2              26208   26208       0  100% /boot

 

$ df -h /boot

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2              99M   49M   51M  50% /boot

Note que apesar de estar usando apenas 50M, o /boot não tem mais espaço aqui porque eu tenho 26208 arquivos dentro dele! Obviamente esta não é uma situação normal, mas é bom saber. Aqui eu criei um script com um laço infinito que criava arquivos vazios, até acabar o espaço de inodes.

Por último, a opção -T adiciona também o sistema de arquivos:

$ df -T / /boot

Filesystem    Type   1K-blocks      Used Available Use% Mounted on

/dev/sda3     ext3    63838084  60116556   3072968  96% /

/dev/sda2     ext3      101105     49771     51334  50% /boot

Um campo a mais apareceu aí…

du – Mostra espaço em disco usado por diretórios

Sintaxe: $ du [opções] [diretorio]

Enquanto o comando df mostra o espaço usado nas partições/sistemas de arquivo como um todo, o comando du pode ser usado para mostrar o espaço em disco usado de arquivos ou diretórios bem específicos. Exemplo:

$ du ~/tmp/c

32      /home/hugo/tmp/c

O comando acima calculou o tamanho em disco usado pelo diretório /home/hugo/tmp/c, que é de 32 bytes.

Sem parâmetro nenhum, o comando du vai mostrar várias linhas, cada uma com o tamanho dos diretórios e subdiretórios, e no final vai mostrar uma linha com a quantidade de bytes no total. Exemplo:

$ cd /home/hugo

$ du Desktop/

112     Desktop/random/relationship

27620   Desktop/random/v

8892    Desktop/random/woa

[...]

498488  Desktop/

O du foi mostrando o espaço usado por todos os diretórios e no final calculou que o diretório Desktop dentro do /home/hugo tem 498488 bytes. Utilizando a opção -h, o tamanho fica mais fácil de visualizar:

$ du -h Desktop/

112K    Desktop/random/relationship

27M     Desktop/random/v

8.7M    Desktop/random/woa

[...]

487M    Desktop/

Se você utilizar a opção -s, ele mostra apenas o resultado final:

$ du -hs Desktop/

487M    Desktop/

Caso você não especifique nada depois das opções, ele vai calcular o diretório atual que você se encontra.

É bom lembrar que cada vez que executamos o comando du, ele obtém as informações de todos os arquivos e diretórios, seus tamanhos e calcula tudo no final. Isso quer dizer que quanto maior a “complexidade” do diretório, seu tamanho, quantidade de arquivos e sub-diretórios, o processo pode demorar um pouco ;)

fdisk, sfdisk – Informações sobre partições

Sintaxe: # fdisk -l [hd]

Sintaxe: # sfdisk -l [hd]

Os comandos fdisk e sfdisk na verdade são utilitários completos para criar/remover/alterar partições de um ou mais HDs. Enquanto o fdisk, mais popular, lida com o usuário de forma interativa, o sfdisk só aceita linhas de comandos e parâmetros.

O parâmetro -l (ele) destes dois comandos mostram informações sobre um HD e sua lista de partições com detalhes. Por isso, estes comandos são extremamente úteis para saber qual o atual esqueam de particionamento de uma máquina.

Exemplo:

# fdisk -l

 

Disk /dev/sda: 120.0 GB, 120034123776 bytes

255 heads, 63 sectors/track, 14593 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Disk identifier: 0x16351635

 

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        6375    51207156    7  HPFS/NTFS

/dev/sda2            6376        6388      104422+  83  Linux

/dev/sda3            6389       14593    65906662+  8e  Linux LVM

Podemos ver o tamanho do HD (/dev/sda), quais partições, seus tipos e tamanhos, sua numeração… Se existisse outro HD, ele também mostraria. Para listar apenas um HD, basta especificar depois do parâmetro -l:

# fdisk -l /dev/sdb

 

Disk /dev/sdb: 60.0 GB, 60011642880 bytes

255 heads, 62 sectors/track, 7413 cylinders

Units = cylinders of 15810 * 512 = 8094720 bytes

Disk identifier: 0x20202020

 

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1          15      112423+   0  Empty

Partition 1 does not end on cylinder boundary.

/dev/sdb2              15        7414    58492664+   b  W95 FAT32

O mesmo procedimento serve para o sfdisk.

Tanto o fdisk, quanto o sfdisk olham diretamente no dispositivo físico do disco, ao invés da tabela gravada no kernel. Algumas vezes as duas tabelas podem ser diferentes, e por isso você também pode olhar a tabela de partições reconhecida pelo kernel Linux através do comando:

# cat /proc/partitions

hdparm – Informações detalhadas sobre HDs

Sintaxe: # hdparm -i <hd>

O hdparm é um utilitário para configurações específicas de HDs. Por exemplo, ativar DMA (Direct Memory Access – Acesso Direto à Memória), especificar modos (e taxas) de transferência, entre outras coisas. Uma das opções dele é a -i, que mostra todas as informações detalhadas do HD. Exemplo:

# hdparm -i /dev/sda

 

/dev/sda:

 

Model=SAMSUNG HM120JI                         , FwRev=YF100-15, SerialNo=      S09GJ10P141906

Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }

RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4

BuffType=DualPortCache, BuffSize=8192kB, MaxMultSect=16, MultSect=?16?

CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648

IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes:  pio0 pio1 pio2 pio3 pio4

DMA modes:  mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6

AdvancedPM=yes: unknown setting WriteCache=enabled

Drive conforms to: ATA/ATAPI-7 T13 1532D revision 0:  ATA/ATAPI-1,2,3,4,5,6,7

 

* signifies the current active mode

Podemos ver o modelo do HD, tipos de buffer, tamanho de buffer, setores, modos de transferência, conexão, opções de cache, entre outros. Muitas dessas opções podem ser configuradas com o hdparm, mas aí já sai fora do escopo do nosso assunto.

free – Informações sobre memória

Sintaxe: $ free [opções]

Uma das tarefas mais básicas é saber quanto de memória o sistema está usando e quanto está livre… O comando free serve justamente para isto. Executando apenas ele, temos:

$ free

total       used       free     shared    buffers     cached

Mem:       2074928    2013752      61176          0     341764     656544

-/+ buffers/cache:    1015444    1059484

Swap:      1048568        104    1048464

Podemos ver o total de bytes, os bytes usados, os livres, os utilizados para cache de disco e buffers. Além disso, podemos ver também a memória virtual (swap), seu total, o quanto o sistema está utilizando e o quanto está livre.

Para facilitar a visualização, usamos o parâmetro -m, que transforma os bytes em Megabytes:

$ free -m

total       used       free     shared    buffers     cached

Mem:          2026       1960         66          0        329        640

-/+ buffers/cache:        989       1036

Swap:         1023          0       1023

No exemplo, podemos ver que temos 2GB (2000MB) de memória física no total. Destes 2GB, estou usando 1.96GB e só tenho 66MB livres! Isto acontece porque o Linux tenta nunca deixar a memória livre, ele é inteligente o suficiente para usar toda a memória sem comprometer o sistema. Quando há memória livre, o kernel aloca esta memória para ser usada como cache de disco, diminuindo assim o tempo que os programas acessam seus dados do HD (que é praticamente a mídia mais lenta de um sistema).

Sendo assim, fazendo os cálculos, os dados de aplicativos estão utilizando 50%, os buffers do disco estão utilizando uns 15% e o cache de disco está utilizando uns 32%.

As informações sobre memória também podem ser encontradas com mais detalhes no arquivo /proc/meminfo:

$ cat /proc/meminfo

swapon – Informações sobre memória virtual (swap)

Sintaxe: # swapon -s

A memória virtual (swap) é um pedaço do HD que é utilizado como se fosse memória RAM caso a memória RAM esteja muito lotada ou indisponível no momento. O comando swapon serve para ativar ou desativar arquivos ou partições de swap no sistema.

O parâmetro -s serve para mostrar uma lista dos arquivos ou partições swap habilitadas:

# swapon -s

Filename                                Type            Size    Used    Priority

/dev/mapper/VolGroup01-Swap             partition       1048568 104     -1

Encontramos acima o arquivo, o tipo (partição ou arquivo), tamanho, quanto está sendo usado e qual a sua prioridade. A prioridade existe porque há sempre a possibilidade de usar vários swaps dentro de um sistema, e nesse caso quanto maior o número da prioridade, o sistema vai dar mais preferência.

cat /proc/cpuinfo – Informações sobre o processador

Sintaxe: $ cat /proc/cpuinfo

Não é um comando propriamente dito e sim a visualização do arquivo /proc/cpuinfo. Dentro deste arquivo, podemos encontrar todas as informações sobre o(s) processador(es) reconhecidos pelo sistema. Exemplo:

$ cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 14

model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz

stepping        : 8

cpu MHz         : 1000.000

cache size      : 2048 KB

[...]

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts pni monitor vmx est tm2 xtpr

bogomips        : 3402.52

clflush size    : 64

power management:

 

processor       : 1

vendor_id       : GenuineIntel

cpu family      : 6

model           : 14

model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz

stepping        : 8

cpu MHz         : 1000.000

cache size      : 2048 KB

[...]

No exemplo, temos dois processadores (na verdade um processador com dois núcleos – para o sistema é a mesma coisa). Podemos ver a marca e modelo do processador, seu clock, tamanho do cache, flags, entre outros.

uname – Informações de versão do kernel, arquitetura e outros

Sintaxe: $ uname [opções]

O uname é um comando muito útil. Ao entrar em um novo sistema ao qual não lhe é familiar, talvez um dos primeiros comandos que você precisa digitar é o uname. Ele mostra as informações sobre a versão do kernel, que tipo de sistema é, seu nome, se é multi-processado (SMP), a qual momento o kernel foi compilado e qual a arquitetura do sistema.

Exemplo:

$ uname -a

Linux madoka 2.6.26-1-686 #1 SMP Wed Sep 10 16:46:13 UTC 2008 i686 GNU/Linux

lspci – Mostra informações sobre dispositivos PCI

Sintaxe: $ lspci [opções]

Este é um ótimo comando para identificar o hardware de um computador. Com o lspci, podemos obter onde (qual barramento PCI) o hardware está localizado, o tipo de hardware, sua marca e modelo. Exemplo:

$ lspci

00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)

00:01.0 PCI bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port (rev 03)

00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)

00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)

00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01)

00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 01)

00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01)

00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01)

00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01)

00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01)

00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)

00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e1)

00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 01)

00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)

00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller (rev 01)

00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)

01:00.0 VGA compatible controller: nVidia Corporation G72M [GeForce Go 7400] (rev a1)

06:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

08:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller

08:06.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller

08:06.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)

08:06.3 SD Host controller: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller

08:08.0 Ethernet controller: Intel Corporation PRO/100 VE Network Connection (rev 01)

Basicamente, com esse comando já dá para saber tudo que este notebook usado no exemplo tem.

Ao especificar o parâmetro -v, obtemos uma lista ainda maior, só que agora com muito mais detalhes. Além do tipo de hardware, marca e modelo, podemos ver a quem pertence, onde a memória está alocada, flags, portas de interrupção usadas, que driver de kernel está sendo usado, entre outros. Exemplo:

$ lspci -v

[...]

01:00.0 VGA compatible controller: nVidia Corporation G72M [GeForce Go 7400] (rev a1)

Subsystem: Hewlett-Packard Company Device 30a5

Flags: bus master, fast devsel, latency 0, IRQ 16

Memory at d1000000 (32-bit, non-prefetchable) [size=16M]

Memory at c0000000 (64-bit, prefetchable) [size=256M]

Memory at d0000000 (64-bit, non-prefetchable) [size=16M]

Capabilities: <access denied>

Kernel driver in use: nvidia

Kernel modules: nvidia, nvidiafb

[...]

Ao especificar -vv (dois vês), temos ainda mais informações! E talvez, ao especificar três vês, o sistema explode de tanta informação.

Estas listas também podem ser mostradas de forma hierárquica, ou seja, identificando quem pertence a quem. Para fazer isto, utilizamos a opção -t.

lsusb – Mostra informações sobre dispositivos USB

Sintaxe: $ lsusb [opções]

Igual com o lspci, mas ao invés de mostrar dispositivos PCI, mostra os dispositivos USB! Com ele podemos obter em que posição do USB o dispositivo se encontra, qual a identificação única (ID) do dispositivo, marca e modelo. Exemplo:

$ lsusb

Bus 005 Device 002: ID 05ac:1209 Apple, Inc. iPod Video

Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 003 Device 002: ID 09da:000a A4 Tech Co., Ltd Port Mouse

Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Podemos ver que aqui temos dois dispositivos USB conectados no sistema: um iPod da Apple e um mouse ótico da marca A4 Tech. As outras informações são os hubs USB, ou seja, os lugares onde você pode “espetar” mais dispositivos :)

Ao utilizar a opção -v, pode-se obter muito mais detalhes sobre cada um dos dispositivos.

0 comentários :

Enviar um comentário