Введение в UNIX

Дегтярев Е.К.

Оглавление

5. Команды и стандартные файлы

5.1. Стандартные файлы

В начало страницы

   Многие команды работают по умолчанию со стандартными
файлами:
   - Standard Input      (S.I.);
   - Standard Output     (S.O.);
   - Diagnostic Output   (D.O.);
   
   Однако есть средства изменения  умолчания,  т.е.  возмож-
ность указать другие файлы вместо стандартных. Можно
также в качестве D.O. использовать S.O. Эти средства называ-
ются перенаправление (редирекция) ввода и вывода.

5.2. Перенаправление стандартного вывода

   Используется знак >:
   $ ls -l                 - вывод на экран = standard output;
   $ ls -l > dirconts      - вывод в файл dirconts;
   $ cat dirconts          - вывод на экран.
   Пробелы вокруг символа > необязательны.
   Возможна перенаправление  вывода с добавлением (с дописы-
ванием в файл): обозначается >>:
   $ pwd >> dirconts (добавить в файл имя текущего каталога).

5.3. Перенаправление стандартного ввода

В начало страницы

   Используется знак <.
   
   Пример:
   $ mail                   - ввод сообщения с экрана;
   $ mail < message         - ввод сообщения из файла message.
   
Эта возможность используется реже, чем перенаправление вывода.
   Тривиальный случай перенаправления ввода:
   
   $ cat < this_file
   $ cat this_file
   
Это две эквивалентные команды.
   Можно одновременно перенаправить и ввод, и вывод.
   
   Например:
   $ cat < left > right.
   
   Будьте осторожны:  надо,  чтобы left не равнялось  right,
иначе можно (вообще говоря) потерять входной файл.
   Безопаснее >>, чем > (добавление, чем запись).

5.4. Создание файла командой cat

В начало страницы


   Если не задан входной файл, то будет предполагаться стан-
дартный ввод (клавиатура). Одновременно перенаправим вывод в
новый (создаваемый) файл

   $cat > newfile.
   
   Здесь стандартный ввод буферизован: накопление 512 (обыч-
но) знаков и потом ввод.
   Небуферизованный (лучше, на случай сбоев) ввод:
   с ключом -u (unbuffered):
   
   $ cat -u > people
   Mary  101
   Sally 113
   Jana  121
   ^d    [для конца текста(EOF)]
   $
   
   Можно добавлять:
   $ cat -u >> people
   Charlie 122
   Bill    100
   ^d
   $

5.5. Соединение команд каналами (pipeline)

В начало страницы


   Стандартный вывод  одной  команды  может быть стандартным
вводом следующей команды.  Обозначается знаком | (вертикаль-
ная черта).

   Пример:
   $ who  | wc -l - создание списка активных пользователей и
подсчет их числа (count); 19 - ответ, то есть 19 пользовате-
лей.
   $
   
   Пример:
   $ ls -l /tmp | grep maryann | sort +3nr | lpr
листинг          поиск записей,    сортировка    печать
каталога         содержащих        (по 4-му по-  упорядо-
 /tmp            строку "maryann"  лю) найденных ченного
                                    записей       списка

5.6. Фильтры

В начало страницы

   Так называются  команды,  которые  могут вводить со стан-
дартного ввода и выводить на стандартный вывод.  Большинство
команд является фильтрами.
   Есть исключения: ls не может работать со стандартным вво-
дом. Или: lpr не может работать со стандартным выводом.

5.7. Параллельный стандартный вывод и перенаправление вывода


                                         -------------------
                                     --->|cтандартный вывод|
              ---------  ---------   |   -------------------
Схема такова: | вывод |->|команда|-->|
              |       |  |  tee  |   |          ------
              ---------  ---------   ---------->|файл|
                                                ------
   Пример:
         $ ls -l  |  tee dirconts
на экран, то есть     дублирование
стандартный вывод     вывода в файл

5.8. Диагностический вывод

В начало страницы


   Сообщения об ошибках,  возникающих при выполнении команд,
выводятся на диагностический вывод,  по умолчанию это (как и
стандартный вывод) - на экран.
   Диагностический вывод тоже может быть перенаправлен в лю-
бой файл.  Для этого используется дескриптор файла  (целое),
который для стандартных файлов равен:

   0 - Standard input;
   1 - Stfndard output;
   2 - Diagnostic output.
   
   Пример:
   $ cat somefile > outfile  2> errfile,
где знак > эквивалентен 1>.
   Если вы хотите,  чтобы сообщения об ошибках нигде не про-
являлись, направьте их на /dev/null.
   Если вы хотите направить ошибки туда же, куда вывод, надо
набрать
   Shell:  $ cat  somefile 1> outfile 2> &1 (ссылка на пере-
направление)
   Cshell: $ cat somefile >& outfile
или $ cat somefile |& lpr.

5.9. Обработка команд в режиме заднего плана (background)

В начало страницы

   Обычно команды   выполняются  в  режиме  переднего  плана
(foreground),  т.е.  "пока вы ждете".  Однако, если во время
выполнения  некоторой команды вы хотите выполнять другие ко-
манды,  то эту (первую) команду  можно  выполнить  в  режиме
background:

   $ nroff  doc &
   2042
   $.
   
Об этом говорит завершающий знак &.

   Система UNIX создает процесс, который выполняется незави-
симо от командного интерпретатора.  Ответ 2042 - это иденти-
фикатор этого процесса (PID).

В начало страницы

Лучше перенаправлять стандартный вывод процесса заднего плана в файл (из-за опасности совмещения вывода "переднего" и "заднего" плана на экране). $ nroff doc > doc.format & 2042 $ или: $ nroff doc | lpr & 2042 $ Чтобы выяснить состояние процесса заднего плана, надо ис- пользовать команду ps (process status): $ ps PID TTY TIME CMD 2036 02 0:05 sh (login - процесс терм.2) 2042 02 0:02 nroff doc (background) 2043 02 0:01 ps (cat pS) 2050 08 0:03 sh (login - процесс терм.8). Это показывает, что nroff еще не закончилась. Ключи l и a в команде ps могут дать больше информации об активных про- цессах: -l - информация о родителе, адрес, приоритет и т.д. -a - о всех процессах системы.

5.10. Выполнение процессов с низким приоритетом

В начало страницы


   1) $ nice nroff doc > doc.fmt &
   2099
   $
   
   Задается выполнение  процесса с меньшим приоритетом.  На-
чальное значение nice равно  20;  параметр  добавления
в команде nice по умолчанию
равен 10;  итого nice = 30.  Приоритет тем выше,  чем меньше
nice.

   Или:
   $ nice -5 nroff doc > doc.fmt &
   
   Здесь параметр добавления задан явно,  nice  будет  равен
25, то есть приоритет будет на 5 единиц выше, чем по умолча-
нию.
   2) nohup (no hang up) - нечувствительность к разъединению
телефонной линии, на которой "висит" standard output)
   $ nohup nroff doc &
   2176
   $ Sending output to nohup.out (замена standard output
при разрыве линии)
   3) совместное использование:
   $ nice nohup nroff doc > doc.fmt &

5.11. Останов процесса

В начало страницы


   $ kill 2042            (убить процесс с PID = 2042)
или
   $ kill - 9 2042 (сигнал номер 9 безусловного останова; на
другие сигналы из интервала (1,15),  посылаемые системой за-
даче, можно блокировать, написав соответствующую реакцию).


<<< Оглавление Страницы: 5  6 >>>