|
Previous | Содержание | Next ВВЕДЕНИЕ В UNIX5. КОМАНДЫ И СТАНДАРТНЫЕ ФАЙЛЫ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), посылаемые системой за- даче, можно блокировать, написав соответствующую реакцию). Previous | Содержание | Next |
|||||||||||||||||
With any suggestions or questions please feel free to contact us |