Berechtigungen beim Kopieren auf Standardberechtigung setzen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Berechtigungen beim Kopieren auf Standardberechtigung setzen

Beitrag von Kolibri » 17.03.2024 11:19:13

Ich habe kürzlich Dateien von verschiedenen Geräten (von Mint mit Nemo, Xfce mit Thunar) auf ein Gerät (GNOME mit Nautilus, es könnte aber auch mal ein cp -rv oder mv -v dabei gewesen sein) kopiert. Ursprünglich wollte ich einfach nur unnütze Dateien (.DS-Store, Thumb.db, etc) rekursiv entfernen (falls jemand dafür einen guten Ansatz hat, gern her damit!). Im Zuge dessen habe ich mir auch die Dateiberechtigungen mal angeschaut und festgestellt, dass die entweder auf 755 oder 644 gesetzt sind.

Nach meinem Verständnis, werden unter Debian per Vorgabe die Berechtigungen 755 für Verzeichnisse und 644 für Dateien verwendet. dazu passt auch, dass meine umask auf 0022 steht und eine mittels touch erstellte Testdatei 644 zugewiesen bekommt.

Hat jemand eine Idee, wieso manche kopierte Dateien die Berechtigung 755 statt 644 bekommen haben? Und kann ich das rekursiv auf den Standardwert zurücksetzen? Im Endeffekt möchte ich, dass alle kopierten Dateien Besitzer und Berechtigungen bekommen, als hätte ich sie unter dem entsprechenden User neu erstellt.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen

Beitrag von Meillo » 17.03.2024 11:27:12

Ich verstehe nicht genau, was die Frage nun ist. Darum nur ein paar generelle Aussagen, aus denen du dir deine Antwort selber zusammen bauen kannst.

Beim Verschieben (mv) werden die Berechtigungen gar nicht angefasst. Alles bleibt wie es ist, die Datei ist nur an einem anderen Ort.

Beim Kopieren werden neue Dateien erstellt. Das passiert normalerweise wie sonst auch beim neuen Anlegen von Dateien, ausser du sagst `cp', dass es das anders machen soll. Siehe dazu `-p' & Co. in der Manpage.

Damit agiert `cp' standardmaessig genau anders wie `mv' ... und wenn du mal das eine und mal das andere verwendet hast und es nicht mehr weisst, dann ist eine Mischung von beidem erwartbar.

`rsync' hat (wie `cp') alle Moeglichkeiten, genau einzustellen, was du haben willst.

Was GUI-Programme machen, weiss ich nicht.


Unerwuenschte Dateien in einem Verzeichnisbaum kannst du mit `find' entfernen:

Code: Alles auswählen

find . -type f -name Thumb.db -print
(Wenn es die richtigen Dateien auflistet, dann `-print' durch `-delete' ersetzen, um sie loeschen zu lassen.)


Edit: Nachdem ich MSfrees Post gelesen habe, wird mir bewusst, dass ich voll am Thema vorbeigeschrieben habe. :roll: :-D
Use ed once in a while!

Benutzeravatar
MSfree
Beiträge: 10777
Registriert: 25.09.2007 19:59:30

Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen

Beitrag von MSfree » 17.03.2024 11:28:16

Verzeichnisse müssen "ausführbar" sein, in deinem Fall also rwxr-xr-x (was oktal 755) entspricht.
Dateien brauchen normalerweise nicht "ausführbar" sein, in deinem Fall also rw-r--r-- (was oktal 644) entspricht.

Dateien kannst du mit

Code: Alles auswählen

find . -type f -exec chmod -x {} \;
das Ausführungsrecht nehmen.

Verzeichnissen kannst du mit

Code: Alles auswählen

find . -type d -exec chmod +x {} \;
das Ausführungsrecht setzen.

Achtung, Skripte, die du ausführen können willst, würden mit so einer Aktion allerdings das Ausführungsrecht verlieren.

Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen

Beitrag von Kolibri » 17.03.2024 13:33:37

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.03.2024 11:27:12
Edit: Nachdem ich MSfrees Post gelesen habe, wird mir bewusst, dass ich voll am Thema vorbeigeschrieben habe. :roll: :-D
Das würde ich nicht sagen. Ich fand beide Antworten hilfreich – danke.

Anscheinend soll cp ja per Vorgabe keine Berechtigungen und Besitzer erhalten. Nachdem was ich so las, dürfte das identisch zu

Code: Alles auswählen

cp --no-preserve=all
sein. Allerdings hatte ich cp auch mal ohne Optionen mit einer der Dateien ausprobiert und konnte das so nicht beobachten. Die Berechtigungen blieben gleich. Sonst hätte ich einfach die betreffenden Verzeichnisse mit cp einmal auf die externe Platte kopiert, vom Desktop gelöscht und wieder zurückkopiert (oder eben MSfrees Methode mit chmod -x angewandt).

Vielleicht wäre cat noch eine Möglichkeit, weil es einfach den Dateiinhalt in eine neue Datei schreibt. Aber ich bezweifle, dass das beim Kopieren verschachtelter Ordner der sinnvollste Ansatz ist.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen

Beitrag von Meillo » 18.03.2024 09:43:00

Kolibri hat geschrieben: ↑ zum Beitrag ↑
17.03.2024 13:33:37
Anscheinend soll cp ja per Vorgabe keine Berechtigungen und Besitzer erhalten. Nachdem was ich so las, dürfte das identisch zu

Code: Alles auswählen

cp --no-preserve=all
sein. Allerdings hatte ich cp auch mal ohne Optionen mit einer der Dateien ausprobiert und konnte das so nicht beobachten. Die Berechtigungen blieben gleich.
Was ich geschrieben habe, war falsch. Sorry. In der Manpage steht ja:
Manpage cp(1) hat geschrieben: --preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,ownership,timestamps)
Notiz an mich: Nie nur denken, sondern immer auch testen! ;-)

Darum hier nun ein konkreter Versuch:

Code: Alles auswählen

$ touch a
$ chmod 702 a
$ ls -l a
-rwx----w- 1 meillo meillo 0 Mar 18 09:34 a*
$ cp a b
$ ls -l b
-rwx------ 1 meillo meillo 0 Mar 18 09:34 b*
$ rm b
$ cp --no-preserve=mode a b
$ ls -l b
-rw-r--r-- 1 meillo meillo 0 Mar 18 09:35 b
$ cp --version
cp (GNU coreutils) 8.30
Wie man sehen kann, werden beim normalen `cp' die Berechtigungen kopiert aber wohl noch einmal durch die Umask gefiltert. Darum faellt das Schreibrecht fuer other weg. Wenn ich explizit die Berechtigung nicht erhalten will, dann wird die Datei wir eine neue Datei angelegt.

Bei einem aelteren `cp' funktioniert die Option aber nicht:

Code: Alles auswählen

:-Q touch a

:-Q chmod 702 a

:-Q ls -l a
-rwx----w- 1 meillo meillo 0 Mar 18 09:38 a*

:-Q cp a b

:-Q ls -l b
-rwx------ 1 meillo meillo 0 Mar 18 09:39 b*

:-Q rm b

:-Q cp --no-preserve=mode a b

:-Q ls -l b
-rwx------ 1 meillo meillo 0 Mar 18 09:39 b*

:-Q cp --version
cp (GNU coreutils) 8.13
Use ed once in a while!

Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen

Beitrag von Kolibri » 20.03.2024 21:09:48

Danke fürs Nachhaken. Ich habe es mit der Option --no-preserve=mode probiert und das scheint zu funktionieren.

Antworten