Разница между "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).