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
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
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
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
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
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.
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