Bir komutta bir dizin için dosya izinleri nasıl değiştirilir


11

Unix'te tek bir komutta bir dizinin tüm dosya izinlerini nasıl değiştirebilirim?


Yani dizindeki tüm dosyaların izinlerini değiştirmek mi istiyorsunuz? Bunun iç içe dizinlere de girmesini ister misiniz? Dizin (ler) in kendisinin veya yalnızca içindeki dosyaların izinlerini değiştirmek istiyor musunuz? Son olarak, sorunuzu göndermeden önce bu sitede aramayı denediniz mi?
Eter

Yanıtlar:


21

Bir dosya veya dizin girişindeki izinleri özyinelemesiz olarak değiştirmek için chmodkomutu kullanın ( özel seçenekleri hakkında daha fazla bilgi için man chmod'a bakın ):

chmod +x dir  # Set a directory to be listable
chmod +x file # Set a file to be executable

Bir dosyanın / dizinin sahibini özyineli olarak değiştirmek için (tüm torunları etkiler):

chown -R username           dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Bir dizindeki tüm dosyaların izin bitlerini özyinelemeli olarak değiştirmek için:

find dir -type f -exec chmod 644 {} ';' # make all files       rw-r-r-

Tüm dizinlerin izin bitlerini değiştirmek için:

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Bunu yapabilseydin iyi olur:

chmod -R 755 dir

Ancak bunun sorunları var. Dosyalara ve dizinlere aynı şekilde davranır. Yukarıdaki komut, dizinleri tüm kullanıcılar tarafından okunabilir ve okunabilir hale getirir, ancak aynı zamanda tüm dosyaları yürütülebilir hale getirir, bu da genellikle yapmak istemediğiniz şeydir.

Bunu olarak değiştirirsek 644, başka bir sorunla karşılaşırız:

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Sorun, 644dizin listesi bitini çıkarmasıdır ve bu yan etki, dosya ağacının daha fazla gezilmesini önler. Kullanarak bu soruna geçici bir çözüm bulabilirsiniz sudo, ancak yine de kök olmayan kullanıcılar için tamamen işe yaramaz dizinlerle sonuçlanır.

Mesele şu ki, chmod -Rbazı durumlarda gayet iyi çalışıyor (örn. chmod -R g-r), Ancak -xdosya ve dizinlerde rasgele çalıştığı için bitle uğraşmak istediğiniz durumlarda değil .


Neden ayarlamak istediğini 644ya -xda dizinleri ayarladığını düşünüyorsunuz ? Soru sadece izinlerini değiştirmek istediğini belirtiyor, özellikle neyi değil.
Reese Moore

@Reese Moore: Haklısın. Asker izinleri tekrar tekrar değiştirmekle ilgili bir şey bile söylemedi.
Joey Adams

1
Bunun için genellikle + ve - sembolik mod öğelerini kullanmak istersiniz; ie,chmod -R go=u,go-w /dir
dannysauer

6

chmod-Rdosya ve dizinlerdeki izinleri özyinelemeli olarak değiştirmek anlamına gelen bir bayrağa sahiptir.

Klasörler için doğru olanı yapmak için büyük 'X' harfini kullanabilirsiniz: 'X' = "yalnızca dosya bir dizinse veya zaten bazı kullanıcılar için yürütme iznine sahipse yürüt / ara"

Yani, örneğin: chmod -R ug = rwX, o-rwx.

Tüm bir ağacın sahibinin ve her dosyanın grubunun erişebilmesini ve başkalarının erişememesini sağlar. Zaten yürütülebilir tüm dosyalar daha sonra çalıştırılabilir olmaya devam eder ve tüm dizinlerde kullanıcı ve grup için 'x' olur, diğerleri için değil.


chmod -R 444 somedirİçinde dosya bulunan bir dizini deneyin . Sen almak Permission denied-x bayrak dizinleri çıkarmış oluyor ve dizini okumaya devam etmek gerekli diye.
Joey Adams

1
Buna yararlı bir ek X = Y sözdizimidir. Örneğin, grup ve kullanıcı eşdeğerini ayarlamak için chmod -R g = u dir komutunu kullanarak kullanıcı izinlerine grup izinleri ayarlayabilirsiniz. Bu, "düz" dosyalar gerekmediğinde çalıştırılabilir olması gereken dirs gibi şeyler etrafında çalışır.
Paul Rubel

3
chmod -R <file permission> *

Man sayfasından chmod:

-R, --recursive
              change files and directories recursively

İçinde milyonlarca dosya bulunan alt dizin ağacına sahip birden çok yön için switch chmodile birlikte kullanın -Rve bu dosyaların tek bir seferde dosya izinlerini değiştirmek istiyorsunuz.

Dosya izni örn. 777, 755, 644 vb.

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.