ファイルを/dev/nullへのハードリンクに置き換えます。

ファイルを/dev/nullへのハードリンクに置き換えます。

log.txtに書き込むアプリケーションを実行しています。アプリケーションが新しいバージョンに更新され、サポートされているプラ​​グインは互換性がなくなりました。 log.txtに多くのエラーが記録されるように強制し、他のログファイルへの書き込みをサポートしていないようです。

他のログにどのように書き込むことができますか?

log.txtをハードリンク(アプリケーションでは違いがわかりません。そうですか?)または/ dev / nullへのハードリンクに置き換えることを検討しました。私のオプションは何ですか?

答え1

/ dev / nullへのシンボリックリンクを作成できます。ルートである必要はありません。

ln -s /dev/null log.txt

答え2

# cp -a /dev/null log.txt

これにより、正しいメジャーとマイナー開発番号を含む空のデバイスがコピーされ、log.txt別のデバイスを持つことができますnull

デバイスはカーネル内の名前で識別されず、メジャー番号とマイナー番号で識別されます。私はあなたがどのオペレーティングシステムを使用しているかわからないので、私たちがすでに知っている場所から番号をコピーするのが便利だと思います。間違ったメジャー番号とマイナー番号を使用している場合は、書き込みを望まないディスクや他のデバイスなどの他のデバイスを作成した可能性があります。

答え3

ここにある他の答えがうまくいくかもしれません。特に、Symlinkソリューションはおそらく最も簡単なソリューションです。私は主に完全性のためにこれを提供します。

ファイルを含むファイルシステムがデバイスをサポートしていない場合(たとえば、このオプションでマウントされている場合)、またはmknod関連するソリューションに問題が発生します。もちろん、ファイルシステム間のハードリンクはまったく機能しません。cp -anodev

ハードリンクまたは新しいデバイスノードの作成に代わるものは、バインドマウントを使用することです。これにより、ファイルシステムツリーのある部分から別の部分にファイルまたはディレクトリをマウントできます。たとえば、次のように実行できます。

mount -o bind /dev/null /path/to/log.txt

これはハードリンクによく似ていますが、次のようになります。

  • ファイルシステム全体で動作できます(ハードリンクなどのファイルシステムのinodeに基づいていないため)。
  • 読み取り専用ファイルシステムで動作します(実際にはファイルシステムを変更しないため)。

完全な例:

bash-4.3# ls -l /var/log/boot.log
-rw-r--r--. 1 root root 7436 Dec 19 10:00 /var/log/boot.log
bash-4.3# mount -o bind /dev/null /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
bash-4.3# echo words words words > /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log

答え4

まあ、名前付きパイプを使用するエレガントではない方法は次のとおりです。

# create a named pipe
mkfifo /path/to/log.txt
# read contents from the pipe and redirect them to /dev/null
cat /path/to/log.txt > /dev/null

フィルタリング、トランスポートなどのダンプされたログで、ほぼすべての操作を実行できます。CNC

関連情報