Linux'ta dosya adına göre okuma / yazma dosya sistemini nasıl kaydedebilirim?


17

Dosya sistemi işlemlerini kaydedecek basit bir yöntem arıyorum. Erişilen veya değiştirilen dosyanın adını görüntülemelidir.

Powertop hakkında bilgi sahibiyim ve bu, bir dereceye kadar, görünen kullanıcı dosyalarını gösterecek şekilde çalışıyor gibi görünüyor. Bu özelliği destekleyen başka yardımcı programlar var mı?

Bulgularımdan bazıları:

powertop : yazma erişimi günlüğü için en iyi, ancak daha fazla CPU etkinliği odaklı
iotop : işleme göre gerçek zamanlı disk erişimi gösterir, ancak dosya adı değil
lsof : işlem başına açık dosyaları gösterir, ancak gerçek zamanlı dosya erişimi
iostat : gerçek zamanlı gösterir / O disk / dizilerin performansını gösterir ancak dosya veya işlemi göstermez

Yanıtlar:


17

Şimdiye kadar iotopen iyi genel çözüm. Aşağıdaki komut, diski kullanan tüm işlemlerin gerçek zamanlı çıktısını verir.

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

Eşit olarak, işlemin diske erişeceğini fark edeceksiniz. Araştırmanın basit yolu, süreci durdurmak ve strace ile başlatmaktır. Örneğin:

sudo strace -f nmbd -D

Bu, dosya sistemi erişiminin sistem çağrılarını gösterir.

Başka bir seçenek inotify (7) 'dir , burada birçok dağıtım "inotify araçları" sağlar, böylece bir yolu

inotifywait -r -mpath_you_want_to_watch


1
fanotifyLinux çekirdeğinde yeni bir dosya sistemi bildirim çerçevesidir (son zamanlarda 2012'ye eklenmiştir). Bunu kontrol etmek isteyebilirsiniz. Bunu kullanan araçlar ve yardımcı programlar hala yazılmaktadır, bu yüzden kendiniz yazmak zorunda kalabilirsiniz, ancak inotify, famin veya şimdiye kadar görmüş olabileceğiniz başka bir şeyden çok daha sağlamdır.
allquixotic

3
Fanotify için hızlı bir Google araması fatrace, buradan çağrılan bir aracı gösterir .
Thanh DK

nmbdVerilen stracekomutta neler var ?
dragosrsupercool

9

Başka bir seçenek http://linux.die.net/man/7/inotify , birçok dağıtımın "inotify araçları" sağladığı ve böylece bir yolu izleyebileceğiniz

inotifywait -r -m /<path you want to watch>

+1. «İnotifywait, Linux'un inotify (7) arayüzünü kullanarak dosyalardaki değişiklikleri verimli bir şekilde bekler. »İzlenen yoldaki ERİŞİM ve <Dosya> değişikliklerini göstererek ince taneli denetime büyük ölçüde yardımcı olur.
tuk0z

3

Son zamanlarda fanotify kullanan fatrace ile karşılaştım . Güzel çalışır, bu yüzden paylaşacağımı düşündüm. Stdout'a veya isteğe bağlı olarak bir dosyaya açma / oluşturma / değiştirme de dahil olmak üzere her türlü dosya işlemini günlüğe kaydeder ve hatta yalnızca bazı işlem türlerini almak için filtreleyebilirsiniz. Varsayılan olarak, sanal olanlar dışındaki tüm bağlantıları izler. Yazar bunu burada iyi açıklıyor.


2

İçin günlük (yerine izlenmesi yerine) Eğer kullanmayı düşünmelisiniz Linux denetim cini kernel 2.6 tanıtıldı.


PID izleyicinin çalışmasını sağlayamadım, bu yüzden hangi dosyayı izleyeceğinizi bilmiyorsanız çok yararlı değil
cmcginty

-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"
   }

5
Cevabınızı bu kodun nasıl kullanılacağı ve yan etkiler ve sınırlamalarla birlikte ne başaracağı hakkında bazı ayrıntılarla güncelleyebilir misiniz?
Jeremy W
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.