web-dev-qa-db-ja.com

/ var / logをすべて削除しますか?

/var/logのすべてを削除できますか?または、/var/log内のファイルを(再帰的に)削除するだけで、フォルダーは残しますか?

誰かが良いrmコマンドラインを持っていますか? (私の管理スキルは私を緊張させます。)

注:私はDebianを使用しています。どのバージョンかわかりません。

28
user274

ファイルを削除する代わりに、それらをローテーションする必要があります。 g。 logrotateを使用します。

いつか前のログが実際に必要になるかわからないため、アーカイブすることをお勧めします(妥当な期間、たとえば3か月まで)。

logrotateは、古いログファイルを圧縮して、多くのディスク領域を占有しないようにすることができます。

22
joschi

/ var/log内のすべてを削除すると、存在することが予想されるフォルダー(exim4、Apache2、apt、cups、mysql、sambaなど)が存在するため、非常に短い時間で大量のエラーメッセージが表示される可能性があります。もっと)。さらに、ログファイルが存在しない場合に作成されないサービスまたはアプリケーションがいくつかあります。彼らは少なくとも空のファイルが存在することを期待しています。ですから、あなたの質問への直接的な答えは、実際には"Do not do this !!!"です。

Joschiが指摘したように、これを行う理由はありません。私は何年もの間1つのログファイルが削除されていないdebianサーバーを実行しています。

17
wolfgangsz

すべてのファイルを削除します。

find /var/log -type f -delete

すべての.gzとローテーションされたファイルを削除する

find /var/log -type f -regex ".*\.gz$"
find /var/log -type f -regex ".*\.[0-9]$"

「-delete」なしでコマンドを実行して、テストしてください。

16
bindbn

マスターから仮想マシンを複製しています。マスターのログをクリアして、クローンを起動したときにマスターのログが取得されないようにすることは、完全に理にかなっています。私はtcshで行いました:

cd /var/log
foreach ii ( `find . -type f` )
foreach? cp /dev/null $ii
foreach? end

ログはクリアされますが、ファイルは保持されます。

10
Dror

Linuxシステムのすべてのログをクリーンアップ削除せずにファイル:

for CLEAN in $(find /var/log/ -type f)
do
    cp /dev/null  $CLEAN
done

サンバ(/var/www/samba)は、IPアドレスを含むログファイル名を作成します。削除することもできます。

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done
7
Pedro Lobito

オプションctimeを使用して古いファイルを見つけることができます...例:

find -ctime +30

Bindbnで説明されているように、最初にフェッチフェッチファイルを検索し、使用後にオプションdelete:Dを使用します。

/var/logdrwxrwxr-xの権限を持っていることが多いため、ユーザーがrootであるか、特権グループに属していない限り、ユーザーは書き込みできません。つまり、特権のないユーザーが新しいログファイルを作成することはできません。

/var/log内のポイントにログを記録することを期待しているアプリケーションは、インストール時にファイルを/var/log階層のどこかに存在させることがよくあり(多くの場合、昇格された特権で発生します)、chmodおよびその時点で、アプリケーションを使用する特権のないユーザーに適した権限にchownする可能性があります。

たとえば、Apacheログは通常、nobodyによって書き込まれます。このユーザーは、Apacheがシステムを過度のリスクにさらすことなくその仕事を完了するための、できる限り少ない特権を持つユーザーです。しかし、より一般的なアプリケーションでさえ、多くの場合、/var/logのログファイルに書き込むことができると期待しています。

では、ログファイルとログファイルへのパスが存在しない場合はどうなるでしょうか。それは完全にアプリケーション次第です。一部のアプリケーションは静かにロギングをスキップします。他の人はたくさんの警告を出します。そして、他の人々は単に救済されるでしょう。厳密なルールはありません。それは、アプリケーション開発者の警戒と、開発者がログ記録する能力をどれほど重要であると考えるか次第です。アプリケーションは、せいぜい/var/log内の宛先でログファイルに書き込むか、場合によっては作成してから書き込みを試み、それを実行できないユーザーによって実行されているため、ログファイルを書き込むことができないことに気付きます。ファイルシステムのその部分に書き込む特権を持っています。

したがって、短い答えは「いいえ」です。/var/logのすべてを削除しないでください。システムで実行されるアプリケーションでそのようなことを実行するための十分な権限を持つ契約ユーザーを破り、ノイズやサイレントを発生させます。ログの失敗、およびいくつかの全面的な破損。

適切なアクションは、適切な構成ファイルを使用してlogrotateをセットアップすることです。通常、ローテーションはcronジョブに関連付けられます。回転は、間隔ベース、サイズベース、またはその両方です。間隔が経過してもログファイルがまだ空である場合は、間隔ベースのローテーションを回避するルールを設定することもできます。ローテーションには、ログファイルのメール送信、圧縮、削除、細断処理などが含まれます。

平均的なユーザーは、ログのローテーションについてあまり気にする必要はありません。開発者はおそらく、使用するログにローテーションルールが確立されていることを確認する必要があります。実際、ソフトウェアが作成および書き込みするソフトウェア固有のログについて、インストール時にログローテーションを設定することは、開発者側の良いマナーと思われます。

2
DavidO

ここに簡単なクリーナーを実装しました:

https://github.com/Lin-Buo-Ren/Coward-Unix-Log-Cleaner

それは単に:

  • _/var/log_ で、次のログローテーションされたファイル名パターンを持つファイル名を削除します。
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • _^.*/.+\.old$_(大文字と小文字を区別しない)
  • _/var/log_ で、次のログファイル名パターンのファイル名を持つファイルを切り捨てる/空にする
    • _^.*/.+\.log$_(大文字と小文字を区別しない)
1
Buo-Ren Lin