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

  • пользователь не прочитал
  • У пользователя нет записи
  • группа не читала
  • группа не имеет записи
  • другой не прочитал
  • другой написал
  • другой исполнит

Я начал с этого, но он не нашел все ожидаемые файлы. Например, он не находит файлы, которые прочитал другой, но также выполняет.

find /path -type f \( ! -perm /u=rw,g=rw -or ! -perm /o=r \) -print

1 ответ1

2

Короткий ответ

 find ./ -type f ! \( -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx \)

Длинный ответ

Поскольку кажется проще указать, что мы хотим (x имеет разрешение y ) в find , давайте попробуем сопрягать выражение: мы видим, что для файла, который не должен совпадать, проверены все эти условия:

  • пользователь прочитал и написал
  • группа читает и пишет
  • другой прочитал
  • другого нет (напиши или выполни)

Так что теперь у нас больше , чем раньше (5 против 2). Я написал команду, которая находит файлы, которые вам не нужны:

find ./ -type f -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx

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

Тогда я соединила это с! и скобки, чтобы получить команду в верхней части этого ответа.

тесты

Давайте создадим файлы, которые проверяют только один из этих критериев:

mkdir demo && cd demo
touch     a b c d e f g
chmod 777 a b c d e f g
chmod u-r a
chmod u-w   b
chmod g-r     c
chmod g-w       d
chmod o-r         e
chmod o-w a b c d e g
chmod o-x a b c d e f

Тогда давайте создадим все файлы, которые не должны совпадать: у нас есть свободы на

  • права пользователя на исполнение
  • права на групповое исполнение

Что дает ровно 2 ^ 2 = 4 типа полных разрешений, которые не должны совпадать. Давайте создадим 4 файла с этими критериями:

touch     h i j k
chmod 664 h i j k
chmod u+x h i
chmod g+x h   j

Предоставленная команда должна соответствовать файлам a-e, но не файлам h-k. Конечно, этот тест не является исчерпывающим, потому что есть 256 типов разрешений для тестирования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .