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
Используются технологии uCoz