shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Descobrir quem está acessando uma pasta


From: Felipe Kellermann
Subject: Re: [shell-script] Descobrir quem está acessando uma pasta
Date: Sun, 23 Jul 2006 18:46:26 -0300 (BRT)
User-agent: Pine <http://www.washington.edu/pine/>

On Sun, 23 Jul 2006 5:51pm  -0300, Herbert Alexander Faleiros wrote:

> On Sunday 23 July 2006 17:13, Thomaz de Oliveira dos Reis wrote:
> > Tem como descobrir se algum usuário ou programa está vendo o conteúdo de
> > uma determinada pasta?
> 
> Olá,
> 
> pode tentar algo como:
> 
> $ cd /bin
> 
> Alguém acessou o /bin?
> 
> $ lsof /bin
> COMMAND  PID    USER   FD   TYPE DEVICE SIZE NODE NAME
> sh      8904 herbert  cwd    DIR    3,2 3680   56 /bin
> 
> Novo teste:
> 
> $ cd
> 
> $ lsof /bin

Para complementar com umas sugestões...

Assumindo um sistema Linux, poderia-se ver direto os cwds:

  function diretorioUsado
  {
      local cwd

      for cwd in /proc/*/cwd; do
          [ $(readlink $cwd) = "$1" ] && return 0
      done

      return 1
  }

  % diretorioUsado /bin && echo usado

  % cd /bin
  % diretorioUsado /bin && echo usado
  usado
  %


A melhor alternativa, que não faz polling, é usar o inotify dos kernels 
dos Linux >= 2.6.13-rc3 (substituindo o dnotify). Com o inotify podemos 
registrar eventos e esperar que o sistema operacional notifique.

É simples fazer algum programa em C que registre e espere por eventos.

Uma pequena interface, inotify-tools (http://inotify-tools.sf.net/) foi 
feita para fazer brincadeiras com shell, usando inotify-watch e wait.

Ficaria:

  while inotifywait -e access $diretorio; do
     echo O $diretorio foi acessado...
  done

Só que o "access" é feito não apenas quando é mudado o CWD. Um trabalho um 
pouco maior precisaria ser feito no caso de só ver os casos de CWDs. Seria 
apenas o caso de verificar o processo, se ele trocou de CWD, e não precisa 
ficar vendo todos os processos existantes.


Como alternativa, nos BSDs também é possível usar o fstat. Vai ter o mesmo 
efeito da tua sugestão com lsof mas é padrão nos sistemas (lsof é padrão 
em alguns BSDs mesmo, com o OS X ;-)).  O código de retorno do lsof também 
é consistente com os resultados, o que não é o caso dos fstats...


-- 
Felipe Kellermann


reply via email to

[Prev in Thread] Current Thread [Next in Thread]