Як мені ввімкнути читання / запис файлової системи за іменем файлу в Linux?


17

Я шукаю простий метод, який записуватиме операції з файловою системою. Він повинен відображати ім'я файлу, до якого звертаються чи змінюються.

Я знайомий з powertop, і, здається, це працює в такій мірі, настільки, що він показує файли користувачів, в які було написано. Чи є інші утиліти, які підтримують цю функцію.

Деякі мої висновки:

powertop : найкраще для реєстрації доступу до запису, але більш орієнтований на активність процесора
iotop : показує доступ до диска в режимі реального часу за процесом, але не ім'я файлу
lsof : показує відкриті файли за кожним процесом, але не
іостат доступу до файлів у реальному часі: показує I в реальному часі / O продуктивність диска / масивів, але не вказує на файл чи процес

Відповіді:


17

Поки що iotopце найкраще загальне рішення. Наступна команда дає вихід у реальному часі з усіх процесів, що використовують диск.

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

Ви навіть помітите, що процес отримає доступ до диску. Найпростіший спосіб дослідження - це зупинити процес і почати його з напругою. Наприклад:

sudo strace -f nmbd -D

Це покаже вам системні виклики доступу до файлової системи.

Інший варіант - inotify (7) , де багато дистрибутивів надають "inotify-tools", щоб ви могли дивитися шлях через

inotifywait -r -mpath_you_want_to_watch


1
fanotifyце нова рамка сповіщень щодо файлової системи в ядрі Linux (нещодавно додана близько 2012 року). Ви можете перевірити це. Інструменти та утиліти, які ним користуються, все ще пишуться, тому вам, можливо, доведеться писати один, але це набагато надійніше, ніж прищеплювати, голодувати чи що-небудь ще, що ви могли бачити досі.
allquixotic

3
Швидкий пошук Google для fanotify показує інструмент під назвою fatraceз тут .
Thanh DK

Що nmbdв даній straceкоманді?
dragosrsupercool

9

Інший варіант - http://linux.die.net/man/7/inotify, де багато дистрибутивів надають "inotify-tools", щоб ви могли дивитися шлях через

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

+1. «Inotifywait ефективно чекає змін у файлах за допомогою інтерфейсу inotify (7) Linux. »Чудово допомагає дрібнозернистому аудиту, показуючи будь-який ДОСТУП та МОДИФІКАЦІЙНИЙ <файл> у контрольованому шляху.
tuk0z

3

Нещодавно я натрапив на фетрас, який використовує фанотифікувати . Діє прекрасно, тому я подумав, що поділюсь. Він реєструє всі типи файлових операцій, включаючи відкрити / створити / змінити для stdout або необов'язково файл, і ви навіть можете фільтрувати, щоб отримати лише деякі види операцій. За замовчуванням він контролює всі версії, крім віртуальних. Сам автор це тут добре пояснює.


2

Для ведення журналів (а не для моніторингу) вам слід подумати про використання демон-аудиту Linux, введеного в ядро ​​2.6.


Я не міг змусити PID-диспетчера працювати, тому не дуже корисно, якщо ви не знаєте, який файл дивитися
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
Чи можете ви, будь ласка, оновити свою відповідь деякими подробицями про те, як використовувати цей код і що він буде досягнутий разом із побічними ефектами та обмеженнями?
Jeremy W
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.