Удалить пользователя и все файлы, принадлежащие этому пользователю

9

Я использовал deluser без параметра --remove-all-files :

$ deluser 'user'

Есть ли способ, отличный от rm -r /home/user , удалить все файлы, принадлежащие пользователю (так как я уже выполнил deluser)?

    
задан pl1nk 31.05.2012 в 11:36
источник

3 ответа

16

Вам придется вручную находить файлы, что, вероятно, было бы тем, что сделал бы deluser .

Обратите внимание, что --remove-all-files not совпадает с rm -r /home/user . Последний удаляет только homedir (который может включать файлы, не принадлежащие этому пользователю, хотя и не обычные), первый удаляет все файлы, принадлежащие этому пользователю из системы. По крайней мере, если заслуживает доверия в manpage .

GNU find имеет -user test, поэтому вы можете сделать find / -user xxx , чтобы найти все файлы, принадлежащие пользователю xxx . xxx будет именем пользователя и может (и в этом случае будет иметь, поскольку пользователь больше не существует) - это числовой идентификатор пользователя. find также имеет параметр -delete , поэтому

find / -user xxx -delete

Должен сделать это, хотя я не тестировал команду со всеми параметрами одновременно.

EDIT: числовой идентификатор: . Причина, по которой я сказал, что вы должны использовать числовой идентификатор, заключается в том, что, поскольку вы уже удалили пользователя, его запись в /etc/passwd была удалена (она была, вдоль с другим материалом, идентификатором пользователя, а также его именем пользователя).

Итак, если вы не удалили его homedir, один из самых простых способов - просто запросить идентификатор владельца этого homedir:

stat -c %u /home/user/

( stat - это инструмент для чтения данных файловой системы. -c %u сообщает stat , как писать свой вывод, здесь я прошу просто вывести идентификатор пользователя)

Если вам нравятся однострочные, вы можете даже объединить обе команды:

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

(Конечно, вы можете сначала запустить его без -delete , чтобы убедиться, что вы ничего не хотите сохранить, и поймать любую ошибку, которую вы написали, остальную часть команды. Ошибки при выполнении операций рекурсивного удаления на / не для слабонервных.)

    
ответ дан njsg 31.05.2012 в 11:48
источник
5

Другим вариантом было бы повторно добавить пользователя с adduser , указав старый UID, а затем снова запустить deluser , на этот раз с флагом --remove-all-files .

Предположим, например, что у пользователя было имя пользователя alice и UID 1001 :

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice
    
ответ дан Eliah Kagan 07.06.2012 в 17:20
3

В gnu find есть опции -nouser и -nogroup, посмотрите в man find . С помощью этих параметров вы можете найти все файлы в вашей файловой системе (-ах), которые не имеют соответствующего пользователя в / etc / passwd. Если вы не создали нового пользователя со старыми uids ваших удаленных пользователей, это возможность найти эти потерянные файлы.

Однако вы можете найти больше файлов - не только тех, кто принадлежал вашему удаленному.

    
ответ дан ohno 31.05.2012 в 12:13