Linux, beim Löschen Dateien ohne Zugriff überspr

Hallo Forum,

ich brauche eine kleine Hilfe für einen Linux-Befehl zum Dateien löschen. Hintergrund: Ich lösche innerhalb eines Programms alle Dateien rekursiv in einem Verzeichnis, die älter als 7 Tage sind. Alle bisherigen Benutzer sind auf der gleichen Ebene und schreiben die Dateien als rw-r–r-- oder rw-rw-r–, entsprechend löschbar sind die Dateien. Dazu benutze ich erfolgreich diesen Befehl:

COMMAND „!find /verzeichnis/zielordner/ -mtime +7 -type f -exec /bin/rm {} ;“

Es sollen jetzt auch übergeordnete Benutzer auf diese Zielordner schreiben. Eine Änderung der Dateirechte soll nicht stattfinden. Mein Problem hierbei: Sobald ein übergeordneter Benutzer schreibt, kann ich mit meinen Benutzerrechten nicht mehr löschen - es erfolgt eine J/N-Nachfrage zur Bestätigung.

Ich suche eine Lösung, dass keine Nachfrage seitens Linux erfolgt, ob ich eine „durch Überordnung“ zugriffsgeschützte Datei löschen will oder nicht. Diese übergeordneten Benutzerdateien sollen einfach kommentar- und nachfragelos übersprungen werden.

Bin für jede Idee dankbar! :wink:

Viele Grüße
Michael

RTFM

 --interactive[=WANN]

Hallo,

ich weiß zwar nicht, was du unter „übergeordnete Benutzer“ verstehst, aber:

wirf doch mal einen Blick auf „find“.

find ! -user mustermann

sucht nach Dateien, die nicht dem Benutzer „mustermann“ gehören.

Das Ergebnis kannst du dann per Pipe weiter verarbeiten.

mfg

tf

Hallo Michael,

Alle bisherigen Benutzer sind auf der
gleichen Ebene

Ich nehme an, Du meinst, sie sind in der gleichen Gruppe.

„!find /verzeichnis/zielordner/ -mtime +7 -type f
-exec /bin/rm {} ;“

Es sollen jetzt auch übergeordnete Benutzer

ich habe ebenfalls Probleme mit dieser Terminologie. Es gibt doch nur User und Gruppen, aber keine Hierarchie im Sinne von übergeordneten Usern

auf diese
Zielordner schreiben.
Sobald ein übergeordneter
Benutzer schreibt, kann ich mit meinen Benutzerrechten nicht
mehr löschen - es erfolgt eine J/N-Nachfrage zur Bestätigung.

Diese übergeordneten
Benutzerdateien sollen einfach kommentar- und nachfragelos
übersprungen werden.

Lass sie doch einfach schon beim finden „überspringen“, sprich, nicht finden:

find /verzeichnis/zielordner/ **-writable** -mtime +7 -type f -exec /bin/rm {} \;

Die Option -writable sorgt dafür, daß nur die schreibbaren, also auch löschbaren Dateien gefunden werden.
Ich hoffe, daß ich das mit deinen „übergeordneten“ Dateien und Usern richtig interpretiert habe.

Viele Grüße
Marvin

Hallo Axurit,

–interactive[=WANN]

Leider wirkt

rm --interactive=never

wie

rm -f

das heisst, es putzt alles weg, was im Verzeichnis liegt. Ich glaube, das war nicht ganz das, was Michael wollte.

Viele Grüße
Marvin

Leider wirkt

rm --interactive=never

wie

rm -f

das heisst, es putzt alles weg, was im Verzeichnis liegt.

auch die Dateien anderer User, die für ihn nicht writeable sind?

Hallo Axurit,

auch die Dateien anderer User, die für ihn nicht writeable
sind?

Ja. Hier die Kopie meines Versuches (ich denke, Du glaubst mir auch ohne Screenshot):

kb@lenny:~$ ls -l /tmp/versuch
insgesamt 0
-rw-r--r-- 1 kb kb 0 16. Feb 22:33 marvin
-rw------- 1 root root 0 16. Feb 22:33 root.txt
kb@lenny:~$ rm --interactive=never /tmp/versuch/\*
kb@lenny:~$ ls -l /tmp/versuch/
insgesamt 0

Viele Grüße
Marvin

Hallo Marvin,

Ich tippe mal darauf, dass das Verzeichnis /tmp/versuch für den User kb writeable ist. Damit kann dieser User alle Dateien in diesem Verzeichnis löschen, auch wenn diese selbst nicht writeable für ihn sind.

