/ dev / nullから読み取ることができます。修正方法


80

Wikipediaの記事/dev/nullを読んで、ファイルをに移動して遊んでいました/dev/null

このために、私はを作成し、test_fileその中にいくつかのコンテンツを入れました:

$ touch test_file
$ echo "This is written by Aditya" > test_file
$ cat test_file
This is written by Aditya

その後、ファイルを/dev/null次の場所に移動しようとしました。

$ mv test_file /dev/null
mv: inter-device move failed: ‘test_file’ to ‘/dev/null’; unable to remove target: Permission denied

以来、これは私にPermission deniedエラーを与えました。私は先に進みsudoPermission deniedエラーが発生したときはいつものように使いました。

$ sudo mv test_file /dev/null

コマンドは成功test_fileし、ディレクトリに存在しなくなりました。

ただし、Wikipediaの記事では、移動したものを回復することは不可能で/dev/nullあり、そこEOFから読み取ろうとするプロセスには影響を与えると述べています。しかし、私はから読むことができます/dev/null

$ cat /dev/null
This is written by Aditya

私は何を間違えました/dev/nullか?また、どうすれば通常に戻すことができますか?Permission deniedそもそもなぜエラーに遭遇したのですか?

回答:


147

/dev/nullファイルです。特別なファイル。システムのハードウェアと通信する/ dev / sdaや/ dev / ttyなどのデバイスファイル。

唯一の違い/dev/nullは、ハードウェアがリンクされていないことです。送信したデータはすべて静かに破棄されます。次のコマンドのように:

echo "Hello World" > /dev/null

出力echoをnullに送信するため、端末には何も印刷されません。

しかし、あなたがしたとき、あなたはmv test_file /dev/null特別なファイル/dev/nullをあなたのコンテンツのコピーを保持する通常のテキストファイルで置き換えましたtest_file。言い換えれば、あなたはあなたを失った/dev/null

今、あなたがしなければならないことは(それを再構築するため)です:

sudo rm /dev/null
sudo mknod -m 0666 /dev/null c 1 3

多くのスクリプトがデフォルトでに出力を送信するため、再構築する必要があります/dev/null。場合は/dev/nullこれ以上のブラックホールが、通常のテキストファイルであり、それは、成長しない成長し、あなたのファイルシステムアップを充填してもよいです。そして、あなたはこれを避けたいと確信しています。

さらにはるかに危険なのは、多くのスクリプトは、からの/dev/null読み込みには何も読み込まれないと想定していることです。この仮定を破ると、システム全体のファイルにランダムなゴミが書き込まれる可能性があります。修正するのは事実上不可能です。

また、Linuxはマルチタスクであることを忘れないでください。あなたがで遊んでいる/dev/null間、多くのプロセスが実行されており、数秒の「機会の窓」の間でも大混乱を引き起こします。

試してみたい場合は/dev/null、コピーを作成して試してみてください。

sudo mknod -m 0666 /tmp/null c 1 3 

/tmp/nullまったく同じ方法で機能する/dev/nullが、システムを危険にさらすことなく操作およびテストできるファイルを作成します。


16

ファイルの上書きとファイルへの書き込みには大きな違いがあります。

何かを書く とき/dev/null、例えば

$ echo Hello > /dev/null

...静かに破棄されます。このためには/dev/null、誰もが持つ書き込み権限が必要です。

$ ls -l /dev/null 
crw-rw-rw- 1 root root 1, 3 Mar 18 13:17 /dev/null

コマンドで行ったようにを上書きする /dev/nullmv、特殊ファイル/dev/nullをそこに移動したもので置き換えます。これをしないでください!ファイルを上書きするために、あなたが書き込み権限を必要とするので、あなたがそれを行うには、root権限が必要な理由は、ファイルを含むディレクトリに、この場合には、/dev

$ ls -ld /dev
drwxr-xr-x 16 root root 4640 Mar 18 13:17 /dev

復元する/dev/nullには、コマンドを発行します

$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3

U&L StackExchange:作成方法/dev/nullも参照してください)


8

コマンドを実行するとき

$ sudo mv test_file /dev/null

あなたがいる置き換える特殊なファイル/dev/nullテキストファイルとを。その後の読み取り試行/dev/nullはテキストファイルの内容を返し/dev/null、通常の方法で使用しようとするプログラムはおそらく壊れます。

デバイスファイルの置換または削除に/dev/はスーパーユーザー権限が必要です。そのため、sudo以外の試みはエラーで失敗しました。

/dev/null手動で復元する方法については、Benoitの回答を参照してください。ただし、コンテンツのほとんど(すべてではないにしても)が/dev/udevによって動的に管理されているため、単純な再起動でも修正されると思われます。


6

何をすべきかという質問に答えるには、ファイルを削除するには、次のようにします。

rm test_file

他の人が述べたように、/ dev / nullはプログラムの出力先です。


2
私はダウン投票しませんでしたが、質問はファイルを削除することではありません... rmファイル/ディレクトリを削除するために使用することは知っています...私はちょうど読ん/dev/nullで、それについてもっと理解するために、ファイルを移動し/dev/nullて見てみました効果..この質問は、ファイルを移動することによって何が間違っていたのかを理解することです。/dev/nullその結果、今から読むことができます...質問はシステムからファイルを削除する方法に関するものではありません...明確な...しかし、あなたの答えはまだ歓迎され、答えとして保管されるのに十分です... :
アディティア14年

7
公平を期すために、「何を間違えたのか」と尋ねると、代わりに何をすべきかについての説明が求められます。それはおそらくほとんどのユーザーにとってささいなことですが、他の回答のどれも言及していません。
カペックス14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.