Как найти исполняемый файл linux

Поиск в Linux с помощью команды find

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Общий синтаксис

путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <> \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

Поиск файла по имени

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий.

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm <> \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv <> new_name \;

find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

Команду find удобно использовать для автоматического удаления устаревших файлов.

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Источник

Как найти только исполняемые файлы в определенном каталоге в Linux?

Как я могу найти только исполняемые файлы в определенном каталоге в Linux?

6 ответов

Проверка исполняемых файлов может выполняться с помощью -perm (не рекомендуется) или -executable (рекомендуется, поскольку он учитывает ACL). Чтобы использовать параметр -executable :

, если вы хотите найти только исполняемые файлы, а не каталоги, доступные для поиска, в сочетании с -type f :

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

Я просто нашел еще один вариант, который присутствует, по крайней мере, в GNU find 4.4.0:

Это должно работать еще лучше, потому что ACL также рассматриваются.

Я знаю, что в этом вопросе конкретно упоминается Linux, но поскольку это первый результат в Google, я просто хотел добавить ответ, который я искал (например, если вы — как и я на данный момент, принужден вашим работодателем использовать система не GNU /Linux).

Протестировано на macOS 10.12.5

У меня есть другой подход, в случае, если вы действительно хотите просто сделать что-то с исполняемыми файлами — и не обязательно заставить заставить фильтр фильтровать себя:

Я предпочитаю это, потому что он не полагается на -executable , который является специфичным для платформы; и он не полагается на -perm , который является немного тайным, специфичным для бит-платформы и, как написано выше, требует, чтобы файл исполнялся для всех (а не только для вас).

-type f важен, потому что в каталогах * nix должны быть исполняемыми, чтобы быть обходимыми, и чем больше запросов находится в команде find , тем больше память будет эффективной вашей командой.

Во всяком случае, просто предлагая другой подход, поскольку * nix — это земля в миллиард подходов.

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

Вот что я использую:

Как вентилятор одного лайнера .

Использование «xargs» для вывода результата из команды find (с помощью print0 для правильной обработки имен файлов с пробелами). Теперь у нас есть список исполняемых файлов, и мы предоставляем их один за другим в качестве параметра для команды «файл». Затем grep для выражения ASCII для игнорирования двоичных файлов. Пожалуйста, замените -executable в команде find на какой стиль вы предпочитаете (см. Более ранние ответы) или что работает на вашей «ОС NIX

Мне нужно было найти файлы с eval в скриптах, принадлежащих root, поэтому создано следующее, чтобы помочь найти недостатки в личной эскалации, когда пользователь root запускает скрипты с небезопасными параметрами .

Источник

Unix find: поиск исполняемых файлов

какой тип параметра / флага я могу использовать с Unix find команда, чтобы я искал исполняемые файлы?

9 ответов

на GNU версии find вы можете использовать -executable :

для версий BSD find вы можете использовать -perm С + и восьмеричную маску:

в этом контексте » + «означает» любой из этих битов установлен», а 111-это исполняемые биты.

обратите внимание, что это не идентично -executable предикат в GNU find. В частности, -executable проверяет, что файл может быть выполнен текущим пользователем, в то время как -perm +111 просто тесты, Если они выполняются разрешения установлены.

старые версии GNU find также поддерживают -perm +111 синтаксис, а как 4.5.12 этот синтаксис не поддерживается. Вместо этого, вы можете использовать -perm /111 чтобы получить такое поведение.

кончик шляпы @gniourf_gniourf для прояснения фундаментального заблуждения.

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

Поиск исполняемых файлов может см.два разных варианта использования:

  • пользователя найти файлы исполняемый файл текущим пользователем.
  • найти файлы (один или несколько) исполняемые биты разрешений set.

обратите внимание, что в или сценарий это может иметь смысл использовать find -L . вместо просто find . для того чтобы также найти символические ссылки на исполняемые файлы.

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

ориентированных на пользователя ( -executable )

The принято отвечать похвально рекомендует -executable , если GNU find доступно.

  • GNU find входит в состав большинства Linux дистрибутивы
    • напротив, платформы на основе BSD, включая macOS, поставляются с BSD find, который менее мощный.
  • как сценарий требует, -executable матчи только файлы настоящее выполнить (есть крайние случаи. [1] ).

The BSD find альтернатива, предлагаемая принятым ответом ( -perm +111 ) отвечает a разные, -ориентированной вопрос (как говорится в самом ответе).

    используя -perm чтобы ответить на пользователей-ориентированной вопрос невозможно, потому что необходимо относятся the файла идентификатор пользователя и группы в текущего пользователя, а -perm можно проверить только файла разрешения.
    Использование только POSIX find особенности, на вопрос нельзя ответить без привлечения внешних коммунальные услуги.

таким образом, лучшие -perm можно сделать (сам по себе) — это приближение of -executable . возможно ближе приближение, чем -perm +111 is -perm -111 , чтобы найти файлы, которые имеют исполняемый бит, установленный для всех участников безопасности (пользователь, группа, Другие) — это поражает меня как типичный сценарий реального мира. В качестве бонуса он также совместим с POSIX (используйте find -L включить символические ссылки, см. далее ниже для объяснения):

