Hapus pengguna dan semua file yang dimiliki oleh pengguna ini

12

Saya telah menggunakan delusertanpa parameter --remove-all-files:

$ deluser 'user'

Apakah ada cara lain selain rm -r /home/usermenghapus semua file yang dimiliki oleh pengguna sekarang (karena saya sudah mengeksekusi deluser)?

pl1nk
sumber

Jawaban:

19

Anda harus menemukan file secara manual, yang mungkin adalah apa yang deluserakan dilakukan.

Harap dicatat --remove-all-filesadalah tidak sama dengan rm -r /home/user. Yang terakhir hanya menghapus homedir (yang mungkin termasuk file yang tidak dimiliki oleh pengguna itu, meskipun tidak biasa), yang pertama menghapus semua file yang dimiliki oleh pengguna itu dari sistem. Setidaknya jika manual tersebut bisa dipercaya .

GNU findmemiliki -usertes, sehingga Anda dapat melakukannya find / -user xxxuntuk menemukan semua file yang dimiliki oleh pengguna xxx. xxxakan menjadi nama pengguna, dan dapat (dan dalam hal ini akan harus, sebagai pengguna tidak ada lagi) menjadi ID numerik pengguna. findjuga memiliki -deleteopsi, jadi

find / -user xxx -delete

Harus melakukannya, walaupun saya belum menguji perintah dengan semua opsi pada saat yang sama.

EDIT: Numeric ID: Alasan mengapa saya mengatakan Anda harus menggunakan ID numerik adalah karena, karena Anda sudah menghapus pengguna, entrinya /etc/passwdtelah dihapus (itu, bersama dengan hal-hal lain, ID pengguna, bersama dengan nama penggunanya) .

Jadi, jika Anda tidak menghapus homedirnya, salah satu cara termudah adalah dengan hanya menanyakan ID pemilik homedir itu:

stat -c %u /home/user/

( statadalah alat untuk membaca data sistem file. -c %uMemberitahu statcara menulis outputnya, di sini saya meminta untuk hanya menampilkan ID pengguna)

Jika Anda suka one-liners, Anda bahkan dapat mem-chain kedua perintah:

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

(Tentu saja Anda dapat memilih untuk menjalankannya terlebih dahulu tanpa -deleteuntuk memastikan tidak ada yang ingin Anda pertahankan, dan untuk menangkap kesalahan yang Anda buat saat menulis sisa perintah. Kesalahan ketika melakukan operasi penghapusan rekursif /bukan untuk menjadi samar-samar. dari hati.)

njsg
sumber
Anda juga dapat menggunakan -execopsi find untuk menjalankan perintah custom rm jika Anda ingin sedikit lebih banyak kontrol atas penghapusan Anda, tetapi saya belum pernah mencobanya juga YMMV.
agc93
Benar, baik itu atau meneruskan output untuk rmmenggunakan xargs(tetapi ini mungkin akan mencapai batas argumen jika ada terlalu banyak hasil), tetapi lihat -depth, mengutip manual info: "Jika perintah` find 'Anda menghapus direktori, Anda mungkin menemukan bahwa Anda mendapatkan pesan kesalahan palsu ketika `find 'mencoba untuk kembali ke direktori yang sekarang telah dihapus. Menggunakan opsi` -depth' biasanya akan menyelesaikan masalah ini. " (dan kemudian pada bagian yang sama, "((toh, 'hapus' menyiratkan` -tinggal ') ")
njsg
@ njsg Yah saya mendapatkan:find: 'user' is not the name of a known use
pl1nk
1
@ pl1nk: seperti yang saya katakan, Anda harus menggunakan ID numerik pengguna - karena Anda sudah menghapus pengguna, tidak ada pemetaan di /etc/passwddaftar pengguna dan ID-nya. Anda harus menemukan id numerik. Apakah stat -c %u /home/user/, itu akan memberi Anda id pengguna numerik, gunakan itu seperti di xxxatas.
njsg
@ njsg Anda benar, saya belum membaca bagian terakhir dari pertanyaan Anda.
pl1nk
5

Opsi lain adalah menambahkan kembali pengguna dengan adduser, menentukan UID lama, dan kemudian jalankan deluserlagi, kali ini dengan --remove-all-filesflag.

Misalkan, misalnya, bahwa pengguna memiliki nama pengguna alicedan UID 1001:

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

gnu menemukan memiliki pilihan -nouser dan -nogroup, mencarinya di man find. Dengan opsi ini, Anda dapat menemukan semua file di sistem file Anda yang tidak memiliki pengguna yang sesuai di / etc / passwd. Jika Anda belum membuat pengguna baru dengan uids lama dari pengguna yang dihapus, ini adalah kemungkinan untuk menemukan file-file yatim ini.

Namun, Anda mungkin menemukan lebih banyak file - tidak hanya file milik Anda yang dihapus.

Oh tidak
sumber
Saya yakin Anda memiliki jawaban terbaik! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" Perintah ini menemukan semua file yang tidak memiliki pengguna atau grup dan menghapusnya secara otomatis.
DanglingPointer