Linux и UNIX: программирование в shell. Руководство разработчика. - страница 18

стр.

Теперь выйдите из интерпретатора shell, выполнив команду logout, снова зарегистрируйтесь и введите следующую команду:

>$ ps x | grep psl

>30004 ? RN 4:01 sh ./psl

>30006 pts/1 S 0:00 grep psl

Опция x предназначена для вывода списка заданий, не связанных с терминалом (обратите внимание на знак вопроса во втором столбце). В третьем столбце указан статус задания. Статус R означает, что процесс выполняется, статус N — это признак снижения

приоритета у выполняемого процесса. В четвертом столбце приведено суммарное время использования процессора. Как видите, сценарий продолжает свою работу.

Если система не поддерживает команду ps x, воспользуйтесь опцией -e, которая предназначена для получения списка всех системных процессов:

>$ ps -e | grep psl

>30004 ? 00:04:01 sh ./psl

3.4.2. Одновременный запуск нескольких заданий

Если необходимо одновременно выполнить несколько команд, можно объединить их в файле сценария, а затем запустить его с помощью команды nohup. Предположим, имеется следующая цепочка команд:

>cat /home/acccmnts/qtr_04 99 | /apps/bm/trials.awk | sort | lp

Поместим ее в файл:

>$ cat > quarterend

>cat /home/accounts/qtr_0499 | /apps/bin/trials.awk | sort | lp

Сделаем файл исполняемым:

>$ chmod 744 quarterend

Теперь запустим этот файл в фоновом режиме посредством команды nohup, направив результаты работы сценария в файл qtr.out.

>$ nohup ./quarterend > qtr.out 2>&l &

>[5] 182

Обратите внимание на то, что при вызове файла quarterend указано путевое имя '. /.' Тем самым интерпретатору shell дается указание искать данную команду в текущем каталоге.

3.5. Заключение

Мы рассмотрели различные способы выполнения заданий в фоновом режиме. Необходимость в этом может возникнуть при пакетном обновлении больших файлов или выполнении сложной операции поиска. Подобную работу лучше не делать в часы пиковой загрузки системы.

Можно создать сценарии, которые автоматически модифицируют журнальные файлы. Вам останется лишь просматривать эти файлы по мере необходимости. Таким образом, программа cron и другие представленные в этой главе команды позволяют существенно упростить администрирование системы.

ГЛАВА 4

Подстановка имен файлов

При работе в режиме командной строки довольно много времени уходит на поиск необходимых файлов. Интерпретатор shell предлагает набор метасимволов, позволяющих находить файлы, имена которых соответствуют предложенному шаблону.

Вот список основных метасимволов:

* Соответствует произвольной строке, содержащей ноль и более символов

? Соответствует любому символу

[…] Соответствует любому символу из числа заключенных в скобки

[!…] Соответствует любому символу за исключением тех, которые указаны в скобках

Когда интерпретатор shell встречает указанные символы в командной строке, он обрабатывает их особым образом, если только вы не защитили их с помощью кавычек, о чем говорится в главе 15.

4.1. Применение метасимвола '*'

Символ звездочки может служить заменой любой части имени файла. Следующая команда выводит список всех файлов, имена которых начинаются со строки "app":

>$ ls app*

>appdva app_tapes

>appdva_SLA

Вот как можно получить список файлов, имеющих расширение doc:

>$ ls *.doc

>accounts.doc qtr_end.doc

Представленная ниже команда находит файлы, у которых имя начинается со строки "cl", а расширение равно sed:

$ ls cl*.sed

>cleanlogs.sed cleanmeup.sed

>cleanmessages.sed

Звездочку удобно применять, когда, например, не хочется вводить полное имя каталога при переходе в него:

>$ cd /etc

>$ ls -l | grep ^d

>drwxr‑xr‑x 2 root root 1024 Jan 26 14:41 cron.daily

>drwxr‑xr‑x 2 root root 1024 Jan 27 1998 cron.hourly

>drwxr‑xr‑x 2 root root 1024 Jan 27 1998 cron.monthly

>drwxr‑xr‑x 2 root root 1024 Jan 26 14:37 cron.weekly

>$ cd cron.w* S pwd

>/etc/cron.weekly

4.2. Применение метасимвола '?'

Знак вопроса служит для замены любого отдельного символа. Следующая команда выводит список файлов, имена которых содержат не менее трех символов, причем третьим является символ 'R':

>$ ls ??R*

>BAREAD

Следующая команда ищет файлы с именами, начинающимися со строки "conf", за которой следуют два произвольных символа и расширение log: