You can write files or other input streams to /dev/null
but not directories. If you try moving a directory to /dev/null
it would report an error since /dev/null
is not a directory but a file.
However, since you want to experiment with /dev/null
, you are first suggested to know the consequences to moving a file to overwrite /dev/null
and how to recover from that situation:
As suggested by @Rmano in this answer to that question, in order to experiment with /dev/null
we should rather create a copy of it and then do our experimentation. So, let's create /tmp/null
and use it for our experimentation purposes:
sudo mknod -m 0666 /tmp/null c 1 3
Now onwards, /tmp/null
is our /dev/null
for all purposes:
Let us create a test_file
and a test_dir
inside a directory called 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
The following shows the contents of ask_ubuntu
directory:
$ 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
Now try to move our test_file
to /tmp/null
and see the contents of 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
The command succeeds and test_file
is no longer available. Now try to move test_dir
to /tmp/null
which doesn't succeed:
$ sudo mv test_dir/ /tmp/null
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’
test_dir
is still present inside 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
Now, let us figure if we can recover our test_file
from /tmp/null
:
$ cat /tmp/null
Let us test if we can recover our test_file.
So, it is still there and /tmp/null
which was a special file has been overwritten and it has become like any other normal file. We can recover our file by copying /tmp/null
just like any other file:
$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.
File recovered.
Note:
If you didn't create /tmp/null
and tried those commands directly using /dev/null
; make sure you recover the file (if you need to) by running cp /dev/null our_test_file
; and restore /dev/null
for the purposes it exists on our system by running the following commands as given in the linked question as soon as possible:
$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null
Conclusion:
So, it is impossible to move a directory to /dev/null
and hence there is no question of recovering the directory from there.
As far as files are concerned, if you directly move files to /dev/null
, you can still recover it as demonstrated above. However, there are two exceptions:
During the period you run sudo mv test_file /dev/null
and cp /dev/null our_test_file
, if any root script in the system overwrites it by running echo "Whatever text the root script wants to send to /dev/null" > /dev/null
(or other similar commands). Then we do not have any easy way to recover our file.
If you reboot the system between running those two commands. /dev/null
gets re-created at boot, so our file gets lost when we shut down the computer.
But if you want to recover input streams like echo "Stream this line to /dev/null" > /dev/null
, you cannot recover that since /dev/null
is a special file to dispose off unwanted files and input streams and as the Wikipedia article mentions, it doesn't provide any data to a process that reads from it.
Reference: Wikipedia Article on /dev/null
/dev/null
will not result in that data being moved into nothingness. It will result in the data being moved alright, but/dev/null
will be overwritten, and so you can move it back yet :) Also see http://askubuntu.com/questions/435887/i-can-read-from-dev-null-how-to-fix-it/435892#435892 – Malte Skoruppa Mar 18 '14 at 14:05sudo mv file /dev/null
will succeed, and can easily lead to a completely unusable system. See my comments on the question linked in the comment of @MalteSkoruppa. This is another clear example of "prependsudo
only if you thrice checked you know what you're doing" ;-) – Rmano Mar 18 '14 at 14:25/dev/null
will not move it into nothingness. Will replace /dev/null with a regular file named /dev/null, and the next time that a maintenance script will do "< /dev/null" you will have a broken system... – Rmano Mar 18 '14 at 14:27dpkg-alternative
(1) (or something in this line) between your "sudo mv test /dev/null" and "sudo mknod" you can have a broken system. Probably needing to reinstall. (1) I say this one because I found an usage of "< /dev/null" in/etc/alternatives
directory. – Rmano Mar 18 '14 at 14:44sudo mknod -m 0666 /tmp/mynull c 1 3
--- and then play away with it ;-) – Rmano Mar 18 '14 at 14:45/usr/bin/
. All those command will fail in that window. – Rmano Mar 18 '14 at 15:05