What does 2>/dev/null mean?
Solution 1
The >
operator redirects the output usually to a file but it can be to a device. You can also use >>
to append.
If you don't specify a number then the standard output stream is assumed, but you can also redirect errors:
> file
redirects stdout to file
1> file
redirects stdout to file
2> file
redirects stderr to file
&> file
redirects stdout and stderr to file
> file 2>&1
redirects stdout and stderr to file
/dev/null
is the null device it takes any input you want and throws it away. It can be used to suppress any output.
Note that > file 2>&1
is an older syntax which still works, &> file
is neater, but would not have worked on older systems.
Solution 2
In short, it redirects stderr
(fd
2) to the black hole (discards the output of the command).
Some commonly used pattern for redirection:
command > /dev/null 2>&1 &
Run command
in the background, discard stdout
and stderr
command >> /path/to/log 2>&1 &
Run command
, append stdout
and stderr
to a log file.
In Bash 4+, a shorter (but less readable) form is functional
command &>> /path/to/log
Solution 3
/dev/null
is treated as black hole in Linux/Unix, so you can put anything into this but you will not be able to get it back from /dev/null
.
Further, 2>
means that you are redirecting (i.e. >
) the stderr (i.e. 2
) into the black hole (i.e. /dev/null
)
Your command is:
grep -i 'abc' content 2>/dev/null
Don't try to end with another forward slash like this - 2>/dev/null/
(it's not a directory).
Solution 4
grep -i 'abc' content will generate output which is displayed on your console, including any errors.
Specifying 2>/dev/null
will filter out the errors so that they will not be output to your console.
In more detail: 2 represents the error descriptor, which is where errors are written to. By default they are printed out on the console.
\>
redirects output to the specified place, in this case /dev/null
/dev/null
is the standard Linux device where you send output that you want ignored.
Solution 5
First we need to talk about >
operator. It redirect the output of left of symbol to right of symbol.
So it must thought as :
source_command > target_file
Other things that we must know
0 means stdin
1 means stdout(useful output)
2 means stderr(error message output)
As default, it works as command 1 > target_file
As to /dev/null
--> it is a special file that discards channel output redirect to it.
So in your question it means
Run the command and do not show me the error messages, discard them.
Related videos on Youtube
Naive
Updated on September 18, 2022Comments
-
Naive over 1 year
I would like a brief explanation of the following command line:
grep -i 'abc' content 2>/dev/null
-
Shajee Lawrence over 8 yearsIs there a good reason to use
> /dev/null 2>&1
instead of&> /dev/null
? -
Terry Wang over 8 years@CraigMcQueen
&>
is new in Bash 4, the former is just the traditional way, I am just so used to it (easy to remember). -
Alexander Mills over 6 yearsis there a difference between
> /dev/null 2>&1
and&> /dev/null
-
Warren Hill over 6 yearsIn practice today I don't think there is
2>&1
is an older syntax so&>
would not have worked years ago but both are equivalent. -
Stack Underflow over 5 years@CraigMcQueen according to a comment on this answer,
&> /dev/null
may not work in some shells but > /dev/null 2>&1 will work in all POSIX compatible shells. -
marienbad about 5 yearsWhy is it 2>&1 and not 2&1> ??
-
Sergiy Kolodyazhnyy almost 5 yearsConcise and on-topic. Good answer.
-
toolforger almost 5 years@marienbad that's actually a question worth posting :-) The syntax is
fn>target
, wherefn
is a file number (0-2 typically, some programs define more numbers) andtarget
is usually a file name but here it is another filenumber - prefixed with&
which is the syntax for "I want a filenumber instead of a file name". -
ruohola over 3 years
foobar 2&1> file
does not work. It will send thefoobar 2
command to background and then run the command1
, which will fail, it will also not redirect any output. You wantfoobar > /dev/null 2&>1
or the shorter (and imo clearer):foobar &> /dev/null
. -
maulik13 over 3 yearsIt was very useful to have the meanings of different descriptors to get some more context and saved me an additional Google search.
-
Mathieu K. over 2 years
&>
appears to work inbash
andzsh
but notsh
,csh
, orksh
. (I know, I know, this is AU, not U&L, and this info is probably of little value.)