Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Next Previous Contents

3. Всё о перенаправлении

3.1 Теория и беглый взгляд

Есть 3 файловых дескриптора: stdin - cтандартный ввод, stdout - стандартный вывод и stderr - стандартный поток ошибок.

Ваши основные возможности:

  1. перенаправлять stdout в файл
  2. перенаправлять stderr в файл
  3. перенаправлять stdout в stderr
  4. перенаправлять stderr в stdout
  5. перенаправлять stderr и stdout в файл
  6. перенаправлять stderr и stdout в stdout
  7. перенаправлять stderr и stdout в stderr
1 означает stdout, а 2 - stderr.

Небольшое примечание для понимания: с помощью команды less Вы можете смотреть как stdout, который остаётся в буфере, так и stderr, который печатается на экране, но стирается, когда Вы пытаетесь "просмотреть" буфер.

3.2 Пример: stdout в файл

Это действие записывает стандартный вывод программы в файл.

        ls -l > ls-l.txt
        
Здесь создаётся файл, названный 'ls-l.txt', и в нём будет содержаться то, что бы Вы увидели, если бы ввели команду 'ls -l' и выполнили её.

3.3 Пример: stderr в файл

Это действие записывает стандартный поток ошибок программы в файл.

        grep da * 2> grep-errors.txt
        
Здесь создаётся файл, названный 'grep-errors.txt', и в нём будет содержаться часть вывода команды 'grep da *', относящаяся к стандартному потоку ошибок.

3.4 Пример: stdout в stderr

Это действие записывает стандартный вывод программы туда же, куда и стандартный поток ошибок.

        grep da * 1>&2 
        
Здесь стандартный вывод команды посылается в стандартный поток ошибок, Вы можете увидеть это разными путями.

3.5 Sample: stderr 2 stdout

Это действие записывает стандартный поток ошибок программы туда же, куда и стандартный вывод.

        grep * 2>&1
        
Здесь стандартный поток ошибок команды посылается на стандартный вывод; если Вы перешлёте результат через конвейер (|) в less, то увидите, что строки, которые обычно пропадают (как записанные в стандартный поток ошибок) в этом случае сохраняются (потому что они на стандартном выводе).

3.6 Пример: stderr и stdout в файл

Это действие помещает весь вывод программы в файл. Это иногда подходит для cron'овских заданий, если Вы хотите, чтобы команда выполнялась абсолютно незаметно.

        rm -f $(find / -name core) &> /dev/null 
        
Это (предположим, на cron'овском задании) удаляет любой файл с названием 'core' в любом каталоге. Помните, что Вы должны быть полностью уверены в том, что делает команда, если хотите затереть её вывод.
Next Previous Contents