bulmada -perm bayrağı
Kafamı bu komuta sarmaya çalışıyorum:
find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
Tüm dizinler için 'ev' dizinine bakacağını ve tüm stderr mesajlarını bir dosyaya (onları bastırmak için) yönlendireceğini anlıyorum, ancak ortadaki kısım, özellikle:
\( -perm -0002 -a ! -perm -1000 \)
Eğik çizgiler ne anlama geliyor? ! -perm -1000Bu izinlere sahip olmayan dizinleri aramak ve bu izinlere sahip dizinleri aramak anlamına geldiğini varsayıyorum -perm -0002, ancak yalnızca 644 formundaki izinleri görmeye alışkınım (örneğin). Neden dört rakam var? Ayrıca -abayrak ne işe yarar?
Yanıtlar
In manuel şunları bulabilirsiniz:
Operators
Operators join together the other items within the expression.
They include for example -o (meaning logical OR) and -a
(meaning logical AND). Where an operator is missing, -a is
assumed.
Yani kelimenin tam anlamıyla şu \( -perm -0002 -a ! -perm -1000 \)anlama gelir: perm = 0002 ve perm = 1000 değil
perm = 0002, Diğerleri için yazılabilir anlamına gelir
perm = 1000, yapışkan bitin ayarlandığı anlamına gelir.
Dolayısıyla bu ifade, Diğer için yazılabilir dosya arar ve yapışkan bit kümeleri olmadan.
Dizin araması -type d daraçlar dizini ile yapılır, bu nedenle dizin türündeki nesneye bakmayı bulun
Bulma kılavuzundan -permbirkaç form vardır:
-perm 0002tüm dosyaları bu tam izin ayarıyla eşleştirecek-perm -0002bu sağ bitin ayarlandığı tüm dosyalarla eşleşecek (yani0772,1752... dosya başkaları için yazılabilirse kombinasyon ne olursa olsun)
Olarak -type d \( -perm -0002 -a ! -perm -1000 \)bunun yerine kabuk tarafından özel operatör olarak değerlendirilebilecek, bir argüman olarak geçirilebilir, böylece, birinci çizgi, kabuk için parantez için dizayn edildi. (Örneğin >, bariz nedenlerden ötürü aynısına ihtiyacınız olacaktır .) '('Ya olarak da yazılabilirler "(", ancak sonunda findyalnızca (ve görür ).
Parantez, koşulları gruplandırır ve -abir ve birleşiktir. Bu aynı zamanda arka arkaya koşullar için örtük varsayılandır, burada ile kullanıldığı gibi -type dve parantez içindeki ifade, -abunları açık bir şekilde birbirine bağlamaz. İfade tam olarak eşdeğerdir -type d -perm -0002 ! -perm -1000. Parantez gerçekten sadece veya bağlantılı olarak gereklidir -o.
-type daçıktır ve tüm izin bitleri ayarlanmış bir dosyayı aramak anlamına gelir . Veya bu durumda, başkaları için yazma izni ( ) ayarlanmış ve yapışkan bit ( ) ayarlanmayan dizinler (olumsuzluk nedeniyle). Sanırım buradaki kombinasyon şu şekilde de yazılabilir . İzin dizesinin önündeki kısa çizgiye dikkat edin, onsuz, anlamı farklı olacaktır. Bulmak için örneğin Linux kılavuz sayfasına bakın, "(ifade)" ve "-perm modu" nu arayın.-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t
Bir dizine yazma erişimi, içindeki dosyaların oluşturulmasına, kaldırılmasına ve yeniden adlandırılmasına izin verir ve yapışkan bit, diğer kullanıcıların sahip olduğu dosyaların kaldırılmasını ve yeniden adlandırılmasını önler. Tüm ifade, herhangi birinin herhangi bir dosyayı kaldırabileceği veya yeniden adlandırabileceği dizinleri arar.
-a: Mantıksal VE (-oVEYA için kullanılabilir)\(,\): parantezlerin kabukta özel bir anlamı olduğundan, eğik çizgi onlardan kaçmak için kullanılır- Dört basamaklı izinleri ile ilgilidir
sticky bit,setuid,setgid