このタスクは sed
で達成できると思います
sed -i '1,10d' myfile
ファイルから 1 行目から 10 行目までの行を削除します。
誰もが少なくともこの sed 1 ライナーを見るべきだと思います.
これは、アプリケーションによってアクティブに追加されているログファイルでは機能しないことに注意してください (質問に記載されているように)。
sed -i
新しいファイルを作成し、書き込み先のファイルを「削除」します。ほとんどのアプリケーションは、削除されたログ ファイルにログ レコードを書き込み続け、ディスク領域をいっぱいにし続けます。新しい切り捨てられたログ ファイルは追加されません。これは、アプリケーションが再起動された場合、またはログ ファイルを閉じて再度開くように通知された場合にのみ停止します。この時点で、sed の使用とアプリケーションの再起動の間にログ記録可能なアクティビティがあった場合、新しいログ ファイルにギャップ (ログ レコードの欠落) が生じます。
これを行う安全な方法は、アプリケーションを停止し、sed を使用してログを切り詰めてから、アプリケーションを再起動することです。このアプローチは、一部のサービスでは受け入れられない場合があります (例:高スループットと高いサービス継続性要件を持つ Web サーバー)
いいえ、Linux のようなオペレーティング システムとそのファイル システムは、ファイルの先頭からデータを削除するための準備をしていません。つまり、ファイルの保存の開始点は固定されています。
通常、ファイルの先頭から行を削除するには、残りのデータを新しいファイルに書き込み、古いファイルを削除します。プログラムが古いファイルを書き込み用に開いている場合、そのファイルの削除は、アプリケーションがファイルを閉じるまで延期されます。
コメンテーターが指摘したように、前の文章で述べた理由により、通常は、ログを書き込んでいるプログラムとログファイルのプルーニングを調整する必要があります。これを正確に行う方法は、プログラムによって異なります。一部のプログラムは、シグナル (HUP など) を送信すると、ログファイルを閉じて再度開きます。これを使用して、サービスを中断することなく、「削除された」ログファイルにログレコードが書き込まれるのを防ぐことができます。
logrotate など、ログ ファイルのサイズを管理するためのユーティリティが多数あります
一部のプログラムには、独自のユーティリティがあります。たとえば、Apache ウェブサーバーには、rotatelogs ユーティリティが含まれています。
いいえ。このログ ファイルの増大という一般的な問題の解決策は、ログのローテーションです。これには、既存のログ ファイルを別のファイル名に定期的に (通常は毎晩または毎週) 移動し、空のログ ファイルから新たに開始する必要があります。一定期間が経過すると、古いログ ファイルは破棄されます。
参照:http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm