Разница между "perm -mode" и "perm /mode" в команде поиска

Я прочитал страницу руководства для findно мне не понятно.

find -perm -mode ------> по крайней мере эти биты должны быть установлены для соответствия файла

Например: find -perm -754 находит 754 755 757774 777

Как насчет? find -perm /754 пожалуйста, объясните мне на примерах

2 ответа

Решение

Это в основном разница между всеми тремя битами (-mode) и любой отдельный бит (/mode) разрешение (-permПодмножество тестов.

  • find -perm -mode:

    В этом случае упомянутые биты разрешения должны присутствовать для файла. Например, если вы делаете find -perm -666 и если файл имеет 776, это будет соответствовать. так же 666, 777 и т. д. тоже будет соответствовать, но 665 не будет соответствовать. Таким образом, упомянутые (три) биты должны быть подмножеством битов разрешения.

  • find -perm /mode:

    Здесь подойдет любой бит подмножества. Например, если мы делаем find -perm /666и если файл имеет 644файл будет сопоставлен, потому что бит разрешения пользователя 6и мы ищем подмножество одного бита. Так же, 700, 060, 006 и т. д. будет соответствовать, но не например 444, поскольку ни один бит не содержит подмножество требуемых битов разрешения.

Другой ответ правильно объясняет find -perm -modeчасть. Однако этот ответ исправляет неверное утверждение о find -perm /modeчасть.

Здесь подойдет любой один бит подмножества. Например, если мы найдем -perm /666, и если файл имеет 644, файл будет сопоставлен, потому что бит разрешения пользователя равен 6, и мы ищем однобитовое подмножество. Точно так же будут совпадать 700, 060, 006 и т. д., но не, например, 444, поскольку ни один бит не содержит подмножества требуемых битов разрешения.

Первое предложение верно, однако часть, утверждающая 444не будет соответствовать нет.

-perm /modeсоответствует, если совпадает какой-либо бит разрешения, а не целое число.

При переходе /666 мы спрашиваем findкоманда для поиска файлов, которые имеют любой из следующих битов rw-rw-rw(6 = 4+2, что означает rw-). Таким образом, он будет соответствовать любому файлу, доступному для чтения или записи, или и тому, и другому для любого типа владельца (пользователя, группы или другого). Это означает, что единственными файлами, которые не будут сопоставлены, являются файлы со следующими разрешениями: 000, 001, 010, 011, 100, 101, 110, а также 111. Любое другое разрешение будет соответствовать -perm /666так как ему будут назначены флаги чтения или записи.


Для получения дополнительной информации проверьте следующий пример.

      for h in {0..7}; \
do for i in {0..7}; \
do for j in {0..7}; \
do for k in {0..7}; \
do \
touch $h$i$j$k; \
chmod $h$i$j$k $h$i$j$k; \
done; \
done; \
done; \
done 
      find -perm /666 -printf '%04m %M\n' | grep 444
7444 -r-Sr-Sr-T
6444 -r-Sr-Sr--
5444 -r-Sr--r-T
4447 -r-Sr--rwx
4446 -r-Sr--rw-
4445 -r-Sr--r-x
4444 -r-Sr--r--
4443 -r-Sr---wx
4442 -r-Sr---w-
4441 -r-Sr----x
4440 -r-Sr-----
3444 -r--r-Sr-T
2444 -r--r-Sr--
1444 -r--r--r-T
0444 -r--r--r--

Таким образом, единственное, что не соответствует, — это файлы, разрешения которых не содержат 2 или 4: т. е. все файлы, содержащие только 1 или 0:

      # remove special permissions (since it was 0 every file that matches and only differs in the set of special permissions is found again)
find \! -perm /666 -printf '%04m %M\n' | grep '^0'| sed 's/ .../ /g'
0111 x--x--x
0110 x--x---
0101 x-----x
0100 x------
0011 ---x--x
0010 ---x---
0001 ------x
0000 -------

можно немного уточнить:

учитывая следующие разрешения

  • WXYZ: права доступа к файлам (например, 0755 W=0, Z=5)
  • wxyz: права поиска
  • w&W > 0, если хотя бы один бит совпадает

/является операцией ИЛИ: return w&W || x&X|| y&Y || z&Z

т.е. вернуть, если файл содержит какое-либо разрешение (WZ), которое соответствует (по крайней мере) искомым разрешениям (wz).

пока -является операцией И: return w&W && x&X && y&Y && z&Z

т.е. возврат, если файл содержит все разрешения (WZ), соответствующие (как минимум) искомым разрешениям (wz).

В обоих случаях это может означать, что W установил более w битов (6 устанавливает 2 и 4, но не 3 или 1).

Другие вопросы по тегам