bulmada -perm bayrağı

Sep 05 2020

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

4 netmonk Sep 05 2020 at 17:45

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 0002 tüm dosyaları bu tam izin ayarıyla eşleştirecek
  • -perm -0002bu sağ bitin ayarlandığı tüm dosyalarla eşleşecek (yani 0772, 1752... dosya başkaları için yazılabilirse kombinasyon ne olursa olsun)
5 ilkkachu Sep 05 2020 at 22:23

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.

2 binarysta Sep 05 2020 at 17:47
  • -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