Литмир - Электронная Библиотека
Содержание  
A
A
Еще две полезные команды и регулярные выражения

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

Команда find

Первой рассмотрим команду

find
. Эта команда, применяющаяся для поиска файлов, чрезвычайно полезна, но новички в ОС Linux часто находят ее немного сложной в использовании в немалой степени из-за ее опций, критериев и аргументов, определяющих действия (action-type), причем результат одного из этих аргументов может влиять на обработку последующих аргументов.

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

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

# <b>find / -name test -print</b>

/usr/bin/test

#

В зависимости от варианта установки системы на вашей машине вы можете найти и другие файлы, также названные test. Как вы, вероятно, догадываетесь, команда звучит так: "искать, начиная с каталога /, файл с именем test и затем вывести на экран имя файла". Легко, не правда ли? Безусловно.

Выполнение команды займет какое-то время, она будет искать на нашей машине и на сетевом диске машины с ОС Windows. Это происходит потому, что на компьютере с Linux смонтирована (с помощью пакета SAMBA) порция файловой системы машины с ОС Windows. Похоже, что подобный поиск будет вестись, даже если мы знаем, что искомый файл находится на машине под управлением ОС Linux.

В этом случае на помощь приходит первая опция. Если вы укажете опцию

-mount
, то сможете сообщить команде find о том, что смонтированные каталоги проверять не нужно.

# <b>find / -mount -name test -print</b>

/usr/bin/test

#

Мы нашли все тот же файл на нашей машине, но на сей раз гораздо быстрее и без поиска в смонтированных файловых системах.

Полная синтаксическая запись команды

find
выглядит следующим образом:

<b>find</b> [<i>путь</i>] [<i>опции</i>] [<i>критерии</i>] [<i>действия</i>]

Часть записи

[<i>путь</i>]
понятна и проста: вы можете указать абсолютный путь поиска, например,
/bin
, или относительный, например
..
При необходимости можно задать несколько путей — например,
find /var /home
.

В табл. 2.10 перечислены основные опции команды.

Таблица 2.10

Опция Описание
-depth
Поиск в подкаталогах перед поиском в самом каталоге
-follow
Следовать по символическим ссылкам
-maxdepths <i>N</i>
При поиске проверять не более
N
вложенных уровней каталога
-mount
(или
-xdev
)
Не искать в каталогах других файловых систем

Теперь о критериях. В команде

find
можно задать большое число критериев, и каждый из них возвращает либо
true
, либо
false
. В процессе работы команда
find
рассматривает по очереди каждый файл и применяет к нему все критерий в порядке их определения. Если очередной критерий возвращает значение
false
, команда
find
прекращает анализ текущего файла и переходит к следующему; если критерий возвращает значение
true
, команда применяет следующий критерий к текущему файлу или совершает заданное действие над ним. В табл. 2.11 перечислены самые распространенные критерии; полный список тестов, которые можно применять в команде
find
, вы найдете на страницах интерактивного справочного руководства.

Таблица 2.11

Критерий Описание
-atime <i>N</i>
К файлу обращались последний раз
<i>N</i>
дней назад
-mtime <i>N</i>
Файл последний раз изменялся
<i>N</i>
дней назад
-name<i> шаблон</i>
Имя файла без указания пути соответствует заданному шаблону. Для гарантии того, что шаблон будет передан в команду
find
и не будет немедленно обработан командной оболочкой, его следует всегда заключать в кавычки
-newer <i>другой файл</i>
Текущий файл, измененный позже, чем другой файл
-type <i>С</i>
Файл типа
<i>C</i>
, где
<i>C</i>
может принимать определенные значения; наиболее широко используемые "
d
" для каталогов и "
f
" для обычных файлов. Остальные обозначения типов можно посмотреть на страницах интерактивного справочного руководства
-user <i>имя пользователя</i>
Файл принадлежит пользователю с заданным именем

Вы также можете объединять критерии с помощью операторов. Как показано в табл. 2.12, у большинства из них две формы записи: короткая и более длинная форма.

Таблица 2.12

Оператор, короткая форма Оператор, длинная форма Описание
!
-not
Инвертирование критерия
-and
Оба критерия должны быть истинны
-or
Один из критериев должен быть истинным
31
{"b":"285844","o":1}