Видаліть користувача та всі файли, що належать цьому користувачеві


12

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

$ deluser 'user'

Чи є інший спосіб, ніж rm -r /home/userвидалити всі файли, які належать користувачеві зараз (оскільки я вже виконав розкішно)?

Відповіді:


19

Вам доведеться вручну знайти файли, що, ймовірно, було deluserб , що було б зробити.

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

У GNU findє -userтест, тому ви можете зробити, find / -user xxxщоб знайти всі файли, що належать користувачеві xxx. xxxбуде ім'я користувача, і може (і в цьому випадку буде необхідно, так як користувач більше не існує) буде числовий ідентифікатор користувача. findтакож є -deleteваріант, так

find / -user xxx -delete

Повинен це робити, хоча я не перевіряв команду з усіма параметрами одночасно.

EDIT: Числовий ідентифікатор: Причина, по якій я сказав, що ви повинні використовувати числовий ідентифікатор, полягає в тому, що, як ви вже видалили користувача, його запис /etc/passwdбуло видалено (він, поряд з іншими речами, ідентифікатор користувача, разом з його ім'ям) .

Отже, якщо ви не видалили його homedir, один із найпростіших способів - це просто запитувати ідентифікатор власника цього hededir:

stat -c %u /home/user/

( statце інструмент для читання даних файлової системи. -c %uрозповідає, statяк записати її вихід, тут я прошу просто вивести ідентифікатор користувача)

Якщо вам подобаються однолінійки, ви навіть можете з'єднати обидві команди:

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

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


Ви також можете скористатися -execопцією знайти, щоб запустити спеціальну команду rm, якщо ви хочете трохи більше контролювати свої видалення, але я ніколи цього не намагався YMMV.
agc93

Щоправда, або це, або передача результату на rmвикористання xargs(але це, ймовірно, вдасться до меж аргументу, якщо результатів занадто багато), але подивіться -depth, цитуючи інформаційну інструкцію: "Якщо ваша команда` find "видаляє каталоги, ви можете виявити, що ви отримуєте помилкове повідомлення про помилку, коли "find" намагається повторно вписатись у каталог, який зараз було видалено. Використання опції `-depth 'зазвичай вирішить цю проблему." (і пізніше в тому ж розділі, "(` -delete 'означає `-depth' все одно)")
njsg

@njsg Ну я отримую:find: 'user' is not the name of a known use
pl1nk

1
@ pl1nk: як я вже говорив, вам доведеться використовувати числовий ідентифікатор користувача - оскільки ви вже видалили користувача, у /etc/passwdцьому списку користувача та його ідентифікатора немає відображення . Вам доведеться знайти числовий ідентифікатор. Зробіть stat -c %u /home/user/це, він повинен дати вам числовий ідентифікатор користувача, використовуйте його, як xxxзазначено вище.
njsg

@njsg Ви праві, я не прочитав останньої частини вашого питання.
pl1nk

5

Іншим варіантом буде повторне додавання користувача із adduserзазначенням старого UID, а потім запуску deluserзнову, на цей раз із --remove-all-filesпрапором.

Припустимо, наприклад, що у користувача було ім’я користувача aliceта UID 1001:

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice

3

gnu find має параметри -nouser та -nogroup, знайдіть його man find. За допомогою цих параметрів ви можете знайти всі файли у вашій файловій системі (их), які не мають відповідного користувача в / etc / passwd. Якщо ви не створили нового користувача зі старими подіями видалених користувачів, це можливість знайти ці осиротілі файли.

Однак ви можете знайти більше файлів - не тільки тих, що належали вашому видаленому файлу.


Я вважаю, що ви маєте найкращу відповідь! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" Команда знаходить усі файли, у яких немає ні користувача, ні групи, і видаляє їх автоматично.
DanglingPointer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.