Можно управлять битами назначенных полномочий с 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 является несколько переменной, все же.
Вы могли бы попробовать file
утилита. Согласно странице справочника:
Волшебные тесты используются для проверки на файлы с данными в особенности фиксированных форматов. Каноническим примером этого является двоичный исполняемый файл (скомпилированная программа) a.out файл, формат которого определяется в, и возможно в стандарте включают каталог.
Вам, возможно, придется играть вокруг с регулярным выражением, но чем-то как:
$ find -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'
файл имеет много опций, таким образом, Вы могли бы хотеть более тщательно изучить страницу справочника. Я использовал первую опцию, я нашел, что, казалось, производил вывод easily-to-grep.
Вот способ исключить сценарии, т.е. файлы, чьи сначала два символа #!
:
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
На всякий случай Вы оказываетесь в системе с низким уровнем find
(существуют все еще, как я пишу, lotta наука кластеры, выполняющие RHEL5!) без прав обновить: вместо
find /mypath/ -executable -type f
в вышеупомянутых превосходных ответах можно сделать, например,
find /mypath/h -type f -perm -u+x
который ищет на битах полномочий. К сожалению, вышеупомянутое только находит файлы, для которых у пользователя есть исполняемый файл, но это обычно работает на меня.
find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print
. Это только даст Вам файлы (и таким образом может быть передан следующей команде, которую он хочет выполнить), – Gert 02.09.2010, 09:56find
сbrew install findutils
илиsudo port install findutils
и затем можно выполнить вызов как это к подобному эффекту:gfind . -type f -executable -exec file '{}' \; | grep -i execut
– GDP2 26.03.2018, 07:49