If we already have some notions of the GNU / Linux directory tree, we should at least be familiar with the / dev / reference, which is effectively where all the files related to hardware devices.
If we look in the directory / dev / we will see a "file" called null, but if we want to open it to see its content, the system will tell us that it is not possible since it is not ordinary content. I have enclosed the word file because, as you all know for Linux everything (hardware and software) is represented as a file. |
What device does / dev / null correspond to?
For practical purposes, imagine a garbage can, a bottomless pit or outer space into which to throw anything without the possibility of recovering it (no matter how hard the guys from NASA try).
But if I already have commands like rm, why do I want something new to delete?
Because the way both “black holes” work is completely different: how would you go about overriding the standard output of an error in a command within a shell script at runtime? This is where / dev / null comes in.
Let's see it with an example.
We have created a file called tests containing the string "Hello World". If we want to represent the content of that file on the command line, we could do it in the following way:
user @ laptop: ~ $ cat test
Hello World puedo cambiarlo
If the file did not exist or was named as tests (with an 's' at the end), we would get the following error in the console:
user @ laptop: ~ $ cat tests
cat: tests: The file or directory does not exist
What could we do to avoid the error message? Well, simply redirect the output of the command, in case of error, to a "garbage can", that is to / dev / null
How do we specify it to be in case of error? Here you enter the standard input, output and error values for a program: STDIN, STDOUT and STDERR (which can be substituted for 0, 1 and 2 respectively). In this way, if we put ...
user @ laptop: ~ $ cat tests 2> / dev / null
user @ laptop: ~ $
… We will see that the error message will not be produced on the console.
You have to be careful because the syntax is essential: between the characters 2 and> there should be no space. Otherwise, it would give the following:
user @ laptop: ~ $ cat tests 2> / dev / null
cat: tests: The file or directory does not exist
cat: 2: The file or directory does not exist
In contrast, a space between> and / dev / null will not negatively affect the result.
We could also use error redirection, for example, to capture errors in a log file as follows:
user @ laptop: ~ $ cat tests 2> err.log
Another interesting case would be the collection of results in another file as long as an error does not occur, for which we would put:
user @ laptop: ~ $ cat test 1> output_result 2> err.log
Finally, it is worth putting the expression «> / dev / null 2> & 1» in which the standard output and the error output are combined, redirecting them so that in no case the output information is obtained.
Ah, but one of the most used utilities that / dev / null has is missing, which is emptying files: $ cat / dev / null> file.log In this way, the file.log file will be empty. Add it!
It was precisely the explanation he was looking for.
I support the motion to add it =)
Greetings!
Hello, first of all the article is very good! the second I would like to contribute something with this link on the subject cron job in php from Cpanel and the third congratulations for the blog!
Nice article on dev / null, what a shame I think I mistakenly commented in the wrong place before! I apologize
good contribution thanks
Greetings I am getting null attack. I use andrirc and I get a private from my nickname with the word Null. 2 seconds later the program closes I have been reading and from what I see this can only be done by the Shell, not someone external. I've tried to ignore myself / ignore -lrpcntikd and Nothing surprises me the command keeps coming. If you have any way to try to block it I would appreciate it. Cheers
What happens if when executing the sentence the symbol> is not placed?
Could someone guide me please?
Good morning, I have installed Debian netinst in ACER Extensa 5620Z – 32 bit. Once the installation from USB is finished and the pendrive is removed so that it boots from the hard disk (do not reinstall from the pen) but at the moment of booting the system she asks me:
debian login: xxxxxxxx (ok)
Password: xxxxxxxxx (ok)
nil@debian:~$ ???? what is this? What should I put there?
Without this command I cannot proceed with the system boot.
Can you help me? I don't know how I should continue.
Thank you very much. Kind regards.