The represents a pipe between two commands. There may be more than one command running at the same time, and one program can require the output of another. For example, if more command did not have a file name argument, you would have to use the standard input. To see the output of ls command page by page you had to first put the output of ls to a file, then redirect that file as the standard input of more and delete that file.
<mendelson:~>ls -l > tmp_file <mendelson:~>more < tmp_file <mendelson:~>rm tmp_file
If you want to send the standard output of a process to the standard input of another, then you should put character between them. The command below has the same effect with 3 commands above.
<mendelson:~>ls -l | more
When you put character between two command, the system gets the output from left process and gives them to the right process. In our example outputs of "ls" are taken and fed to "more". The picture below shows the connection between two commands.