Como funciona o / proc / *?

60

Existem muitos arquivos em /proc , como /proc/cpuinfo , /proc/meminfo , /proc/devices e assim por diante, que, quando abertos, retornam informações do sistema.

Esses arquivos não parecem existir na realidade, já que executar file apenas informa que eles estão vazios.

$ file /proc/cpuinfo
/proc/cpuinfo: empty

Como esses arquivos funcionam exatamente?

    
por user2064000 15.07.2013 / 13:56

4 respostas

70

Na verdade, é bem simples, pelo menos, se você não precisar dos detalhes da implementação.

Primeiramente, no Linux, todos os sistemas de arquivos (ext2, ext3, btrfs, reiserfs, tmpfs, zfs, ...) são implementados no kernel. Alguns podem descarregar o trabalho para o código do usuário através do FUSE, e alguns vêm apenas na forma de um módulo do kernel ( ZFS nativo é um exemplo notável deste último. devido a restrições de licenciamento), mas de qualquer forma permanece um componente do kernel. Este é um básico importante.

Quando um programa deseja ler de um arquivo, ele emitirá várias chamadas de biblioteca do sistema que acabarão no kernel na forma de uma sequência open() , read() , close() (possivelmente com seek() jogado em boa medida). O kernel usa o caminho e o nome de arquivo fornecidos e, por meio do sistema de arquivos e da camada de E / S do dispositivo, os converte em solicitações de leitura física (e em muitos casos também solicitações de gravação - pense em atualizações de atime) para algum armazenamento subjacente. >

No entanto, não precisa traduzir essas solicitações especificamente para armazenamento físico, persistente . O contrato do kernel é que, ao emitir esse conjunto específico de chamadas do sistema, . Onde exatamente em nosso reino físico o "arquivo" existe é secundário a isso.

Em /proc é geralmente montado o que é conhecido como procfs . Esse é um tipo especial de sistema de arquivos, mas como é um sistema de arquivos, não é diferente de, por exemplo, um sistema de arquivos ext3 montado em algum lugar. Assim, o pedido é passado para o código do driver do sistema de arquivos procfs, que conhece todos esses arquivos e diretórios e retorna informações específicas das estruturas de dados do kernel .

A "camada de armazenamento", neste caso, é a estrutura de dados do kernel, e procfs fornece uma interface limpa e conveniente para acessá-los. Tenha em mente que o procfs de montagem em /proc é simplesmente convenção; você poderia facilmente montá-lo em outro lugar. Na verdade, isso às vezes é feito, por exemplo, em jail chroot quando o processo em execução precisa acessar / proc por algum motivo.

Funciona da mesma forma se você escrever um valor em algum arquivo; no nível do kernel, isso se traduz em uma série de open() , seek() , write() , close() chamadas que novamente são passadas para o driver do sistema de arquivos; novamente, neste caso particular, o código procfs.

O motivo especial pelo qual você vê file returning empty é que muitos dos arquivos expostos por procfs são expostos com um tamanho de 0 bytes. O tamanho de 0 byte é provavelmente uma otimização em o lado do kernel (muitos dos arquivos em / proc são dinâmicos e podem variar facilmente em comprimento, possivelmente até de uma leitura para a próxima, e calcular o tamanho de cada arquivo em cada diretório seria potencialmente muito caro). Indo pelos comentários a essa resposta, que você pode verificar em seu próprio sistema executando strace ou uma ferramenta semelhante, file primeiro emite uma chamada stat() para detectar quaisquer arquivos especiais e, em seguida, aproveita a oportunidade para o tamanho do arquivo é relatado como 0, aborta e relata o arquivo como vazio.

Esse comportamento é realmente documentado e pode ser substituído especificando -s ou --special-files na invocação file , embora, conforme declarado na página de manual, possa ter efeitos colaterais. A citação abaixo é da página man 5.11 do arquivo BSD, datada de 17 de outubro de 2011.

Normally, file only attempts to read and determine the type of argument files which stat(2) reports are ordinary files. This prevents problems, because reading special files may have peculiar consequences. Specifying the -s option causes file to also read argument files which are block or character special files. This is useful for determining the filesystem types of the data in raw disk partitions, which are block special files. This option also causes file to disregard the file size as reported by stat(2) since on some systems it reports a zero size for raw disk partitions.

    
por 15.07.2013 / 14:09
15

Neste diretório, você pode controlar como o kernel visualiza os dispositivos, ajustar as configurações do kernel, adicionar dispositivos ao kernel e removê-los novamente. Nesse diretório, você pode visualizar diretamente o uso de memória e as estatísticas E / S .

Você pode ver quais discos estão montados e quais sistemas de arquivos são usados. Em suma, cada aspecto do seu sistema Linux pode ser examinado a partir deste diretório, se você souber o que procurar.

O diretório /proc não é um diretório normal. Se você fosse inicializar a partir de um CD de inicialização e olhar para esse diretório em seu disco rígido, você o veria como vazio. Quando você olha para o seu sistema normal, ele pode ser bem grande. No entanto, não parece estar usando nenhum espaço no disco rígido. Isso é porque é um sistema de arquivos virtual.

