Linux-Äquivalent zu fs_usage von Mac OS X

3300
Khai

Gibt es ein Linux-Äquivalent zum Mac OS X-Befehl fs_usage? Gemäß der Manpage wird Folgendes ausgeführt: "Systemaufrufe und Seitenfehler in Bezug auf die Dateisystemaktivität in Echtzeit melden".

Ich denke, eine Möglichkeit wäre die Verwendung von strace und das Filtern der Daten. Mit dem Befehl fs_usage können jedoch alle auf dem System ausgeführten Prozesse gleichzeitig "verfolgt" werden.

Hier ist eine Beispielausgabe:

03:44:25 stat64 erences/ByHost/org.mozilla.firefox.69AC0B48-F675-5045-B873-A28B119C33E7.plist 0.000029 firefox  03:44:25 stat64 /Users/**********/Library/Preferences 0.000011 firefox  03:44:25 statfs64 /Users/**********/Library/Preferences 0.000004 firefox  03:44:25 open /Users/**********/Library/Preferences/org.mozilla.firefox.plist.lockfile 0.000090 firefox  03:44:25 stat64 /Users/**********/Library/Preferences/org.mozilla.firefox.plist 0.000004 firefox  03:44:25 stat64 /Users/**********/Library/Preferences 0.000002 firefox  03:44:25 open /Users/**********/Library/Preferences/org.mozilla.firefox.plist.vjLkANe 0.000100 firefox  

Irgendwelche Ideen?

7

5 Antworten auf die Frage

4
Cristian Ciupitu

Sie können mit AUDITCTL auf Systemaufrufe überwachen bezogenen Aktivitäten des Dateisystems wie open, statoder lstat. Überwachung scheint readoder writescheint problematisch zu sein.

auditctlist ein Hilfsprogramm zur Unterstützung der Kontrolle des Prüfsystems des Kernels. Sie müssen root sein, um es verwenden zu können. Es unterstützt verschiedene Filter wie:

devmajor Device Major Number  devminor Device Minor Number  dir Full Path of Directory to watch. This will place a recursive watch on the directory and its whole subtree. It can only be used on exit list. See "-w".  egid Effective Group ID. May be numeric or the groups name.  euid Effective User ID. May be numeric or the user account name.  filetype The target file's type. Can be either file, dir, socket, symlink, char, block, or fifo.  path Full Path of File to watch. It can only be used on exit list.  pid Process ID  ppid Parent's Process ID 

Beispiel (getestet mit Fedora 16 x86_64)

Um die Überwachungsregeln hinzuzufügen, führen Sie als root aus:

for syscall in open stat lstat read write; do auditctl -a exit,always -F arch=b64 -S $syscall \ -F euid=1000 \ -F dir=/tmp/superuser.com/questions/370070 done 

Um sie später zu löschen, ersetzen Sie -amit -d:

for syscall in open stat lstat read write; do auditctl -d exit,always -F arch=b64 -S $syscall \ -F euid=1000 \ -F dir=/tmp/superuser.com/questions/370070 done 

Nachdem Sie die Regeln hinzugefügt haben, führen Sie als Benutzer mit der UID 1000 etwas in diesem Verzeichnis aus:

cd /tmp/superuser.com/questions/370070 echo foo > bar cat bar stat bar 

ausearch --start 00:00:00 --uid-effective 1000wird folgendes zurückgeben (das Protokoll ist /var/log/audit/audit.log):

