Литмир - Электронная Библиотека

Если система не поддерживает команду 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 <CTRL‑D>

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

$ 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:

$ ls conf??.log .

confl2.log conf.2.log

conf25.log

Вот как можно найти файлы, имена которых состоят не менее чем из четырех символов, причем первым является символ 'f', а последним — 's':

$ ls f??*s

ftpaccess ftphosts ftpconversions ftpusers ftpgroups

4.3. Применение метасимволов […] и [!…]

Метасимволы [… ] соответствуют любому символу из числа тех, что указаны в квадратных скобках. Представленная ниже команда выводит список файлов, имена которых начинаются с символа 'i' или 'o':

$ ls [io]*

inetd.conf ioctl.save outputrc

info‑dir inputrc

initrunlvl issue

inittab issue.net

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

$ ls log.[0-9]*

log.0323 log.0325 log.0324 log.0326

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

в квадратных скобках. Если в предыдущем примере на первом месте в скобках поставить восклицательный знак, команда будет искать файлы с именами log, в расширении которых первый символ не является цифрой: '

$ ls log.[!0-9]*

log.sybase

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

$ ls LPS??[!0-9]*

LPSILP LPSOSI LPSOPS LPSPOPQTR

Поиск файлов, имена которых начинаются с символа верхнего регистра, производится посредством такой команды:

$ ls [A‑Z]*

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

$ 1а [а–z]*

А эта команда находит файлы, в начале имени которых стоит цифра:

$ ls [0-9]*

Вот как можно найти все скрытые файлы (такие как .profile, .rhosts, .history и т. д.):

$ ls .*

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

Метасимволы представляют собой универсальный инструмент поиска строк по шаблону. С их помощью легко находить нужные файлы и каталоги. Далее мы более подробно рассмотрим способы применения метасимволов в составе регулярных выражений.

ГЛАВА 5

Ввод и вывод данных в интерпретаторе shell

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

В этой главе рассматриваются следующие темы:

   • работа со стандартными потоками ввода, вывода и ошибок;

   • переадресация ввода и вывода.

5.1. Команда echo

Команда echo отображает на экране указанную строку текста. Общий ее формат таков:

echo строка

В строке могут встречаться различные управляющие символы, ниже перечислены основные из них: \c запрет отображения концевого символа новой строки \f прогон страницы \n новая строка \t горизонтальная табуляция

Например, если указать управляющий символ \с, то по завершении вывода не будет осуществлен переход в новую строку:

$ echo "Как вас зовут?\t\c"

Как вас зовут? $

Здесь $ -cимвол приглашения.

По умолчанию подразумевается, что в конце строки находится символ новой строки:

15
{"b":"273485","o":1}