ホームディレクトリに、cronジョブを通じて定期的にデータを受信するテキストファイルがあります。cronジョブは動的データを提供するため、ファイルの内容を空にするようにcronジョブを設定したいでしょう(ファイルはまだ存在している必要があります)。ファイルを空にするのに役立つコマンドだけで、cronのヘルプは必要ありません。
ホームディレクトリに、cronジョブを通じて定期的にデータを受信するテキストファイルがあります。cronジョブは動的データを提供するため、ファイルの内容を空にするようにcronジョブを設定したいでしょう(ファイルはまだ存在している必要があります)。ファイルを空にするのに役立つコマンドだけで、cronのヘルプは必要ありません。
回答:
最も簡単な方法:
> filename
これはあまり明白ではない方法であり、おそらく他の人がシェルスクリプトで読むことはできませんが、必要なのはそれだけです。
>は実際にはコマンドではないため(bashビルトインです)、使用できません。
sudo > filename
そのファイルに対するアクセス許可がない場合。ただし、次を使用できます。
sudo bash -c "> filename"
sudo crontab -eなく、rootのcronジョブを追加するために使用します。または、ファイル許可を755ではなく766(または666)に変更しますsudo chmod 766 filename。詳細:codex.wordpress.org/Changing_File_Permissions
truncate filenameは、空の出力をファイルにリダイレクトするよりも少し簡潔で単純であり、で問題が発生することはありませんsudo。
truncate -s 0 filename確かにトリックを作ることができます。回答として追加できます。
そのために作成されたツールがあります。
truncate -s 0 filename
これにより内容は消去されますが、同じファイルのままです(iノードは同じままです)。
一部のプログラムは「inodeによる」ファイルへのハンドルを保持するため、これは重要です。ファイルを削除および再作成する単純な方法を使用して、ファイルを「空にする」と仮定します。いくつかのプログラムは、のような通常の方法で表示されなくなった場合でも、古いファイル(古いコンテンツを含む)へのハンドルを保持する場合がありlsます。
この回答の最後に、詳細へのリンクがいくつかあります。
別の方法、覚えやすいかもしれません:
echo -n > filename
これも同じiノードを保持します。
その両方に注意truncateしてecho -nによって定義されていないPOSIX。
POSIX準拠の使用の場合cat /dev/null:
cat /dev/null > filename
さらに別の方法、より曖昧で、おそらくシェルに依存しない:
> filename
切り捨てるファイルに書き込むためにルート権限が必要な場合、次の行はおそらく予想どおりに機能しません。
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
これは、sudoが実行される前でも、シェルによってリダイレクトが行われるためです。つまり、ファイルへの書き込みアクセスは、sudoによって付与される特権ではなく、シェルを実行するユーザーの特権を使用して行われます。
回避策は、次のようなsudo特権を使用して実行されるシェルへのリダイレクトを延期することです。
sudo sh -c "echo -n > filename"
truncate書き込みアクセスはシェルによって行われるのではなく、truncatesudo特権を使用してsudoによって実行されるため、使用する場合、このような回避策は必要ありません。
sudo truncate -s 0 filename
ファイルが削除された場合でも、ファイルを開いたままにするプログラムに関するいくつかの詳細については、次を読むことができます。
これを自動化するには、logrotateを使用できます。空にするファイルの構成ファイルを作成し、他の設定を追加するだけで、毎日選択する基準に基づいて毎日自動的に空にしたり、ファイルが大きいなどの場合に空にしたりできます。
logrotateの構成方法については、http://linuxcommand.org/man_pages/logrotate8.htmlをご覧 ください。
echo "" > foo_fileこれは簡単な方法で、foo_fileのすべての内容を""で置き換え、この場合は空にします。
使用することもできます cat /dev/null > foo_filenullデバイスを読み取り、ファイルをまったく上書きせずに上書きするをます。
tail -n +1000 file.txt > file.txt1000行を削除し、ファイル内の最新行を保持する必要があります(何かを追跡するために、最近のレコードの一部がいつ必要になるかわかりません)。