Xóa người dùng và tất cả các tệp thuộc sở hữu của người dùng này


12

Tôi đã sử dụng delusermà không có tham số --remove-all-files:

$ deluser 'user'

Có cách nào khác ngoài rm -r /home/userviệc xóa tất cả các tệp do người dùng sở hữu bây giờ không (vì tôi đã thực thi deluser)?

Câu trả lời:


19

Bạn sẽ phải tự tìm các tệp, có thể là những gì delusersẽ làm.

Hãy lưu ý --remove-all-fileskhông giống như rm -r /home/user. Cái sau chỉ xóa homedir (có thể bao gồm các tệp không thuộc sở hữu của người dùng đó, mặc dù không bình thường), cái trước sẽ xóa tất cả các tệp do người dùng đó sở hữu khỏi hệ thống. Ít nhất nếu manpage là đáng tin cậy .

GNU findcó một -userbài kiểm tra, vì vậy bạn có thể làm find / -user xxxđể tìm tất cả các tệp do người dùng sở hữu xxx. xxxsẽ là tên người dùng và có thể (và trong trường hợp này sẽ phải, vì người dùng không còn tồn tại) là ID số của người dùng. findcũng có một -deletelựa chọn, vì vậy

find / -user xxx -delete

Nên làm điều đó, mặc dù tôi đã không kiểm tra lệnh với tất cả các tùy chọn cùng một lúc.

EDIT: ID số: Lý do tại sao tôi nói bạn phải sử dụng ID số là vì, khi bạn đã xóa người dùng, mục nhập của anh ấy /etc/passwdđã bị xóa (cùng với những thứ khác, ID người dùng, cùng với tên người dùng của anh ấy) .

Vì vậy, nếu bạn không xóa homedir của anh ấy, một trong những cách dễ nhất là chỉ truy vấn ID của chủ sở hữu của homedir đó:

stat -c %u /home/user/

( statlà một công cụ để đọc dữ liệu hệ thống tập tin. Cho -c %ubiết statcách ghi đầu ra của nó, ở đây tôi yêu cầu nó chỉ đơn giản là xuất ID người dùng)

Nếu bạn thích một lớp lót, bạn thậm chí có thể xâu chuỗi cả hai lệnh:

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

(Tất nhiên bạn có thể thích chạy nó trước mà không -deleteđể đảm bảo không có gì bạn muốn giữ và để bắt bất kỳ lỗi nào bạn đã viết phần còn lại của lệnh. Lỗi khi thực hiện các thao tác xóa đệ quy /không dành cho người mờ nhạt của trái tim.)


Bạn cũng có thể sử dụng -exectùy chọn find để chạy lệnh rm tùy chỉnh nếu bạn muốn kiểm soát nhiều hơn một chút đối với việc xóa của mình, nhưng tôi chưa bao giờ thử điều đó YMMV.
agc93

Đúng, hoặc là hoặc chuyển đầu ra sang rmsử dụng xargs(nhưng điều này có thể sẽ đạt giới hạn đối số nếu có quá nhiều kết quả), nhưng hãy xem -depth, trích dẫn hướng dẫn thông tin: "Nếu lệnh` find 'của bạn xóa thư mục, bạn có thể thấy rằng bạn nhận được một thông báo lỗi giả khi `find 'cố gắng lặp lại vào một thư mục đã bị xóa. Sử dụng tùy chọn` -depth' thường sẽ giải quyết vấn đề này." (và sau này trên cùng một phần, "(` -delete 'ngụ ý` -depth' anyway) ")
njsg

@njsg Vâng, tôi nhận được:find: 'user' is not the name of a known use
pl1nk

1
@ pl1nk: như tôi đã nói, bạn sẽ phải sử dụng ID số của người dùng - vì bạn đã xóa người dùng, không có ánh xạ /etc/passwdnào liệt kê người dùng và ID của anh ta. Bạn sẽ phải tìm id số. Làm stat -c %u /home/user/, nó sẽ cung cấp cho bạn id người dùng số, sử dụng như xxxtrên.
njsg

@njsg Bạn nói đúng Tôi chưa đọc phần cuối của câu hỏi của bạn.
pl1nk

5

Một tùy chọn khác là thêm lại người dùng adduser, chỉ định UID cũ và sau đó chạy deluserlại, lần này với --remove-all-filescờ.

Ví dụ, giả sử rằng người dùng có tên người dùng alicevà UID 1001:

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

3

gnu find có các tùy chọn -nouser và -nogroup, hãy tìm nó trong man find. Với các tùy chọn này, bạn có thể tìm thấy tất cả các tệp trong (các) hệ thống tệp của mình không có người dùng tương ứng trong / etc / passwd. Nếu bạn chưa tạo người dùng mới với các uids cũ của người dùng đã xóa, đây có thể là tìm thấy các tệp mồ côi này.

Tuy nhiên, bạn có thể tìm thấy nhiều tệp hơn - không chỉ những người thuộc về tệp đã xóa của bạn.


Tôi tin rằng bạn có câu trả lời hay nhất! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" Lệnh tìm tất cả các tệp không có người dùng cũng không có nhóm và loại bỏ chúng tự động.
DanglingPulum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.