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


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a