Начиная работу с сервером Linux, пользователи часто сталкиваются с проблемой поиска необходимых файлов.
Данное руководство рассматривает использование соответствующей команды find, которая позволяет искать файлы при помощи различных фильтров и параметров. Кроме того, это руководство вкратце охватывает команду locate, которую можно быть использовать для поиска команд.
Поиск по имени файла
Конечно, поиск файла по имени – самый очевидный способ найти нужный файл.
Для этого используйте:
find -name «query»
Данная команда чувствительна к регистру (то есть, она воспринимает файлы с именем file и File как два разных файла).
Чтобы найти файл по имени без учета регистра, наберите:
find -iname «query»
Чтобы найти файлы, которые не совпадают с определенным шаблоном, нужно инвертировать поиск при помощи флагов -not или метасимвола «!». Обратите внимание, при использовании «!» нужно избегать символов, чтобы оболочка bash не интерпретировала «!» еще до выполнения команды find.
4 СПОСОБА УСТАНОВИТЬ ПРОГРАММУ В LINUX
find -not -name «query_to_avoid»
find ! -name «query_to_avoid»
Поиск по типу файла
При помощи параметра «-type» можно указать тип необходимого файла. Это работает так:
find -type type_descriptor query
Вот список общих дескрипторов, при помощи которых можно указать тип файла:
- f: обычный файл;
- d: каталог;
- l: символическая ссылка;
- c: символьные устройства;
- b: блочные устройства.
К примеру, чтобы найти в системе все символьные устройства, нужно выполнить команду:
find / -type c
/dev/parport0
/dev/snd/seq
/dev/snd/timer
/dev/autofs
/dev/cpu/microcode
/dev/vcsa7
/dev/vcs7
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5
/dev/vcsa4
. . .
Чтобы найти все файлы, которые заканчиваются на .conf, используйте:
find / -type f -name «*.conf»
/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf
/usr/share/base-files/nsswitch.conf
/usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf
/usr/share/rsyslog/50-default.conf
/usr/share/adduser/adduser.conf
/usr/share/davfs2/davfs2.conf
/usr/share/debconf/debconf.conf
/usr/share/doc/apt-utils/examples/apt-ftparchive.conf
. . .
Фильтрация по времени и размеру
Команда find позволяет фильтровать полученный результат, руководствуясь размером и временем последнего изменения.
Размер файла
Чтобы отфильтровать файлы по размеру, используйте параметр -size.
Также нужно внести суффикс в конце значения, чтобы указать размер:
Чтобы найти файлы размером ровно в 50 байт, наберите:
Чтобы найти файлы, размер которых меньше 50 байт, используйте символ «-» перед значением:
Соответственно, чтобы найти файлы, размер которых превышает 700 мегабайт, используйте перед значением символ +; команда имеет такой вид:
Командная строка Linux для новичков
find / -size +700M
Поиск в зависимости от времени
Linux хранит данные о access time, modification time и change time.
- access time: время последнего обращения к файлу (когда файл был прочитан или дописан);
- modification time: время последнего изменения содержимого файла;
- change time: время последнего изменения инода (inode) файла.
Для фильтрации файлов по времени используйте параметры «-atime», «-mtime» и «-ctime» соответственно.
Значение данного параметра указывает, сколько дней назад был изменен файл. Как и в случае с размером файла, можно использовать символы – и +, чтобы получить файлы, измененные меньше чем или больше чем n дней назад.
То есть, чтобы найти файл, содержимое которого было изменено 1 день назад, используйте:
Чтобы вывести файлы, к которым обращались меньше 1 дня назад, используйте:
Чтобы найти файлы, иноды которых были изменены более трех дней назад, введите:
Существуют также сопутствующие параметры, с помощью которых можно указать минуты вместо дней:
Кроме того, команда find может сравнивать файлы и выводить более новые из них:
find / -newer myfile
Поиск по владельцу и привилегиям
С помощью команды find файлы можно искать по владельцу или правам на файл.
Для того используются параметры –user, –group, и -perm соответственно. Например, чтобы найти файл, принадлежащий пользователю с именем syslog, наберите:
find / -user syslog
Аналогично, чтобы вывести файлы, принадлежащие группе shadow, используйте:
find / -group shadow
Также можно искать файлы с особыми привилегиями.
Чтобы найти файл с определенными правами, используйте:
Данная строка выведет все файлы с такими правами.
Чтобы вывести все файлы, привилегии которых больше или равны указанным, используйте синтаксис:
Это вернет все файлы с дополнительными привилегиями (например, файл с привилегиями 744).
Фильтрация файлов по глубине
Чтобы выполнить примеры данного раздела, создайте во временном каталоге структуру каталогов. Она должна состоять из трех уровней каталогов, с десятью каталогами на первом уровне. Каждый каталог (в том числе тестовый каталог) должен содержать десять файлов и десять подкаталогов.
Чтобы создать такую структуру, выполните следующую команду:
Чтобы ознакомиться с только что созданной структурой и проверить, все ли создано правильно, используйте команды ls и cd. Затем вернитесь в тестовый каталог test:
Как выполнить поиск файлов и папок в Linux
В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.
Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.
Поиск файла по имени при помощи утилиты locate
Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate — за счет заранее подготовленной базы она быстро выдаст нужный результат:
Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:
# apt-get install mlocate
Пользователям RedHat, CentOS и Fedora стоит выполнить
# yum install mlocate
После установки нужно создать/обновить базу данных — файл, содержащий в себе «снимок» файловой системы, благодаря которому locate работает так быстро:
Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции «вешается» на CRON и выполняется автоматически — вы можете в этом убедиться, посмотрев на файлы заданий CRON.
Поиск в Linux при помощи утилиты find
Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:
find [path. ] [expression]
Поиск файла по имени
Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:
# find / -name myfilename
Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:
# find / -name «*part_of_name*»
«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:
Поиск файла по дате
Вот пример того, как можно выполнить поиск в Linux файла по дате:
# find /home -mtime -5
Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.
Поиск файла по размеру
А так, например, можно выполнит поиск файлов по размеру:
# find /home -size +1G
Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux
Поиск папки
На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните
# find / -type d -name «*mysql*»
Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:
- b — блочное устройство
- c — символьное устройство
- d — папка (дирректория)
- p — именнованный канал
- f — обычный файл
- l — символическая ссылка
- s — сокет
- D — дверь (только для Solaris)
Подробнее о различных параметрах поиска find вы можете почитать, введя команду
Поиск текста в Linux при помощи утилиты grep
Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php. ) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.
Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести
# grep -lri root /etc/*
Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt». Вы поняли
Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите
# grep -lri ^root /etc/*
Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии
Источник: www.hippolab.ru