Linux'ta bir klasör ve tüm alt klasörleri ve dosyaları için izinleri tek bir adımda nasıl değiştirebilirim? [kapalı]


1806

Linux'ta bir klasörün ve tüm alt klasörlerinin ve dosyalarının izinlerini bir adımda (komut) değiştirmek istiyorum.

Zaten aşağıdaki komutu denedim ama sadece belirtilen klasör için çalışır:

chmod 775 /opt/lampp/htdocs

Ayarlamak için bir yolu var mı chmod 755için /opt/lampp/htdocsve alt klasörler ve dosyalar da dahil olmak üzere tüm içeriği?

Ayrıca, gelecekte, içinde yeni bir klasör veya dosya htdocsoluşturursam, izinleri otomatik olarak nasıl ayarlanabilir 755?

Ben de bu bağlantıya bir göz vardı:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal


4
Sen yazmak istedin mi yoksa chmod 75 /opt/lampp/htdocsbu gerçekten olmalı chmod 755 /opt/lampp/htdocsmı?
HelloGoodbye

233
Linux hakkında en çok oy alan 4. sorunun "konu dışı" olması çok eğlenceli. Kim ama bir programcı chmod umurunda değil? Bu konu dışı nasıl? Neden "izinler", "klasör" ve "cmod" etiketleri konu dışıysa bile etiketlenir?
Arthur Dent

8
@ArthurDent, çünkü bu soru (mükemmel derecede geçerli ve yararlı olsa da) SuperUser veya ServerFault gibi sistem odaklı bir SE sitesi için daha uygundur. Programlama ile ilgili değildir.
timelmer

26
@timelmer Tabii, ama yine soruyorum, neden "izinler", "klasör" ve "cmod" etiketleri? CMOD programlama için ne zaman 'açıkça' kullanılır?
Arthur Dent

9
Gerçekten seçici olmak istiyorsanız, Bash aslında bir betik dilidir, ancak SO da akla gelmeyen php'dir.
timelmer

Yanıtlar:


2957

Diğer yanıtlar doğrudur, çünkü chmod -R 755bu izinler ağaçtaki tüm dosyalara ve alt klasörlere ayarlanır. Ama neden yeryüzünde istesin ki ? Dizinler için mantıklı olabilir, ancak neden tüm dosyalarda yürütme bitini ayarladınız?

Gerçekten yapmak istediğiniz şey dizinleri 755 olarak ayarlamak ve dosyaları yalnız bırakmak veya 644 olarak ayarlamak olduğunu sanıyorum find. Bunun için komutu kullanabilirsiniz . Örneğin:

Tüm dizinleri 755 ( drwxr-xr-x) olarak değiştirmek için:

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Tüm dosyaları 644 ( -rw-r--r--) olarak değiştirmek için:

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;

231
Herkes {} \;sonunda ne anlama geldiğini açıklamak ister misiniz?
Nilzor

307
@Nilzor , her dosya için chmod 644 {} \;yürütülecek komutu belirtir find. {}, dosya yolu ile değiştirilir ve noktalı virgül komutun sonunu belirtir (kaçar, aksi takdirde kabuk yerine yorumlanır find).
Ocak 13'te tobbez

25
"ama neden tüm dosyalarda yürütme bitini ayarladınız" Neden olmasın? Ubuntu / Linux'ta
yeniyim

12
@FlavorScape Womble, yürütme bitini yalnızca find tarafından döndürülen dizinlerde ayarlıyor. Bir dizindeki yürütme izni, bir kullanıcı sınıfının o dizinin içeriğini listelemesine ve dizine cd yazmasına izin verir. Genel olarak konuşursak, bir dizindeki hem r hem de x'in sizin için erişilebilir olmasını istersiniz, ancak yalnızca birini veya diğerini ayarladığınız garip kenar durumlar olabilir. Daha fazla bilgi için bu kılavuza bakın: nixsrv.com/llthw/ex23
Alexandr Kurilin

25
Sleepynate hariç, her yanıt, gelecekte oluşturulan dosyalara / klasörlere izinlerin ayarlanmasıyla ilgili sorusunun yönünü ele almayı ihmal etmiştir .
JGarrido

781

-R seçeneğini işaretleyin

chmod -R <permissionsettings> <dirname>

Gelecekte, önce man sayfasını kontrol ederek çok zaman kazanabilirsiniz:

man <command name>

Yani bu durumda:

man chmod

147
bu mannedir?
Adam

