http://www.google.com in the background and discard both the
curl http://www.google.com > /dev/null 2>&1 &
is the same as
curl http://www.google.com > /dev/null 2>/dev/null &
2 represent the standard file descriptors in POSIX operating systems. A file descriptor is a system reference to (basically) a file or socket.
Creating a new file descriptor in C can look something like this:
fd = open("data.dat", O_RDONLY)
Most Unix system commands take some input and output the result to the terminal.
curl will fetch whatever is at the specified url (google dot com) and display the result to
Like you said
> are used to redirect the output from a command to somewhere else, like a file.
For example, in
ls > myfiles.txt,
ls gets the current directory's contents and
> redirects its output to
myfiles.txt (if the file doesn't exist it is created, otherwise overwritten, but you can use
>> instead of
> to append to the file instead). If you run the command above, you will notice nothing is displayed to the terminal. That usually means success in Unix systems. To check this
cat myfiles.txt to display the file contents to the screen.
> /dev/null 2>&1
The first part
> /dev/null redirects the
stdout, that is
curl's output to
/dev/null (more on this ahead) and
2>&1 redirects the
stderr to the
stdout (which was just redirected to
/dev/null so everything will be sent to
The left side of
2>&1 tells you what will be redirected, and the right side tells you where to. The
& is used on the right side to distinguish
stdout (1) or
stderr (2) from files named
2>1 would end up creating a new file (if it doesn't exist already) named
1 and dump the
stderr result in there.
/dev/null is an empty file, a mechanism used to discard everything written to it. So,
curl http://www.google.com > /dev/null is effectively suppressing
But why is there some stuff still displayed on the terminal?. This is not
curl's regular output, but data sent to the
stderr, used here for displaying progress and diagnostic information and not just errors.
curl http://www.google.com > /dev/null 2>&1 ignores both
curl's output and
curls progress information. The result is nothing is displayed on the terminal.
& at the end is how you tell the shell to run the command as a job in the background. This causes the prompt to return immediately while the command is run asynchronously behind the scenes. To see the current jobs type
jobs in your terminal. Note this is different from the processes running in your system. To see those type
top in the terminal.