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

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

Вот что-то вроде BASH-скрипта, это неплохо, вот что я могу сказать 🙂 stackoverflow.com/a/20209457/2067125

Как насчет использования стандартной file команды ?

Для тех, кто хочет сделать это на Mac (протестировано на OS X 10.9.5): ls -l | egrep ‘^[^d]..x..x..x.*$’ выше приведен список всех исполняемых файлов (для всех / пользователя и группы) в текущем каталоге. Примечание . Этот -executable параметр не работает на Mac, поэтому возможен обходной путь, описанный выше.

Также актуально: Unix найти: поиск исполняемых файлов

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

find dir> -executable

если вы хотите найти только исполняемые файлы, а не каталоги с возможностью поиска, объедините их с -type f :

find dir> -executable -type f

Шебанг не означает, что они исполняемые. он говорит нам только, какой интерпретатор использовать. и по определению linux «исполняемые файлы» — это файлы с установленным битом исполняемого файла (x)

Запуск файлов с расширением sh и run в linux системах

Какая версия find поддерживает этот тип для -type? Человек находит списки b, c, d, p, f, l, s и D в моей системе.

То же самое здесь, моя находка тоже не имеет -type x .

Если у вас есть старая версия find (вероятно, до 4.3.8), в которой отсутствует -executable, используйте find. -perm / u = x, g = x, o = x.

find: invalid predicate -executable’ на RHEL

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

find . -perm /u=x,g=x,o=x

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

find . -executable

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

