回答:
# cp -a /dev/null log.txt
これにより、適切なメジャーおよびマイナーdev番号を持つnullデバイスがコピーされるlog.txt
ため、別のデバイスができますnull
。
カーネルでは、デバイスは名前ではなく、メジャー番号とマイナー番号で識別されます。使用しているOSがわからないので、既にわかっている番号をコピーするだけで便利です。間違ったメジャー番号とマイナー番号を使用して作成した場合、おそらく他のデバイス、おそらくディスクまたは書き込みたくない何かを作成しているでしょう。
sudo
(またはrootユーザーとして実行する)ことに注意してください 。「正しいメジャーおよびマイナー開発番号」とはどういう意味か(答えで)説明してください。
/dev/null
しますが、コマンドで使用されているように、「メジャー番号とマイナー番号」がファイルパスにどのように関連するかについて、まだ混乱しています。そして、私はそれをノートに将来のリーダーを助けるだろうと思うあなたの答えにsudo
必要とされます。
cp -a /dev/null log.txt
です。私のコメントに関してどのように影響を与えますか?
sudo
あなたがユーザーとして実行することが起こる場合を除き、このコマンドを実行するにはroot
(一般的に推奨されて)。使用するsudo
(またはとして実行されているroot
ファイルがその場所に配置する必要がある場合はハードリンク(この回答)または(V.Michelの答え@)シンボリックリンクを作成する)は、すべての後に右の溶液であってもよい任意のユーザーアカウントがに書き込むことができ、しかし、ポイントは次のとおりです。明示的にその要件に注意してください。
mknod
。コメントは一般的にあまり注目されないので、質問を読んでいるだけであなたの答えが混乱する可能性があることに注意してください(私もそうです;また、ほとんどの人は決してメジャーデバイス番号やマイナーデバイス番号などの概念にさらされないことに注意してください)。
ここでの他の答えはおそらく機能します。特に、symlinkソリューションはおそらく最も簡単なソリューションになるでしょう。私はこれを主に完全性のために提供します。
ファイルを含むファイルシステムがデバイスをサポートしない場合(たとえば、オプションでマウントされた場合)、関係するmknod
(またはcp -a
)ソリューションは問題になりますnodev
。そしてもちろん、ファイルシステム間でのハードリンクは機能しません。
ハードリンクまたは新しいデバイスノードを作成する代わりに、バインドマウントを使用します。これにより、ファイルシステムツリーのある部分から別の部分にファイルまたはディレクトリをマウントできます。したがって、たとえば、次を実行できます。
mount -o bind /dev/null /path/to/log.txt
これはハードリンクのように機能しますが、次のとおりです。
完全な例:
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
nodev
ファイルシステム上に非常によくあるかもしれません。
アプリケーションがlog.txtをどのように処理するかに大きく依存します。
アプリケーションが既存のファイルを開いて書き込むだけの場合、他の回答で説明されているように、/ dev / nullにシンボリックリンクし、別の場所にシンボリックリンクし、別の場所にハードリンクできます(ただし、ハードリンクはファイルシステムを横断できないため、これの多くのポイント)そこに/ dev / nullデバイスノードのコピーを作成します。
OTOHアプリケーションがlog.txtを削除して再作成した場合、どれも機能しません。ディレクトリ全体を別の場所にシンボリックリンクして、書き込みを別のファイルシステムにリダイレクトできますが、それはそれに関することであり、ディレクトリ内の他のものを処理する必要があります。
log.txtと呼ばれるファイルを作成しようとする試みをすべて捨てながら、ほとんどの操作をすぐに通過させるカスタムオーバーレイファイルシステムを作成したいのであれば、と思います。
chattr +i log.txt
初めて、アプリケーションはファイルをもう削除しません。
さて、名前付きパイプを使用した1つの不愉快なメソッド:
# 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
filterやsend over ncなど、ダンプされたログでほとんど何でもできます。
cat
、プロセスが強制終了またはクラッシュされ、パイプがいっぱいになると、ログインプログラムがハングします。
ファイルを実際のヌルデバイスにすることを検討してください。mknodで作成されたファイル「log.txt」は、正しいファイルタイプと同じマイナー番号とメジャー番号で作成されているため、nullデバイスとして機能します。
chmod -w log.txt
か?