36
manuel sayfa anlamına gelir ve bir komutun man sayfasını gösteren bir linux komutudur (linux komutlarının çoğunda bir man sayfası vardır). denemek adam ls veya adam adam.
Steve Robillard

8
Bu benim için Mac OS X Terminalinde işe yaramadı. Orada "chmod -R <permissionsettings> <dirname> *" yaptım ve işe yaradı.
Einar Ólafsson

127
Şimdiye kadar, aslında burada yayınlamak veya Google'ı kullanmaktan daha hızlı man. Özellikle yeniyseniz grepnerede olursanız olun man, belgedeki örnekleri bulmak çok zaman alabilir, ancak Google veya SO saniyeler içinde örnekler sağlar.
ely

17
Kayıt için Linux'a aşina olmayanlar insana aşina olmayabilir. Ben sadece onun varlığını biliyorum, ama nasıl kullanılacağını anlamaya çalışmak başlı başına bir google macerası gerektirecektir. Muhtemelen değerli bir girişim, ama bu ÇOK yazı google üzerinden bulduğumu ve soruyordu kesin soruya cevap olduğunu fark etmelisiniz. Kaynaklar, dostum. Kaynaklar paha biçilmezdir. Ve bunun anlamsız olduğunu ve erkeği kontrol etmesi gerektiğini düşünebilirsiniz, ama bu bana ve başkalarının YÜZLERİNE (bin tane bile) yardımcı oldu. Lütfen bunu düşünün.
Soundfx4

391

Tüm dosyalarda a+rve tüm dizinlerde izinleri ayarlamak ve tüm a+xalt dizin ağacı üzerinden yinelemeli olarak yapmak istiyorsanız, şunu kullanın:

chmod -R a+rX *

X(Sermaye olduğunu Xdeğil, küçük x(onlar zaten birisi için yürütülebilir olmadıkça) dosyaları için yok sayılır ama dizinler için kullanılır!).


27
Mükemmel cevap. * İşaretinin gizli dosyalarla eşleşmeyeceğini unutmayın (nokta ile başlayan isimler). Kullanmak daha anlamlı olabilir. (geçerli dizin için).
Aaron Adams

21
Bu doğru cevap. Benim durumum için, tüm dizinleri 775'e ve tüm dosyaları 664'e ayarlamak istedim . @ Pete'nin mükemmel cevabı beni chmoddoktora götürdü , burada kullanabileceğimi anladım chmod -R g+wX .. Bravo!
chadoh

8
xZaten sahiplerse bu dosyalar kaldırılmaz .
Benoit Duffez

5
Tamamen net değilse, büyük X harfi "tüm dizinleri yürütülebilir yap" (dosyalar değil) anlamına gelir.
Matt Browne

4
@BenoitDuffez Hedefiniz dosyalardan yürütülebilir biti de kaldırmaksa, "a-x + rX" gibi yönergeleri birleştirerek her şeyden "x" 'i ve ardından "r" yi her şeye ve "x" yalnızca dizinlere ayarlayabilirsiniz .
rahibeler

144

Tüm dosyaların ve alt klasörlerin özyinelemeli geçişi için -Rile birlikte kullanabilirsiniz chmod.

Mevcut kullanıcı veya başka bir LAMP tarafından yüklenen LAMP'a bağlı olduğundan sudo'ya ihtiyacınız olabilir :

sudo chmod -R 755 /opt/lampp/htdocs

17
Her nasılsa, sudo chmod 755 -R /directoryişe yaramadı ama işe sudo chmod -R 755 /directoryyaradı. Tuhaf. Bu arada Mac OS X kullanıyorum.
lomse

8
Deneyimlerime göre bu doğru. Bayrak, dizenin hiçbir yerinde değil, doğrudan chmod'dan sonra görünmelidir.
orionrush

1
Yukarıda yazılı komut yanlış. Doğru özyinelemeli komut: sudo chmod -R 755 / opt / lampp / htdocs Not: -R, 755'ten önce olmalıdır
Sandip Patel - SM

Bu çözüm Redhat için iyi çalışıyor. Teşekkürler!
Lavande

sudo chmod 755 -R
RHEL'de

79

Doğru özyinelemeli komut:

sudo chmod -R 755 /opt/lampp/htdocs

-R: geçerli klasör dahil her alt klasörü değiştir


1
merhaba yola rağmen mevcut klasör hakkında emin misiniz?
shareef

OSX KULLANIMI: sudo chmod 777 günlükleri / -R ALMA: chmod: -R: Böyle bir dosya veya dizin yok OLMALIDIR: sudo chmod -R 777 günlükleri /
elad silver

