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.
Berechtigungen beim Kopieren auf Standardberechtigung setzen
Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen
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:
(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.
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
Edit: Nachdem ich MSfrees Post gelesen habe, wird mir bewusst, dass ich voll am Thema vorbeigeschrieben habe.
Use ed once in a while!
Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen
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
das Ausführungsrecht nehmen.
Verzeichnissen kannst du mit
das Ausführungsrecht setzen.
Achtung, Skripte, die du ausführen können willst, würden mit so einer Aktion allerdings das Ausführungsrecht verlieren.
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 {} \;
Verzeichnissen kannst du mit
Code: Alles auswählen
find . -type d -exec chmod +x {} \;
Achtung, Skripte, die du ausführen können willst, würden mit so einer Aktion allerdings das Ausführungsrecht verlieren.
Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen
Das würde ich nicht sagen. Ich fand beide Antworten hilfreich – danke.Meillo hat geschrieben:17.03.2024 11:27:12Edit: Nachdem ich MSfrees Post gelesen habe, wird mir bewusst, dass ich voll am Thema vorbeigeschrieben habe.
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
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.
Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen
Was ich geschrieben habe, war falsch. Sorry. In der Manpage steht ja:Kolibri hat geschrieben:17.03.2024 13:33:37Anscheinend soll cp ja per Vorgabe keine Berechtigungen und Besitzer erhalten. Nachdem was ich so las, dürfte das identisch zu
sein. Allerdings hatte ich cp auch mal ohne Optionen mit einer der Dateien ausprobiert und konnte das so nicht beobachten. Die Berechtigungen blieben gleich.Code: Alles auswählen
cp --no-preserve=all
Notiz an mich: Nie nur denken, sondern immer auch testen!Manpage cp(1) hat geschrieben: --preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,ownership,timestamps)
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
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!
Re: Berechtigungen beim Kopieren auf Standardberechtigung setzen
Danke fürs Nachhaken. Ich habe es mit der Option --no-preserve=mode probiert und das scheint zu funktionieren.