segunda-feira, 18 de fevereiro de 2008

Descubra as possibilidades do diretório /proc - Parte 1

Este post é uma tradução-resumo do artigo do site Linux.com intitulado "Discover the possibilities of the /proc folder". Vamos entender um pouco este diretório/arquivo.

O diretório /proc é uma besta estranha. Na verdade ele não existe, mas você pode explorá-lo. Ele contém arquivos com tamanho zero que não são binários nem texto mas você ainda pode examinar e mostrá-los. Este diretório especial guarda todos os detalhes sobre o seu sistema Linux, incluindo o kernel, processos, e parâmentros de configuração. Estudando o diretório /proc, você pode aprender como os comandos Linux trabalham, e você pode até fazer algumas tarefas administrativas.

No Linux, tudo é gerenciado como um arquivo; mesmo dispositivos são acessados como arquivos (no diretório /dev). Embora você possa imaginar que isto é "normal", os arquivos do diretório /proc não são texto ou binário (ou possivelmente dispositivos ou arquivos pipe), o diretório /proc contém um tipo estranho: arquivos virtuais.
Estes arquivos são listados, mas na realidade não existem em disco; o sistema operacional cria eles no mesmo instante se você tenta lê-los.

A maioria dos arquivos virtuais tem um timestamp, que indica que eles estão constantemente sendo atualizados. O diretório /proc é criado todas vez que você iniciar o seu computador. Você precisa trabalhar como root para poder examinar todo o diretório; alguns dos arquivos (como os processos relacionados) são possuídos pelo usuário que o executou. Embora quase todos os arquivos são apenas leitura, alguns arquivos que permitem escrita (como o /proc/sys) deixam você mudar parâmetros do kernel (Naturalmente, você precisa ser cuidadoso se você fizer isto).

A organização do diretório /proc

O diretório /proc é organizado em diretórios virtuais e subdiretórios, e ele agrupa arquivos por tópicos similares. Trabalhando como root, o comando ls /proc resulta em algo como:

# ls /proc
1 2152 2588 2844 2958 4 9 fs partitions
10 2162 2589 2849 2967 5 9946 ide scsi
10104 2373 2596 2866 2969 5984 9947 interrupts self
10434 2380 2606 2867 2971 6 acpi iomem slabinfo
10453 2468 2607 2868 2979 6015 asound ioports stat
1066 2495 2621 2869 2987 6016 buddyinfo irq swaps
1067 2513 2624 2870 2992 6187 bus kallsyms sys
11 2517 2630 2871 3 6189 cmdline kcore sysrq-trigger
1252 2525 2642 2892 30 6190 cpuinfo key-users sysvipc
136 2531 2649 2895 3014 699 crypto kmsg timer_list
160 2533 2668 2941 3015 7 devices loadavg timer_stats
161 2556 2674 2944 3025 706 diskstats locks tty
162 2566 2686 2945 3041 755 dma meminfo uptime
163 2572 2702 2947 31 756 dri misc version
164 2582 2780 2950 3148 757 driver modules vmnet
1701 2583 2799 2953 32 8 execdomains mounts vmstat
2 2585 2814 2954 3234 814 fb mtrr zoneinfo
2025 2586 2825 2955 33 815 filesystems net

Os diretórios enumerados (mais sobre eles depois) correspondem a cada processo rodando; uma auto-ligação simbólica aponta para o processo atual. Alguns arquivos virtuais fornecem informações do hardware, como o /proc/cpuinfo, /proc/meminfo e o /proc/interrupts. Outros dão informações de arquivos relacionados, como o /proc/filesystems ou /proc/partitions. Os arquivos no /proc/sys são relacionados aos parâmetros de configuração do kernel, como você verá.

O comando cat /proc/meminfo resulta em algo como:

# cat /proc/meminfo
MemTotal: 483488 kB
MemFree: 9348 kB
Buffers: 6796 kB
Cached: 168292 kB
...várias linhas...

Se você tentar os comandos free ou top, talvez você reconhecerá alguns desses números. De fatos, alguns dos utilitários bem conhecidos acessam o diretório /proc para pegar suas informações. Por exemplo, se você quiser saber qual kernel você está usando, talvez você tente o comando uname -srv, ou vai para a fonte e digita o comando /cat/proc/version. Outros arquivos interessantes incluem:

