Разделы:

Главная

О проекте

Загрузки

Документация:

Linux

BSD

Другие Unix

Программинг

HTML, XML...

Сервера

"Окна Закрой!"

MANы

 



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), посылаемые системой за- даче, можно блокировать, написав соответствующую реакцию).

далее     содержание


Партнёры и спонсоры проекта:

Все материалы сайта распространяются по лицензии GNU/GPL
© ProUNIX 2003-2009, UnixLib 2005-2009, SoftLib 2006-2009.