Это работает только на более новой версии find. Один , который поставляется по умолчанию с CentOS дает ошибку find: invalid mode / и = х, г = х, о = x’`

Затем вы должны попробовать версию «-perm +», которая в GNU find устарела: find. +111 »
Похоже, -perm /111 может быть самая портативная версия.

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

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

find . -perm +111 -type f
Работает в RHEL 5 тоже.
Это единственный вариант, на котором я мог работать на OS X 10.14, спасибо

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

for i in `find -type f`; do [ -x $i ] echo «$i is executable»; done

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

Как создать скрипт файл на Ubuntu (исполняемый sh файл).

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

Читайте также:
Кто вчера победил в программе голос

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

(0) Что вы предпочитаете, тайное и правильное или интуитивное и ошибочное? Я предпочитаю правильно. (1) ответ InnaM в , показывая find -perm , находит файлы , которые имеют любое разрешение на выполнение бит. (2) Напротив, этот ответ находит только файлы, для которых текущий пользователь имеет разрешение на выполнение. Конечно, это может быть тем, чего хочет ОП, но неясно. … (Продолжение)

(Продолжение)… (3) Для ясности, вы можете захотеть перейти `…` на… $(…) увидеть это , это и это . (4) Но не делай for i in $(find …); do … ; это терпит неудачу на именах файлов, которые содержат пробел (ы). Вместо этого делай find … -exec … . (5) И, когда вы работаете с переменными оболочки, всегда заключайте их в кавычки (в двойных кавычках), если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете.

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

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

find ./ -type f -name «*» -not -name «*.o» -exec sh -c ‘ case «$(head -n 1 «$1″)» in ?ELF*) exit 0;; MZ*) exit 0;; #!*/ocamlrun*)exit0;; esac exit 1 ‘ sh <> ; -print
Что это делает?
Ну, я имею в виду, как это сделать?

Он читает из заголовка файла для обнаружения, каждый бинарный файл или файл сценария имеет заголовок.

Насколько я знаю, -name «*» это никак не влияет find — он обычно находит все файлы, которые не были удалены тестами.

Как поклонник одного лайнера .

find /usr/bin -executable -type f -print0 | xargs file | grep ASCII

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

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

echo -n «+ Identifying script files owned by root that execute and have an eval in them. » find / -not ( -path /proc -prune ) -type f -executable -user root -exec grep -l eval <> ; -exec file <> ; | grep ASCII| cut -d ‘:’ -f1 > $outputDir»/root_owned_scripts_with_eval.out» 2>/dev/null $1″ | xargs -0 -I<> bash -c ‘[[ -x «$1» ]] [[ ! -d «$1» ]] echo «executable: $1″‘ _ <> > # xlocate ()

Преимущество состоит в том, что он будет искать три дистрибутива Linux и установку Windows менее чем за секунду, где find команда занимает 15 минут.

$ time xlocate llocate executable: /bin/ntfsfallocate executable: /home/rick/restore/mnt/e/bin/llocate executable: /mnt/clone/bin/ntfsfallocate executable: /mnt/clone/home/rick/restore/mnt/e/bin/llocate executable: /mnt/clone/usr/bin/fallocate executable: /mnt/e/bin/llocate executable: /mnt/old/bin/ntfsfallocate executable: /mnt/old/usr/bin/fallocate executable: /usr/bin/fallocate real 0m0.504s user 0m0.487s sys 0m0.018s

Или для всего каталога и всех его подпрограмм:

$ time xlocate /mnt/e/usr/local/bin/ | wc -l 65 real 0m0.741s user 0m0.705s sys 0m0.032s

Источник: qastack.ru

Команда find: широкие возможности для поиска файлов в Linux

В Linux есть очень мощная и полезная команда для поиска файлов — команда find. Она обладает большим количеством возможностей для поиска файлов, однако, иногда вызывает сложности у новичков во многом из-за ее синтаксиса.

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

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config . Мы будем искать файлы config , начиная с корневого каталога / . Для этого вам нужно выполнять команду от имени пользователя root , чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

find / -name config -print

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find ) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

Читайте также:
Как в delphi 7 написать программу

Синтаксис команды find

Общий синтаксис команды find , который вы можете найти в справочном руководстве, может показаться не совсем простым, поэтому я приведу более удобный для восприятия:

find [путь] [опции] [критерии поиска] [действия над файлами]

Путь

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

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

-depth (или -d) Поиск в подкаталогах перед поиском в самом каталоге.
-L При поиске следовать по символическим ссылкам.
-maxdepth N При поиске проверять не более чем N вложенных уровней каталогов.
-mindepth N Не проверять вложенные каталоги уровня N и меньше.
-mount Не искать в каталогах других файловых систем.

Критерии поиска

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

-atime N Последний раз к файлу обращались N дней назад.
-mtime N Последнее изменение файла было N дней назад.
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файл Файл был изменен позже, чем другой_файл .
-size [±] N [cwbkMG] Размер файла равен N блокам, если указано +N , тогда размер файла больше N , -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type C Файл типа C . Наиболее часто используемые значения для С : d — каталог, f — файл.
-user Имя_пользователя Файл принадлежит пользователю с именем Имя_пользователя .

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

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

find . -type f -name «~*» -print

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak .

find . -newer file.bak -type f -print

Операторы

Критерии можно объединять, используя операторы. Ниже приведены операторы в порядке убывания их приоритета.

Короткая форма оператораДлинная формаОписание
! критерий -not Отрицание (возвращает true , если критерий false )
критерий1 -a критерий2 -and Оператор И ( true , если критерий1 и критерий2 true )
критерий1 -o критерий2 -or Оператор ИЛИ ( true , если критерий1 или критерий2 true )

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

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

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f ), а не каталогами.

find . ( -name «~*» -or -name «temp*» ) -type f -print

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

find . -maxdepth 1 ( ( -size +600M -and -size -1G ) -or -name «*.mpeg» ) -and -type f

Действия над файлами

Когда выполняется команда find , вы можете выполнять различные действия над найденными файлами. Рассмотрим основные из них.

-exec команда ; Выполнить команду. Обратите внимание, что после команды ставится обратный слеш и точка с запятой.
-execdir команда ; То же самое что и exec, но команда вызывается из подкаталога, содержащего текущий файл.
-ok команда ; То же самое, что и exec, но перед обработкой очередного файла будет выводится запрос на выполнение команды.
-okdir команда ; То же что ok для execdir.
-print Вывод имени файла на экран.
-ls Выполнение команды ls -dils над текущим файлом.
Читайте также:
Топ программ для проектирования домов 3d

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

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

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

find . -size +1000c -type f -ls

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm ).

find . -name «~*» -type f -ok rm <> ;

Заключение

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

Источник: pingvinus.ru

Поиск файлов в Linux с помощью командной строки

Linux поставляется с мощным инструментом поиска под названием «find«. По умолчанию команда find выполняет поиск файла (или файлов) в подкаталогах на основе определенных условий.

В этой инструкции мы покажем и расскажем, как найти файл в Linux с помощью командной строки.

Вам может быть интересно:

Поиск файла в Linux

Синтаксис команды «find» для поиска файла в Linux выглядит вот так:

find starting-point options expression

  • starting-point — это может быть текущий каталог (который вы укажите.) или путь к каталогу с которого следует начать фильтрацию. Если пути не указаны, используется текущий каталог.
  • options — Этот параметр управляет обработкой символьных ссылок, параметрами отладки и оптимизацией производительности.
  • expression — то, что нужно искать.
  • Опция -03 указывает на выполнение эффективного поиска для повышения производительности.
  • -L Параметры указывает команде «find» следовать по символическим ссылкам
  • /etc (Начальная точка) указывает каталог, с которого следует начать поиск
  • -name «*.conf» (Выражение) указывает команде find, что искать.

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

Вы можете использовать команду «find«, чтобы найти файл по имени. Например, для поиска файла с именем file1.txt в текущем каталоге и подкаталогах. Требуется использовать команду:

. (точка) указывает на текущий каталог.

Возможно вам будет интересно: Как установить Moodle на Ubuntu 20.04

Для поиска файла с именем file2.txt в каталоге /home/setiwik и его подкаталогах. Надо написать ввести команду так:

Чтобы выполнить поиск без учета регистра, используйте параметр -iname вместо -name:

Как в Linux искать файлы по расширению

Используйте команду find, чтобы найти файл (или файлы) с нужными расширениями. Например, для поиска файла (или файлов) с расширением «.txt» требуется ввести:

Поиск файлов в Linux с помощью командной строки

Поиск пустого файла

Чтобы найти пустой файл или файлы в Linux, используете опцию тип файла -empty .

Например, чтобы найти все пустые файлы в каталоге /tmp, введите:

find /tmp -type f -empty

Поиск файлов по времени изменения

Чтобы выполнить поиск файла или файлов в каталоге по времени изменения, используйте параметр -mtime. Например, чтобы найти текстовые файлы, которые были изменены последний раз 60 дней назад, введите:

Поиск файла, содержащий определенную строку

Если вы хотите найти файл, содержащий определенную строку, вы можете объединить find и grep вместе.

Чтобы выполнить поиск по всем файлам *.js, содержащим строку « example «, введите:

find . -name ‘*.js’ -exec grep -i ‘example’ <> ; -print

В качестве альтернативы вы можете получить те же результаты с помощью команды grep.

Поиск файла и выполнение команды в Linux

Иногда вам нужно найти файл и выполнить команду такую как удаление, разрешение на изменение и т. д. Для этого вы можете использовать опцию -exec.

find /var/www/html -name «wp-config.php» -exec chmod 0644 <> ;

Полезные параметры (опции) при поиска файла

-maxdepth X — Поиск в текущем каталоге вместе со всеми подкаталогами X уровней.
-iname — Игнорирование текстового регистра.
-not — Выводит только результаты, которые не соответствуют тестовому набору

Возможно вам будет интересно: Как установить Terraform в дистрибутивы Linux

Заключение

Из этого руководства вы научитесь искать файлы в Linux с помощью командной строки. Структура Linux позволяет эффективно находить файлы по каталогам и подкаталогам.

Источник: setiwik.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru