inotifywait não alterando quando o dispositivo foi criado

1

Isso funciona perfeitamente:

$ inotifywait --event create ~/foo
Setting up watches.
Watches established.
/home/ron/foo/ CREATE bar

No entanto, isso apenas fica lá quando o diretório tun0 é criado em / sys / devices / virtual / net.

$ inotifywait --event create /sys/devices/virtual/net
Setting up watches.
Watches established.

Como essas pastas são legíveis por todo o mundo, espero que o inotifywait funcione.

Então, o que estou fazendo de errado?

Obrigado

    
por RonJohn 15.10.2017 / 08:18

2 respostas

2

Embora o inotify FAQ implique suporte parcial:

Q: Can I watch sysfs (procfs, nfs...)?

Simply spoken: yes, but with some limitations. These limitations vary between kernel versions and tend to get smaller. Please read information about particular filesystems.

ele não diz realmente o que pode ser suportado (ou em qual versão do kernel, já que é basicamente o suporte ao inotify no sistema de arquivos em si, ao invés da biblioteca / utilitários).

Uma explicação simples é que realmente não faz sentido apoiar inotify para tudo em /sys (ou /proc ), já que eles não são modificados no sentido convencional. A maioria desses arquivos / diretórios representa um instantâneo do estado do kernel no momento em que você os exibe .

Pense no /proc/uptime como um exemplo simples, ele contém o tempo de atividade preciso ao centésimo segundo. Deve inotify notificá-lo 100 vezes por segundo que foi "escrito" para? Além de não ser muito útil, seria tanto um problema de desempenho quanto um problema difícil de resolver, já que nada está gerando eventos de inotificação em nome dessas "gravações" fictícias. Dentro do kernel inotify funciona no nível da API do sistema de arquivos .

A situação então é que algumas coisas em sysfs e procfs geram eventos de inotify, /proc/uptime por exemplo irá dizer quando foi acessado (access, open, close), mas no meu O kernel /proc/mounts não mostra nenhum evento quando os sistemas de arquivos são montados e desmontados.

Eis a opinião de Greg Kroah-Hartman:

link e Linus:

link

(ambos os tópicos de 2014, no entanto)

Para resolver seu problema imediato, você pode usar o dbus, por exemplo dbus-monitor --monitor --system (não precisa ser root) mostrará o acionador em dispositivos de tun sendo criados e removidos (embora o meu não mostre o nome do dispositivo tun, apenas a string HAL com o IP PtP); udevadm monitor (não precisa ser root); ou voltar a pesquisar o diretório (tente: script para monitorar novos arquivos em uma pasta compartilhada (windows host, linux guest) ). (Com udev , você também pode usar inotifywait -m -r /dev/.udev e ficar atento aos arquivos que começam com "n", mas isso é um truque bem feio.)

    
por 15.10.2017 / 13:38
1

/sys e /proc não são sistemas de arquivos. São interfaces de kernel que agem como um sistema de arquivos.

Quando um dispositivo de rede é criado, não há pasta de sistema de arquivos criada. Sistemas de arquivos normais mudam quando os dados são alterados, mesmo quando ninguém está olhando. Mas o conteúdo de /sys e /proc é criado no momento em que alguém olha para ele.

O que você precisa é, por exemplo udev events (que executa um script).

    
por 15.10.2017 / 13:38