Обычно команда читает исходные данные с клавиатуры (стандартный ввод) и выдает данные на экран (стандартный вывод). Часто надо это поменять. Например, чтобы отправить письмо, хранящееся в каком-то файле надо набрать.

mail адрес_получателя < имя_файла_с_письмом

Это очень удобно. Если вы хотите сохранить список файлов из какого-то каталога в файле, надо сказать:

ls параметры > имя_файла_для_записи_списка_файлов

Теперь подведем итоги.

Знак > заставляет команду записывать данные вместо стандартного вывода (экрана) в указанный файл. Если файл существует, он будет уничтожен, после чего создан заново, но уже с выводимой информацией.

Знак < заставляет команду читать входные данные не с клавиатуры (стандартного ввода), а из файла. Если файл не существует, будет выдано сообщение об ошибке.

Знаки >> работают аналогично знаку >, но файл (если он существует) удален не будет. Вместо этого данные будут дописаны в конец файла.

Знак | (трубопровод) заставляет передать вывод одной команды на обработку другой. Именно так организован поэкранный вывод каталога:

ls -la | more

Это значит, что все, что выведет команда ls -la будет передано в качестве входных данных на обработку команде more.

Конечно, вы можете указывать несколько символов трубопровода для запуска последовательности из многих команд, если это нужно. Можно комбинировать любые знаки переназначения ввода-вывода. Например, если в файле la лежит строка -la, то вывести оглавление каталога в файл ls.dat можно так:

ls < la > ls.dat

То есть, взять исходные данные для команды ls из файла la и вывести результат ее работы в файл ls.dat.

Однако, не следует увлекаться подобным переопределением. Последний пример, в частности, пригоден для иллюстрации возможностей переопределения ввода-вывода, а не для нормальной работы. Пользуйтесь тем, что вам нужно и не делайте слишком сложных вещей. В них, обычно, нет необходимости.