Обычно команда читает исходные данные с клавиатуры (стандартный ввод) и выдает данные на экран (стандартный вывод). Часто надо это поменять. Например, чтобы отправить письмо, хранящееся в каком-то файле надо набрать.
mail адрес_получателя < имя_файла_с_письмом
Это очень удобно. Если вы хотите сохранить список файлов из какого-то каталога в файле, надо сказать:
ls параметры > имя_файла_для_записи_списка_файлов
Теперь подведем итоги.
Знак > заставляет команду записывать данные вместо стандартного вывода (экрана) в указанный файл. Если файл существует, он будет уничтожен, после чего создан заново, но уже с выводимой информацией.
Знак < заставляет команду читать входные данные не с клавиатуры (стандартного ввода), а из файла. Если файл не существует, будет выдано сообщение об ошибке.
Знаки >> работают аналогично знаку >, но файл (если он существует) удален не будет. Вместо этого данные будут дописаны в конец файла.
Знак | (трубопровод) заставляет передать вывод одной команды на обработку другой. Именно так организован поэкранный вывод каталога:
ls -la | more
Это значит, что все, что выведет команда ls -la будет передано в качестве входных данных на обработку команде more.
Конечно, вы можете указывать несколько символов трубопровода для запуска последовательности из многих команд, если это нужно. Можно комбинировать любые знаки переназначения ввода-вывода. Например, если в файле la лежит строка -la, то вывести оглавление каталога в файл ls.dat можно так:
ls < la > ls.dat
То есть, взять исходные данные для команды ls из файла la и вывести результат ее работы в файл ls.dat.
Однако, не следует увлекаться подобным переопределением. Последний пример, в частности, пригоден для иллюстрации возможностей переопределения ввода-вывода, а не для нормальной работы. Пользуйтесь тем, что вам нужно и не делайте слишком сложных вещей. В них, обычно, нет необходимости.