sysfs é um recurso do kernel Linux que permite que o código do kernel exporte informações para processos do usuário por meio de um sistema de arquivos na memória. A organização da hierarquia de diretórios do sistema de arquivos é rigorosa e baseada na organização interna das estruturas de dados do kernel. Os arquivos criados no sistema de arquivos são (principalmente) arquivos ASCII com (geralmente) um valor por arquivo.
Existe uma maneira de diferenciar entre configurações modificáveis e logs/depurações/estatísticas/informações dentro do /sys
sistema de arquivos?
O caso de uso é criar uma ferramenta de criação de perfil que possa identificar as configurações de tempo de execução de um sistema.
Será que arquivos somente leitura correspondem a logs/depurações/estatísticas/informações e arquivos de leitura e gravação são sempre parâmetros ajustáveis?
Por exemplo:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
é relevante para a criação de perfil, pois indica o valor do regulador de escala de frequência da CPU e é modificável. No entanto,
/sys/devices/system/cpu/cpu0/topology/core_cpus
é apenas o mapa interno do kernel de CPUs dentro do mesmo núcleo e não pode ser modificado.
Em geral, a lógica por trás das entradas sysfs define as permissões corretamente: se algo for um valor somente leitura, nenhum usuário poderá gravar nele. Se for um botão de acionamento por hardware somente gravação, seu nó de arquivo será somente gravação.
Mas nada diz que um valor somente leitura seja uma estatística. Pode também ser, por exemplo, o número de slots em uma placa-mãe, a temperatura de um pacote, o número máximo permitido para algo, a linha de comando com a qual a máquina foi inicializada, uma visualização da memória do dispositivo, informações de depuração...
não, muitos arquivos graváveis não são ajustáveis, mas coisas como "desligar este dispositivo", "acionar a autodestruição", ...
Então, como em qualquer lugar: se você tem uma coleção complexa de coisas com as quais pode interagir, precisará entender com o que pode interagir. Ter uma listagem de APIs apenas leva você até o ponto em que pode interagir com ela, não ao ponto em que pode interagir produtivamente com ela – isso vale tanto para o kernel Linux quanto para, por exemplo, uma API REST.