76

Tüm alt klasörlere (yinelemeli) ayarlamak için -R kullanın

chmod 755 /folder -R

Ve umask'i kullanarak varsayılanı yeni klasörlere / dosyalara ayarlayın cd / folder umask 755


24
umask755 olarak ayarlamayın ! Oluşturduğunuz hiçbir dosyayı veya dizini listeleyemez, okuyamaz veya kullanamazsınız!
sleepynate

14
Şunu mu demek istedin umask 022?
Xkeeper

4
bu, dosyalar dahil olmak üzere tümünü 755 olarak ayarlar.!
Patrick Mutwiri

@sleepynate Sen neden bahsediyorsun? 755, sahibin okuyabileceği, yazabileceği ve çalıştırabileceği ve diğer tüm kullanıcıların okuyabileceği ve çalıştırabileceği, ancak nesneye
yazamayacağı anlamına gelir

2
@NicHartley @ svin83 umask izinlerden maskelenecek bitlerdir, bu yüzden etkili bir şekilde chmod'un tersidir. λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
sleepynate

51

chmod 755 -R /opt/lampp/htdocsizinleri özyinelemeli olarak ayarlar. Yalnızca izinleri ayarladıktan sonra oluşturulan bu dizinde dosyaların izinlerini otomatik olarak ayarlamanın bir yolu yoktur, ancak sistem genelinde varsayılan dosya izinlerinizi ayarlayarak değiştirebilirsiniz umask 022.


9
sleepynate'in cevabı SADECE doğrudur. Poster iki soru sordu: 1) Dosya ve klasörlerdeki izinleri nasıl düzeltebilirim ve 2) varsayılanları nasıl değiştirebilirim ("gelecek" dosyaları). Nate'in dediği gibi, birincisi "chmod" ile, ikincisi "umask" ile. Ben de sadece 1 dizinde umask değiştirmek için YOK YOK eklemek istiyorum ... umask "her şey ya da hiçbir şey" kullanıcı başına. Ancak hiçbir şey sadece 'sudo -u someuser "[dosyası oluşturmak], böylece yeni bir kullanıcı sizinle paylaşır grupları oluşturarak alıkoyar kutunun dışında' s düşünme biraz, ama ince bir geçici çözüm var bu..
Scott Prive

Doğru olduğunu düşünüyorum, ancak inheritbirçok duruma bir çözüm olamaz mı yoksa sadece NTFS-3G ile çalışacak mı?
Sebastian Schlicht

gelecekte klasörlere izin verilmeden oluşturulabilir myforlder, başka bir yerden (PC gibi) bu hedef dizine (sunucuda) bir klasör kopyalanamayabilir, çünkü bu klasörde yeni bir klasör oluşturmaya çalışacaktır. myfolder iznine sahip olmadığınız adla hedef dizin . Sahip olduğum gibi root, sadece kullanıyorum chown -R username:usergroup /directory.
Jason Goal

27

Süper kullanıcıda nik tarafından verilen bu yanıtı dikkate almak ve şu gibi tüm dosyalar / klasörler için "bir chmod" kullanmak isteyebilirsiniz :

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

9
Uyarı, komut satırı sınırlarına girmek kolaydır.
Lothar

1
Bu hatayla karşılaştım: -bash: / bin / chmod: Bağımsız değişken listesi çok uzun
Oleg Abrazhaev

Hatanın üstesinden gelmek için -execseçeneğini kullanmak daha iyi olurdu . findArgument list too long
miravalls


20

kullanın:

sudo chmod 755 -R /whatever/your/directory/is

Ancak buna dikkat edin. Yanlış dosya / klasörlerin izinlerini değiştirirseniz size gerçekten zarar verebilir.


20

Dizinleri 775'e ve dosyaları 664'e ayarlamanın başka bir yolu.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Uzun görünebilir, ancak üç nedenden dolayı oldukça havalı:

  1. Dosya sistemini iki kez değil, yalnızca bir kez tarar.
  2. Dosyaların nasıl işlendiği ve dizinlerin nasıl işlendiği konusunda daha iyi kontrol sağlar . Bu, muhtemelen dosyalara değil dizinlere uygulamak istediğiniz yapışkan bit gibi özel modlarla çalışırken kullanışlıdır .
  3. Doğrudan mansayfalardan bir teknik kullanır (aşağıya bakınız).

