Bir dosyanın iznini ve grup sahibini aynı anda değiştirme


9

Dosya iznini değiştirmek için chmod kullanabileceğimi biliyorum. Grup sahibini değiştirmek için chgrp kullanabilirsiniz. Ancak, hem izni hem de sahibini aynı anda değiştirmek istersem, Linux'ta kullanabileceğim herhangi bir komut?

Örneğin, bu izne ve sahibine sahip bir dosya var:

-rw-r--r--+  1 raymondtau  staff    0 May  8 16:38 WantToChangeThisFile

Ve şimdi bunu değiştirmek istiyorum:

---x-w--wx+  1 raymondtau  admin    0 May  8 16:38 WantToChangeThisFile

Bu komutu kullanabileceğimi biliyorum: chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFileancak bunu yapmanın düzgün bir yolu olup olmadığını bilmek istiyorum.

Yanıtlar:


9

"UNIX yolu" olarak bilinen bir kavram var. Her araç basit bir işlevi yerine getirmelidir. Daha karmaşık bir işleve ihtiyaç duyulursa, daha küçük araçları birleştirebilir.

Tüm işlevsellik büyük bir araçta toplandığında monolitik tasarım tam tersidir.

Karmaşık bir şey yapmak istiyorsanız - basit araçlar çağırarak bir komut dosyası yazmanız yeterlidir.


İşte bu araçları bir kabuk fonksiyonunda birleştiren bir senaryoch .
Keith

2
Bunun bir cevabı yok, sorduğu şey zaten rsync gibi mevcut birkaç araçla elde edilebilirdi ve linux bir aracı / bir işlevi tercih etme eğiliminde olsa da, birden fazla şey yapan araçların mevcut olmadığı anlamına geliyor
Kiwy

@Kiwy Bazı linux araçları tek yönlü ilkelere uymaz ve farklı nitelikteki farklı işlevleri birleştirir. Mesela systemd gibi.
Kondybas

1
@Kondybas "eğilimi" cümlenin önemli bir parçasıdır. kuralın istisnası vardır. Hala bana cevabın gerçekten kötü.
Kiwy

9

İstediğiniz dosyayı dosyayı bir yere kopyalamaksa (son hedefi gibi), şu installkomutu incelemek isteyebilirsiniz :

install -m 0777 -o root $sourcefile $destinationfile


1

* Nix içindeki iş için doğru aracı kullanmak önemlidir, ancak her zincirleme komutta aynı yolu tekrarlamak aptalca görünür. Bunun yerine, Bash değişkenlerini gerçekten kullanmalısınız ve daha küçük komut dosyalarında özellikle yararlanın $_.

Komutunuz:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT +. geçerli kabuğunuzda son kullanılan argümanı çekme gibi bir şey yapar.


0

Rsync bu durumda kullanışlıdır:

Fine Manual'dan (TM)

--chown = KULLANICI: GROUP basit kullanıcı adı / grup adı eşlemesi

--chmod = CHMOD dosya ve / veya dizin izinlerini etkiler

Yani, örneğin, chmod / mnt / lala / lala4000 / "ugo = rX" ve "foo.bar" ı seçmek istiyorsunuz

rsync --chmod = ugo = rX --chown = foo: bar -rvtpolgh / mnt / lala / lala4000 / / mnt / lala / lala4000 /

Bu özyinelemeli olarak chown ve chmod dir.


0

Uzun rsyncemirle bir hedefe ulaşabilirsin

rsync -a --chown=root:root --chmod=F755 filename filename


Bu güvensizdir: yalnızca işaret ettiği tek dosyayı değil, belirtilen dizin ve alt dizinlerdeki tüm eşleşen dosyaları etkiler.
telcoM

-1

Her chown username:groupname file ...ikisini aynı anda değiştirmek için yapabilirsiniz . Aynı (inode) yapıdaki iki alanı değiştirerek birleştirerek iki sistem çağrısını kaydeder (biri geçerli değerleri okumak için ve diğeri değiştirilmiş vaules'i ayarlamak için).


chownyalnızca sahiplerini değiştirir. Bu OP'nin istediği izinleri nasıl değiştirir? Not OP'nin örneği bir chmodde içerir .
jscott

Ah, yazdığı gibi 3 şeyi değiştirmek istediğini sanıyordum Grup sahibini değiştirmek için grup ve sahip demek istediğini sanıyordum .
wurtel

-3
#!/bin/bash

# Setting the Variables for execution
LOGDIR=$HOME
CURRENTTIME=$(date +"%Y%m%d%s%H%M%S")
LOGFILE=${LOGDIR}/chgpermission_${CURRENTTIME}.log
MASTERFILE=$1
INDEX=0

# Checking the number of Parameters passed
if [ "$#" -ne 1 ]; then
    echo "Master file name is mandatory parameter" > ${LOGFILE}
    exit 1
fi

# Loading the Master file into an Array 
echo "Loading the Master file ${MASTERFILE} into an array" >> ${LOGFILE}
while read line
do
#echo $line  
MASTERARRAY[$INDEX]=$HOME/$line 
INDEX=$(expr $INDEX + 1) 
done < ${MASTERFILE}

echo "Number of parameters in an master array ${MASTERARRAY[@]}" >> ${LOGFILE}

# Changing the permission of the file 
echo "Changing the permission of the file in master file ${MASTERFILE}" >> ${LOGFILE} 
index=0
for index in "${MASTERARRAY[@]}"
do
    if [ -f "$index" ] 
    then
       echo "$index file exist"
       echo  "$index file exist" >> ${LOGFILE}
       chmod 755 "$index" 
       chown workstation "$index"
       chgrp workstation "$index" 
    else
      echo "$index file does not extst"
      echo "$index file does not exist" >> ${LOGFILE}  
    fi 
done 

2
en azından nasıl çalıştığına ve nasıl kullanıldığına dair bir açıklama sunabilirsiniz (ne kadar olduklarını parametreler ...)
Kiwy

2
Lütfen sadece bazı kodları yanıt olarak yapıştırmayın.
Konrad Gajewski

Yorum yapmanın verimli olması muhtemel değildir; bu kullanıcının gönderdiği tek şey bu ve o zamandan beri giriş yapmamışlar bile.
G-Man,
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.