Supprimer un utilisateur et tous les fichiers appartenant à cet utilisateur

12

J'ai utilisé delusersans le paramètre --remove-all-files:

$ deluser 'user'

Existe-t-il un autre moyen que rm -r /home/userde supprimer tous les fichiers appartenant à un utilisateur maintenant (puisque j'ai déjà exécuté deluser)?

pl1nk
la source

Réponses:

19

Vous devrez rechercher manuellement les fichiers, ce qui était probablement ce deluserqui ferait.

Veuillez noter que ce --remove-all-filesn'est pas la même chose que rm -r /home/user. Ce dernier supprime uniquement l'homedir (qui peut inclure des fichiers n'appartenant pas à cet utilisateur, bien que ce ne soit pas habituel), le premier supprime tous les fichiers appartenant à cet utilisateur du système. Au moins si la page de manuel doit être approuvée .

GNU finda un -usertest, vous pouvez donc faire find / -user xxxpour trouver tous les fichiers appartenant à l'utilisateur xxx. xxxserait le nom d'utilisateur, et peut (et dans ce cas devra , comme l'utilisateur n'existe plus) être l'ID numérique de l'utilisateur. finda également une -deleteoption, donc

find / -user xxx -delete

Devrait le faire, même si je n'ai pas testé la commande avec toutes les options en même temps.

EDIT: ID numérique: La raison pour laquelle j'ai dit que vous devez utiliser un ID numérique est parce que, comme vous avez déjà supprimé l'utilisateur, son entrée a /etc/passwdété supprimée (il y avait, avec d'autres éléments, l'ID utilisateur, ainsi que son nom d'utilisateur) .

Donc, si vous n'avez pas supprimé son homedir, l'un des moyens les plus simples consiste à simplement demander l'ID du propriétaire de ce homedir:

stat -c %u /home/user/

( statest un outil pour lire les données du système de fichiers. -c %uindique statcomment écrire sa sortie, ici je lui demande simplement de sortir l'ID utilisateur)

Si vous aimez les monolignes, vous pouvez même enchaîner les deux commandes:

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

(Bien sûr, vous préférerez peut-être l'exécuter en premier sans -deletepour vous assurer qu'il n'y a rien que vous souhaitez conserver et pour détecter toute erreur que vous avez commise lors de l'écriture du reste de la commande. Les erreurs lors de la suppression des opérations récursives /ne sont pas pour les faibles de coeur.)

njsg
la source
Vous pouvez également utiliser l' -execoption de recherche pour exécuter une commande rm personnalisée si vous voulez un peu plus de contrôle sur vos suppressions, mais je n'ai jamais essayé cela, donc YMMV.
agc93
Vrai, que ce soit ou en passant la sortie à l' rmaide xargs(mais cela atteindra probablement les limites d'argument s'il y a trop de résultats), mais regardez -depth, en citant le manuel d'informations: "Si votre commande` find 'supprime les répertoires, vous pouvez constater que vous obtenez un message d'erreur parasite lorsque `find 'essaie de récupérer dans un répertoire qui a été supprimé. L'utilisation de l'option` -depth' résoudra normalement ce problème. " (et plus tard dans la même section, "(" -delete "implique" -depth "de toute façon)")
njsg
@njsg Eh bien, je reçois:find: 'user' is not the name of a known use
pl1nk
1
@ pl1nk: comme je l'ai dit, vous devrez utiliser l'ID numérique de l'utilisateur - comme vous avez déjà supprimé l'utilisateur, il n'y a pas de mappage /etc/passwdqui répertorie l'utilisateur et son ID. Vous devrez trouver l'identifiant numérique. Faites stat -c %u /home/user/, il devrait vous donner l'ID utilisateur numérique, utilisez-le comme xxxci-dessus.
njsg
@njsg Vous avez raison, je n'ai pas lu la dernière partie de votre question.
pl1nk
5

Une autre option serait de rajouter l'utilisateur avec adduser, en spécifiant l'ancien UID, puis de relancer deluser, cette fois avec l' --remove-all-filesindicateur.

Supposons, par exemple, que l'utilisateur ait un nom d'utilisateur aliceet un UID 1001:

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

gnu find a les options -nouser et -nogroup, recherchez-le dans man find. Avec ces options, vous pouvez trouver tous les fichiers de votre ou vos systèmes de fichiers qui n'ont pas d'utilisateur correspondant dans / etc / passwd. Si vous n'avez pas créé un nouvel utilisateur avec les anciens uids de vos utilisateurs supprimés, c'est une possibilité de trouver ces fichiers orphelins.

Cependant, vous pourriez trouver plus de fichiers - pas seulement ceux qui appartenaient à votre fichier supprimé.

Oh non
la source
Je crois que vous avez la meilleure réponse! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" La commande trouve tous les fichiers qui n'ont ni utilisateur ni groupe et les supprime automatiquement.
DanglingPointer