-bendera sperma ditemukan

Sep 05 2020

Saya mencoba untuk membungkus kepala saya di sekitar perintah ini:

find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null

Saya mengerti bahwa ini akan mencari di direktori 'home' untuk semua direktori dan mengarahkan semua pesan stderr ke file (untuk menyembunyikannya), namun saya bingung dengan bagian di tengah, khususnya:

\( -perm -0002 -a ! -perm -1000 \)

Apa arti garis miring? Saya berasumsi ! -perm -1000berarti mencari direktori tanpa izin tersebut, dan -perm -0002berarti mencari direktori dengan izin tersebut, tetapi saya hanya terbiasa melihat izin dalam formulir 644 (misalnya). Kenapa ada empat digit? Juga, apa fungsi -abendera itu?

Jawaban

4 netmonk Sep 05 2020 at 17:45

Di manual Anda dapat menemukan:

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.

Jadi secara harfiah \( -perm -0002 -a ! -perm -1000 \)berarti: perm = 0002 dan bukan perm = 1000

perm = 0002 berarti dapat ditulisi untuk Lainnya
perm = 1000 berarti bit lengket disetel.

Jadi ekspresi ini mencari file yang dapat ditulis untuk Lainnya dan tanpa set bit lengket.

Mencari direktori dilakukan dengan -type d ddirektori means sehingga mencari objek berjenis direktori

Dari manual find, -permmemiliki beberapa bentuk:

  • -perm 0002 akan mencocokkan semua file dengan pengaturan izin yang tepat ini
  • -perm -0002akan cocok dengan semua file di mana bit kanan ini diatur, (yang berarti 0772, 1752... kombinasi apa pun jika file tersebut dapat ditulisi untuk orang lain)
5 ilkkachu Sep 05 2020 at 22:23

Dalam -type d \( -perm -0002 -a ! -perm -1000 \), pertama, garis miring melarikan diri kurung untuk shell, sehingga mereka dapat lulus sebagai argumen, bukannya ditafsirkan sebagai operator khusus oleh shell. (Anda akan membutuhkan hal yang sama untuk misalnya >, untuk alasan yang jelas.) Mereka dapat ditulis sebagai '('atau "(", juga, tetapi pada akhirnya findhanya melihat (dan ).

Tanda kurung mengelompokkan kondisi, dan -amerupakan dan konjungsi. Itu juga default implisit untuk kondisi back-to-back, seperti yang digunakan di sini dengan -type ddan ekspresi dalam tanda kurung, tidak ada yang -amenghubungkannya secara eksplisit . Ekspresinya sama persis dengan -type d -perm -0002 ! -perm -1000. Tanda kurung benar-benar hanya dibutuhkan dengan atau konjungsi -o.

-type djelas, dan berarti mencari file dengan semua bit izin yang ditetapkan. Atau, dalam kasus ini, direktori dengan set izin menulis untuk orang lain ( ), dan bit lengket ( ) tidak disetel (karena negasi). Saya pikir kombinasi di sini juga bisa ditulis sebagai . Perhatikan tanda hubung di depan string izin, tanpa itu, artinya akan berbeda. Lihat misalnya halaman manual Linux untuk menemukan , cari "(expr)" dan "mode -perm".-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t

Akses tulis ke direktori memungkinkan pembuatan, penghapusan, dan penggantian nama file di dalamnya, dan sticky bit mencegah penghapusan dan penggantian nama file yang dimiliki oleh pengguna lain. Seluruh ekspresi mencari direktori tempat siapa pun dapat menghapus atau mengganti nama file apa pun.

2 binarysta Sep 05 2020 at 17:47
  • -a: adalah Logis DAN ( -odapat digunakan untuk ATAU)
  • \(, \): Karena tanda kurung memiliki arti khusus pada shell, garis miring digunakan untuk menghindarinya
  • perizinan empat digit terkait dengan sticky bit, setuid,setgid