Bu çözüm ve sadece iki find komutu (Peter Mortensen'in çözümünde olduğu gibi) arasındaki performans farkını (varsa) doğrulamadığımı unutmayın. Ancak, kılavuzda benzer bir örnek görmek cesaret vericidir.

Sayfadan örnek man find:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

Şerefe


Şimdi, openmod $ klasörünü çalıştırabilmek için bunu bir kabuk betiğinde nasıl çevirebilirim?
StR

İnsanlar, lütfen xargs kullanın. Binlerce işlem çağrısını kaydeder.
seanahern

13

chmod -R 755 directory_nameçalışır, ancak yeni dosyaları 755'e nasıl saklarsınız? Dosyanın izinleri varsayılan izin olur.


Yaptım ama oradan terminal açamıyorum. Düzeltemiyorum.
Kavindu Gayantha

9

Mac OS X 10.7 (Lion) için:

chmod -R 755 /directory

Ve evet, diğerlerinin söylediği gibi, bunu yaparken dikkatli olun.


9

Uygun dosya ve dizinlerin chmod-ed / izinler olduğundan emin olmak istersiniz. İstediğiniz tüm dizinler için

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

Ve tüm resimler için JavaScript, CSS, HTML ... onları çalıştırmamalısınız. Öyleyse kullan

chmod 644 img/* js/* html/*

Ancak tüm mantık kodu için (örneğin PHP kodu), kullanıcının bu kodu göremeyeceği şekilde izinler ayarlamanız gerekir:

chmod 600 file

6

Ben Adam, /opt/lampp/htdocsdizinde çalışacak tüm işlemler için umask değerini nasıl değiştireceğini soruyordu .

Kullanıcı dosyası oluşturma modu maskesi (umask) yeni oluşturulan dosyalar için dosya iznini belirlemek için kullanılır. Yeni dosyalar için varsayılan dosya iznini kontrol etmek için kullanılabilir.

Bu nedenle, dosyaları yüklemek için bir tür ftp programı kullanacaksanız /opt/lampp/htdocs, ftp sunucunuzu istediğiniz umask'ı kullanacak şekilde yapılandırmanız gerekir.

Dosyalar / dizinler örneğin php tarafından oluşturulmuşsa, php kodunu değiştirmeniz gerekir

<?php
umask(0022);
// other code
?>

bash oturumunuzdan yeni dosyalar / klasörler oluşturacaksanız, kabuk profilinizde umask değerini ayarlayabilirsiniz ~ / .bashrc Veya tüm kullanıcılar için umask /etc/bashrcveya /etc/profiledosya ayarlayabilirsiniz . dosyaya aşağıdakini ekleyin: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Ve zaten oluşturulmuş dosyalar için izinleri değiştirmek için find kullanabilirsiniz. Bu yardımcı olur umarım.


4

Dosya bulmanın ve dosyalara başvurmanın iki cevabı vardır chmod. Birincisi finddosyadır ve chmodbulduğu gibi uygulanır (@WombleGoneBad tarafından önerildiği gibi).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

İkinci çözüm, findkomut ile tüm dosyaların listesini oluşturmak ve bu listeyi chmodkomuta sağlamaktır (@lamgesh tarafından önerildiği gibi).

chmod 755 $(find /path/to/base/dir -type d)

Bu sürümlerin her ikisi de, findkomut tarafından döndürülen dosya sayısı az olduğu sürece iyi çalışır . İkinci çözüm göze harika görünür ve ilk çözümden daha okunabilir görünür. Çok sayıda dosya varsa, ikinci çözüm hata döndürür:Argument list too long.

Benim önerim

  1. chmod -R 755 /opt/lampp/htdocsTüm dosyaların ve dizinlerin izinlerini aynı anda değiştirmek istiyorsanız kullanın .
  2. Kullandığınız find /opt/lampp/htdocs -type d -exec chmod 755 {} \;dosya sayısı çok fazlaysa kullanın. Bu -type xseçenek yalnızca belirli dosya türlerini arar; burada d, dizini bulmak için kullanılır, dosya için f ve bağlantı için l.
  3. chmod 755 $(find /path/to/base/dir -type d)Aksi takdirde kullanın
  4. Her durumda ilkini kullanmak daha iyidir

2

Çok basit.

Terminal'de dosya yöneticisine gidin. Örnek: sudo nemo. Git /opt/ardından Özellikleri → İzni . ve sonra Diğer . Son olarak, değişiklik oluşturmak ve silmek ve dosya okuma okumak ve yazmak ve düğmesini tıklayın uygulamak ... Ve iş.


sudo nemo nedir?
Vikranth Inti
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.