[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