ファイル内の変更を監視するためのシェルコマンド-何と呼ばれますか?


159

ファイルを監視し、ファイルに書き込まれる変更を確認するために使用できるコマンドがUnixにあったことは知っています。これは、特にログファイルをチェックする場合に非常に役立ちました。

それが何と呼ばれているか知っていますか?

回答:


213

という意味ですか

tail -f logfile.log

tailのmanページ


6
はい、リアルタイムです。
アダムギビンズ

18
補足:ディストリビューションでtailfコマンドが提供されている場合は、tail -fよりも優先して使用してください。tailfは、それが書き込まれていない場合、それは見てファイルにアクセスする必要がないため、より効率的である(あなたがatimeを更新してファイルシステムをマウントした場合、ポーリングアクセスが迷惑している。)
ミハイLimbăşan

10
で、スーパーユーザー私は答えた推奨テール-Fの代わりに-f
ラファ

17
tail -Fファイルオブジェクトではなくファイル名に従います。これは、ログファイルのローテーションの場合に特に便利です。
アミールアリアクバリ

2
数年後の更新:tailf廃止され、tail -f安全になりました。(システムでこれを確認しますman tailf。)ドキュメントを参照してください:man7.org/linux/man-pages/man1/tailf.1.html
exp1orer

124

ジョン・スキートの答えによると、おそらく尻尾を意味したでしょう。

別の便利なものはwatchです。定期的にコマンドを実行し、出力を全画面表示できます。例えば:

watch -n 10 -d ls -l / var / adm / messages

ls -l /var/adm/messages10秒ごとにコマンドを実行し、後続の実行間の出力の違いを強調表示します。(たとえば、ログファイルがどれだけ速く成長しているかを見るのに役立ちます)。


38

inotifywaitinotify-toolsからは、ファイル(またはディレクトリ内のファイル)が変更されるたびにコマンドを実行する場合に便利です。例えば:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

path変数名に最適な選択肢ではないメモです。でzsh、環境変数は大文字と小文字を区別しないようです。私にとっては、設定pathによって設定PATHも行われます。つまり、基本的には、修正するまで何も実行されません。オンではbash、設定pathはに影響しませんPATH
タナトス

36

ログファイルで特定のエラーまたはIDを検索する必要があるため、less +FG1よりも1を使用するtail -fことを好みます。何かを検索する必要がある場合は、入力^Cしてファイルのフォローを停止し、?後方検索を開始します。

キーバインディングはとほぼ同じviです。+オプションを使用して、起動時にコマンドを初期化できます。

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

本当に長いログの場合、-n行番号付けをオフにするオプションを使用すると便利です。マンページから:

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

1. コメントでこれを指摘してくれたrgmarchaへのハットチップ。


alias希望するオプションでを設定することを忘れないでください。そうすることで、毎回入力する必要がなくなります。
マイケルハンプトン

実際、ほとんどの場合、エイリアスよりもシェル関数を好むでしょう。
トリプリー

21

テールは素晴らしいです...以下も使用することができるプレスその後、すなわち以下myfileのファイルに以下を開始Shift+ F。これは尾としての役割が少ない。


5
less + F myfileもそれを作る
rgmarcha 09年

16

私はLaTeXファイルを編集していますが、途中で変更を監視したかったのです。私は、次の小さなシェルスクリプトを作成しました。他の人にも役立つと思います。

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

それを保存watch.shしてくださいchmod u+x watch.sh。次に、次のように実行します。

./watch.sh file.tex pdflatex

実際の変更が行われた場合にのみコマンドを実行する場合は、の`md5sum "$FILE"`代わりに使用できます`ls -l "$FILE"`


1
単一のファイルの代わりにディレクトリとそのコンテンツを監視するには:NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
Andy


6

カーネルのinotifyサブシステムにフックするinotifywatch / inotifywaitを使用することもできます。この方法で、「開く」、「閉じる」、「アクセス」などを監視することもできます。

しかし、単に標準出力に追加された行を取得したい場合、私は尾に同意します。


3

Tailは、どこでも使用可能な標準の伝統的なUNIXツールです。もう少し洗練されたツールは、複数のファイルを同時に監視し、構文の強調表示を行うマルチテールです。


3

ファイルをテーリングするだけでなく、ファイルの周りを検索できるようにしたい場合は、「F」コマンドでlessを使用します。

tailを使用する場合、ファイルがロールオーバーするか、編集(vimのデフォルトモード:w)に置き換えられる可能性がある場合、追加の引数が必要になることに注意してください。

tail -fを指定すると、tailはファイル記述子を保存し、それに追従します。ファイルが置き換えられると、記述子が変更されます。ファイル記述子を追跡することの利点は、ファイルの名前が変更されても、引き続きファイルを追跡できることです。

tail --follow =は、定期的にファイルを開き、置き換えられているかどうかを確認することにより、指定されたファイルを追跡します。

--retryは、ログファイルを作成したいがファイルがまだ作成されていない場合に便利な別のオプションです。

tail -Fは--follow = --retryのショートカットです。


2

tailfを忘れてください、diffはあなたが望むコマンドです。以下に、2つのファイル間または書き込み中の1つのファイル間でリアルタイム(またはクローズ)に発生する違いを監視するための優れたトリックを示します。

これらのメソッドを使用して、記録を保持するためにファイルに変更を書き込むなど、任意の方法で動作を変更できます。監視の間隔または以下のコマンドの他のオプションを試してください。

ファイルが1つあり、変更が加えられるのを監視したい場合:

だから何をすべきかheres:

  1. ファイルをコピーする

cp file file2

  1. bashスクリプトを作成して違いを見つけ、file2を更新します

touch check-differences.sh

nano check-differences.sh

chmod 755 check-differences.sh

  1. スクリプトの基本的な考え方は次のとおりです。必要に応じてファイルに書き込みます

#!/bin/bash

diff file file2

cp file file2

  1. 次に、ウォッチを使用して画面上の違いを見ることができます

watch ./check-differences

これはデフォルトで2秒ごとに更新されます。戻ってそれらを読む必要がある場合は、スクリプトのファイルにdiffの出力を書き込みます。

または、出力を表示する必要がない場合は、cronを使用してスクリプトを定期的に実行します。


1

tail -f somefile.txt新しいデータでスクロールを続けながら、ファイル内の最新データのパッチを見るの好きなless +G somefile.txt場合があります。


4
これは、7年前のこの答えですべてカバーされていると思います。
カスペルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.