回答:
人々が仮定するため。私はそれをテストするまでそれらの人々の一人でした。人々が仮定する理由を理解するのは簡単です...それは危険に見えます...
...しかし、あなたは実際に物事を移動することはできません/dev/null
—それは単にリダイレクトを吸収する(そしてそれらを無に送る)特別なファイルです。ディレクトリをそのディレクトリに移動しようとすると、ファイルシステムが顔面で爆発的に爆発し、ファイルをそのディレクトリに移動しようとすると、おそらく置き換えられてしまいます。
最初のリンクはディレクトリを処理しますが、ファイルで上書きするための個別のテストがあります。Rmanoがコメントで指摘しているように、これはおそらくあなたが大人の監督なしでやるべきではないことです。リスクが伴います。
$ echo "this is my file" > test
$ cat test
this is my file
$ sudo mv test /dev/null
$ cat /dev/null
this is my file
# Fix this!
$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3
/dev/null
に移動しても、そのデータは無に移動しません。それは大丈夫移動中のデータになりますが、/dev/null
上書きされます、そして、あなたが戻って、まだそれを動かすことができるように:)も参照してくださいaskubuntu.com/questions/435887/...
sudo mv file /dev/null
になる成功し、簡単に完全にシステムが使用不能につながることができます。@MalteSkoruppaのコメントにリンクされている質問に関する私のコメントを参照してください。これは、「sudo
自分が何をしているかを3回確認した場合にのみ追加する」という別の明確な例です
sudo mknod -m 0666 /tmp/mynull c 1 3
---そして、それで遊んでください;-)
/dev/null
これは単なるファイルであり、「特殊文字」ファイルですが、ファイルが従わなければならない規則によって束縛されることは少なくありません。このコマンドを実行することは決してできないと言われています:
$ mv ~ /dev/null
mv
あなたは、ファイルにディレクトリを移動しているので、コマンドは単に文脈の意味を作っていないこと、これを許可しませんmv
これを知っています。
$ mkdir dir
$ touch afile
$ mv dir afile
mv: cannot overwrite non-directory ‘afile’ with directory ‘dir’
/dev/null
通常のファイルをコピーしようとすると、それが文字ファイルであるため、どちらにもコピーすることはできません。
$ cp ~/bzip2_1.0.6-4_amd64.deb /dev/null
$ ls -l |grep null
crw-rw-rw- 1 root root 1, 3 Mar 16 14:25 null
このファイルに対してできることは、mv
別のファイルをコピーするか削除することだけです。
$ mv /path/to/afile /dev/null
このコマンドの後/dev/null
は、通常のファイルです。この変更の最も危険な影響は、データを出力/dev/null
しないことであるため、多くのシェルスクリプトは、
`... < /dev/null`
「何もない」と言うのと同じです。この仮定を破ると、ランダムなデータ(最後のプロセスが `/ dev / null 'に書き込んだデータ)がシステム全体のシステムファイルに挿入される可能性があります。
ファイルやその他の入力ストリームを書き込むことはできます/dev/null
が、ディレクトリには書き込みできません。ディレクトリを移動しようとすると、ディレクトリではなくファイルである/dev/null
ため、エラーが報告され/dev/null
ます。
ただし、を試してみたいので/dev/null
、まず、ファイルを移動して上書きすることの結果と/dev/null
、その状況から回復する方法を知ることをお勧めします。
この質問に対するこの回答で@Rmanoが示唆したように、実験するためには、そのコピーを作成してから実験を行う必要があります。それでは、実験目的で作成して使用しましょう。/dev/null
/tmp/null
sudo mknod -m 0666 /tmp/null c 1 3
今、/tmp/null
私たち/dev/null
はすべての目的のために:
というディレクトリ内にtest_file
とを作成しましょう。test_dir
ask_ubuntu
$ mkdir ask_ubuntu
$ cd ask_ubuntu
$ touch test_file
$ mkdir test_dir
$ echo "Let us test if we can recover our test_file." > test_file
以下にask_ubuntu
ディレクトリの内容を示します。
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:10 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
-rw-r--r-- 1 aditya aditya 0 Mar 18 17:10 test_file
に移動して、次の内容を確認test_file
し/tmp/null
てくださいask_ubuntu
。
$ sudo mv test_file /tmp/null # This succeeds
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
コマンドは成功し、test_file
使用できなくなりました。次に、成功しないものに移動test_dir
し/tmp/null
てみてください。
$ sudo mv test_dir/ /tmp/null
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’
test_dir
内部にまだありますask_ubuntu
:
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
次に、次test_file
から回復できるかどうかを考えてみましょう/tmp/null
。
$ cat /tmp/null
Let us test if we can recover our test_file.
そのため、まだそこに/tmp/null
あり、特殊ファイルであったファイルは上書きされ、他の通常のファイルのようになりました。/tmp/null
他のファイルと同じようにコピーすることで、ファイルを回復できます。
$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.
ファイルが回復しました。
/tmp/null
を使用してこれらのコマンドを直接作成および試行しなかった場合は/dev/null
、を実行してcp /dev/null our_test_file
、必要に応じてファイルを回復してください。/dev/null
リンクされた質問に記載されている次のコマンドをできるだけ早く実行して、システムに存在する目的のために復元します。
$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null
そのため、ディレクトリを移動することは不可能/dev/null
であるため、そこからディレクトリを回復することは問題ありません。
ファイルに関する限り、ファイルを直接に移動すると/dev/null
、上記のようにファイルを回復できます。ただし、次の2つの例外があります。
期間中は、実行sudo mv test_file /dev/null
してcp /dev/null our_test_file
、システム内の任意のルートスクリプトが実行することによって、それを上書きする場合は、echo "Whatever text the root script wants to send to /dev/null" > /dev/null
(または他の同様のコマンド)。その場合、ファイルを回復する簡単な方法はありません。
これらの2つのコマンドを実行する間にシステムを再起動した場合。/dev/null
ブート時に再作成されるため、コンピューターをシャットダウンするとファイルが失われます。
しかし、のような入力ストリームを回復したい場合echo "Stream this line to /dev/null" > /dev/null
、/dev/null
不要なファイルと入力ストリームを破棄する特別なファイルであり、ウィキペディアの記事で言及されているように、それから読み取るプロセスにデータを提供しません。
sudo mv test_file /dev/null
置き換え /dev/null
でtest_file
。したがって、その後/dev/null
は通常のファイルになり、そこに書き込んだものは何でも読むことができます。しないでください
に送信されたもの/dev/null
はすべて静かに破棄されます。入力した場合:
echo "Hello World"
あなたが得るHello World
画面上に。入力した場合:
echo "Hello World" >/dev/null
画面には何も表示されません。
しかし、moveコマンドの場合、コマンドmv
はファイル/ dev / nullをディレクトリで置き換えようとしますが、これは不可能です。Linuxではすべてがファイルであるため、/ dev / nullはファイルです。もちろん特別なもの(デバイスファイル)、ハードウェア(ディスク、パーティション、サウンドカード、シリアルポートなど)にアクセスできる特別なファイル。/ dev / nullの場合、これはどのハードウェアにもリンクされていないため、送信されたデータは静かに破棄されます。これが「彼ら」がそれをブラックホールと呼んだ理由です。