Como faço para registrar o sistema de arquivos de leitura / gravação por nome de arquivo no Linux?

15

Estou procurando um método simples que registre as operações do sistema de arquivos. Ele deve exibir o nome do arquivo que está sendo acessado ou modificado.

Estou familiarizado com o powertop, e parece que isso funciona de certa forma, tanto que mostra os arquivos do usuário que foram gravados. Existe algum outro utilitário que suporte esse recurso?

Algumas das minhas descobertas:

powertop : melhor para gravação de acesso de gravação, mas mais focado na atividade da CPU
iotop : mostra acesso em disco em tempo real por processo, mas não nome de arquivo
lsof : mostra os arquivos abertos por processo, mas não o acesso a arquivos em tempo real
iostat : mostra o desempenho de I / O em tempo real de disco / matrizes, mas não indicar arquivo ou processo

    
por cmcginty 29.12.2010 / 02:26

5 respostas

15

Até agora, iotop é a melhor solução geral. O comando a seguir fornece uma saída em tempo real de todos os processos usando o disco.

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

Evenutaly você notará que o processo estará acessando o disco. A maneira mais simples de investigar é parar o processo e iniciá-lo com strace. Por exemplo:

sudo strace -f nmbd -D

Isso mostrará a você o syscalls do acesso ao sistema de arquivos.

Outra opção é inotify (7) , onde muitas distribuições fornecem "inotify-tools" para que você possa assistir um caminho via

inotifywait -r -mpath_you_want_to_watch

    
por 29.12.2010 / 03:01
7

Outra opção é link onde muitas distribuições fornecem "inotify-tools" para que você possa assistir a um caminho via

inotifywait -r -m /<path you want to watch>
    
por 09.03.2012 / 00:52
2

Para logging (ao invés de monitorar) você deve considerar usar o daemon de auditoria do Linux introduzido no kernel 2.6.

    
por 29.12.2010 / 10:54
2

Recentemente encontrei o fatrace que usa o fanotify . Funciona muito bem, então imaginei que compartilharia. Ele registra todos os tipos de operações de arquivo, incluindo abrir / criar / modificar para stdout ou, opcionalmente, um arquivo, e você pode até filtrar para obter apenas alguns tipos de operações. Por padrão, monitora todas as montagens, exceto as virtuais. O próprio autor explica bem aqui.

    
por 14.05.2015 / 21:24
-3
#!/usr/bin/perl
use Cwd;
use File::Touch;
use File::Temp qw/tempfile/;
use Time::HiRes qw/sleep time alarm/;
use Term::ReadKey;
my ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
if($hchar < 10) {print "please increase window size"; exit; }
my $mydir = getcwd;
my  ($fh, $tmpfile) = tempfile(UNLINK => 1);

while(1)
   {
   my $starttime = time;
   eval {
        local $SIG{ALRM} = sub { die "alarm\n" };
        alarm 0.4;
        $query = 'find -neweraa $tmpfile 2>&1'; #change to mm for writes only
        touch($tmpfile);
        @files = split(/\n/,$query);
        alarm 0;
        };
   system('clear');
   foreach $file(@files) { $filecount{$file}++; }
   @sorted = sort {$filecount{$b} <=> $filecount{$a}} (keys %filecount);
   for ($x = 0;$x < $hchar-2; $x++) {print $filecount{$sorted[$x]}."\t".$sorted[$x]."\n";}
   my $endtime = time;
   my $length = ($endtime-$starttime);
   if ($length > 0.3) {print "program not designed for large trees, please use smaller tree.\n"; exit;}
   print "\n$length"."s\n"
   }
    
por 03.04.2012 / 23:22