Löschen Sie einen Benutzer und alle Dateien, deren Eigentümer dieser Benutzer ist

12

Ich habe deluserohne den Parameter verwendet --remove-all-files:

$ deluser 'user'

Gibt es eine andere Möglichkeit, als rm -r /home/userjetzt alle Dateien zu entfernen, die einem Benutzer gehören (da ich deluser bereits ausgeführt habe)?

pl1nk
quelle

Antworten:

19

Sie müssen die Dateien manuell suchen, was wahrscheinlich der Fall war deluser.

Bitte beachten Sie, --remove-all-filesist nicht das gleiche wie rm -r /home/user. Letzteres entfernt nur das Homedir (das möglicherweise Dateien enthält, die nicht dem betreffenden Benutzer gehören, obwohl dies nicht üblich ist). Ersteres entfernt alle Dateien Dateien, die dem Benutzer gehören, vom System. Zumindest, wenn der Manpage vertraut werden soll .

GNU findhat einen -userTest, mit dem Sie find / -user xxxalle Dateien finden können, die dem Benutzer gehören xxx. xxxwäre der Benutzername und kann (und in diesem Fall wird müssen, da der Benutzer nicht mehr existiert) der numerische ID des Benutzers. findhat auch eine -deleteoption, so

find / -user xxx -delete

Sollte es tun, obwohl ich den Befehl nicht mit allen Optionen gleichzeitig getestet habe.

EDIT: Numerische ID: Der Grund, warum ich sagte, dass Sie eine numerische ID verwenden müssen, ist, dass, da Sie den Benutzer bereits gelöscht haben, sein Eintrag in /etc/passwdgelöscht wurde (er hatte zusammen mit anderen Dingen die Benutzer-ID zusammen mit seinem Benutzernamen). .

Wenn Sie also seinen Homedir nicht entfernt haben, ist eine der einfachsten Möglichkeiten, einfach die ID des Besitzers dieses Homedir abzufragen:

stat -c %u /home/user/

( statist ein Tool zum Lesen von Dateisystemdaten.-c %u Gibt an, statwie die Ausgabe geschrieben werden soll. Ich bitte hier, einfach die Benutzer-ID auszugeben.)

Wenn Sie Einzeiler mögen, können Sie sogar beide Befehle verketten:

find / -user $(stat -c %u /home/user/) -delete

(Natürlich können Sie es vorziehen, es zuerst ohne auszuführen -delete, um sicherzustellen, dass Sie nichts behalten möchten, und um Fehler zu erkennen, die Sie beim Schreiben des restlichen Befehls gemacht haben. Fehler beim Ausführen von rekursiven Löschvorgängen /sind nichts für schwache Nerven von Herzen.)

njsg
quelle
Sie können auch die -execOption find verwenden, um einen benutzerdefinierten Befehl rm auszuführen, wenn Sie etwas mehr Kontrolle über Ihre Löschvorgänge haben möchten, aber ich habe das noch nie versucht, YMMV.
agc93
Stimmt, entweder das oder die Übergabe der Ausgabe an rmusing xargs(aber dies wird wahrscheinlich die Argumentgrenzen überschreiten, wenn es zu viele Ergebnisse gibt), aber schauen Sie in -depthAnführungszeichen des Info-Handbuchs nach: "Wenn Ihr Befehl` find 'Verzeichnisse entfernt, finden Sie das möglicherweise Sie erhalten eine falsche Fehlermeldung, wenn "find" versucht, in ein Verzeichnis zurückzukehren, das jetzt entfernt wurde. Die Verwendung der Option "-depth" löst normalerweise dieses Problem. " (und später im selben Abschnitt, "(-delete impliziert -depth sowieso)")
njsg
@ njsg Nun, ich find: 'user' is not the name of a known use
verstehe
1
@pl1nk: wie gesagt, du musst die numerische ID des Benutzers verwenden - da du den Benutzer bereits gelöscht hast, gibt es keine Zuordnung in /etc/passwdder Liste des Benutzers und seiner ID. Sie müssen die numerische ID finden. Tun stat -c %u /home/user/, es sollte Ihnen die numerische Benutzer-ID geben, verwenden Sie das wie xxxoben.
njsg
@njsg Sie haben Recht, ich habe den letzten Teil Ihrer Frage nicht gelesen.
pl1nk
5

Eine andere Möglichkeit wäre, den Benutzer mit erneut hinzuzufügen adduser, die alte UID anzugeben und dann delusererneut auszuführen , diesmal mit dem --remove-all-filesFlag.

Angenommen, der Benutzer hat einen Benutzernamen alice und eine UID 1001:

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice
Eliah Kagan
quelle
3

gnu find hat die Optionen -nouser und -nogroup man find . Mit diesen Optionen können Sie alle Dateien in Ihrem Dateisystem finden, die keinen entsprechenden Benutzer in / etc / passwd haben. Wenn Sie keinen neuen Benutzer mit den alten Benutzer-IDs Ihrer gelöschten Benutzer erstellt haben, können Sie diese verwaisten Dateien auffinden.

Möglicherweise finden Sie jedoch mehr Dateien - nicht nur diejenigen, die zu Ihren gelöschten gehörten.

Ach nein
quelle
Ich glaube, Sie haben die beste Antwort! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" Der Befehl findet alle Dateien, die weder einen Benutzer noch eine Gruppe und haben entfernt sie automatisch.
DanglingPointer