Bir dizinin tüm dosya ve klasör izinlerini 644/755 olarak değiştirin


185

Nasıl kullanarak 755 644 tüm dosya ve klasörlerin değiştirecek chmodgelen linuxkomut istemine? (Terminal)


6
Birisi (@animuson) bana açıklamak için çok nazik olsaydı, bu chmod sorusunun neden konu dışı olduğunu ve diğerlerinin (14.438 sonuç) burada olmadığını ...
hugo der hungrige

Biraz geç, ama bu tek komut da kabul edilen cevabı tek çekimde yapacak: chmod -R a = r, a + X, u + w / yolunuz
MichaelICE

Güzel soru, kapanmayı hak etmiyor. Bunlar kapalı yerine yığın akışı alt sitesine taşınmalıdır.
Erik Friesen

1
@hugoderhungrige demek gitmek gibi bir Sunucu sitesinde sormak anlamına gelir http://superuser.com:: P ama bu soru burada bana yardımcı oldu, teşekkürler.
emotalite

Yanıtlar:


346

Bir yaklaşım find kullanarak olabilir:

dizinler için

find /desired_location -type d -print0 | xargs -0 chmod 0755

dosyalar için

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
sadece benim gibi başka biri için, bunun yerine sudo find /your/location -type f -exec chmod 644 {} \;dosyalar ve sudo find /your/location -type d -exec chmod 755 {} \;dizinler için deneyin
NineCattoRules

Orijinal çözümü çalıştırdım ve dosyalar ve dizinler üzerindeki izinlerimi berbat ettim. dikkat et! Yorumdaki çözüm işe yaradı, teşekkürler!
Mahsa Mortazavi

3
Neden (?) Daha iyi tham chmod -R a=r,u+w,a+X /foo?
Peter Krauss

başarısızunable to execute /bin/chmod: Argument list too long
vladkras

İstenilen_konumu belirtirken yalnızca alt klasörün chmod 755 olmasını istersem ne olur? Çünkü bu aynı zamanda 755
MaXi32

105

En kolay yol:

chmod -R u+rwX,go+rX,go-w /path/to/dir

temel olarak şu anlama gelir:

için change dosyanın modes -Rvererek ecursively:

  • user: read, write ve e Xecute izinleri,
  • group ve other kullanıcıları: read ve e Xecute izinleri, ancak -wayin izni değil .

XÖnceden aranabilir / yürütülebilir değilse, bir dizini yürütülebilir, ancak bir dosya yapamayacağını lütfen unutmayın .

+X - zaten herkes tarafından aranabilir / yürütülebilir ise, bir dizini veya dosyayı herkes tarafından aranabilir / yürütülebilir hale getirin.

Daha man chmodfazla ayrıntı için lütfen kontrol edin .

Ayrıca bkz: Dosyalar dışındaki tüm dizinleri nasıl yineleyebilirsiniz (özyinelemeli)? SU'da


7
chmod -R a = r, u + w, a + X / foo
John Allsup

9
Düzgün olsa da, bu sorunun bir sorunu vardır: komutu çalıştırmadan önce yürütülebilir bir dosya daha sonra yürütülebilir. Bu kusuru olmayan bir komut için @JohnAllsup cevabına bakınız.
mzuther

4
@mzuther bu sorun aslında sizin için bir özellik değilse
RiaD

37

Gelebildiğim en kısa şey:

chmod -R a=r,u+w,a+X /foo

GNU / Linux üzerinde çalışan ve genel olarak Posix'e inanıyorum (şu okumaya göre: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Bunun yaptığı:

  1. Dosya / dizini r__r__r__ olarak ayarla (0444)
  2. Rw_r__r__ (0644) almak için sahip için w ekleyin
  3. Tüm dizinler için execute (dizin için 0755, dosya için 0644).

Önemli olarak, 1. adım izni tüm yürütme bitlerini temizler, bu nedenle 3. adım yalnızca dizinler için yürütme bitlerini geri ekler (asla dosyalar). Ek olarak, üç adımın tümü bir dizin tekrarlanmadan önce gerçekleşir (bu nedenle bu, örn.

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

a = r, x'i dizinlerden kaldırdığından, chmod bunlara katılamaz.)


parlak! Bana çok yardımcı oldu
Jannie Theunissen

13

Hatırlamam en kolay iki işlem:

chmod -R 644 dirName
chmod -R +X dirName

+ X yalnızca dizinleri etkiler.


1
En basit ve daha güvenli
Marco Marsala

12

Https://help.directadmin.com/item.php?id=589 üzerinde şunu yazarlar:

Public_html verilerinizi dizinler için 755 ve dosyalar için 644 olarak sıfırlamanın hızlı bir yoluna ihtiyacınız varsa, bunun gibi bir şey kullanabilirsiniz:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Test ettim ve ... işe yarıyor!


Hayat kurtarıcı! Bu sorunun temiz çözümü için teşekkürler! Bir WordPress yüklemesi için izin sorunlarını düzeltmek gerektiğinde benim için çalıştı!
twknab

Bir dizinde ayarlamalar yapmak için iyi çalışır.
Christian Berendt

8

Bu benim için çalıştı:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
Dikkatli olun: Bu komutlar, adlarında boşluk bulunan dosyaları veya dizinleri işlemez. Kabul edilen cevaptaki komutlar olacaktır.
Chad Nouis

1
Bu uyarı yalnızca, {} tırnak işaretleri arasında değilse… geçerlidir, bu nedenle print0 ve xargs -0 ile oynamak için bir neden yoktur, aşağıdaki find /A -type X -exec chmod Y '{}' \;
yeterlilikler vardır

6

Her ikisini de tek bir geçişte yapın:

find -type f ... -o -type d ...

Olduğu gibi, f türünü VEYA d türünü bulun ve ilkini ... dosyalar için, ikincisini ... dirs için yapın. özellikle:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Bırak --changesbunu sessizce çalışmak istiyorsanız.


2

Public_html verilerinizi dizinler için 755 ve dosyalar için 644 olarak sıfırlamanın hızlı bir yoluna ihtiyacınız varsa, bunun gibi bir şey kullanabilirsiniz:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Ayrıca, PHP'nin "apache" olarak değil, kullanıcı olarak çalıştığını biliyorsanız, ek bir güvenlik düzeyi için PHP dosyalarını 600'e ayarlayabilirsiniz, örneğin:

find . -type f -name '*.php' -exec chmod 600 {} \;

Bu başvuruyu burada bulabilirsiniz: https://help.directadmin.com/item.php?id=589


-9

Bu da işe yarayabilir:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

1
HERKESİ YAPMAYIN! tam sunucuyu etkiler!
T.Todua
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.