Вы описываете tail
утилиту GNU . Разница между этими двумя флагами заключается в том, что если я открою файл, например, файл журнала, например, так:
$ tail -f /var/log/messages
... и если средство ротации журналов на моей машине решает повернуть этот файл журнала, пока я наблюдаю за записью сообщений в него («поворот» означает удаление или перемещение в другое место и т. д.), вывод, который я вижу, будет просто стоп.
Если я открою файл с помощью tail
этого:
$ tail -F /var/log/messages
... и снова, файл поворачивается, вывод будет продолжать течь в моей консоли, потому tail
что он снова откроет файл, как только он снова станет доступным, то есть когда программы, записывающие в журнал, начнут записывать в новую /var/log/messages
.
В свободных системах BSD нет никакой -F
опции, но она tail -f
будет вести себя как tail -F
в системах GNU, с той разницей, что вы получите сообщение
tail: file has been replaced, reopening.
в выводе, когда файл, который вы отслеживаете, исчезает и появляется снова.
ВЫ МОЖЕТЕ ПРОВЕРИТЬ ЭТО
В одном сеансе оболочки
$ cat >myfile
Это теперь будет ждать вас, чтобы напечатать материал. Просто вперёд и набери несколько слов, несколько строк. Все это будет сохранено в файл myfile
.
В другой сессии оболочки (может быть, в другом терминале, не прерываяcat
):
$ tail -f myfile
Это покажет (конец) содержимое myfile
в консоли. Если вы вернетесь к первому сеансу оболочки и наберете что-то еще, этот вывод будет немедленно показан tail
во втором сеансе оболочки.
Теперь выйдите cat
, нажав Ctrl+Dи удалить в myfile
файл:
$ rm myfile
Затем снова запустите кошку:
$ cat >myfile
... и наберите что-нибудь, несколько строк.
В GNU tail
эти строки не будут отображаться во втором сеансе оболочки (где tail -f
все еще выполняется).
Повторите упражнение с tail -F
и наблюдайте разницу.