Neden `chmod 644` yerine chmod u = rw kullan, go = r,…`?


38

Birkaç yıldır * nix üzerinde çalışıyorum ve alışamayacağım şeylerden biri koddaki sekizli izinler. Tercih hat uzunluğundan daha başka bir nedeni var mı chmod 644 ...üzerinde chmod u=rw,go=r ...?

Not: Sekizlik izinlerin açıklamasını aramıyorum. Nasıl çalıştıklarını biliyorum ve el kitabında iyi anlatılmıştı. Neden oktalın daha okunaklı bir formda tercih edildiğini soruyorum.

Yanıtlar:


40

Sekizli kodları kullanmanın, ikisinin de bu kadar büyük olmadığı düşünülebilecek iki avantajı var:

  1. Daha kısa, yazması daha kolay.
  2. Birkaç şey yalnızca onları anlar ve bunları düzenli olarak kullanırsanız, birine rastladığınızda başınızı çizmeyeceksiniz (veya dokümantasyona koşmayacaksınız). Örneğin, chmodPerl veya C için octal kullanmanız gerekir .

Bazen gerçekten basit uygulamalar "dostça" sürümleri kullanmaz; özellikle GNU dışı kullanıcılarda.

Ayrıca, bazı kamu hizmetleri octal tükürür. Örneğin, umaskgeçerli umask'ınızın ne olduğunu görmeye çalışırsanız , onu sekizlik olarak tükürür (bash'ta umask -Ssemboliktir).

Yani, kısacası, onları tercih etmenin tek sebebinin daha az karakter yazmak olduğunu söyleyebilirim; sadece sekizlik yapan şeylerden birine. Ancak 5 haritanın derhal bilinmesine gerek yok rx, sadece bunu çözebilmeniz gerekiyor.


1
Diyen chmodPerl veya C sekizlik gösterimini kullanması gerekir gerçekten zaten ilk etapta mevcut temsili olarak görerek bir avantaj değildir.
n0pe

@MaxMackie: Onları kullanarak sizin için bir avantaj. Netleştireyim.
derobert

18

Sanırım çok uzun zamandır sekizlik kullanıyorum.

7 rwx (onunla herhangi bir şey yap), 5 rx (yürütmek için okumalısınız), 6 wr (değiştirmeniz gereken herhangi bir veri dosyası), 4 r (buna bakmanıza izin vereceğiz) ve 0 - (üzgünüm, görecek bir şey yok). Ve sıra, Ben, Biz, Herkes. Bunlar temel kombinasyonlardır.

755 Değiştirebilir ve çalıştırabilirim, herkes onu çalıştırabilir.

644 Bunu değiştirebilirim, herkes okuyabilir.

444 Sadece herkes için oku, biz buradayız.

500 Ben yürütebilirim, değişmesini istemiyorum, herkes geri çekildi.

Benim için mesele kısa. 9 karakter ve bir dosya belirtip devam edin.


Peki, sekiz (8 tabanca), altıgen değil (16 taban).
derobert

Evet, o, bir buçuk altıgen. <grin>
Fiasco Labs

Burada da, sekizli yazıyı metin versiyonundan daha kolay buluyorum ...
Brian Knoblauch

13

Sekizlik temsilden hiç hoşlanmadım, rwxr-xr-xbana daha basit göründüğü için her zaman doğrudan gösterime gittim . Bununla birlikte, topladıklarımdan sekizli temsil, hatırlamamızı kolaylaştırmak için var (bunun nasıl çalıştığını görmüyorum).

Masaya getirilen octalın tek olası yararı belirsizlik. 8 farklı izin biti konfigürasyonu, bazı insanların yanlışlıkla wolmaması gereken bir yere koymalarına yardımcı olduğundan emin olduğum tek bir farklı numarayla temsil edilir .

Ne yazık ki, bu tabloyu ezberledim:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1

8
Her 3 kümesi için ikili kullandığını öğrendim, bu yüzden (110) (000) (000), ki (6) (0) (0) olacaktır. rwxr-xr-x, (111) (101) (101), böylece (7) (5) (5) olacaktır.
Rob,

4
Birincil bu C'de 4 sekizlik rakam, orijinal UNIX izin sistemi programlandı nasıl için (1777 gibi özel olanlar, hatırlamak için sekizlik temsil var olmasının nedeni budur /tmpPDPs 12 bit, uygun bir boyut alır yapışkan bit,), özellikle de PDP-8. Onaltılık ile gitmiş olsaydı, onaltılık basamak başına ayarlanmış bir izin için doğal bir haritalama, tüm PDP'lerin olmadığı bir 16-bit + kelime makinesine ihtiyaç duyardı. Ayrıca, 3 bit boşa harcanacak ya da muhtemelen Unix'in gerçek bir faydası olmadan izin verdiği karmaşık olan bu bitler için bir kullanım icat etmeleri gerekecekti.
Warren Young,

⁺¹ @Rob btw'ye gider. Nitekim, ondan sonra ikili gösterimden gerçek bir sayı hesaplamak temel bir kombinatoriktir ve maksimum sayı (yani 111b) 7'yi geçmeyeceğinden "sekizli" olduğunu hatırlamanıza bile gerek yoktur.
Hi-Angel

Bu masa bunu çok netleştiriyor. Bu harika!!!
Little Roys,

6

Sanırım sebebi yine - tarih. İlk başta, sekizlik değerler sadece idi. Sembolik olanlar daha sonra geldi.

Ben sembolik olanları tercih ederim. Özellikle, diğer bölümlere dokunmadan mevcut değerleri değiştirmek istiyorsanız.

chmod -R u=rwx,g-w+X,o=-Sekizli olarak bunu yapmak gibi ...


3

Sekizli modların bazı sistemlerde setuid ve setgid bitlerini kaldırabileceğini unutmayın.

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

( 2korunmuş)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

( 2oldu a 0)

Bir dosyayı veya müdürün izinlerini değiştirmek istiyorsanız, sadece değiştirmek istediğiniz bitleri belirtmek daha iyi olabilir (örneğin chmod o= dirveya chmod o-rwx diryukarıdaki örnekte).


2

Tarih, sekizlik modların neden var olduğunu açıklar , ancak işlevselliğin, anımsatıcı formun varlığının nedeni olduğunu düşünüyorum. Ve sadece sekizlik modlarını kullanan diğer araçlar hakkında tüm noktaları tamamen geçerli ve düşündüğünü var öğrenmek ve onları tanımak. Bununla birlikte, muhafazakar yöneticilerin hatırlatıcı formdan gelen asıl yardımcı programı görmediğini görüyorum.

Sekizli form, özellikle özyinelemeli olarak kullanıldığında, yöneticileri aptalca şeyler yapmaya zorlama eğilimindedir. Ya da daha doğrusu eklenmiş ihmal sonucu aptallığa dönüşmesine neden olur. Çok fazla metin dosyası ve xbit kümesi içeren bir klasöre rastladığınızda , kanıtınız vardır.

Neden biri bu şekilde xayarlasın ki? Çünkü modlar için mnemonic formunu kullanmadıkça zor değil. İzinleri sıfırlamak istediğinizi /var/wwwve eski tip CGI'leri çalıştırmadığınızı, bu nedenle xbitin kaldırılması gerektiğini düşünün . Ancak, xbit dizinlerde başka bir amaca hizmet eder. Sonunda, şöyle bir şey yapıyorsun root:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

Ancak, anımsatıcı formu kullanıyor olsaydınız, ona “tarif” verebilirdiniz:

chmod -R a=rwX /var/www

bu da kısa şeklidir chmod -R ugo=rwX /var/www(aynı, ancak farklı yola ulaşmak:) chmod -R a-x,a+rwX /var/www.

Ancak, sekizli modlarla elde edilemeyecek daha önemsiz başka bir şey daha var. userVeya groupveya othermaskesini, sekizlik formla ayrı ayrı ayarlayamazsınız .

Kısacası: bir neşter (anımsatıcı) ve keskin bir mutfak bıçağı (sekizli) karşılaştırmak gibi ... ama yine de sekizli mod bitlerini başka nedenlerle bilmek zorundasın :)

Sekizli modların hala tercih edilmesinin nedeni , bence, hatırlatıcı formda yer almaktan daha fazla yazı yazmak değil, aşırı muhafazakar yöneticiler. Ve evet, 2013 çağrısı, aşırı muhafazakar yöneticiler hala var ve bir süre kalmak için buradalar.


0

Dosyaların izinlerini her zaman değiştirmeniz gerektiğinde , 3 karakterden memnun kalırsınız. İzinleri değiştirmek için +veya -versiyonlarını kullanıyorum .

Örneğin, apache klasörümde yeni bir PHP, Python veya başka bir komut dosyası oluşturuyorum. chmod a+xtek yaptığım şey çalıştırılabilir. "Hepsi artı yürüt" olarak okudum. Şimdi işe yarayacağını biliyorum ve sadece 3 karaktere ihtiyacım vardı.

Diğer zamanlarda 644 ve 755'i otomatik olarak kullanıyorum. Ben sadece 644bir dosya 755anlamına gelir, bir komut dosyası anlamına gelir.


0

Genellikle sekizlik yazı ( pamveya içinde fstab) olarak verilen umask ayarlarına uygundur .


0

Önemli bir nedenin, sekizlik temsilinin gördüğünüzle yakından eşleşmesi olduğunu ls -l(ya da zihinsel olarak sekizli ve ikili arasında zihinsel olarak dönüştüğünüzde yaptığı gibi) öneriyorum .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.