Основы программирования в Linux - Страница 31
Прежде чем вы увидите, как применять на практике полученные навыки программирования в командной оболочке, давайте рассмотрим еще две очень полезные команды, которые, хотя и не являются часть оболочки, очень пригодятся при написании ее программ. Попутно мы также познакомимся с регулярными выражениями, средством поиска по шаблону, которое обнаруживает себя в разных частях ОС Linux и тесно связанных с нею программах.
Первой рассмотрим команду
findПрежде чем углубиться в изучение опций, критериев и аргументов команды, рассмотрим очень простой пример поиска на вашей машине файла
test# find / -name test -print/usr/bin/test#В зависимости от варианта установки системы на вашей машине вы можете найти и другие файлы, также названные test. Как вы, вероятно, догадываетесь, команда звучит так: "искать, начиная с каталога /, файл с именем test и затем вывести на экран имя файла". Легко, не правда ли? Безусловно.
Выполнение команды займет какое-то время, она будет искать на нашей машине и на сетевом диске машины с ОС Windows. Это происходит потому, что на компьютере с Linux смонтирована (с помощью пакета SAMBA) порция файловой системы машины с ОС Windows. Похоже, что подобный поиск будет вестись, даже если мы знаем, что искомый файл находится на машине под управлением ОС Linux.
В этом случае на помощь приходит первая опция. Если вы укажете опцию
-mount# find / -mount -name test -print/usr/bin/test# Мы нашли все тот же файл на нашей машине, но на сей раз гораздо быстрее и без поиска в смонтированных файловых системах.
Полная синтаксическая запись команды
findfind [путь] [опции] [критерии] [действия]Часть записи
[путь]/bin..find /var /homeВ табл. 2.10 перечислены основные опции команды.
Таблица 2.10
| Опция | Описание |
|---|---|
-depth | Поиск в подкаталогах перед поиском в самом каталоге |
-follow | Следовать по символическим ссылкам |
-maxdepths N | При поиске проверять не более N |
-mount-xdev | Не искать в каталогах других файловых систем |
Теперь о критериях. В команде
findtruefalsefindfalsefindtruefindТаблица 2.11
| Критерий | Описание |
|---|---|
-atime N | К файлу обращались последний раз N |
-mtime N | Файл последний раз изменялся N |
-name шаблон | Имя файла без указания пути соответствует заданному шаблону. Для гарантии того, что шаблон будет передан в команду find |
-newer другой файл | Текущий файл, измененный позже, чем другой файл |
-type С | Файл типа CCdf |
-user имя пользователя | Файл принадлежит пользователю с заданным именем |
Вы также можете объединять критерии с помощью операторов. Как показано в табл. 2.12, у большинства из них две формы записи: короткая и более длинная форма.
Таблица 2.12
| Оператор, короткая форма | Оператор, длинная форма | Описание |
|---|---|---|
! | -not | Инвертирование критерия |
-а | -and | Оба критерия должны быть истинны |
-о | -or | Один из критериев должен быть истинным |