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