
У меня была странная ситуация, когда я обнаружил ряд файлов и папок, для которых были установлены разрешения 000. Это было легко исправить с помощью:
sudo find . -perm 000 -type f -exec chmod 664 {} \;
sudo find . -perm 000 -type d -exec chmod 775 {} \;
К сожалению, я внезапно понял, что проблема была немного сложнее с некоторыми странными разрешениями, такими как 044 и некоторыми другими странными настройками. Оказывается, они разбросаны и непредсказуемы.
Есть ли способ поиска разрешений, таких как 0** или других подобных ограничивающих конфигураций разрешений?
решение1
Я бы использовал что-то вроде этого:
find . ! -perm -u=r ! -perm -u=w ! -perm -u=x -ls
Или, если вы предпочитаете восьмеричную запись:
find . ! -perm -400 ! -perm -200 ! -perm -100 -ls
К сожалению, не представляю, как это рассматривать как один -perm
из вариантов.
Приведенный выше синтаксис является стандартным, за исключением -ls
части (общей, но не POSIX), которую вы можете заменить в -exec ls -disl {} +
системах, где find
она не поддерживается -ls
, чтобы получить аналогичный вывод.
решение2
СГНУfind
, вы можете сделать это, выполнив поиск файлов, которые не соответствуют «ни одному установленному биту для владельца»:
find . ! -perm /700
То же самое, напримерFreeBSDfind
является
find . ! -perm +700
Оба они работают одинаково. -perm /700
or -perm +700
match, если установлен какой-либо из битов разрешений владельца; !
отрицает это, поэтому ! -perm /700
or ! -perm +700
match, если ни один из битов разрешений владельца не установлен. Остальные биты игнорируются.
решение3
Если вы используете sfind
или любую программу, использующую libfind
или если вы используете BSD find
, вы можете использовать:
find path -perm +0xxx
чтобы найти файлы, в которых установлены какие-либо биты, упомянутые в шаблоне, поэтому
find . ! -perm +0700
должно сработать в вашем случае. Кстати: это также поддерживается GNU find
.
Обратите внимание, что это расширение не упоминается в POSIX и не реализовано в find
.