Geçerli dizindeki tüm dosyaları nasıl chown / chmod?


56

Geçerli dizindeki bazı dosyaların (ve dizinlerin) sahipliğini ve izinlerini değiştirmeye çalışıyorum. Bunu denedim:

chown username:groupname .

... geçerli dizindeki tüm dosyaları etkileyeceğini beklemekle birlikte, yalnızca bulunduğum dizini etkiledi (bu yapmak istediklerimin tam tersi). İçinde bulunduğum dizini etkilemeden tüm dosyalar üzerinde değiştirmek istiyorum.

Geçerli dizindeki tüm dosyaları nasıl chown ve chmod yapabilirim?


man chownve man chmodsorunuzu kolayca cevaplayın.
Shi

2
@Shi bence bu adil bir soru. Bu adam sayfasını okumak yardımcı olmaz. Küreselleşme bir parçası değildir chmod. Kabuğa yerleşiktir. Ayrıca, globbing hakkındaki belgeleri okumak sizin hayatınızı berbat eder (tüm zsh'ın özelliklerini bulmak için çok zaman harcadım).
djf

1
@djf:chown -R user:group .
Shi

Yanıtlar:


96

Kullanmak chown username:groupname *ve kabuğun *geçerli dizinin içeriğini genişletmesine izin verin . Bu, geçerli dizindeki tüm dosyalar / klasörler için izinleri değiştirir, ancak klasörlerin içeriğini değiştirmez.

Ayrıca chown -R username:groupname ., geçerli dizindeki izinleri değiştirecek ve ardından izinleri değiştirmek için içindeki ve tüm alt klasörlerin içine tekrar girebilecek olan da yapabilirsiniz .

chown -R username:groupname *Geçerli dizini tek başına bırakırken tüm dosya ve klasörler üzerindeki izinleri art arda değiştirir. Bu tarz ve ilk tarz kendimi en çok kullanırken bulduğum şey.


2
@Andrew Yine de muhafızında ol, hem arkadaş olabilir hem de yorgun ya da hazırlıksız birine düşkün olabilir.
Darth Android

5
Ayrıca dönemin tehlikelerine dikkat edin. Klavyedeki her şeyin "/" yanına yerleştirildiği gibi. Basit bir yazım hatası kolayca açabilirsiniz chown -R username:groupname .içine chown -R username:groupname /. 2 günlük bir görevi 2 günlük bir kabus olarak yapmak.
teynon

@Tom Bu yüzden muhtemelen -vtüm özyinelemeli komutlarımı kullanmaya başlamalıyım , ama çok tembelim
Kolob Canyon

Klavyenin kaymasını önlemek için belirli ve dizine bir isim vermeme rağmen, en iyi ve en özlü cevap olarak henüz yükseltildi:chown -R username:groupname directoryname
Dave Everitt

9

Sanırım bunu istiyorsun:

chown username:groupname *

Ayrıca, alt dizinleri tekrar tekrar değiştirmek isterseniz, -R( -rkullanımdan kaldırılmış) anahtarına ihtiyacınız olacaktır:

chown -R username:groupname *


0

chownSüper kullanıcı iseniz harika. Dizinde başka birisinin çalıştığı bir sorun vardı makeve şimdi değiştiremediğim bazı dosyalara sahiptim. İşte dosyaları ve dizinleri yöneten geçici çözümüm, her ne kadar .mkmeownersilemiyorsa etrafta kalan dizinleri bırakıyor olsa da .

  • Aşağıdaki komut dosyası, geçerli kullanıcıya ait olmak için kendisine iletilen dosya ve dizinlerin sahipliğini değiştirir, geçerli kullanıcıya ait olmayan her dizinin veya dosyanın yeni bir kopyasını alarak, silerek (veya silmeye çalışarak) izin sorunları üzerinde çalışmayı dener. Özgün dosya ve uygun şekilde yeniden adlandırılması.
  • Amaç, "beni sahibi yap" için bir kısaltma yapmak. Alt çizgi kullanmıyorum, çünkü yazmak için bir acı.

Örnekler:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • Aşağıdaki komut dosyasının mkmeowneroneyolunda olması gerekir.

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1

1
(1) Bir açıklama içeren cevapları tercih ediyoruz. Senaryolarınızı okuduğumda ve ne yaptıklarını görünce şaşırdım, çünkü tanıtım paragrafınız bana bir ipucu vermedi. (2) Kullanıcının mkmeowneronePATH aramasına koymak zorunda olduğunu belirtmeyi unuttun .  mkmeownerBu yapılmazsa havaya uçacak. (3) Kabuk komutlarında ve komut dosyalarında tırnakların nasıl kullanıldığını (örn. Ne zaman ve nerede) öğrenin. Söylemek ${f}faydalı bir alternatif değil; bkz bu . … (Devam ediyor)
Scott

(Devam ediyor)… (4) Komut dosyanızı bir dizinde çalıştırırsanız, bu dizindeki her dosyayı iki kez kopyalar. (5)  exprantikadır. Kabukta basit dize eşleştirmesi yapmak daha verimlidir; bash ayrıca düzenli ifade eşleşmesini de destekler. Hatta, sen de dosya adı testi yapabileceğini find. (6) Kişisel expr matcholmadığını komut testleri ${f}ile biter mkmeownero biter olmasın, .mkmeowner. Bu nedenle, komut dosyası kendi üzerinde çalışmaz. … (Devam ediyor)
Scott

(Devam ediyor)… Şimdi, tartışmalı olarak, bu iyi bir şey - çalışırken bir betiği taşımak ve potansiyel olarak silmek istemiyorsunuz. (Mutlaka bir soruna yol açmayacak, ama karışık olabilir.) Ama bunun gibi özel durumları anlamalısınız (ve belgelemelisiniz). (7) Çok kelimeli dizelerde alt çizgi kullanmak isteyebilirsiniz.  dirorfileokuması ve anlaması zor (karşılaştırmak dir_or_file) ve gördüğümde mkmeownerilk düşüncem bir kedi ( mk +  meow +  ner) idi.
Scott

Notlar için teşekkürler Scott. 1. Bir açıklamam olduğunu düşündüm ama daha açık olmamı sağla. 2. iyi nokta. Orijinal senaryomda bunu yakalamıştım ancak referans aldım. 3. 30 yıldan beri kabuk senaryoları yazıyorum, fakat elbette daha fazlasını öğrenmeye çalışacağım. 4. Evet öyle. Bilerek, eğer dizinin sahibi değilsem, silemiyorum. Bundan bahsedebilirim. 5. Yah Ben eski kafalıyım ama expr hala oldukça iyi çalışıyor. 7. Sanırım, altını çizmek bir kural olmadığı için II. Miyav yapan bir senaryoya ihtiyacım var!
sbcondor

{F} $ 'ta yanlış bir şey olduğunu sanmıyorum, değil mi? Gerekenden biraz daha uzun. Sık kullandığım bir biçim çünkü $ {f} .mkmeowner gibi daha uzun bir dize yapmak için bir değişken kullanmak isteyebilirim ve $ f.heck dosyasının $ {f} + heck veya $ {anlamına gelip gelmediğini hatırlamak zorunda değilim. f.heck}
sbcondor
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.