Also habe ich etwas Code eingerichtet, um eine Konfigurationsdatei für Bearbeitungen zu sehen, die funktionierte, bis ich VIM verwendete, um die Datei zu bearbeiten, dann musste ich das Verzeichnis auch nach Umbenennungen und Kreationen ansehen. Dann entdeckte ich, dass die Umbenennungen in der Pfadhierarchie nicht höher waren. Dann habe ich in Symlinks gesucht ... gaaahhhh!Verwenden Sie INotify, um eine Datei mit mehreren symbolischen Links zu sehen
erste Einrichtung eine aus Beispiel eine (von vielen) tricky Symlink Szenarien zeigt:
mkdir config1
touch config1/config
ln -s config1 machine1
mkdir config2
touch config2/config
ln -s config2 machine2
ln -s machine1 active
, nun ein Dateiname wie aktiv/config gegeben, die ich sehen will, kann ich sehen, wie ein inotify erhalten Uhr-Deskriptor für:
config1/ -> watch active/ follow symlinks (watches inode for config1)
active/ -> watch active/ dont follow symlinks (watches inode for active symlink
active/config -> watch active/config (watches inode for config1/config)
Wie füge ich eine Uhr auf dem symbollink machine1 hinzu? Muss ich einen Weg finden, jeden Symlink manuell zu durchlaufen, indem ich währenddessen jeweils Uhren hinzufüge? Wie?
Der Zweck ist, zu ermöglichen:
mkdir config3
touch config3/config
ln -s -f -n config3 machine1
Und haben inotify warnen, dass die aktive/config umgeleitet wurde. Im Moment sieht es aus wie ich eine Uhr für hinzufügen:
- target file inode
- every directory inode leading to the file (to detect moves/renames of directories)
- every symlink inode involved in reaching any of the above
Es muss ein einfacher Weg, um nur eine Datei ansehen? Bin ich vom Weg abgekommen oder ist das wirklich so?
Sie sehen nicht "die eine Datei" - Sie sehen den vollständigen Pfad, Datei enthalten. Das, plus 'inotify', das nicht rekursiv ist, deckt die ersten 2 Punkte ab. Das Vorhandensein von Symlinks erfordert Ihren letzten Punkt. – tucuxi
Ja, ich verstehe, dass INotify so eingerichtet sein muss, dass alle Inodes beobachtet werden, die am Erreichen der interessierenden Datei beteiligt sind, aber ich bin nicht sicher, was der Anwendungsfall ist, dass * nicht erfordert, was ich beschrieben habe? Es ist komplex (ich habe nicht einmal '..' und Symlinks erwähnt), leicht zu vermasseln (Referenzzählung mehrfach angetroffener Verzeichnisse und Symlinks), hat viele Race Conditions (einen Symlink beobachten, während jemand es ändert?) Und alle anderen scheint es zu brauchen. Aber es gibt keine Bibliothek, die das macht? Huh. – Speed8ump
Mit allen seinen Mängeln ist inotify immer noch viel besser als das dnotify, das es ersetzt (siehe zum Beispiel http://lwn.net/Articles/604686/). Bezüglich des Mangels an Bibliotheken haben Sie nicht erwähnt, dass Sie nach ihnen gesucht haben; libinotifytools kann Ihre Aufgaben leicht vereinfachen (es macht den syscalls für Sie), aber ich kann nichts finden, das Ihren genauen Anwendungsfall abdeckt. – tucuxi