/proc/apm: Fornece informações sobre o Advanced Power Management, se ele estiver instalado.

/proc/acpi: Um diretório similar que oferece abundância de dados no mais moderno Advanced Configuration and Power Interface. Por exemplo, para ver se o seu notebook está conectado no AC power, você pode usar o comando /cat/proc/acpi/ac_adapter/AC/state para obter "on line" ou "off line".

/proc/cmdline: Mostra os parâmetros que foram passados para o kernel no boot. No meu caso, ele contêm root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi, que me mostra que partição é o sistema de arquivos do root, que modo VGA usar e mais. O último parâmetro tem a ver com o openSUSE's System Configuration Profile Management.

/proc/cpuinfo: Fornece dados no processador do seu computador. Por exemplo, no meu notebook, cat/proc/cpuinfo resulta em uma lista que começa com:

processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : Mobile AMD Athlon(tm) XP 2200+
stepping : 1
cpu MHz : 927.549
cache size : 256 KB

Isto mostra que eu tenho apenas um processador, numerado 0, da família 80686: um AMD Athlon XP, rodando com menos de 1 GHz.

/proc/loadavg: Um arquivo relacionado que mostra a carga média no processador; Sua informação inclui o uso da CPU no último minuto, últimos cinco minutos e nos últimos 10 minutos, bem como o número de processos rodando atualmente.

/proc/stat: Também fornece estatísticas, mas volta para o último boot.

/proc/uptime: Um arquivo pequeno que tem apenas dois números: quantos segundos o seu computador está ligado e quantos segundos ele ficou inativo.

/proc/devices: Mostra todos os dispositivos caracteres configurados e carrregados e blocos. /proc/ide e /proc/scsi fornecem dados sobre dispositivos IDE e SCSI.

/proc/ioports: Mostra informações sobre as regiões usadas para comunicação I/O com esses dispositivos.

/proc/dma: Mostra os canais de Acesso Direto à Memória (DMA) em uso.

/proc/filesystems: Mostra quais os tipos de sistema de arquivos são suportados pelo seu kernel. Uma porção deste arquivo talvez se pareça com isto:

nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev cpuset
..alguma linhas...
nodev ramfs
nodev hugetlbfs
nodev mqueue
ext3
nodev usbfs
ext2
nodev autofs

A primeira linha mostra se o sistema de arquivos está montado em um dispositivo de bloco. No meu caso, eu tenho partições configuradas com ext2 e ext3 montada.

/proc/mounts: Mostra todas as partições montadas usada pela sua máquina (a saída parece muito com o /etc/mtab). Analogamente, /proc/partitions e /proc/swaps mostra todas as partições e o espaço da swap.

/proc/net: Descrever cada arquivo neste diretório exigiria muito espaço, mas ele inclui o /dev (cada dispositivo de rede), vários arquivos relacionados com o iptables, estatísticas de net e socket, informações sobre wireless, e mais.

Existem também vários arquivos relacionados com RAM. Eu já mencionei o arquivo /proc/meminfo, mas você também tem o /proc/iomem, que mostra para você como a memória é usada no seu computador, e /proc/kcore, que representa a RAM física do seu computador. Diferentemente da maioria dos outros arquivos virtuais, /proc/kcore mostra um tamanho igual a sua RAM mais um pequeno overhead (não tente usar o comando cat neste arquivo por que o seu conteúdo é binário e irá "sujar" a sua tela). Finalmente, existem muitos arquivos relacionados com hardware e diretórios, como o /proc/interrupts e o /proc/irq, /proc/pci (todos os dispositivos PCI), /proc/bus, e assim por diante, mas eles incluem informações muito específicas, que a maioria de usuários não precisarão.

Por hora é isso. Não perca a segunda parte na próxima postagem, abraços! :)

Referências
Artigo Original: http://www.linux.com/feature/126718

2 comentários:

Anônimo disse...

Muito legal a sua iniciativa e o seu artigo. PARABENS e espero ler a segunda parte. Abraço!

Anônimo disse...

A segunda parte já existe:
http://pequenotux.blogspot.com/2008/02/descubra-as-possibilidades-do-diretrio_19.html

Um abraço.