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