27

I was recently looking into using tail -f to monitor some text files like so: tail -f /var/sometext.

However, when I did some testing, it doesn't seem to work. What I did was I created a new file and ran: tail -f /home/name/text Then, I opened the log in vim and did some editing, saved it, and it seems that tail is not "seeing" the change.

The weird thing is, running echo "hello" >> /home/name/text seems to work fine (tail sees the change). I read somewhere this has something to do with file descriptors and new inodes being created when saving a file.

Can someone explain this for me? I didn't quite get how this actually works, but I have an idea what file descriptors are though.

4 Answers4

44

-f follows by inode. If you want to follow by name, such as when a program completely recreates the file, then use -F instead.

1

tail -f watches the end of file, and when the end of file moves, it prints the new content and waits for the end of file to move again. In other words, changes in the middle of the document won't be found by tail -f, only appending.

phuclv
  • 30,396
  • 15
  • 136
  • 260
1

I had problems inside a docker container on following files which are in a docker volume. Turned out that wsl2 does not support inotify and tail uses that.

There is a ---disable-inotify (with three dashes) flag you can use but it is not in the official man page, so I guess this is a feature which might be removed in some versions.

Bastian
  • 111
-2

Actually, the true story is:

tail -f monitors memory, not disk. But it can't access protected memory, such as edits to a file opened a text editor.

phuclv
  • 30,396
  • 15
  • 136
  • 260