gniourf_gniourf это предоставляет true, портативный эквивалент -executable , используя -exec test -x <> \; , хотя и за счет производительности.

объединение -exec test -x <> \; С -perm +111 (т. е. файлы с по крайней мере один исполняемый бит set) может помочь производительность в этом exec не нужно вызывать для каждый файл (ниже используется POSIX-совместимый эквивалент BSD find -perm +111 / GNU find -perm /111 ; см. далее ниже для объяснения):

  • до ответ -ориентированной вопросы, это isдостаточно для использования POSIX-совместимого -perm первичный (известный как тест в GNU найти терминологию).
    • -perm позволяет проверить любой права доступа к файлам, а не только исполняемость.
    • разрешения указываются каквосьмеричной или символические режимы. Восьмеричные режимы-это восьмеричные числа (например, 111 ), тогда как символьные режимы являются строками (например, a=x ).
    • символические режимы определить субъекты безопасности как u (пользователь), g (группа) и o (другие), или a для обозначения всех трех. Разрешения выражаются как x для исполняемого файла, например, и назначается Принципалам с помощью операторов = , + и — ; на полное обсуждение, в том числе восьмеричных режимов, см. спецификация POSIX для chmod утилиты.
    • в контексте find :
      • префикс режима с — (например, -ug=x ) означает: сопоставьте файлы, которые имеют все разрешения указано (но соответствующие файлы могут иметь дополнительные разрешения).
      • с нет префикса (например, 755 ) означает: сопоставьте файлы, которые имеют это полное и точное набор разрешений.
      • предостережение: как GNU find и BSD find реализовать дополнительные, нештатное префикс с какие-либо из указанного-разрешение-бит-набор логики, а с несовместимый синтаксис:
        • BSD найти: +
        • GNU find: / [2]
      • таким образом, избегайте этих расширений, если ваш код должен быть портативный.
  • примеры ниже демонстрируют портативные ответы на различные вопросы, ориентированные на файл.

    примеры команд, ориентированных на файл

    • следующее примеры POSIX-совместимые, что означает, что они должны работать в любой POSIX-совместимой реализации, включая GNU find и BSD find; в частности, это требует:
      • не использовать нестандартные префиксы режима + или / .
      • использование форм POSIX праймериз логических операторов:
        • ! for NOT (GNU find и BSD find также позволяют -not ); обратите внимание, что \! используется в примерах, чтобы защитить ! из истории разложения оболочки
        • -a Для и (GNU find и BSD find также позволяют -and )
        • -o Для или (GNU find и BSD find также позволяют -or )
    • примеры использования символическое режимы, потому что их легче читать и запоминать.
      • с префиксом режим — , the = и + операторы можно использовать взаимозаменяемо (например, -u=x эквивалентно -u+x — если вы не применяете -x позже, но нет смысла делать что.)
      • использовать , присоединиться к частичным режимам; и логика подразумевается; например, -u=x,g=x означает, что пользователь и должен быть установлен исполняемый бит группы.
      • режимы не могут сами выразить отрицательное соответствие в смысле «совпадение только если этот бит не установлен»; вы должны использовать отдельный -perm выражение С не основным, ! .
    • обратите внимание, что найти тут праймериз (например, -print или -perm ; также известный как действия и тесты в GNU найти) являются имплицитно вместе с -a (логическое И), и -o и, возможно, скобки (escaped as \( и \) для оболочки) необходимы для реализации логики или.
    • просто find . используется для того, чтобы соответствовать символические ссылки на экзешники
      • -L поручает найти чтобы оценить цели символических ссылок вместо самих символических ссылок; поэтому без -L , -type f будет полностью игнорировать символические ссылки.

    [1] Описание -executable С man find по состоянию на GNU найти 4.4.2:

    соответствует файлам, которые являются исполняемыми, и каталогам, которые доступны для поиска (в смысле разрешения имен файлов). Это учитывает доступ контрольные списки и другие артефакты разрешений, которые игнорирует тест-perm. Этот тест использует системный вызов access (2) , и поэтому может быть обманутые серверами NFS, которые выполняют сопоставление UID (или root-squashing), поскольку многие системы реализуют access (2) в ядре клиента и поэтому не могут используйте информацию сопоставления UID, хранящуюся на сервере. Поскольку этот тест основан только на результате системного вызова access (2), там никакой гарантии, что файл, для которого этот тест выполняется успешно, может быть фактически выполнен.

    [2] GNU найти версии старше 4.5.12 также допускается префикс + , но это было сначала устарело и в конечном итоге удалено, потому что объединение + С символическое режимы дают, вероятно, неожиданные результаты из-за интерпретации как точно маска разрешения. если вы (a) запускаете версию до 4.5.12 и (b) ограничьтесь восьмеричной только режима, вы мог бы уйти с использованием + С и GNU find и BSD find, но это не очень хорошая идея.

    Источник

    Читайте также:  Smooth mouse windows 10
Оцените статью