Tamam, Mac OS X, BSD ve Linux için "chmod" man sayfalarını tekrar okudum ve birkaç deney yaptım. İşte sembolik modlar hakkında öğrendiklerim. Karmaşıklaşabilir, ancak anlamaya değer:
- Genel biçim fıkra [, fıkra …] buradadır:
- fıkra : = [ugoa] [+ - =] [rwxXstugo]
- [ugoa] ( who ) (çoklu belirt) kullanıcı, grup, diğerleri veya herkes için izin ayarlamak anlamına gelir. Belirtilmezse, varsayılan değer ' a'dır , ancak umask etkindir.
- [+ - =] ( eylem ) (birini belirtin) şu anlama gelir:
- +, belirtilen izinleri geçerli olan izinlere eklemek anlamına gelir
- - Belirtilen izinlerin yürürlükteki izinlerden kaldırılması anlamına gelir.
- = izinleri belirtilen izinlere ayarlamak, diğerlerini silmek anlamına gelir
- [rwxXstugo] ( izin ) (rwxXst VEYA ugo'nun çoğunu belirtin), belirtilen kullanıcılar için izinleri aşağıdaki gibi ayarlar:
- r - oku
- w - yaz
- x - yürütme / arama
- X - iff dizininde execute / search VEYA herhangi bir execute bit zaten ayarlanmış.
- s - intihar veya sgid
- t - yapışkan
- u - kullanıcı iznini kopyala
- g - grup iznini kopyala
- o - diğer izinleri kopyala
Örneğin, a+x
bir dosyayı herkes tarafından çalıştırılabilir yapar. a+X
bir dosyayı herkes tarafından çalıştırılabilir olsaydı, herkes tarafından çalıştırılabilir hale getirirdi.
a+x
Bir dizini herkes tarafından aranabilir yapar. a+X
aynı zamanda herkes tarafından aranabilir bir dizin oluşturur.
BSD ve Linux arasındaki temel fark, BSD ile, chmod yürütülmeden önce dosyanın izinlerine dayanarak tespit yapılmasıdır . Linux ile belirleme, + X yan tümcesinin yürütülmesinden hemen önce belirlenir.
Böylece, BSD ile kombinasyon a-x,a+X
, yürütme / arama iznini kaldırır ve daha sonra herkes tarafından aranabilir bir dizin oluşturur ve orijinal olarak herhangi biri tarafından çalıştırılabilir olsaydı , bir dosyayı herkes tarafından çalıştırılabilir hale getirir .
Linux ile, a-x,a+X
yürütme / arama iznini kaldırır ve daha sonra bir dosyayı kimsenin çalıştırmadığı bir dosya bırakırken herkes tarafından aranabilir bir dizin oluşturur.
İşte somut bir örnek: bir BSD makinesinde: bir dizin, çalıştırılabilir bir dosya ve çalıştırılamaz bir dosya:
drwxr-x--- 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--- 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
Hem dizinin hem de "fie" nin kullanıcı tarafından yürütülebilir / aranabilir olduğunu, ancak başkaları tarafından olmadığını gözlemleyin.
Şimdi idam ediyoruz chmod a-x,a+X *
. İlk fıkra, tüm dosyalar için tüm kullanıcılardan çalıştırma / arama bitini soracak, ancak ikinci fıkra hem "ücret" hem de "fie" için geri ekleyecektir. Bir dizin olduğu için "fee" ve başlayabileceği en az bir çalıştırılabilir bit olduğundan "fie".
drwxr-x--x 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--x 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
Ben de aynı sonucu elde ettim chmod -x+X
.
Sonuç: Jak Gibb'in çözümü Linux'ta çalışacak, ancak BSD için iki geçiş yapmanız gerekecek.
Bunu SVr4 veya diğer Unix değişkenlerinde test etmedim.