파일 시스템 작업을 기록하는 간단한 방법을 찾고 있습니다. 액세스하거나 수정중인 파일의 이름을 표시해야합니다.
필자는 powertop에 익숙하며, 작성된 사용자 파일을 보여주기 위해 어느 정도까지 작동하는 것으로 보입니다. 이 기능을 지원하는 다른 유틸리티가 있습니까?
내 발견 중 일부 :
powertop : 쓰기 액세스 로깅에 가장 적합하지만 CPU 활동에 더 중점을 둡니다.
iotop : 프로세스별로 실시간 디스크 액세스를 표시하지만 파일 이름 은 표시 하지 않습니다.
lsof : 프로세스 당 열린 파일을 표시하지만 실시간 파일 액세스 는 표시 하지 않습니다
iostat : 실시간 I 표시 디스크 / 배열의 / O 성능이지만 파일이나 프로세스를 나타내지 않습니다
답변
지금까지 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
심지어 프로세스가 디스크에 액세스하고 있음을 알 수 있습니다. 조사하는 간단한 방법은 프로세스를 중지하고 strace로 시작하는 것입니다. 예를 들면 다음과 같습니다.
sudo strace -f nmbd -D
파일 시스템 액세스에 대한 syscall이 표시됩니다.
또 다른 옵션은 inotify (7) 이며, 많은 배포판에서 “inotify-tools”를 제공하므로 다음을 통해 경로를 볼 수 있습니다
inotifywait -r -m
path_you_want_to_watch
답변
또 다른 옵션은 http://linux.die.net/man/7/inotify입니다 . 많은 배포판에서 “inotify-tools”를 제공하므로 경로를 볼 수 있습니다
inotifywait -r -m /<path you want to watch>
답변
나는 최근 fanotify 를 사용하는 fatrace를 발견했다 . 내가 아름답게 작동해서 내가 공유 할 것이라고 생각했다. stdout 또는 선택적으로 파일에 열기 / 만들기 / 수정을 포함한 모든 유형의 파일 작업을 기록하며 일부 유형의 작업 만 가져 오도록 필터링 할 수도 있습니다. 기본적으로 가상 마운트를 제외한 모든 마운트를 모니터합니다. 저자 자신이 여기서 잘 설명합니다.
답변
들어 로깅 (오히려 모니터링 이상) 당신이 사용하는 것이 좋습니다 리눅스 감사 데몬 커널 2.6에서 소개합니다.
답변
#!/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"
}