Usuń użytkownika i wszystkie pliki należące do tego użytkownika

12

Użyłem deluserbez parametru --remove-all-files:

$ deluser 'user'

Czy istnieje sposób inny niż rm -r /home/userusunięcie wszystkich plików posiadanych teraz przez użytkownika (skoro już uruchomiłem deluser)?

pl1nk
źródło

Odpowiedzi:

19

Będziesz musiał ręcznie znaleźć pliki, co prawdopodobnie było tym deluser, co by zrobiło.

Uwaga: --remove-all-filesto nie to samo co rm -r /home/user. Ten ostatni usuwa tylko katalog główny (który może obejmować pliki, które nie są własnością tego użytkownika, choć nie jest to zwykły), drugi usuwa wszystkie pliki należące do tego użytkownika z systemu. Przynajmniej jeśli strona ma być godna zaufania .

GNU findma -usertest, więc możesz find / -user xxxznaleźć wszystkie pliki należące do użytkownika xxx. xxxbędzie nazwą użytkownika i może (iw tym przypadku będzie musiała, ponieważ użytkownik już nie istnieje) być identyfikatorem numerycznym użytkownika. findma również -deleteopcję, więc

find / -user xxx -delete

Powinien to zrobić, chociaż nie przetestowałem polecenia ze wszystkimi opcjami jednocześnie.

EDYCJA: Identyfikator numeryczny: Powodem, dla którego powiedziałem, że musisz użyć identyfikatora numerycznego, jest to, że skoro już usunąłeś użytkownika, jego wpis /etc/passwdzostał usunięty (zawierał, wraz z innymi rzeczami, identyfikator użytkownika wraz z jego nazwą użytkownika) .

Tak więc, jeśli nie usunąłeś jego homediru, jednym z najprostszych sposobów jest po prostu zapytanie o identyfikator właściciela tego homediru:

stat -c %u /home/user/

( statjest narzędziem do odczytu danych systemu plików. -c %umówi, statjak zapisać dane wyjściowe, tutaj proszę o podanie identyfikatora użytkownika)

Jeśli lubisz jednowierszowe, możesz nawet połączyć oba polecenia:

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

(Oczywiście wolisz uruchomić go najpierw z opcją no, -deleteaby upewnić się, że nie ma nic, co chcesz zachować, i aby złapać każdy błąd, który popełniłeś podczas pisania reszty polecenia. Błędy podczas wykonywania operacji usuwania rekurencyjnego /nie są dla słabych z serca.)

njsg
źródło
Możesz także skorzystać z -execopcji find, aby uruchomić niestandardowe polecenie rm, jeśli chcesz nieco więcej kontrolować swoje usuwanie, ale nigdy tego nie próbowałem, więc YMMV.
agc93
To prawda, że ​​albo przekazanie danych wyjściowych do rmużycia xargs(ale to prawdopodobnie przekroczy granice argumentów, jeśli wyników jest zbyt wiele), ale spójrz na -depth, cytując instrukcję informacyjną: „Jeśli polecenie` find 'usuwa katalogi, możesz to znaleźć pojawia się fałszywy komunikat o błędzie, gdy polecenie „find” próbuje wrócić do katalogu, który został teraz usunięty. Użycie opcji -depth zwykle rozwiąże ten problem. (a później w tej samej sekcji, „(„ -delete ”oznacza i tak„ -depth ”)”)
njsg
@njsg Cóż, dostaję:find: 'user' is not the name of a known use
pl1nk
1
@ pl1nk: jak powiedziałem, będziesz musiał użyć identyfikatora numerycznego użytkownika - ponieważ już go usunąłeś, nie ma mapowania, /etc/passwdktóre zawiera listę użytkownika i jego identyfikatora. Musisz znaleźć identyfikator numeryczny. Czy stat -c %u /home/user/powinien dać numeryczny identyfikator użytkownika, użyj go jak xxxwyżej.
njsg
@njsg Masz rację Nie przeczytałem ostatniej części twojego pytania.
pl1nk
5

Inną opcją byłoby ponowne dodanie użytkownika adduser, określenie starego UID, a następnie deluserponowne uruchomienie , tym razem z --remove-all-filesflagą.

Załóżmy na przykład, że użytkownik miał nazwę użytkownika alicei identyfikator UID 1001:

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice
Eliah Kagan
źródło
3

gnu find ma opcje -nouser i -nogroup, sprawdź w man find. Dzięki tym opcjom możesz znaleźć wszystkie pliki w systemie plików, które nie mają odpowiedniego użytkownika w / etc / passwd. Jeśli nie utworzyłeś nowego użytkownika ze starymi identyfikatorami użytkowników usuniętych, istnieje możliwość znalezienia tych osieroconych plików.

Możesz jednak znaleźć więcej plików - nie tylko tych, które należały do ​​usuniętego.

o nie
źródło
Myślę, że masz najlepszą odpowiedź! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" Polecenie wyszukuje wszystkie pliki, które nie mają ani użytkownika, ani grupy usuwa je automatycznie.
DanglingPointer,