So ändern Sie gleichzeitig die Berechtigung und den Gruppeninhaber einer Datei


9

Ich weiß, dass ich zum Ändern der Dateiberechtigung chmod verwenden kann. Zum Wechseln des Gruppenbesitzers könnte ich chgrp verwenden. Wenn ich jedoch gleichzeitig die Berechtigung und den Eigentümer ändern möchte, kann ich einen Befehl unter Linux verwenden?

Zum Beispiel gibt es eine Datei mit dieser Berechtigung und diesem Eigentümer:

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

Und jetzt möchte ich es ändern in:

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

Ich weiß, dass ich diesen Befehl verwenden könnte: chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFileaber ich möchte wissen, ob es dafür einen guten Weg gibt.

Antworten:


9

Es gibt ein Konzept, das als "UNIX-Weg" bekannt ist. Jedes Werkzeug sollte eine einfache Funktion ausführen. Wenn man eine komplexere Funktion benötigt, kann man kleinere Werkzeuge kombinieren.

Das Gegenteil ist das monolitische Design, bei dem alle Funktionen in einem riesigen Tool zusammengefasst sind.

Wenn Sie etwas Komplexes tun möchten, schreiben Sie einfach ein Skript und rufen Sie einfache Tools auf.


Hier ist ein Skript, das ich geschrieben habe und das diese Tools in einer Shell-Funktion kombiniert ch.
Keith

2
Es gibt keine Möglichkeit, eine Antwort zu finden. Was er gefragt hat, könnte mit mehreren bereits vorhandenen Tools wie rsync erreicht werden. Obwohl Linux tendenziell ein Tool / eine Funktion bevorzugt, bedeutet dies, dass Tools, die mehrere
Aufgaben ausführen,

@Kiwy Einige Linux-Tools entsprechen nicht den Unix-Way-Prinzipien und kombinieren verschiedene Funktionen unterschiedlicher Art. Wie zum Beispiel systemd.
Kondybas

1
@Kondybas "neigen dazu" ist der wichtige Teil des Satzes. Ausnahme von der Regel existiert. Trotzdem ist deine Antwort auf mich wirklich schlecht.
Kiwy

9

Wenn Sie die Datei auch irgendwo kopieren möchten (z. B. am endgültigen Ziel), sollten Sie sich den folgenden installBefehl ansehen :

install -m 0777 -o root $sourcefile $destinationfile


1

Es ist wichtig, das richtige Werkzeug für den Job in * nix zu verwenden, aber in der Tat sieht es albern aus, denselben Pfad in jedem verketteten Befehl zu wiederholen. Stattdessen sollten Sie wirklich Bash-Variablen verwenden und in kleineren Skripten insbesondere verwenden $_.

Ihr Befehl würde werden:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT +. Ähnliches gilt für das Abrufen des zuletzt verwendeten Arguments in Ihrer aktuellen Shell.


0

Rsync ist in diesem Fall nützlich:

Aus dem Fine Manual (TM)

--chown = USER: GROUP einfache Zuordnung von Benutzername / Gruppenname

--chmod = CHMOD wirkt sich auf Datei- und / oder Verzeichnisberechtigungen aus

So möchten Sie beispielsweise chmod / mnt / lala / lala4000 / "ugo = rX" und "foo.bar" anzeigen.

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

Dies würde das Verzeichnis rekursiv chown und chmod.


0

Sie könnten ein Ziel mit langem rsyncBefehl erreichen

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

Ich verstehe es nicht
Pierre.Vriens

Dies ist unsicher: Es wirkt sich auf alle übereinstimmenden Dateien im angegebenen Verzeichnis und Unterverzeichnis aus, nicht nur auf die Datei, auf die verwiesen wird.
TelcoM

-1

Sie können chown username:groupname file ...beide gleichzeitig ändern. Durch das Ändern von zwei Feldern in derselben (Inode-) Struktur werden zwei Systemaufrufe gespeichert (einer zum Lesen der aktuellen Werte und einer zum Festlegen der geänderten Werte).


chownwechselt nur die Besitzer. Wie ändert dies die Berechtigungen gleichzeitig mit dem angeforderten OP? Hinweis Das Beispiel von OP enthält chmodauch a.
Jscott

Ah, ich dachte, er wollte 3 Dinge ändern, als er schrieb. Für den Wechsel des Gruppenbesitzers dachte ich, er meinte Gruppe und Besitzer.
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
Sie könnten zumindest eine Erklärung geben, wie es funktioniert und wie es verwendet werden soll (Parameter, wie viel was sie sind ...)
Kiwy

2
Bitte fügen Sie nicht einfach einen Code als Antwort ein.
Konrad Gajewski

Das Kommentieren ist wahrscheinlich nicht produktiv. Dies ist das einzige, was dieser Benutzer jemals gepostet hat, und er hat sich seitdem nicht einmal mehr angemeldet.
G-Man sagt "Reinstate Monica"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.