Введение в UNIX
Дегтярев Е.К.
Оглавление
5. Команды и стандартные файлы
В начало страницы
Многие команды работают по умолчанию со стандартными
файлами:
- Standard Input (S.I.);
- Standard Output (S.O.);
- Diagnostic Output (D.O.);
Однако есть средства изменения умолчания, т.е. возмож-
ность указать другие файлы вместо стандартных. Можно
также в качестве D.O. использовать S.O. Эти средства называ-
ются перенаправление (редирекция) ввода и вывода.
Используется знак >:
$ ls -l - вывод на экран = standard output;
$ ls -l > dirconts - вывод в файл dirconts;
$ cat dirconts - вывод на экран.
Пробелы вокруг символа > необязательны.
Возможна перенаправление вывода с добавлением (с дописы-
ванием в файл): обозначается >>:
$ pwd >> dirconts (добавить в файл имя текущего каталога).
В начало страницы
Используется знак <.
Пример:
$ mail - ввод сообщения с экрана;
$ mail < message - ввод сообщения из файла message.
Эта возможность используется реже, чем перенаправление вывода.
Тривиальный случай перенаправления ввода:
$ cat < this_file
$ cat this_file
Это две эквивалентные команды.
Можно одновременно перенаправить и ввод, и вывод.
Например:
$ cat < left > right.
Будьте осторожны: надо, чтобы left не равнялось right,
иначе можно (вообще говоря) потерять входной файл.
Безопаснее >>, чем > (добавление, чем запись).
В начало страницы
Если не задан входной файл, то будет предполагаться стан-
дартный ввод (клавиатура). Одновременно перенаправим вывод в
новый (создаваемый) файл
$cat > newfile.
Здесь стандартный ввод буферизован: накопление 512 (обыч-
но) знаков и потом ввод.
Небуферизованный (лучше, на случай сбоев) ввод:
с ключом -u (unbuffered):
$ cat -u > people
Mary 101
Sally 113
Jana 121
^d [для конца текста(EOF)]
$
Можно добавлять:
$ cat -u >> people
Charlie 122
Bill 100
^d
$
В начало страницы
Стандартный вывод одной команды может быть стандартным
вводом следующей команды. Обозначается знаком | (вертикаль-
ная черта).
Пример:
$ who | wc -l - создание списка активных пользователей и
подсчет их числа (count); 19 - ответ, то есть 19 пользовате-
лей.
$
Пример:
$ ls -l /tmp | grep maryann | sort +3nr | lpr
листинг поиск записей, сортировка печать
каталога содержащих (по 4-му по- упорядо-
/tmp строку "maryann" лю) найденных ченного
записей списка
В начало страницы
Так называются команды, которые могут вводить со стан-
дартного ввода и выводить на стандартный вывод. Большинство
команд является фильтрами.
Есть исключения: ls не может работать со стандартным вво-
дом. Или: lpr не может работать со стандартным выводом.
-------------------
--->|cтандартный вывод|
--------- --------- | -------------------
Схема такова: | вывод |->|команда|-->|
| | | tee | | ------
--------- --------- ---------->|файл|
------
Пример:
$ ls -l | tee dirconts
на экран, то есть дублирование
стандартный вывод вывода в файл
В начало страницы
Сообщения об ошибках, возникающих при выполнении команд,
выводятся на диагностический вывод, по умолчанию это (как и
стандартный вывод) - на экран.
Диагностический вывод тоже может быть перенаправлен в лю-
бой файл. Для этого используется дескриптор файла (целое),
который для стандартных файлов равен:
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.
В начало страницы
Обычно команды выполняются в режиме переднего плана
(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 - о всех процессах системы.
В начало страницы
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 &
В начало страницы
$ kill 2042 (убить процесс с PID = 2042)
или
$ kill - 9 2042 (сигнал номер 9 безусловного останова; на
другие сигналы из интервала (1,15), посылаемые системой за-
даче, можно блокировать, написав соответствующую реакцию).
|