Я использовал deluser
без параметра --remove-all-files
:
$ deluser 'user'
Есть ли способ, кроме rm -r /home/user
как удалить все файлы, принадлежащие пользователю сейчас (так как я уже выполнил deluser)?
источник
Я использовал deluser
без параметра --remove-all-files
:
$ deluser 'user'
Есть ли способ, кроме rm -r /home/user
как удалить все файлы, принадлежащие пользователю сейчас (так как я уже выполнил deluser)?
Вам нужно будет вручную найти файлы, что, вероятно, было deluser
бы то, что будет делать.
Обратите внимание, --remove-all-files
это не то же самое, что rm -r /home/user
. Последний только удаляет homedir (который может включать в себя файлы, не принадлежащие этому пользователю, хотя и не обычно), первый удаляет все файлы, принадлежащие этому пользователю, из системы. По крайней мере, если справочная страница заслуживает доверия .
В GNU find
есть -user
тест, поэтому вы можете find / -user xxx
найти все файлы, принадлежащие пользователю xxx
. xxx
будет имя пользователя, и может (и в этом случае будет необходимо, так как пользователь больше не существует) будет числовой идентификатор пользователя. find
также есть -delete
опция, так
find / -user xxx -delete
Должен это сделать, хотя я не тестировал команду со всеми опциями одновременно.
РЕДАКТИРОВАТЬ: Числовой идентификатор: причина, по которой я сказал, что вы должны использовать числовой идентификатор, заключается в том, что, поскольку вы уже удалили пользователя, /etc/passwd
была удалена его запись (в ней, наряду с другими вещами, были указаны идентификатор пользователя и его имя пользователя). ,
Таким образом, если вы не удалили его homedir, один из самых простых способов - просто запросить идентификатор владельца этого homedir:
stat -c %u /home/user/
( stat
это инструмент для чтения данных файловой системы. -c %u
рассказывает, stat
как записать вывод, здесь я прошу просто вывести идентификатор пользователя)
Если вам нравятся однострочники, вы можете даже объединить обе команды:
find / -user $(stat -c %u /home/user/) -delete
(Конечно, вы можете предпочесть запустить его сначала без команды no, -delete
чтобы убедиться, что вы ничего не хотите сохранить, и перехватить любую ошибку, которую вы сделали при написании остальной части команды. Ошибки при выполнении рекурсивных операций удаления /
не для слабых сердца.)
-exec
опцию find для запуска пользовательской команды rm, если вы хотите немного больше контролировать свои удаления, но я никогда не пробовал это так, YMMV.rm
использованиеxargs
(но это, вероятно, достигнет предела аргументов, если результатов слишком много), но посмотрите-depth
, цитируя справочное руководство: «Если ваша команда` find 'удаляет каталоги, вы можете обнаружить, что вы получаете ложное сообщение об ошибке, когда `find 'пытается вернуться в каталог, который сейчас удален. Использование опции` -depth' обычно решает эту проблему. " (и позже в том же разделе "(` -delete 'в любом случае подразумевает `-depth')")find: 'user' is not the name of a known use
/etc/passwd
котором перечислены пользователь и его идентификатор. Вам нужно будет найти числовой идентификатор. Сделайтеstat -c %u /home/user/
, он должен дать вам числовой идентификатор пользователя, используйте это, какxxx
указано выше.Другой вариант - повторно добавить пользователя
adduser
, указав старый UID, а затем запуститьdeluser
снова, на этот раз с--remove-all-files
флагом.Предположим, например, что у пользователя были имя пользователя
alice
и UID1001
:источник
У gnu find есть опции -nouser и -nogroup, найдите их в
man find
. С помощью этих параметров вы можете найти все файлы в вашей файловой системе (-ах), у которых нет соответствующего пользователя, в / etc / passwd. Если вы не создали нового пользователя со старыми uid своих удаленных пользователей, это возможность найти эти потерянные файлы.Однако вы можете найти больше файлов - не только те, которые принадлежали вашему удаленному.
источник