質問: ログファイルの最後のn行だけをどのように保持しますか? 私が作成したスクリプトは何かを行い、最後に、独自のログファイルにいくつかの行を追加します。ログファイルの最後のn行(たとえば、1000行)のみを保持したいと思います。これは、スクリプトの最後で次のように実行できます。tail -n 1000 myscript.log > myscript.log.tmp mv -f myscript.log.tmp myscript.log しかし、よりクリーンでエレガントなソリューションはありますか?たぶん、単一のコマンドを介して達成?
回答: ユーティリティspongeは、このケースのためだけに設計されています。あなたがそれをインストールしているなら、あなたの2行は書くことができます:tail -n 1000 myscript.log | sponge myscript.log 通常、ファイルへの書き込みと同時にファイルから読み取ることは信頼できません。 spongeは、tailが読み取りを完了してパイプを終了するまでmyscript.logに書き込まないことで、これを解決します。インストールdebianのようなシステムにspongeをインストールするには:apt-get install moreutils rhel/centosシステムにspongeをインストールするには、epelリポジトリを追加して、次のようにします。yum install moreutils ドキュメンテーションman spongeから: spongeは標準入力を読み取り、それを指定されたファイルに書き込みます。シェルリダイレクトとは異なり、spongeはすべての入力を吸収してから出力ファイルを書き込みます。これにより、同じファイルを読み書きするパイプラインを構築できます。