Skript zum rekursiven Überprüfen der Berechtigungen und Eigentümer eines Verzeichnisses und Schreiben eines Shell-Skripts zum Neuerstellen dieser

Skript zum rekursiven Überprüfen der Berechtigungen und Eigentümer eines Verzeichnisses und Schreiben eines Shell-Skripts zum Neuerstellen dieser

Ich versuche, ein Shell-Skript zu schreiben, um alle Berechtigungen/Gruppen in einem großen Verzeichnis mit mehreren Unterverzeichnissen beizubehalten und neu zu schreiben, für den Fall, dass sie geändert oder nicht richtig erstellt werden oder wenn die Benutzer/Berechtigungen für dieses Verzeichnis auf einem anderen Computer gespiegelt werden.

Etwas wie:

chown adam:brown /var/blarg
chmod 770 /var/blarg
chown adam:brown /var/blarg/toast.file
chmod 777 /var/blarg/toast.file

...etc

Dies manuell zu tun, wird sehr lange dauern. Ich habe mich gefragt, ob es einen vorhandenen Befehl/ein Skript gibt, um diese Aufgabe auszuführen?

Antwort1

In Anlehnung an @yetis Kommentar habe ich vor einiger Zeit darüber nachgedacht und glaube mich zu erinnern, dass ich zu dem Schluss gekommen bin, dass so etwas wie

find /path/to/dir -printf '%m\t%u\t%g\t%p\0' > filelist

und dann

while read -rd $'\0' perms user group file; do 
  if [ -e "$file" ]; then
    chown "$user:$group" "$file"
    chmod "$perms" "$file"
  else
    echo "warning: $file not found"
  fi
done < filelist

würde funktionieren. Den Dateinamen ans Ende der Ausgabe zu setzen und readNull-Terminatoren anstelle von Zeilenumbrüchen zu verwendensollenMachen Sie es auch für Dateinamen mit Leerzeichen und anderen Sonderzeichen sicher. Je nachdem, von wo aus Sie den zweiten Befehl ausführen möchten, ist es möglicherweise bequemer, den Dateinamen ohne die führende /path/to/dirKomponente des findBefehls zu verwenden, d. h. %Panstelle von %p.

Antwort2

Wie Yeti in den Kommentaren vorgeschlagen hat, habe ich den Befehl „find“ verwendet, um alle Dateien und Verzeichnisse im Verzeichnis zu finden und ihre Berechtigungen/Besitzer in einem chown- oder chmod-Befehl auszugeben. Ich habe die -vOption „verbose“ hinzugefügt, damit Sie beim Ausführen der resultierenden Shell-Skripte den Erfolg/die Fehler der Befehle sehen können:

find /var/blarg -printf 'chown -v %u:%g %p\n' > chowns.sh
find /var/blarg -printf 'chmod -v %m %p\n' > chmods.sh

Jetzt müssen Sie nur noch die resultierenden .sh-Dateien ausführbar machen:

chmod +x chowns.sh; chmod +x chmods.sh

Führen Sie sie dann aus und geben Sie das ausführliche Feedback in eine TXT-Datei aus:

./chmods > chmods_results.txt

Boom.

Antwort3

Sie erwähnen events, und wenn Sie habenWirklichBei vielen Dateien ist es sinnvoll, darauf zu achten. Vielleicht möchten Sie sich ansehen inotifywatch, das „auf Dateisystemereignisse lauscht“, z. B. Änderungen der Dateiberechtigungen. Auf Debian-basierten Betriebssystemen befindet es sich im Paket inotify-tools.

verwandte Informationen