Linux entspricht fs_usage von Mac OS X.


8

Gibt es ein Linux, das dem Mac OS X-Befehl fs_usage entspricht? Laut Manpage wird Folgendes ausgeführt: "Systemaufrufe und Seitenfehler im Zusammenhang mit Dateisystemaktivitäten in Echtzeit melden".

Ich nehme an, eine Option 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?

Antworten:


5

Sie können mit AUDITCTL auf Systemaufrufe im Zusammenhang mit Dateisystem - Aktivität zu überwachen , wie open, statoder lstat. Leider ist die Überwachung readoder writescheint problematisch.

auditctlist ein Dienstprogramm zur Steuerung des Auditsystems 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 auf Fedora 16 x86_64)

Führen Sie zum Hinzufügen der Überwachungsregeln 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 sie -adurch -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 UID 1000 Folgendes in diesem Verzeichnis aus:

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

ausearch --start 00:00:00 --uid-effective 1000gibt Folgendes zurück (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 Syscall-Nummern finden Sie in /usr/include/asm/unistd_64.h.


Ich habe das Kopfgeld für diese Frage vergeben, weil es dem am nächsten kommt, wonach ich eigentlich gesucht habe ... Es sieht jedoch so aus, als gäbe es keine Lösung für die genaue Frage, die ich gestellt habe, so dass ich (bis jetzt) ​​keine der Antworten markieren werde ) wie akzeptiert.
Khai

4

iowatch könnte eine Möglichkeit sein.


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

$ iwatch / etc.

Eigenschaften

  • Befehlszeilen- und Dämonmodus
  • XML-Konfigurationsdatei
  • Möglichkeit, ein Verzeichnis rekursiv 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

Veranstaltungen 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

3

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 Einschränkungen ...

Es basiert auf den netbsd-Systemaufrufen von Apple OS X, daher wäre eine (ha!) Bearbeitung erforderlich ...

Sogar mit einem kostenlosen Makefile (leider mit Netbsd-Geschmack).

Aber wenn Sie innerhalb der nächsten 10 Minuten anrufen, wird sogar eine nutzbare Manpage angezeigt ... alles kostenlos!

Ich habe zu viele Infomercials bis spät in die Nacht gesehen.

Apples fs_usage-Quellcode

(Keine Rückerstattung, Batterien nicht im Lieferumfang enthalten, nicht zur Lagerung zurückkehren, einige Montage erforderlich)

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

Ich habe ein Arbeitsprogramm, das anfängt, ähnlich auszusehen wie das, wonach Sie suchen. Ich muss noch etwas daran arbeiten, um näher zu kommen, aber Sie können es alle gerne ausprobieren.

Bitbucket Hg Repository - fs_usage


Bei dieser Frage handelt es sich um ein Linux-Äquivalent, das Sie mit einer NetBSD-Lösung beantworten. Ich verstehe es nicht ... Sind die Kernel nicht sehr unterschiedlich? Viel oder alles von fs_usage ist dtrace afaik und als solches sowieso für bsd verfügbar.
Daniel Beck

Nein, ich habe geantwortet, dass die Quelle verfügbar ist. Ich weiß, dass sie anders sind, deshalb bastele ich selbst an einer Lösung. Die Tatsache, dass die Quelle verfügbar ist, ist jedoch sehr hilfreich. Ja, die Kernel sind unterschiedlich, aber es ist nicht allzu schwierig, Funktionen und Prozeduren aufeinander abzustimmen. Ich habe ein Teilprogramm, das bereits einige der Funktionen des Originals ausführt. Nicht schwieriger als die Anpassung eines Programms von Windows an Linux oder umgekehrt. Zufälligerweise habe ich in ähnlicher Weise an einigen Projekten gearbeitet, daher habe ich einen Kallus entwickelt, weil ich mir bei diesen Problemen den Kopf geschlagen habe. :)
Lornix

@lornix Wie weit bist du damit gekommen? Ich habe bemerkt, dass Sie das Repo vor einiger Zeit gelöscht haben. :(
Alistair McMillan

Nun ... Die fs_usage verwendet eine ganze Reihe von Kernel-APIs, die der Linux-Kernel nicht anbietet, soweit ich das beurteilen kann. Dies ist auch eine Benutzerfrage, keine Frage eines Programmierers. Wenn Sie also keine funktionierende Lösung anbieten können, ist es nicht wirklich fair zu sagen: "Ja, Sie können sie haben, wenn Sie sie selbst schreiben", oder?
SuperTempel

1

Die zwei nächsten Optionen, die ich sehen kann (eingebaut), wären iostatund inotify. iostat zeigt nur Eingabe- / Ausgabestatistiken für ein Gerät oder eine Partition im System an. inotify ist ein System File Watcher, in den Sie sich mit einem Skript einbinden können, um Sie über Dateiänderungen zu informieren. Sie müssten Ihren eigenen Ereigniscode schreiben, um ihn anzuweisen, auf das Lesen / Schreiben von Dateien zu warten, und dann, was mit diesem Signal zu tun ist.

Von der Link- / Manpage:

Inotify kann zum Überwachen einzelner Dateien oder zum Überwachen von Verzeichnissen verwendet werden. Wenn ein Verzeichnis überwacht wird, gibt inotify Ereignisse für das Verzeichnis selbst und für Dateien im Verzeichnis zurück.

Persönlich würde ich ein Python- oder Bash-Skript schreiben, um inotify auszuführen, wenn ich nach Änderungen suchen musste, und es deaktivieren, wenn es nicht benötigt wird.


1
Leider: Die Überwachung von Verzeichnissen ist nicht rekursiv
Daniel Beck

0

Installieren Sie sysstat und verwenden Sie den Befehl

sar -B 1

Entschuldigen Sie den späten Kommentar, aber das macht nicht wirklich das, was fs_usage macht ... Ich werde die Frage so bearbeiten, dass sie eine Beispielausgabe von fs_usage enthält. sar gibt mir nur einige Metriken zur Nutzung des Dateisystems ... Ich möchte alle Systemaufrufe und die Datei sehen, für die sie erstellt wurden.
Khai
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.