Machen Sie ein strace
aus tail -f
, es erklärt alles. Der interessante Teil:
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 fstatfs(3, {...}) = 0
13791 inotify_init() = 4
13791 inotify_add_watch(4, "/path/to/file", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 read(4, 0xd981c0, 26) = -1 EINTR (Interrupted system call)
Was es macht? Es richtet einen inotify
Handler für die Datei ein und wartet dann, bis mit dieser Datei etwas passiert. Wenn der Kernel tail
über diesen inotify-Handler sagt , dass die Datei geändert wurde (normalerweise wurde sie angehängt), dann tail
1) sucht 2) liest die Änderungen 3) schreibt sie auf den Bildschirm.
/proc/3844/fd/1
Auf Ihrem System befindet sich eine symbolische Verknüpfung zu /dev/pts/14
einem Zeichengerät. Es gibt keine "Speicherkarte", auf die dadurch zugegriffen werden könnte. Somit gibt es nichts, dessen Änderungen an der inotify signiert werden könnten, da es keine Festplatte oder keinen Speicherbereich gibt, auf die damit zugegriffen werden könnte.
Dieses Zeichengerät ist ein virtuelles Terminal, das praktisch so funktioniert, als wäre es ein Netzwerk-Socket. Programme, die auf diesem virtuellen Terminal ausgeführt werden, stellen eine Verbindung zu diesem Gerät her (so als ob Sie über einen TCP-Port telnetiert hätten) und schreiben, in was sie schreiben möchten. Es gibt auch komplexere Dinge, zum Beispiel das Sperren des Bildschirms, Terminalsteuerungssequenzen und dergleichen, die normalerweise von ioctl()
Anrufen erledigt werden .
Ich denke, Sie möchten sich irgendwie ein virtuelles Terminal ansehen. Es kann unter Linux durchgeführt werden, ist aber nicht so einfach, es benötigt einige Netzwerk-Proxy-ähnliche Funktionen und ein wenig knifflige Verwendung dieser ioctl()
Aufrufe. Aber es gibt Werkzeuge, die das können.
Derzeit kann ich mich nicht erinnern, welches Debian-Paket das Tool für dieses Ziel hat, aber mit ein wenig googeln könnte man das wahrscheinlich leicht finden.
Erweiterung: Wie hier bei @Jajesh erwähnt (gib ihm eine +1, wenn du mir gegeben hast), heißt das Tool watch
.
Erweiterung # 2: @kelnos erwähnt, eine einfache cat /dev/pts/14
waren auch genug. Ich habe das versucht und ja, es hat funktioniert, aber nicht richtig. Ich habe nicht viel damit experimentiert, aber es scheint mir, als ob eine Ausgabe, die in dieses virtuelle Terminal geht, entweder an den cat
Befehl oder an seinen ursprünglichen Ort geht und niemals an beide. Aber es ist nicht sicher.