“Tail -f” ve “tail -F” arasındaki fark nedir?


41

Hiçbir zaman tail -Fkomut kullanmadım, bunun yerine her zaman kullanıldı, tail -fancak biri bana bunun -Fçok açıklama yapmadan daha iyi olduğunu söyledi .

Kuyruk komutu için adam sayfasına baktım.

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

Düşük olanın ne yaptığını anlamak kolaydır -f, ancak büyük harflerin ne -Fyapmaya çalıştığını takip etmiyorum. Birinin bana farkları açıklayabildiğini takdir ediyorum.

Yanıtlar:


75

GNU tailyardımcı programını açıklarsınız. Bu iki bayrak arasındaki fark, bir dosyayı açarsam, örneğin bir günlük dosyasını şöyle yapar:

$ tail -f /var/log/messages

... ve makinemdeki günlük döndürme özelliği, kendisine yazılan mesajları izlerken bu günlük dosyasını döndürmeye karar verirse ("döndür", silme veya başka bir yere gitme vb. anlamına gelir), gördüğüm çıktı tam olarak Dur.

Dosyayı şöyle açsam tail:

$ tail -F /var/log/messages

... ve yine, dosya döndürülür, çıktı konsolumda akmaya devam eder, çünkü taildosyayı tekrar kullanılabilir hale gelir gelmez yeniden açar , örn. günlüğe yazmaya program yazarken yenisiyle yazmaya başlar /var/log/messages.

Ücretsiz BSD sistemlerinde, -Fseçenek yoktur ancak mesajı aldığınız farkla GNU sistemlerinde olduğu tail -fgibi davranır.tail -F

tail: file has been replaced, reopening.

Çıktıda, izlemekte olduğunuz dosya kaybolur ve yeniden görünür.


BU TEST YAPABİLİRSİNİZ

Bir kabuk oturumunda

$ cat >myfile

Şimdi bir şeyler yazmanı bekleyecek. Sadece devam edin ve biraz saçma, birkaç satır yazın. Hepsi dosyaya kaydedilecektir myfile.

Başka bir kabuk oturumunda (belki başka bir terminalde, kesintiye uğramadancat ):

$ tail -f myfile

Bu myfile, konsolun içeriğini (sonunu) gösterecektir . İlk kabuk oturumuna geri dönüp bir şey daha yazarsanız, bu çıktı hemen tailikinci kabuk oturumunda gösterilir.

Şimdi çıkın catbasarak Ctrl+Dve kaldırmakmyfile dosyayı:

$ rm myfile

Ardından kediyi tekrar çalıştırın:

$ cat >myfile

... ve bir şeyler yazın, birkaç satır.

GNU ile tail, bu çizgiler olacak değil (burada ikinci kabuk oturumunda göstermek tail -fhala çalışıyor).

Egzersizi tekrarlayın tail -Fve farkı gözlemleyin.


Ah anlıyorum. Foo.log gibi bir sistem günlük dosyasına sahibim, sonra foo.log ile birlikte bazen foo_06242016.log dosyasını görüyorum. Böylece tail -f foo.log dosyasını çalıştırdım, foo_06242016.log?
DaeYoung

1
@DaeYoung Hayır, tam değil. Eğer koşarsanız tail -f foo.logve sisteminiz foo.logörneğin foo.log.0.gzçıkışa giderse gördüğünüz çıkma durur. Eğer kullanırsanız -Fdiğer taraftan, içeriğini görürdünüz yeni foo.log arada hiç ara vermeden.
Kusalananda

4
+1 ... GNU’nun uygulanmasına verdiğiniz cevabı sınırlamadığınız için değil, aynı zamanda insanların başka bir ortamda neler beklenebileceğini bilmelerini sağladığınız için teşekkür ederiz.
TOOGAM

2
Örnek ile çok güzel illüstrasyon.
CVn

1
@Kusalananda: Egzersiz için teşekkürler. Farkı gözlemledim ve tail -f ile tail -F'nin ne yaptığını anlamamda bana yardımcı oldu. kutsanmış bir gün var!
DaeYoung,

14

Basitleştirilmiş, bir dosyayı açtığınızda, dosyanın tam olarak diskinizde bulunduğu bazı meta verileri içeren inode'u alırsınız. Tail, bu dosyadaki değişiklikleri dinler.

Dosyayı kaldırır ve aynı ada sahip yeni bir tane oluşturursanız, dosya adı aynı olur ancak farklı bir inode (ve muhtemelen diskinizde farklı bir yerde saklanır) bulunur. tail -fdoldurmamaya çalışın ve yeni inode yükleyin, tail -Fbunu algılar.

Bir dosyayı yeniden adlandırır / taşırsanız aynı etki de olur. Örneğin izler /var/log/messagesve logrotate eğer günlüğü döndürür /var/log/messages.1. ile kuyruk -fhala işaret eden eski inode dinleyecektir messages.1. ile kuyruk -Fbu fark edecek ve yeni inode okuyacak.


Açıklaman için teşekkürler. Şimdi bana çok mantıklı geliyor.
DaeYoung

2
Sorun değil. Anlıyorum böyle bir terzi yapmak için kolay bir hata olabilir. Öncelikle yazım hatalarınızın düzeltilmiş ve onaylanmış ... başka bir yazım hatası olması gerçeğinden özellikle keyif alıyorum. :)
TOOGAM
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.