Unix'te tek bir komutta bir dizinin tüm dosya izinlerini nasıl değiştirebilirim?
Unix'te tek bir komutta bir dizinin tüm dosya izinlerini nasıl değiştirebilirim?
Yanıtlar:
Bir dosya veya dizin girişindeki izinleri özyinelemesiz olarak değiştirmek için chmod
komutu 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, 644
dizin 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 -R
bazı durumlarda gayet iyi çalışıyor (örn. chmod -R g-r
), Ancak -x
dosya ve dizinlerde rasgele çalıştığı için bitle uğraşmak istediğiniz durumlarda değil .
644
ya -x
da dizinleri ayarladığını düşünüyorsunuz ? Soru sadece izinlerini değiştirmek istediğini belirtiyor, özellikle neyi değil.
chmod -R go=u,go-w /dir
chmod
-R
dosya 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.
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 chmod
ile birlikte kullanın -R
ve bu dosyaların tek bir seferde dosya izinlerini değiştirmek istiyorsunuz.
Dosya izni örn. 777, 755, 644 vb.