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

Можно управлять битами назначенных полномочий с umask, и группа путем создания каталога setgid к GROUPNAME.

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

Обратите внимание, что необходимо сделать chgrp/chmod для каждого подкаталога; это не распространяет автоматически (то есть, ни существующие ни впоследствии созданные каталоги в соответствии с setgid каталогом не будут setgid, хотя последний будет в группе GROUPNAME).

Также отметьте это umask атрибут процесса и относится ко всем файлам, созданным тем процессом и его детьми (которые наследовались umask в действительности в их родителе в fork() время). Пользователи, возможно, должны установить это в ~/.profile, и, возможно, должен не упустить вещи, не связанные с Вашим каталогом, которым нужны различные полномочия. модули могут быть полезными при необходимости в различных настройках при выполнении разных вещей.

Можно управлять вещами немного лучше, если можно использовать POSIX ACLs; должно быть возможно указать и маску полномочий и группу, и сделать, чтобы они распространили разумно. Поддержка POSIX ACLs является несколько переменной, все же.

48
29.05.2018, 15:12
4 ответа

Вы могли бы попробовать file утилита. Согласно странице справочника:

Волшебные тесты используются для проверки на файлы с данными в особенности фиксированных форматов. Каноническим примером этого является двоичный исполняемый файл (скомпилированная программа) a.out файл, формат которого определяется в, и возможно в стандарте включают каталог.

Вам, возможно, придется играть вокруг с регулярным выражением, но чем-то как:

$ find -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'

файл имеет много опций, таким образом, Вы могли бы хотеть более тщательно изучить страницу справочника. Я использовал первую опцию, я нашел, что, казалось, производил вывод easily-to-grep.

45
27.01.2020, 19:34
  • 1
    я сказал бы использование find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print. Это только даст Вам файлы (и таким образом может быть передан следующей команде, которую он хочет выполнить), –  Gert 02.09.2010, 09:56
  • 2
    serverfault.com/a/584595/211551 находит файлы, которые НЕ отмечены исполняемый файл, но являются исполняемым файлом. –  user2067125 13.06.2017, 09:14
  • 3
    На OS X можно установить GNU find с brew install findutils или sudo port install findutils и затем можно выполнить вызов как это к подобному эффекту: gfind . -type f -executable -exec file '{}' \; | grep -i execut –  GDP2 26.03.2018, 07:49

Вот способ исключить сценарии, т.е. файлы, чьи сначала два символа #!:

find -type f -executable -exec sh -c 'test "$(head -c 2 "$1")" != "#!"' sh {} \; -print

Для некоторых видов файлов не ясно, хотите ли Вы их классифицированный как сценарии или двоичный файл, например, файлы байт-кода. В зависимости от того, как настраиваются вещи, они могут или не могут запуститься с #!. Если они имеют значение для Вас, необходимо будет сделать сценарий внутренней оболочки более сложным. Например, вот то, как Вы могли бы включать двоичные файлы ELF и Моно исполняемые файлы и Объективные программы байт-кода Caml, но не другие виды исполняемых файлов как сценарии оболочки или сценарии жемчуга или программы байт-кода JVM:

find -type f -executable -exec sh -c '
    case "$(head -n 1 "$1")" in
       ?ELF*) exit 0;;
       MZ*) exit 0;;
       #!*/ocamlrun*) exit 0;;
    esac
    exit 1
' sh {} \; -print
7
27.01.2020, 19:34

На всякий случай Вы оказываетесь в системе с низким уровнем find (существуют все еще, как я пишу, lotta наука кластеры, выполняющие RHEL5!) без прав обновить: вместо

find /mypath/ -executable -type f

в вышеупомянутых превосходных ответах можно сделать, например,

find /mypath/h -type f -perm -u+x

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

2
27.01.2020, 19:34

Я написал инструмент под названиемblobs , который делает это.

Другие методы пропускают некоторые файлы.

0
17.05.2021, 20:26

Теги

Похожие вопросы