Ob ein User die Dateien eines anderen Users löschen kann, hat nichts mit der Option -f oder --interactive zu tun, sondern hängt ausschliesslich von den Filemodusbits der betroffenen Dateien und Verzeichnisse ab. Die beiden Optionen des Befehls rm ändern daran nichts sondern unterbinden nur die Nachfrage, wenn eine schreibgeschützte Datei gelöscht werden soll. Die Nachfrage kommt auch bei einer schreibgeschützten Datei in einem schreibgeschützten Verzeichnis. Wird in diesem Fall mit „J“ geantwortet, wird die Datei trotzdem nicht gelöscht.

root@home:/tmp# ls -ld versuch/
dr-xr-xr-x 2 root root 4096 17. Feb 07:19 versuch/

root@home:/tmp# ls -l versuch/
insgesamt 0
-rw-r--r-- 1 root root 0 17. Feb 07:19 root.txt 


axurit@home: /bin/rm /tmp/versuch/\* 
/bin/rm: reguläre leere Datei (schreibgeschützt) „/tmp/versuch/root.txt“ entfernen? y
/bin/rm: Entfernen von „/tmp/versuch/root.txt“ nicht möglich: Keine Berechtigung

axurit@home: /bin/rm --interactive=never /tmp/versuch/\* 
/bin/rm: Entfernen von „/tmp/versuch/root.txt“ nicht möglich: Keine Berechtigung 

Es kommt also darauf an, was der UP genau will. Wenn er ohne Nachfrage alle Dateien löschen will, die er löschen kann, dann genügt die Option -f bzw. --interactive=never. Wenn er die nicht schreibbaren Dateien nicht löschen will, obwohl er dies könnte, wenn diese in einem schreibbaren Verzeichnis liegen, dann passt deine Lösung.

Grüße
Axurit

Hallo Axurit,

Ich tippe mal darauf, dass das Verzeichnis /tmp/versuch für
den User kb writeable ist.

Naja, davon bin ich ausgegangen. Wenn Michael schreibt
„Es sollen jetzt auch übergeordnete Benutzer auf diese Zielordner schreiben.“
habe ich das so interpretiert, daß das Verzeichnis für alle (other) schreibbar ist, was auch immer diese ominösen „übergeordneten Benutzer“ sein sollen.

Es kommt also darauf an, was der UP genau will.

Ja, das scheint mir noch etwas unklar zu sein. Aber Michael wird den Nebel sicher noch auflösen :wink:

Viele Grüße
Marvin

Wow - viele Denkanstöße, vielen Dank dafür!

„übergeordnete Benutzer“

Ich muss das nochmal genauer erklären, zumindest soweit ich über die Berechtigungen Bescheid weiß - bin seit 20 Jahren Windows-Mausschubser und habe lediglich Randerfahrung mit Consolenbefehlen.

Ich habe mehrere Programme laufen, wir nennen es intern „Wächter“. Die Progs laufen auf einer Basic-ähnlichen Umgebung (echt kein Witz, ist ein HP-eigener Basicdialekt) auf einem Linux-System. Jeder Wächter hat seinen eigenen Benutzernamen, alle Wächter befinden sich in der Gruppe „users“. Dann habe ich Kollegen, die mir auch in Gruppe „users“ die Dateien unter deren Benutzernamen in meine Verzeichnisse einstellen. Diese Dateien lassen sich ohne Probleme verarbeiten (auslesen, verschieben, kopieren, löschen).

So - mein Problem: Jetzt kommt ein neuer Benutzer ins Spiel, dieser hat meines Wissens root-ähnliche Rechte und wickelt Scripte im Crontab ab, ist aber ebenfalls in Gruppe „users“. Das hatte ich mit „übergeordnet“ gemeint. Wenn mir dieser Benutzer eine Datei einstellt, streikt mein System, da meine Wächterbenutzer die Datei weder verändern (chmod, chown), nicht verschieben noch kopieren dürfen. Es fehlt das Zugriffsrecht. Leider bekomme ich keine Fehlermeldung zurück, das könnte ich abfangen. Mein System erkennt die Anfrage nach der Eingabe nicht selbständig.

Ich bin leider diese Woche nicht mehr am Problem zugange, werde mich aber am Montag mal mit der Idee -writable beschäftigen. Das klingt ganz gut, finde ich. Die andere Version mit --interactive=never bringt mir nichts, ich brauche die Dateien als Protokoll oder ggf. für ein Restore mindestens 7 Tage lang im Backup.

Nochmals vielen herzlichen Dank für die rege Anteilnahme, ich melde mich wieder, wie das ausgeht.

Viele Grüße
Michael