time->Thu Jun 14 00:02:32 2012 type=PATH msg=audit(1339621352.871:18529): item=0 name="/tmp/superuser.com/questions/370070" inode=178 dev=fd:03 mode=040775 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=CWD msg=audit(1339621352.871:18529): cwd="/home/ciupicri" type=SYSCALL msg=audit(1339621352.871:18529): arch=c000003e syscall=4 success=yes exit=0 a0=139bbf0 a1=7fff32d832d0 a2=7fff32d832d0 a3=24 items=1 ppid=2249 pid=3446 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="bash" exe="/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) [root@hermes ~]# ausearch --start 00:00:00 --uid-effective 1000 ---- time->Thu Jun 14 00:02:32 2012 type=PATH msg=audit(1339621352.871:18529): item=0 name="/tmp/superuser.com/questions/370070" inode=178 dev=fd:03 mode=040775 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=CWD msg=audit(1339621352.871:18529): cwd="/home/ciupicri" type=SYSCALL msg=audit(1339621352.871:18529): arch=c000003e syscall=4 success=yes exit=0 a0=139bbf0 a1=7fff32d832d0 a2=7fff32d832d0 a3=24 items=1 ppid=2249 pid=3446 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="bash" exe="/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) ---- time->Thu Jun 14 00:02:47 2012 type=PATH msg=audit(1339621367.175:18531): item=0 name="bar" inode=218 dev=fd:03 mode=0100664 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=CWD msg=audit(1339621367.175:18531): cwd="/tmp/superuser.com/questions/370070" type=SYSCALL msg=audit(1339621367.175:18531): arch=c000003e syscall=2 success=yes exit=3 a0=7fff5ed6b37f a1=0 a2=0 a3=7fff5ed69460 items=1 ppid=3446 pid=4735 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) ---- time->Thu Jun 14 00:02:47 2012 type=PATH msg=audit(1339621367.172:18530): item=1 name="bar" inode=218 dev=fd:03 mode=0100664 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=PATH msg=audit(1339621367.172:18530): item=0 name="/tmp/superuser.com/questions/370070" inode=178 dev=fd:03 mode=040775 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=CWD msg=audit(1339621367.172:18530): cwd="/tmp/superuser.com/questions/370070" type=SYSCALL msg=audit(1339621367.172:18530): arch=c000003e syscall=2 success=yes exit=3 a0=1665500 a1=241 a2=1b6 a3=4 items=2 ppid=2249 pid=3446 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="bash" exe="/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) ---- time->Thu Jun 14 00:02:47 2012 type=PATH msg=audit(1339621367.971:18532): item=0 name="bar" inode=218 dev=fd:03 mode=0100664 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0 type=CWD msg=audit(1339621367.971:18532): cwd="/tmp/superuser.com/questions/370070" type=SYSCALL msg=audit(1339621367.971:18532): arch=c000003e syscall=6 success=yes exit=0 a0=7fffdc713375 a1=7fffdc711580 a2=7fffdc711580 a3=7fffdc7112f0 items=1 ppid=3446 pid=4736 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="stat" exe="/usr/bin/stat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) 

Die Systemrufnummern finden Sie in /usr/include/asm/unistd_64.h.

Ich habe die Prämie für diese Frage vergeben, weil sie dem entspricht, wonach ich eigentlich gesucht habe ... Es scheint, dass es keine Lösung für die genaue Frage gibt, die ich gestellt habe, und ich werde keine der Antworten markieren (bisher) ) als akzeptiert. Khai vor 11 Jahren 0
3
lornix

Ja, ja, ich weiß ... alter Thread ...

Aber trotzdem ... Der Apple-Quellcode für fs_usage ist online verfügbar, es ist durchaus möglich, ihn selbst zu kompilieren. Natürlich gibt es einige Vorbehalte ...

Es basiert auf den netbsd-Systemaufrufen von Apple OS X, sodass einige (ha!) Bearbeitungen erforderlich wären ...

Sogar mit einem kostenlosen Makefile (netbsd aromatisiert, leider).

Wenn Sie jedoch innerhalb der nächsten 10 Minuten anrufen, werfen sie sogar eine nutzbare Manpage ein ... alles kostenlos!

Ich habe zu spät in der Nacht Infomercials gesehen.

Fs_usage-Quellcode von Apple

(Keine Rückerstattung, Batterien nicht im Lieferumfang enthalten, nicht lagern, einige Montage erforderlich)

(und nachdem ich den Code durchgesehen und Ihr Beispiel gesehen habe, glaube ich, dass etwas erstellt werden könnte, um ziemlich schnell eine 'Teilmenge' der fs_usage-Funktionen zu erstellen ... lassen Sie mich basteln ...)

Ich habe ein Arbeitsprogramm, das anfängt, ähnlich zu sein, wonach Sie suchen, und es muss noch etwas weiter gearbeitet werden, um näher zu kommen, aber Sie können es alle gerne ausprobieren.

Bitbucket Hg Repository - fs_usage

