Comando Lsof no modo de repetição sem intervalo

1

Como você pode definir o tempo de lsof para sub 1 segundo? Em lsof -r (modo de repetição), o valor mínimo é 1 segundo? Existe uma maneira de ter um monitoramento contínuo com lsof sem ter intervalos entre 2 lsof comando consecutivos, a fim de verificar qual usuário acessou o arquivo específico?

    
por updude 01.07.2016 / 09:22

2 respostas

1

Para monitorar em "tempo real" qualquer arquivo acessado sob o diretório atual, abra um terminal e execute:

inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname; do [ -f "$fname" ] && lsof "$fname"; done

Ou, como se espalha em várias linhas:

inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname
do
    [ -f "$fname" ] && lsof "$fname"
done

Isso requer um sistema operacional, como o linux, que suporta inotifywait .

O corpo do loop while pode ser substituído por qualquer coisa que seja adequada ao seu propósito.

O significado das opções para inotifywait são:

  • -r

    Monitore recursivamente por meio de subdiretórios.

  • -m

    Monitore continuamente.

  • -e access

    Monitore eventos de ACESSO. Há muitos eventos possíveis que podem ser de interesse, mas isso parece ser o mais parecido com o que você pediu.

  • --format '%w%f'

    Escreva o caminho e o arquivo de cada arquivo acessado para o padrão.

  • .

    Monitore o diretório atual, . .

Limitação

O código acima não manipula nomes de arquivos que contenham caracteres de nova linha. Para lidar com isso, é necessário usar a opção -csv do inotifywait junto com mais código que entende as sutilezas do formato CSV.

    
por 01.07.2016 / 10:06
1

Se você não tiver inotifywait instalado (o que é ideal para isso), poderá se aproximar em tempo real se combinar lsof com watch :

$ watch -n0.1 lsof

Isso atualiza todos os 0.1 de segundo.

    
por 19.11.2016 / 12:50