Рейтинговые книги
Читем онлайн Командная строка Linux. Полное руководство - Уильям Шоттс

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 39 40 41 42 43 44 45 46 47 ... 93

/usr/bin/zip

/usr/bin/zipcloak

/usr/bin/zipgrep

/usr/bin/zipinfo

/usr/bin/zipnote

/usr/bin/zipsplit

Если к результатам поиска предъявляются более строгие требования, команду locate можно объединить с другими инструментами, такими как grep, позволяющими осуществить более сложный поиск:

[[email protected] ~]$ locate zip | grep bin

/bin/bunzip2

/bin/bzip2

/bin/bzip2recover

/bin/gunzip

/bin/gzip

/usr/bin/funzip

/usr/bin/gpg-zip

/usr/bin/preunzip

/usr/bin/prezip

/usr/bin/prezip-bin

/usr/bin/unzip

/usr/bin/unzipsfx

/usr/bin/zip

/usr/bin/zipcloak

/usr/bin/zipgrep

/usr/bin/zipinfo

/usr/bin/zipnote

/usr/bin/zipsplit

Программа locate существует уже много лет, и за эти годы было создано несколько ее вариантов, получивших широкое распространение. Два из них, наиболее часто используемые в современных дистрибутивах Linux, — это slocate и mlocate, которые, впрочем, являются символическими ссылками, указывающими на locate. Разные версии locate имеют пересекающиеся множества параметров. Некоторые поддерживают поиск с использованием регулярных выражений (о которых рассказывается в главе 19) и групповые символы. Загляните на страницу справочного руководства (man) для locate, чтобы определить, какая версия установлена у вас.

откуда берется база данных для locate?

В некоторых дистрибутивах при попытке запустить locate сразу после установки она потерпит неудачу, но если попытаться использовать ее на следующий день, все, как ни странно будет работать как надо. Так в чем же проблема? База данных для locate создается другой программой с именем updatedb. Обычно она периодически запускается как задание cron; то есть она запускается системным планировщиком cron через регулярные интервалы времени. В большинстве систем, в состав которых входит locate, программа updatedb запускается один раз в сутки. Поскольку база данных не обновляется непрерывно, скорее всего, locate не находит самые свежие файлы. Чтобы решить эту проблему, запустите программу updatedb вручную от имени суперпользователя.

find — сложный способ поиска файлов

В отличие от программы locate, выполняющей поиск файлов по именам, программа find ищет файлы согласно заданным атрибутам в указанном каталоге (и во вложенных подкаталогах). Далее мы потратим время на исследование команды find, потому что она имеет множество интересных особенностей, с которыми мы неоднократно столкнемся, когда начнем знакомиться с приемами программирования в последующих главах.

В простейшем случае программе find можно передать одно или несколько имен каталогов для поиска. Например, с ее помощью можно получить список содержимого домашнего каталога:

[[email protected] ~]$ find ~

Для большинства активных пользователей она выдаст длинный список. Так как список выводится в стандартный вывод, его можно передать по конвейеру другим программам. Воспользуемся программой wc, чтобы подсчитать число файлов:

[[email protected] ~]$ find ~ | wc -l

47068

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

Проверки

Допустим, мы хотим получить список каталогов. Для этого добавим в команду следующую проверку:

[[email protected] ~]$ find ~ -type d | wc -l

1695

Добавив проверку -type d, мы ограничились поиском только каталогов. Но точно так же можно ограничить поиск только обычными файлами:

[[email protected] ~]$ find ~ -type f | wc -l

38737

В табл. 17.1 перечислены проверки типов файлов, наиболее часто используемых с командой find.

Таблица 17.1. Проверки типов файлов в find

Тип файлов

Описание

b

Специальный файл блочного устройства

c

Специальный файл символьного устройства

d

Каталог

f

Обычный файл

l

Символическая ссылка

Добавив дополнительные проверки, можно выполнять поиск файлов по размеру и имени. Давайте найдем все обычные файлы с именами, соответствующими шаблону *.JPG, и имеющие размер больше 1 мегабайта:

[[email protected] ~]$ find ~ -type f -name "*.JPG" -size +1M | wc -l

840

В этом примере мы добавили проверку -name с шаблоном имени файла. Обратите внимание, что шаблон заключен в кавычки, чтобы предотвратить подстановку имен файлов командной оболочкой. Далее мы добавили проверку -size со строкой +1M. Начальный символ «плюс» указывает, что требуется искать файлы, размер которых превышает указанное число. Начальный символ «минус» изменил бы значение строки на противоположное: «меньше указанного числа». Число без знака означает: «в точности соответствует значению». Буква M в конце определяет единицы измерения – мегабайты (Megabytes). В табл. 17.2 перечислены символы, которые можно использовать для обозначения единиц измерения.

Команда find поддерживает множество разнообразных проверок. В табл. 17.3 приводится краткое описание наиболее часто используемых из них. Обратите внимание, что в случаях, когда требуется числовой аргумент, допустимо использование формы записи с символами + и -, обсуждавшейся выше.

Таблица 17.2. Единицы измерения, поддерживаемые командой find

Символ

Единица измерения

b

Блоки размером по 512 байт (используется по умолчанию, если иное не указано явно)

c

Байты

w

2-байтные слова

k

Килобайты (Kilobytes, блоки по 1024 байт)

M

Мегабайты (Megabytes, блоки по 1 048 576 байт)

G

Гигабайты (Gigabytes, блоки по 1 073 741 824 байт)

Таблица 17.3. Проверки, поддерживаемые командой find

Проверка

Описание

-cmin n

Соответствует файлам или каталогам, содержимое или атрибуты которых последний раз изменялись точно n минут назад. Чтобы выразить условие «менее n минут назад», используйте -n; чтобы выразить условие «более n минут назад», используйте +n

-cnewer имя

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

-ctime n

Соответствует файлам или каталогам, содержимое или атрибуты (то есть разрешения) которых последний раз изменялись более чем n*24 часа назад

-empty

Соответствует пустым файлам и каталогам

-group группа

Соответствует файлам или каталогам, принадлежащим указанной группе. Группа может задаваться именем или числовым идентификатором группы

-iname шаблон

Действует так же, как проверка -name, но различает регистр символов

-inum n

Соответствует файлам с номером индексного узла (inode) n. Эту проверку удобно использовать для поиска всех жестких ссылок на определенный индексный узел

-mmin n

Соответствует файлам или каталогам, содержимое которых последний раз изменялось n минут назад

-mtime n

Соответствует файлам или каталогам, содержимое которых последний раз изменялось n*24 часов назад

-name шаблон

Соответствует файлам и каталогам, имена которых совпадают с указанным шаблоном

-newer имя

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

-nouser

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

-nogroup

Соответствует файлам и каталогам, не принадлежащим какой-либо допустимой группе

-perm режим

Соответствует файлам или каталогам с указанным режимом доступа. Режим может выражаться восьмеричным числом или иметь символическую форму

-samefile имя

Действует так же, как проверка -inum. Соответствует файлам с тем же номером индексного узла (inode), что и файл с указанным именем

-size n

Соответствует файлам с размером n

-type c

Соответствует файлам с типом c

-user имя

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

Это не полный список. Дополнительные детали ищите на странице справочного руководства (man) для команды find.

1 ... 39 40 41 42 43 44 45 46 47 ... 93
На этой странице вы можете бесплатно читать книгу Командная строка Linux. Полное руководство - Уильям Шоттс бесплатно.
Похожие на Командная строка Linux. Полное руководство - Уильям Шоттс книги

Оставить комментарий