Bir Make strace
ait tail -f
her şeyi açıklıyor. İlginç kısım:
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)
Bu ne yapar? inotify
Dosyaya bir işleyici kurar ve bu dosyada bir şey olana kadar bekler. Çekirdek tail
bu inotify işleyici aracılığıyla dosyanın değiştiğini (normalde eklenmiş olduğunu) söylüyorsa , tail
1) 2 arar) değişiklikleri okur 3) bunları ekrana yazar.
/proc/3844/fd/1
sisteminizde /dev/pts/14
, bir karakter cihazı olan simgesel bir bağlantıdır . Bazıları buna erişilebilen bir "hafıza haritası" gibi bir şey yoktur. Böylece, değişiklikleri inotify'a imzalayabilecek hiçbir şey yoktur, çünkü buna erişilebilecek disk veya bellek alanı yoktur.
Bu karakter cihazı, neredeyse bir ağ soketi gibi çalışan sanal bir terminaldir. Bu sanal terminalde çalışan programlar bu cihaza bağlanıyor (tıpkı bir tcp portuna telnet bağlamış gibi) ve yazmak istediklerini yazıyor. Ekranı kilitleme, terminal kontrol dizileri ve benzerleri gibi karmaşık şeyler de vardır, bunlar normalde ioctl()
aramalarla ele alınır .
Sanırım, bir şekilde sanal bir terminal izlemek istiyorsunuz. Linux üzerinde yapılabilir, ancak o kadar basit değil, bazı ağ proxy'si gibi işlevlere ve bu ioctl()
çağrıların biraz zor kullanımına ihtiyaç duyuyor . Ama bunu yapabilecek araçlar var.
Şu anda hatırlayamıyorum, hangi debian paketinin bu hedef için bir aracı var, ancak biraz googling ile bunu kolayca bulabilirsiniz.
Eklenti: @Jajesh burada belirtildiği gibi (bana verdiyseniz ona +1 verin), araç adlandırılır watch
.
Uzantı 2: @kelnos, basit bir cat /dev/pts/14
de yeterliydi. Bunu denedim ve evet, işe yaradı, ama doğru değil. Ben buna çok tecrübe yoktu, ama bir çıkış gitmiş o sanal terminale girmeden sanki bana öyle geliyor ya kadar cat
komuta veya özgün konumuna ve asla hem. Ama emin değilim.