Это не дублирующий вопрос.
Предположим, у меня есть
- полный путь
- в обычный файл с именем
target
- который может принадлежать какому-то другому пользователю.
- и среда может быть урезана (busybox с очень небольшим включением)
В сценарии оболочки, как я могу проверить, является ли этот файл исполняемым его владельцем, если я не могу быть его владельцем? Представьте, что цель моей программы — проверить, все ли хорошо настроен для запуска других вещей (поскольку среда могла быть разрушена другими пользователями), и он ищет в определенном каталоге, чтобы убедиться, что владельцы каждого файла имеют разрешение на выполнение своего файла.
Это профессиональный контекст, а не домашнее задание.
Любое решение, которое я буду использовать, должно охватывать все виды старых сред Linux, в настройке которых я не участвовал (поэтому в них могут быть отсутствующие вещи, которые вы обычно ожидаете, такие как which
или некоторые параметры find
и т. д.) .
Однако этот вопрос может быть полезен для тех, кто не сталкивается с этим ограничением, поэтому я ценю другие решения, требующие более полных или современных сред.
[ -x "$path" ]
только сообщает мне, могу ли я его выполнить.
ls -l "$path"
и проверка, является ли четвертый символ x
, кажется слишком хрупкой: -rwxrw-rw- 1 otheruser group 26 Jun 13 10:57 target
ls -F "$path"
и проверить, заканчивается ли оно на *
, кажется немного лучше: target*
Одна среда, которую я тестировал, действительно учитывает, кто является фактическим владельцем... Но это не кажется лучшим способом...
[ -x "$path" ]
, была технически достаточной, чтобы отличить) Моя программа является валидатором, и она хочет убедиться, что владелец каждого файла в каталоге может выполняться этим конкретным владельцем. Я не думаю, что группы учитываются, потому что я удалил пользовательские разрешения на то, что мне принадлежало, у которого была (моя) группа и другой набор x, и я не мог это выполнить. Не домашнее задание. Должен быть надежным и справляться со всеми видами странных/старых сред Linux. - person user1011471   schedule 14.06.2018