Поиск в linux с помощью команды find
Содержание:
- 1.2 Общие параметры и примеры команды find
- Search by the Time Parameter
- Сравнение файлов diff
- Примеры использования команды find
- Найти файлы по размеру
- Options and Optimization for find
- 1.1, общая форма команды find
- Просматриваем начало или конец файла в Linux
- Поиск без учета регистра
- GUI
- Поиск файлов через терминал. Команда locate
- Примеры использования find
- Команда find в Linux
- How to Find and Process a File in Linux
- Примеры использования
- Найти по названию
- 2.1, общие параметры и примеры команды grep
- Примеры использования
- Options and Optimization for Find Command for Linux
- Linux поиск по содержимому файлов командой grep
- Find Files/Folders by Permissions
- Linux поиск по содержимому файлов командой find
1.2 Общие параметры и примеры команды find
-perm: Найти файлы в соответствии с правами доступа.
-prune: Используйте эту опцию, чтобы команда поиска не выполняла поиск в указанном каталоге. Если вы также используете опцию -depth, то команда -prune будет игнорироваться командой поиска.
-user: Найти файл в соответствии с владельцем файла.
-group: Найти файлы в соответствии с группой, к которой они принадлежат.
-mtime -n +n: Найти файл в соответствии со временем изменения файла, -n означает, что время изменения файла находится в течение n дней, + n означает, что время изменения файла составляет n дней назад.
-nogroupНайти файл без допустимой группы, то есть группа, к которой принадлежит файл, не существует в / etc / groups.
-nouser: Найти файл без действительного владельца, то есть владелец файла не существует в / etc / passwd.
- -newer file1 ! file2: Найти файлы, время изменения которых новее, чем file1, но старше, чем file2.
- -typeНайдите файл определенного типа, например:
-size n: Найдите файл, длина файла которого составляет n блоков, с c означает, что длина файла в байтах.
-depth: При поиске файла сначала найдите файл в текущем каталоге, а затем выполните поиск в его подкаталогах.
-mount: Не пересекать точки монтирования файловой системы при поиске файлов.
-follow: если команда find встречает файл символьной ссылки, она будет следовать за файлом, на который указывает ссылка.
Search by the Time Parameter
14. Search for File Altered Precisely at 90 Days
If a user wants to search for files that were modified exactly before 90 days, then they need to enter the following file command:
16. Modified Files Within a Time Range
In case a user wants to look for a file that was modified in a given time range, for example, more than 30 days and less 90 days, use the following command:
18. Files Changed Exactly Below Given Time
So let’s say if a user wants to see all files whose log is changed exactly below 30 minutes, for example, then type the following command
20. File in a Given Time Range (Hours/Minutes)
The command will allow users to search for files modified in a given range. For example, if one needs to see a file that was modified after 5 minutes and before 25 minutes then enter the following command:
Сравнение файлов diff
Утилита diff linux — это программа, которая работает в консольном режиме. Ее синтаксис очень прост. Вызовите утилиту, передайте нужные файлы, а также задайте опции, если это необходимо:
$ diff опции файл1 файл2
Можно передать больше двух файлов, если это нужно. Перед тем как перейти к примерам, давайте рассмотрим опции утилиты:
- -q — выводить только отличия файлов;
- -s — выводить только совпадающие части;
- -с — выводить нужное количество строк после совпадений;
- -u — выводить только нужное количество строк после отличий;
- -y — выводить в две колонки;
- -e — вывод в формате ed скрипта;
- -n — вывод в формате RCS;
- -a — сравнивать файлы как текстовые, даже если они не текстовые;
- -t — заменить табуляции на пробелы в выводе;
- -l — разделить на страницы и добавить поддержку листания;
- -r — рекурсивное сравнение папок;
- -i — игнорировать регистр;
- -E — игнорировать изменения в табуляциях;
- -Z — не учитывать пробелы в конце строки;
- -b — не учитывать пробелы;
- -B — не учитывать пустые строки.
Это были основные опции утилиты, теперь давайте рассмотрим как сравнить файлы Linux. В выводе утилиты кроме, непосредственно, отображения изменений, выводит строку в которой указывается в какой строчке и что было сделано. Для этого используются такие символы:
- a — добавлена;
- d — удалена;
- c — изменена.
К тому же, линии, которые отличаются, будут обозначаться символом <, а те, которые совпадают — символом >.
Вот содержимое наших тестовых файлов:
Теперь давайте выполним сравнение файлов diff:
В результате мы получим строчку: 2,3c2,4. Она означает, что строки 2 и 3 были изменены. Вы можете использовать опции для игнорирования регистра:
Можно сделать вывод в две колонки:
А с помощью опции -u вы можете создать патч, который потом может быть наложен на такой же файл другим пользователем:
Чтобы обработать несколько файлов в папке удобно использовать опцию -r:
Для удобства, вы можете перенаправить вывод утилиты сразу в файл:
Как видите, все очень просто. Но не очень удобно. Более приятно использовать графические инструменты.
Примеры использования команды find
Команда find – это один из мощнейших инструментов linux-администратора.
Ниже приведена шпаргалка по этой замечательной команде.
Найти файл по имени без учета регистра
начиная с текущего каталога рекурсивно:
find -iname "MyCProgram.c"
в каталоге рекурсивно:
find /var -iname syslog*
ограничить поиск только текущей файловой системой (-xdev должен быть после пути поиска но до аргументов поиска)
find /var -xdev -iname syslog*
Найти файл по Inode и переименовать
Это может понадобиться, если к примеру в имени файла есть спец. символы, и переименовать стандартными методами не получается
~# find /var -iname syslog -exec ls -i1 {} \; 3932232 /var/log/syslog 3932189 /var/log/installer/syslog ~# find /var -inum 3932232 -exec mv {} new-test-file-name \;
файлы и каталоги
find /var/log -empty
только файлы
find /var/log -empty -type f
только каталоги
find /var/log -empty -type d
Поиск файлов на основании размера
найти файлы больше чем
find /var/log -size +100M
найти файлы меньше чем
find /var/log -size -100M
найти файлы точно в размер
find /var/log -size 100M
Ключи -ctime -mtime -atime -amin – cmin – mmin
Access time – время доступаModification time – время изменения содержимого в файлеChange time – время обновления файла. (например если мы поменяли атрибуты доступа, то изменится ctime в то же время mtime не изменится)
Опции и означают дни и минуты
Выполнение операций над найденными файлами
Общий синтаксис:
find <CONDITION_to_Find_files> -exec <OPERATION> \;
Где это команда или скрипт.
Для передачи имени найденного файла используется конструкция из двух скобок
пример:
найти все файлы с именем и вывести их
find /var -name syslog -type f -exec ls -i1 {} \;
*скобки можно применять в рамках только одной команды! *
например вот эта команда сработает без проблем:
find -name "*.txt" cp {} {}.bkup \;
а вот эта команда сработает не верно! Здесь отработают только скобки в команде mv:
find -name "*.txt" -exec mv {} `basename {} .htm`.html \;
Для того, что бы осуществить задачу нужно создать отдельный скрипт и запустить его из , передав в качестве аргумента :
echo "mv "$1" "`basename "$1" .htm`.html"" > mv.sh find -name "*.html" -exec ./mv.sh '{}' \;
Форматированный вывод
find /var -type file -name syslog -prinf '<FORMAT>'
usable ключи форматирования:
\a Alarm bell. \n Newline. \t Horizontal tab. %c File's last status change time in the format returned by the C `ctime' function. %f File's name with any leading directories removed (only the last ele‐ ment). %g File's group name, or numeric group ID if the group has no name. %h Leading directories of file's name (all but the last element). If the file name contains no slashes (since it is in the current direc‐ tory) the %h specifier expands to ".". %i File's inode number (in decimal). %k The amount of disk space used for this file in 1K blocks. Since disk space is allocated in multiples of the filesystem block size this is usually greater than %s1024, but it can also be smaller if the file is a sparse file. %b The amount of disk space used for this file in 512-byte blocks. Since disk space is allocated in multiples of the filesystem block size this is usually greater than %s512, but it can also be smaller if the file is a sparse file. %m File's permission bits (in octal). This option uses the `tradi‐ tional' numbers which most Unix implementations use, but if your par‐ ticular implementation uses an unusual ordering of octal permissions bits, you will see a difference between the actual value of the file's mode and the output of %m. Normally you will want to have a leading zero on this number, and to do this, you should use the # flag (as in, for example, `%#m'). %M File's permissions (in symbolic form, as for ls). This directive is supported in findutils 4.2.5 and later. %p File's name. %P File's name with the name of the command line argument under which it was found removed. %s File's size in bytes %t File's last modification time in the format returned by the C `ctime' function. %u File's user name, or numeric user ID if the user has no name. %U File's numeric user ID %Y File's type (like %y), plus follow symlinks L=loop, N=nonexistent
Можно запускать два поиска в одной команде
Профит в том, что за один проход по файловой системе выполняется несколько поисков.
Например следующая команда рекурсивно проходит по файловой системе один раз, при этом сохраняет список файлов с флагом в файл , а список с большими файлами в
find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \ \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
Enjoy!
Найти файлы по размеру
Чтобы найти файлы по размеру файла, передайте параметр вместе с критериями размера. Вы можете использовать следующие суффиксы, чтобы указать размер файла:
- : блоки по 512 байт (по умолчанию)
- : байты
- : двухбайтовые слова
- : килобайты
- : мегабайты
- : гигабайты
Следующая команда найдет все файлы размером ровно байта внутри каталога :
Команда также позволяет вам искать файлы, которые больше или меньше указанного размера.
В следующем примере мы ищем все файлы менее 1 внутри текущего рабочего каталога
Обратите внимание на минус символ перед значением размера:. Если вы хотите искать файлы размером более 1 , вам нужно использовать символ плюс :
Если вы хотите искать файлы размером более 1 , вам нужно использовать символ плюс :
Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы от до :
Options and Optimization for find
The default configuration for will ignore symbolic links (shortcut files). If you want to follow and return symbolic links, you can add the option to the command, as shown in the example above.
optimizes its filtering strategy to increase performance. Three user-selectable optimization levels are specified as , , and . The optimization is the default and forces to filter based on filename before running all other tests.
Optimization at the level prioritizes file name filters, as in , and then runs all file-type filtering before proceeding with other more resource-intensive conditions. Level optimization allows to perform the most severe optimization and reorders all tests based on their relative expense and the likelihood of their success.
Command | Description |
---|---|
(Default) filter based on file name first. | |
File name first, then file type. | |
Allow to automatically re-order the search based on efficient use of resources and likelihood of success. | |
Search current directory as well as all sub-directories X levels deep. | |
Search without regard for text case. | |
Return only results that do not match the test case. | |
Search for files. | |
Search for directories. |
1.1, общая форма команды find
Общая форма команды find, приведенная в документе man:
на самом делеЭти параметры обычно не используются (по крайней мере, в моей повседневной работе, я не использовал их), общая форма приведенной выше команды поиска может быть упрощена до:
команда | Описание |
---|---|
path | Путь к каталогу, который ищется командой find. Например, используйте. Для представления текущего каталога и / для представления корневого каталога системы. |
expression | Выражение можно разделить на |
-options | Укажите общие параметры команды find, подробно описанные в следующем разделе. |
Команда find выводит сопоставленные файлы на стандартный вывод | |
-exec | Команда find выполняет команду оболочки, заданную этим параметром для соответствующего файла. Соответствующая команда имеет вид,нотас участиемПространство между |
-ok | Он имеет тот же эффект, что и -exec, за исключением того, что команда оболочки, заданная этим параметром, выполняется в более безопасном режиме.Перед выполнением каждой команды будет выдано приглашение, позволяющее пользователю определить, выполнять ли ее. |
пример 1:Удалить файлы с нулевым размером файла
(Вы также можете сделать это: rm -i Или найдите ./ -size 0 | xargs rm -f &)
Пример 2:Чтобы вывести список соответствующих файлов с помощью команды ls -l, вы можете поместить команду ls -l в опцию -exec команды find:
Пример 3:В каталоге / logs найдите файлы, время изменения которых составляет до 5 дней, и удалите их:
Пример 4:Найдите в текущем каталоге все файлы, имена которых заканчиваются на .conf и время изменения которых превышает 5 дней, и удалите их, но перед удалением выведите подсказку.
Некоторые люди также описывают структуру команды find следующим образом:
Просматриваем начало или конец файла в Linux
Порой, нам не нужно выводить содержимое всего файла и мы хотим, к примеру, посмотреть лишь несколько строчек лога. Такое часто бывает, если мы подозреваем, что в начале или в конце конфигурационного файла есть ошибки. Для решения данного вопроса у нас существуют команды head и tail (как вы уже догадались, это голова и хвост).
Команда head по умолчанию показывает лишь 10 первых строчек в текстовом файле в Linux:
head /etc/passwd
Вот, что мы увидим:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false adm:x:3:4:adm:/var/adm:/bin/false lp:x:4:7:lp:/var/spool/lpd:/bin/false sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt news:x:9:13:news:/var/spool/news:/bin/false uucp:x:10:14:uucp:/var/spool/uucp:/bin/false
Кстати, тут мы тоже можем открыть сразу несколько текстовых файлов в Linux одновременно. Вот просмотр сразу двух файлов:
head /etc/passwd /etc/shadow
Если же вас не интересуют все 10 строчек, то, как и в случае с cat, можно использовать опцию –n, цифрой указывая число строк к выводу:
head -n5 /var/log/emerge.log
В итоге мы вывели только пять строк:
1394924012: Started emerge on: Mar 15, 2014 22:53:31 1394924012: *** emerge --sync 1394924012: === sync 1394924012: >>> Synchronization of repository 'gentoo' located in '/usr/portage'... 1394924027: >>> Starting rsync with rsync://212.113.35.39/gentoo-portage
По правде говоря, букву n можно и не использовать, достаточно просто передать цифру:
head -5 /var/log/emerge.log
Кстати, выводить содержимое текстового файла в Linux можно не построчно, а посимвольно. Давайте зададим число символов, которое нужно вывести (используем опцию -с):
head -c45 /var/log/emerge.log
Итак, выводим 45 символов:
1394924012: Started emerge on: Mar 15, 2014 2
Не верите, что их действительно 45? Проверить можно командой wc:
head -c45 /var/log/emerge.log | wc -c 45
С «головой» разобрались, давайте поговорим про «хвост». Очевидно, что команда tail работает наоборот, выводя десять последних строк текстового Linux-файла:
tail /var/log/emerge.log
Количество строк при выводе тоже можно менять. Однако в tail есть такая полезная опция, как -f. С её помощью содержимое текстового файла будет постоянно обновляться, в результате чего вы станете видеть изменения сразу (постоянно открывать и закрывать файл не придётся). Это весьма удобно, если вы хотите просматривать логи Linux в реальном времени:
tail -f /var/log/emerge.log
Поиск без учета регистра
По умолчанию чувствителен к регистру. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные.
Чтобы игнорировать регистр при поиске, вызовите с параметром (или ).
Например, при поиске без какой-либо опции следующая команда не покажет никаких результатов, т.е. есть совпадающие строки:
Но если вы выполните поиск без учета регистра с использованием параметра , он будет соответствовать как заглавным, так и строчным буквам:
Указание «Зебра» будет соответствовать «зебре», «ZEbrA» или любой другой комбинации букв верхнего и нижнего регистра для этой строки.
GUI
Графический интерфейс во многом облегчает жизнь новичкам, которые только установили дистрибутив Linux. Данный метод поиска очень похож на тот, что осуществляется в ОС Windows, хотя и не может дать всех тех преимуществ, что предлагает «Терминал». Но обо всем по порядку. Итак, рассмотрим, как сделать поиск файлов в Linux, используя графический интерфейс системы.
Способ 1: Поиск через меню системы
Сейчас будет рассмотрен способ поиска файлов через меню системы Linux. Проводимые действия будут выполняться в дистрибутиве Ubuntu 16.04 LTS, однако инструкция общая для всех.
Допустим, вам необходимо найти в системе файлы под именем «Найди меня», также этих файлов в системе два: один в формате «.txt», а второй — «.odt». Чтобы их отыскать, необходимо изначально нажать на иконку меню (1), и в специальном поле для ввода (2) указать поисковый запрос «Найди меня».
Отобразится результат поиска, где будут показаны искомые файлы.
Но если в системе было бы много таких файлов и все они отличались расширениями, то поиск бы усложнился. Для того чтобы исключить в выдаче результатов ненужные файлы, например, программы, лучше всего воспользоваться фильтром.
Расположен он в правой части меню. Фильтровать вы можете по двум критериям: «Категории» и «Источники». Разверните эти два списка, нажав по стрелочке рядом с названием, и в меню уберите выделения с ненужных пунктов. В данном случае разумнее будет оставить лишь поиск по «Файлы и папки», так как мы ищем именно файлы.
Сразу можно заметить недостаток этого способа — нельзя детально настроить фильтр, как в «Терминале». Так, если вы ищите текстовый документ с каким-то названием, в выдаче вам могут показать картинки, папки, архивы и т. п. Но если вы знаете точное наименование нужного файла, то сможете быстро отыскать его, не изучая многочисленные способы команды «find».
Способ 2: Поиск через файловый менеджер
Второй способ имеет существенное преимущество. Используя инструмент файлового менеджера, можно произвести поиск в указанном каталоге.
Выполнить данную операцию проще простого. Вам необходимо в файловом менеджере, в нашем случае Nautilus’е, войти в папку, в которой предположительно находится искомый файл, и нажать кнопку «Поиск», расположенную в верхнем правом углу окна.
В появившееся поле для ввода вам нужно ввести предполагаемое название файла. Также не забывайте, что поиск может быть проведен не по целому имени файла, а лишь по его части, как показано на примере ниже.
Как и в предыдущем способе, в этом точно так же можно использовать фильтр. Для его открытия нажмите на кнопку со знаком «+», расположенную в правой части поля ввода поискового запроса. Откроется подменю, в котором вы можете из выпадающего списка выбрать искомый тип файла.
Поиск файлов через терминал. Команда locate
Команда locate считается устаревшей, т.к. она выполняет поиск не в реальном времени, подобно команде , а только по ранее созданной базе файлов. Вы вводите слово, которое вас интересует, и команда выдает все известные ей файлы, имя которых содержит заданное слово. Команда поддерживает работу с регулярными выражениями. Например, чтобы найти все файлы, в имени которых содержится слово users, необходимо выполнить:
Стоит заметить, что если файл появился в системе уже после создания базы, то он не будет найден.
Иногда вам может потребоваться обновить базу данных, к которой обращается . Для этого необходимо ввести команду (её запуск производится от имени суперпользователя):
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня .
2. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
в) Более компактный вид имеют регулярные выражения, например:
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
* данная команда найдет файлы, которые менялись более 60 дней назад.
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
* все файлы, к которым обращались с 08.10.2019.
* все файлы, к которым обращались в октябре.
* все файлы, созданные с 07 сентября 2019 года.
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
Искать в текущей директории и всех ее подпапках только файлы:
* f — искать только файлы.
1. Ищем все справами на чтение и запись:
2. Находим файлы, доступ к которым имеет только владелец:
Поиск файла по содержимому
* в данном примере выполнен рекурсивный поиск всех файлов в директории и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
5. Передать найденные файлы конвееру (pipe):
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
6. Произвести замену в файлах с помощью команды sed:
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Команда find в Linux
Очень важно уметь вовремя найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux
Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения.
Кроме того, с найденными файлами можно сразу же выполнять необходимые действия. В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем её синтаксис, опции и рассмотрим несколько примеров.
How to Find and Process a File in Linux
The option runs commands against every object that matches the find expression. Consider the following example:
This filters every object in the current hierarchy () for files named and runs the command to modify the results’ file permissions.
The commands run with the are executed in the process’s root directory. Use to perform the specified command in the directory where the match resides. This may alleviate security concerns and produce a more desirable performance for some operations.
The or options run without further prompts. If you prefer to be prompted before action is taken, replace with or with .
Примеры использования
С теорией покончено, теперь перейдём к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.
Поиск текста в файлах
В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:
В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:
А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:
Вывести несколько строк
Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:
Выведет строку с вхождением и 4 строчки после неё:
Выведет целевую строку и 4 строчки до неё:
Выведет по две строки с верху и снизу от вхождения.
Регулярные выражения в grep
Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:
Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:
Поиск в конце строки — спецсимвол «$»:
Найдём все строки, которые содержат цифры:
Вообще, регулярные выражения grep — это очень обширная тема, в этой статье я лишь показал несколько примеров. Как вы увидели, поиск текста в файлах grep становиться ещё эффективнее. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим её и пойдем дальше.
Рекурсивное использование grep
Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:
В выводе вы получите:
Здесь перед найденной строкой указано имя файла, в котором она была найдена. Вывод имени файла легко отключить с помощью опции -h:
Поиск слов в grep
Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:
Количество вхождений строки
Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):
C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:
Получим:
Инвертированный поиск в grep
Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:
Вывод имени файла
Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:
Найти по названию
Давайте разберем эту базовую команду, чтобы сделать ее максимально понятной для каждого. Наиболее упрощенная структура команды find должна включать путь к файлу, параметр и имя самого файла. Возможно, вы подумаете: «Если я знаю путь к файлу, я уже знаю, где его найти!». Ну, путь к файлу может быть корнем вашего диска; Поэтому / будет законным путем. Но все намного проще, поскольку ваш путь займет больше времени, для обработки — потому что он должен начинаться с нуля — но, если вы не знаете, где находится файл, вы можете начать с него. Во имя эффективности всегда лучше иметь хотя бы идею, с которой начать поиск.
Следующая часть команды — это опция. Как и в большинстве команд Linux, у вас есть ряд доступных опций. Тем не менее, мы начинаем с самого начала, поэтому давайте сделаем это как можно проще. Поскольку мы пытаемся найти файл по имени, мы будем использовать один из двух вариантов:
Name — с учетом регистра
Iname – без учета регистра
Помните, Linux очень определенно относится к делу, поэтому, если вы ищете файл с именем Linux.odt, следующая команда не даст никаких результатов.
Если, однако, вы должны были изменить команду, используя опцию -iname, команда find найдет ваш файл, независимо от случая. Итак, новая команда выглядит так:
2.1, общие параметры и примеры команды grep
Команда grep используется для поиска шаблона, указанного параметром Pattern, и записи каждой соответствующей строки в стандартный вывод. Эти шаблоны являются ограниченными регулярными выражениями, они используют стиль команд ed или egrep. Если в параметре File указано несколько имен, команда grep отобразит имя файла, содержащего совпадающую строку.
Персонажи с особым значением для раковины Он должен быть заключен в двойные кавычки, когда он появляется в параметре Pattern. Если параметр Pattern не является простой строкой, обычно весь шаблон должен быть заключен в одинарные кавычки. В таких какВ таких выражениях, как,(Знак минус) Вы можете указать диапазон в соответствии с последовательностью, которая сортируется в данный момент. Последовательность упорядочения может определять эквивалентные классы для использования в диапазонах символов. Если файл не указан, grep примет стандартный ввод.
Примеры использования
А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.
1. Поиск всех файлов
Показать все файлы в текущей директории:
Все три команды покажут одинаковый результат. Точка здесь означает текущую папку. В место неё можно указать любую другую.
2. Поиск файлов в определенной папке
Показать все файлы в указанной директории:
Искать файлы по имени в текущей папке:
Поиск по имени в текущей папке:
Не учитывать регистр при поиске по имени:
5. Несколько критериев
Поиск командой find в Linux по нескольким критериям, с оператором исключения:
Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:
Эта команда найдёт как php, так и html файлы.
6. Тип файла
По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d. Например:
Для поиска только файлов необходимо использовать параметр f:
Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:
8. Поиск по разрешениям
Найти файлы с определенной маской прав, например, 0664:
Права также можно задавать буквами для u (user) g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:
Поиск файлов доступных владельцу только для чтения только в каталоге /etc:
Найти только исполняемые файлы:
Найти все файлы, принадлежащие пользователю:
Поиск файлов в Linux принадлежащих группе:
10. Поиск по дате модификации
Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:
Поиск файлов в Linux открытых N дней назад:
Найти все файлы, модифицированные между 50 и 100 дней назад:
Найти файлы измененные в течении часа:
Найти все файлы размером 50 мегабайт:
От пятидесяти до ста мегабайт:
Найти самые маленькие файлы:
Самые большие:
13. Действия с найденными файлами
Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, для того чтобы найти все пустые папки и файлы, а затем выполнить ls для получения подробной информации о каждом файле используйте:
Удалить все текстовые файлы в tmp
Удалить все файлы больше 100 мегабайт:
Options and Optimization for Find Command for Linux
find is configured to ignore symbolic links (shortcut files) by default. If you’d like the find command to follow and show symbolic links, just add the -L option to the command, as we did in this example.
find can help Linux find file by name. The Linux find command enhances its approach to filtering so that performance is optimised. The user can find a file in Linux by selecting three stages of optimisation-O1, -O2, and -O3. -O1 is the standard setting and it causes find to filter according to filename before it runs any other tests.
-O2 filters by name and type of file before carrying on with more demanding filters to find a file in Linux. Level -O3 reorders all tests according to their relative expense and how likely they are to succeed.
Linux поиск по содержимому файлов командой grep
Часто возникают ситуации, что нужно найти какой-нибудь текст, но вы не помните, в каком файле/файлах он содержится. Секрет популярности — её мощь, она отдает возможность пользователям сортировать и фильтровать текст на основе сложных правил.
В этом варианте для поиска по содержимому файлов в каталоге можно использовать утилиту grep:
где:
-n показывает строку, где был найден фрагмент;
-r осуществляет розыск рекурсивно, в файлах в самом каталоге /path и в его подкаталогах;
Также можно приплюсовать опцию -C 3, чтобы видеть +- 3 строки вокруг (выше и ниже от найденной).
Дабы найти файл по его содержимому во всех Linux — подобных ОС, достаточно использовать утилиту find.
Find Files/Folders by Permissions
7. Find Files/Folders by Permissions 777
The command will return all files that have 777 permissions. In this case, it will check all data with the name ‘trial.php’ and has 777 permissions.
8. Find SUID File With Permissions 755
The SUID (Set owner User ID upon execution) is temporary permission set for a file that permits a user to run executable by inheriting access permission of the executable owner. The below command will search for files that have SUID permission 755
9. Look for SGID File With 644 Permission
Akin to SUID, SGID (Set Group ID upon execution) is also temporary permission given to a user to run a file or executable. The primary difference is that it inherits permission of the group when running a file rather than the person logged into the system. One can search SGID files on Linux using the below command
10. Sticky Bit Files With Permissions 755
The sticky bit is another type of permission bit that when assigned on a file will only let the root user delete the file. Therefore, no other users will have the liberty to delete the data that is created by the root user.
So users enable sticky bit to ensure no one can delete the folder or contents. Apart from deletion, users have other full privileges. Below is the one can use the find command on Linux to search for files with permission 755:
Linux поиск по содержимому файлов командой find
Своего рода швейцарским ножом в розыске файлов является команда find. Отметим, что она имеет множество опций, которые смогут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными способностями ознакомьтесь в справке по команде. Базовый принцип использования find состоит в указании папки поиска и опций. Например, выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих продолжение «cpp» по всем каталогам, находящимся в личной директории пользователя.
Значение, указанное после опции -name, задает шаблон соотношения имени файла. Вы можете использовать опцию -type для указания типа файла, где в свойстве значений нужно использовать специальные буквы: d — директория, f — файл, l — символическая ссылка и т. д. Функции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя категории и размер файла в байтах.
С поддержкою опции -exec каждому файлу, предназначенному для установки соответствия, можно добавить случайную обработку. Таким образом, появляется возможность осуществления поиска, как по имени файла, так и по охватываемому. Ниже приводится пример комбинирования команды find и grep за счет использования функции -exec.
А возможно и еще проще