Wie protokolliere ich Dateisystem lesen / Schreiben nach Dateinamen in Linux?

Ich suche nach einer einfachen Methode, die Dateisystemoperationen protokolliert. Es sollte den Namen der Datei anzeigen, auf die zugegriffen oder geändert wird.

Ich bin mit Powertop vertraut, und es scheint, dass dies in einem Ausmaß funktioniert, in dem die Benutzerdateien angezeigt werden, in die geschrieben wurden. Gibt es andere Dienstprogramme, die diese Funktion unterstützen?

Einige meiner Ergebnisse:

Powertop: am besten für Schreibzugriffsprotokollierung, aber konzentrierter auf CPU aktivität
iotop: Zeigt den Echtzeitdatenträgerzugriff nach Prozess an, jedoch nicht den Dateinamen
lsof: Zeigt die geöffneten Dateien pro Prozess an, jedoch nicht den Dateizugriff in Echtzeit
iostat: Zeigt die Echtzeit-E/A-Leistung von Datenträgern/Arrays an, gibt jedoch keine Datei oder keinen Prozess an

Author: cmcginty, 2010-12-29

5 answers

Bisher ist iotop die beste Gesamtlösung. Mit dem folgenden Befehl erhalten Sie eine Echtzeitausgabe aller Prozesse, die die Festplatte verwenden.

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 werden Sie feststellen, dass der Prozess auf die Festplatte zugreifen wird. Der einfache Weg zur Untersuchung besteht darin, den Prozess zu stoppen und mit strace zu starten. Beispiel:

sudo strace -f nmbd -D

Dies zeigt Ihnen Syscalls des Dateisystemzugriffs.

Eine weitere Option ist inotify (7), wobei viele Distributionen "inotify-tools" bereitstellen, damit Sie kann einen Pfad über

inotifywait -r -mpath_you_want_to_watch

 18
Author: cmcginty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-11-06 21:00:16

Eine andere Option ist http://linux.die.net/man/7/inotify wo viele Distributionen "inotify-tools" bereitstellen, damit Sie einen Pfad über

inotifywait -r -m /<path you want to watch>
 11
Author: x29a,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-12-21 13:14:30

Ich bin kürzlich auf fatrace gestoßen, das fanotify verwendet. Funktioniert schön, also dachte ich, ich würde teilen. Es protokolliert alle Arten von Dateioperationen, einschließlich Öffnen/Erstellen / Ändern in stdout oder optional eine Datei, und Sie können sogar filtern, um nur einige Arten von Operationen zu erhalten. Standardmäßig werden alle Mounts außer den virtuellen überwacht. Der Autor selbst erklärt es hier gut.

 4
Author: turbofan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-05-14 19:24:52

Für Logging (anstatt Monitoring) sollten Sie den in Kernel 2.6 eingeführten [[3]}Linux Audit Daemon verwenden.

 2
Author: RedGrittyBrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-12-29 09:54:46
#!/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"
   }
 -3
Author: Jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-03 21:22:26