मैं लिनक्स में फ़ाइल नाम से फाइल सिस्टम को कैसे पढ़ / लिखता हूं?


17

मैं एक सरल विधि की तलाश कर रहा हूं जो फ़ाइल सिस्टम ऑपरेशन को लॉग करेगा। इसमें फ़ाइल का नाम एक्सेस या संशोधित होना चाहिए।

मैं पावरटॉप से ​​परिचित हूं, और यह एक हद तक यह काम करता है, इतने में यह उपयोगकर्ता फ़ाइलों को दिखाता है जो इसे लिखा गया था। क्या कोई अन्य सुविधाएं हैं जो इस सुविधा का समर्थन करती हैं।

मेरे कुछ निष्कर्ष:

पॉवरटॉप : लिखने की पहुँच लॉगिंग के लिए सबसे अच्छा है, लेकिन CPU गतिविधि पर अधिक ध्यान केंद्रित
iotop : प्रक्रिया द्वारा वास्तविक समय डिस्क का उपयोग दिखाता है, लेकिन फ़ाइल का नाम नहीं है
lsof : प्रति प्रक्रिया में खुली फ़ाइलों को दिखाता है, लेकिन वास्तविक समय फ़ाइल का उपयोग
iostat नहीं : वास्तविक समय दिखाता है / डिस्क / सरणियों का ओ प्रदर्शन लेकिन फ़ाइल या प्रक्रिया को इंगित नहीं करता है

जवाबों:


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

यह आपको फ़ाइल सिस्टम एक्सेस के syscalls दिखाएगा।

एक अन्य विकल्प इनोटिफ़ाइ (7) है , जहां कई वितरण "इनोटिफ़ाइ-टूल्स" प्रदान करते हैं ताकि आप एक रास्ता देख सकें

inotifywait -r -mpath_you_want_to_watch


1
fanotifyलिनक्स कर्नेल में एक नया फाइलसिस्टम अधिसूचना ढांचा है (हाल ही में 2012 के आसपास जोड़ा गया)। आप इसे देखना चाहते हैं। उपकरण और उपयोगिताओं जो इसे उपयोग करते हैं, अभी भी लिखे जा रहे हैं, इसलिए आपको खुद को लिखना पड़ सकता है, लेकिन यह अब तक के आइनोटिफ़ाइन, अकाल, या किसी और चीज़ की तुलना में अधिक मजबूत है।
allquixotic

3
फैनोटिफाई के लिए एक त्वरित Google खोज यहांfatrace से बुलाया गया टूल दिखाता है
थान डीके

nmbdदी गई straceकमांड में क्या है ?
ड्रैगोस्रस्परकोल

9

एक अन्य विकल्प http://linux.die.net/man/7/inotify है जहां कई वितरण "inotify-tools" प्रदान करते हैं ताकि आप एक रास्ता देख सकें

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

+1। «Inotifywait कुशलता से लिनक्स के inotify (7) इंटरफ़ेस का उपयोग करके फ़ाइलों में परिवर्तन की प्रतीक्षा करता है। »मॉनिटर किए गए मार्ग में किसी भी ACCESS और MODIFY <फ़ाइल> को दिखा कर बढ़िया अनाज ऑडिटिंग में मदद करता है।
tuk0z

3

मैं हाल ही में भर में आया था fatrace जो का उपयोग करता है fanotify । सुंदर काम करता है तो मुझे लगा कि मैं साझा करूंगा। यह सभी प्रकार के फ़ाइल ऑपरेशन्स को लॉग करता है जिसमें ओपन / क्रिएट / संशोधित करना या वैकल्पिक रूप से एक फ़ाइल शामिल है और आप केवल कुछ प्रकार के ऑपरेशन प्राप्त करने के लिए फ़िल्टर भी कर सकते हैं। डिफ़ॉल्ट रूप से यह वर्चुअल वाले को छोड़कर सभी आरोहियों की निगरानी करता है। लेखक स्वयं इसे यहाँ अच्छी तरह से समझाता है।


2

के लिए प्रवेश (बल्कि निगरानी की तुलना में) उपयोग करने पर विचार करना चाहिए लिनक्स लेखा परीक्षा डेमॉन कर्नेल 2.6 में पेश किया।


मुझे काम करने के लिए पीआईडी ​​वॉचर नहीं मिल सका, इसलिए बहुत उपयोगी नहीं है यदि आप नहीं जानते कि किस फाइल को देखना है
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
क्या आप इस कोड का उपयोग करने के बारे में कुछ विवरणों के साथ अपने उत्तर को अपडेट कर सकते हैं और इसके साइड-इफेक्ट्स और सीमाओं के साथ क्या होगा?
जेरेमी डब्ल्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.