ลบผู้ใช้และไฟล์ทั้งหมดที่เป็นของผู้ใช้นี้


12

ฉันใช้deluserโดยไม่มีพารามิเตอร์--remove-all-files:

$ deluser 'user'

มีวิธีอื่นนอกเหนือจากrm -r /home/userการลบไฟล์ทั้งหมดที่ผู้ใช้เป็นเจ้าของตอนนี้ (เนื่องจากฉันได้ดำเนินการตัวลบแล้ว)?

คำตอบ:


19

คุณจะต้องค้นหาไฟล์ด้วยตนเองซึ่งอาจเป็นสิ่งที่deluserจะทำ

โปรดทราบ--remove-all-filesคือไม่ได้rm -r /home/userเช่นเดียวกับ ส่วนหลังจะลบ homedir เท่านั้น (ซึ่งอาจรวมถึงไฟล์ที่ผู้ใช้นั้นไม่ได้เป็นเจ้าของแม้ว่าจะไม่ได้เป็นแบบปกติก็ตาม) แต่ก่อนหน้านี้จะลบไฟล์ทั้งหมดที่ผู้ใช้นั้นเป็นเจ้าของออกจากระบบ อย่างน้อยถ้าmanpage คือการได้รับความเชื่อถือ

GNU findมี-userการทดสอบเพื่อให้คุณสามารถทำเพื่อหาไฟล์ทั้งหมดของผู้ใช้find / -user xxx จะเป็นชื่อผู้ใช้และสามารถ (และในกรณีนี้จะต้องมีเนื่องจากผู้ใช้ไม่มีอยู่แล้ว) เป็นรหัสตัวเลขของผู้ใช้ ยังมีตัวเลือกดังนั้นxxxxxxfind-delete

find / -user xxx -delete

ควรทำอย่างไรแม้ว่าฉันจะไม่ได้ทดสอบคำสั่งพร้อมตัวเลือกทั้งหมดในเวลาเดียวกัน

แก้ไข: ID ที่เป็นตัวเลข:สาเหตุที่ฉันบอกว่าคุณต้องใช้ ID ที่เป็นตัวเลขเนื่องจากเมื่อคุณลบผู้ใช้แล้วรายการของเขาใน/etc/passwdถูกลบ (มันมีพร้อมกับสิ่งอื่น ๆ ID ผู้ใช้พร้อมกับชื่อผู้ใช้ของเขา) .

ดังนั้นหากคุณไม่ได้ลบ homedir ของเขาวิธีที่ง่ายที่สุดวิธีหนึ่งคือเพียงค้นหา ID ของเจ้าของ homedir นั้น:

stat -c %u /home/user/

( statเป็นเครื่องมือในการอ่านข้อมูลระบบไฟล์-c %uบอกstatวิธีการเขียนผลลัพธ์ที่นี่ฉันขอให้มันเพียงแค่ส่งออก ID ผู้ใช้)

หากคุณชอบแบบ liners คุณสามารถเชื่อมโยงคำสั่งทั้งสองได้:

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

(แน่นอนคุณอาจต้องการเรียกใช้ครั้งแรกโดยไม่มี-deleteเพื่อให้แน่ใจว่าไม่มีสิ่งใดที่คุณต้องการเก็บไว้และจับข้อผิดพลาดใด ๆ ที่คุณได้เขียนคำสั่งที่เหลือข้อผิดพลาดเมื่อทำการลบแบบเรียกซ้ำ/ไม่เหมาะสำหรับคนใจร้อน ของหัวใจ)


คุณยังสามารถใช้-execตัวเลือกในการค้นหาเพื่อรันคำสั่ง rm แบบกำหนดเองหากคุณต้องการควบคุมการลบของคุณอีกเล็กน้อย แต่ฉันไม่เคยลองใช้ YMMV เลย
agc93

เป็นจริงไม่ว่าจะเป็นหรือส่งผ่านผลลัพธ์ไปยังการrmใช้xargs(แต่อาจจะถึงขีด จำกัด การโต้แย้งหากมีผลลัพธ์มากเกินไป) แต่ดูที่-depthอ้างถึงคู่มือข้อมูล: "ถ้าคำสั่ง` find 'ของคุณลบไดเรกทอรีคุณอาจพบว่า คุณได้รับข้อความแสดงข้อผิดพลาดปลอมเมื่อ `ค้นหา 'พยายามเรียกคืนไปยังไดเรกทอรีที่ถูกลบไปแล้วตอนนี้การใช้ตัวเลือก` - ลึก' จะแก้ปัญหานี้ได้ตามปกติ " (และต่อมาในส่วนเดียวกัน "(` -delete 'หมายถึง `-depth' ต่อไป)))
njsg

@njsg ฉันได้รับแล้ว:find: 'user' is not the name of a known use
pl1nk

1
@ pl1nk: อย่างที่ฉันบอกไปแล้วว่าคุณจะต้องใช้ ID ตัวเลขของผู้ใช้ - เมื่อคุณลบผู้ใช้ไปแล้วไม่มีการแมปใน/etc/passwdรายการที่แสดงผู้ใช้และ ID ของเขา คุณจะต้องค้นหารหัสตัวเลข ทำstat -c %u /home/user/มันควรให้ ID ผู้ใช้ที่เป็นตัวเลขให้คุณใช้รหัสดังกล่าว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 พบมีตัวเลือก -nouser และ -nogroup man findมองมันได้ใน ด้วยตัวเลือกเหล่านี้คุณสามารถค้นหาไฟล์ทั้งหมดในระบบไฟล์ของคุณที่ไม่มีผู้ใช้ที่เกี่ยวข้องใน / etc / passwd หากคุณยังไม่ได้สร้างผู้ใช้ใหม่ที่มี uids เก่าของผู้ใช้ที่ถูกลบของคุณนี่เป็นไปได้ที่จะค้นหาไฟล์เด็กกำพร้าเหล่านี้

อย่างไรก็ตามคุณอาจพบไฟล์เพิ่มเติม - ไม่เพียง แต่ไฟล์ที่เป็นของคุณเท่านั้น


ฉันเชื่อว่าคุณมีคำตอบที่ดีที่สุด! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" คำสั่งค้นหาไฟล์ทั้งหมดที่ไม่มีผู้ใช้หรือกลุ่มและ ลบออกโดยอัตโนมัติ
DanglingPointer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.