Como o sistema de arquivos /proc é um sistema de arquivos virtual e reside na memória, um novo sistema de arquivos /proc é criado toda vez que sua máquina Linux é reinicializada.

Em outras palavras, é apenas um meio de espiar com facilidade e cutucar as entranhas do sistema Linux através de uma interface de tipo de arquivo e diretório. Quando você olha para um arquivo no diretório /proc , você está olhando diretamente para um intervalo de memória no kernel do Linux e vendo o que ele pode ver.

As camadas no sistema de arquivos

Exemplos:

  • Dentrode/proc,existeumdiretórioparacadaprocessoemexecução,nomeadocomseuIDdeprocesso.Essesdiretórioscontêmarquivosquepossueminformaçõesúteissobreosprocessos,como:
    • exe:queéumlinksimbólicoparaoarquivonodiscodoqualoprocessofoiiniciado.
    • cwd:queéumlinksimbólicoparaodiretóriodetrabalhodoprocesso.
    • wchan:que,quandolida,retornaocanalemesperanoqualoprocessoestáativo.
    • maps:que,quandolida,retornaosmapasdememóriadoprocesso.
  • /proc/uptimeretornaotempodeatividadecomodoisvaloresdecimaisemsegundos,separadosporumespaço:
    • otempodecorridodesdeoiníciodokernel.
    • aquantidadedetempoqueokernelficouocioso.
  • /proc/interrupts:Parainformaçõesrelacionadasainterrupções.
  • /proc/modules:Paraumalistademódulos.

Parainformaçõesmaisdetalhadas,consulte man proc ou kernel.org .

    
por 15.07.2013 / 14:06
5

Você está correto, eles não são arquivos reais.

Em termos mais simples, é uma maneira de falar com o kernel usando os métodos normais de leitura e gravação de arquivos, em vez de chamar o kernel diretamente. Está de acordo com a filosofia "tudo é um arquivo" do Unix.

Os arquivos em /proc não existem fisicamente em nenhum lugar, mas o kernel reage aos arquivos que você lê e escreve lá dentro, e em vez de gravar no armazenamento, ele relata informações ou faz alguma coisa.

Da mesma forma, os arquivos em /dev não são realmente arquivos no sentido tradicional (embora em alguns sistemas os arquivos em /dev possam realmente existir em disco, eles não terão muito a eles além de qual dispositivo eles referem-se a) - eles permitem que você converse com um dispositivo usando a API de E / S de arquivos Unix normal - ou qualquer coisa que o use, como shells

    
por 15.07.2013 / 14:09
3

Dentro do diretório /proc , existem dois tipos de conteúdo, o primeiro diretório numerado e o segundo é o arquivo de informações do sistema.

/proc é um sistema de arquivos virtual. Por exemplo, se você fizer ls -l /proc/stat , perceberá que ele tem um tamanho de 0 bytes, mas se você fizer "cat / proc / stat", verá algum conteúdo dentro do arquivo.

Faça um ls -l /proc e você verá muitos diretórios com apenas números. Esses números representam os identificadores de processo (PIDs). Os arquivos dentro deste diretório numerado correspondem ao processo com aquele PID em particular.

Alguns arquivos que estão disponíveis em /proc contêm informações do sistema, como cpuinfo, meminfo e loadavg.

Alguns comandos do Linux lêem as informações desses arquivos /proc e os exibem. Por exemplo, o comando livre lê as informações de memória do arquivo /proc/meminfo , formata-as e as exibe .

Para saber mais sobre os arquivos /proc individuais, faça "man 5 FILENAME".

/proc/cmdline – Kernel command line
/proc/cpuinfo – Information about the processors.
/proc/devices – List of device drivers configured into the currently running kernel.
/proc/dma – Shows which DMA channels are being used at the moment.
/proc/fb – Frame Buffer devices.
/proc/filesystems – File systems supported by the kernel.
/proc/interrupts – Number of interrupts per IRQ on architecture.
/proc/iomem – This file shows the current map of the system’s memory for its various devices
/proc/ioports – provides a list of currently registered port regions used for input or output communication with a device
/proc/loadavg – Contains load average of the system
The first three columns measure CPU utilization of the last 1, 5, and 10 minute periods.
The fourth column shows the number of currently running processes and the total number of processes.
The last column displays the last process ID used.
/proc/locks – Displays the files currently locked by the kernel
Sample line:
1: POSIX ADVISORY WRITE 14375 08:03:114727 0 EOF
/proc/meminfo – Current utilization of primary memory on the system
/proc/misc – This file lists miscellaneous drivers registered on the miscellaneous major device, which is number 10
/proc/modules – Displays a list of all modules that have been loaded by the system
/proc/mounts – This file provides a quick list of all mounts in use by the system
/proc/partitions – Very detailed information on the various partitions currently available to the system
/proc/pci – Full listing of every PCI device on your system
/proc/stat – Keeps track of a variety of different statistics about the system since it was last restarted
/proc/swap – Measures swap space and its utilization
/proc/uptime – Contains information about uptime of the system
/proc/version – Version of the Linux kernel, gcc, name of the Linux flavor installed.
    
por 15.07.2013 / 14:17

Tags