Bei dieser Frage geht es um ein Linux-Äquivalent, und Sie antworten mit einer NetBSD-Lösung. Ich verstehe es nicht ... Sind die Kernel nicht sehr verschieden? Ein Großteil oder alles von fs_usage ist dtrace afaik und daher auch für bsd verfügbar. Daniel Beck vor 11 Jahren 0
Nein, ich habe geantwortet, dass die Quelle verfügbar ist. Ich weiß, dass sie anders sind, weshalb ich selbst an einer Lösung bastle. Aber die Tatsache, dass die Quelle verfügbar ist, ist sehr hilfreich. Ja, die Kernel sind unterschiedlich, aber es ist nicht allzu schwierig, Funktionen und Prozeduren aufeinander abzustimmen. Ich habe bereits ein Teilprogramm, das einige Funktionen des Originals ausführt. Nicht schwieriger als die Anpassung eines Programms von Windows an Linux oder umgekehrt. Zufälligerweise habe ich an einigen Projekten in ähnlicher Weise gearbeitet, also habe ich eine Kallus entwickelt, indem ich meinen Kopf gegen diese Reihe von Problemen schlug. :) lornix vor 11 Jahren 0
@lornix Wie weit bist du damit gekommen? Ich habe bemerkt, dass Sie das Repo vor einiger Zeit gelöscht haben. :( Alistair McMillan vor 9 Jahren 0
Nun ... Die fs_usage verwendet eine Reihe von Kernel-APIs, die der Linux-Kernel nicht bietet, soweit ich das beurteilen kann. Dies ist auch eine Frage des Benutzers, nicht die Frage eines Programmierers. Wenn Sie also keine funktionierende Lösung anbieten können, ist es nicht richtig, zu sagen "Ja, Sie können es haben, wenn Sie es selbst schreiben", oder? SuperTempel vor 8 Jahren 0
3
Jeremy W

Es könnte eine Möglichkeit sein.


Um die Aktivität in / etc zu sehen, würden Sie laufen

$ iwatch / etc

Eigenschaften

  • Befehlszeile und Daemon-Modus
  • XML-Konfigurationsdatei
  • Möglichkeit, ein Verzeichnis rekursiv zu überwachen und neu erstellte Verzeichnisse zu überwachen
  • kann eine Liste von Ausnahmen angeben
  • kann regex verwenden, um den Datei- / Verzeichnisnamen zu vergleichen
  • kann einen Befehl ausführen, wenn ein Ereignis auftritt
  • E-Mail senden
  • Syslog
  • Zeitstempel drucken

Events verfügbar

 access : file was modified modify : file was modified attrib : file attributes changed close_write : file closed, after being opened in writeable mode close_nowrite : file closed, after being opened in read-only mode close : file closed, regardless of read/write mode open : file was opened moved_from : File was moved away from. moved_to : File was moved to. move : a file/dir within watched directory was moved create : a file was created within watched director delete : a file was deleted within watched directory delete_self : the watched file was deleted unmount : file system on which watched file exists was unmounted q_overflow : Event queued overflowed ignored : File was ignored isdir : event occurred against dir oneshot : only send event once 
1
PenguinCoder

Die zwei nächsten Optionen, die ich sehen kann (eingebaut), wären iostatund inotify. iostat zeigt lediglich die Ein- / Ausgabestatistiken für ein Gerät oder eine Partition im System an. Inotify ist ein Systemdatei-Watcher, in den Sie ein Skript einbinden können, um Sie auf Dateiänderungen hinzuweisen. Sie müssten Ihren eigenen Ereigniscode schreiben, um darauf hinzuweisen, dass Dateien gelesen / geschrieben werden, und was dann mit diesem Signal zu tun ist.

Von der Link- / Manpage:

Inotify kann verwendet werden, um einzelne Dateien oder Verzeichnisse zu überwachen. Wenn ein Verzeichnis überwacht wird, gibt inotify Ereignisse für das Verzeichnis selbst und für Dateien innerhalb des Verzeichnisses zurück.

Persönlich würde ich ein Python- oder Bash-Skript schreiben, um die Inotify-Funktion auszuführen, wenn ich die Änderungen überwachen wollte, und sie deaktivieren, wenn sie nicht benötigt werden.

Leider: * Inotify-Überwachung von Verzeichnissen ist nicht rekursiv: Um Unterverzeichnisse in einem Verzeichnis zu überwachen, müssen zusätzliche Überwachungen erstellt werden. Dies kann bei großen Verzeichnisbäumen beträchtliche Zeit in Anspruch nehmen. * Daniel Beck vor 11 Jahren 0
0
Feczo

Installieren Sie sysstat und verwenden Sie den Befehl

sar -B 1 
Entschuldigung für den späten Kommentar, aber das tut nicht wirklich das, was fs_usage macht ... Ich werde die Frage bearbeiten, um eine Beispielausgabe von fs_usage einzuschließen. sar gibt mir nur einige Messwerte für die Dateisystemnutzung ... Ich würde gerne alle Systemaufrufe und die Datei sehen, in der sie erstellt wurden. Khai vor 11 Jahren 0