Я прочитал страницу справочника для find
но это не ясно для меня.
find -perm -mode
------>, по крайней мере, они бит (биты) должен быть установлен, чтобы файл соответствовал
Например: find -perm -754
находит 754,755,757,774,777
Что относительно? find -perm /754
объясните мне примерами
Это - в основном различие между всеми тремя битами (-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, что означает рв-). Таким образом, он будет соответствовать любому файлу, доступному для чтения или записи, или и тому, и другому для любого типа владельца (пользователя, группы или другого). Это означает, что не будут сопоставляться только файлы со следующими разрешениями: 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 -------
можно немного уточнить:
при следующих разрешениях
/
— это операция ИЛИ:
возврат w&W || х&Х|| г&Г || z&Z
т.е. вернуть, если файл содержит какое-либо разрешение (W-Z), которое соответствует (по крайней мере) искомым разрешениям (w-z).
пока
-
является операцией И:
возврат w&W && x&X && y&Y && z&Z
т.е. вернуть, если файл содержит все разрешения (W-Z), соответствующие (как минимум) искомым разрешениям (w-z).
В обоих случаях это может означать, что W установил более чем w битов. (6 сетов 2 и 4, но не 3 или 1)