ฉันใช้deluser
โดยไม่มีพารามิเตอร์--remove-all-files
:
$ deluser 'user'
มีวิธีอื่นนอกเหนือจากrm -r /home/user
การลบไฟล์ทั้งหมดที่ผู้ใช้เป็นเจ้าของตอนนี้ (เนื่องจากฉันได้ดำเนินการตัวลบแล้ว)?
ฉันใช้deluser
โดยไม่มีพารามิเตอร์--remove-all-files
:
$ deluser 'user'
มีวิธีอื่นนอกเหนือจากrm -r /home/user
การลบไฟล์ทั้งหมดที่ผู้ใช้เป็นเจ้าของตอนนี้ (เนื่องจากฉันได้ดำเนินการตัวลบแล้ว)?
คำตอบ:
คุณจะต้องค้นหาไฟล์ด้วยตนเองซึ่งอาจเป็นสิ่งที่deluser
จะทำ
โปรดทราบ--remove-all-files
คือไม่ได้rm -r /home/user
เช่นเดียวกับ ส่วนหลังจะลบ homedir เท่านั้น (ซึ่งอาจรวมถึงไฟล์ที่ผู้ใช้นั้นไม่ได้เป็นเจ้าของแม้ว่าจะไม่ได้เป็นแบบปกติก็ตาม) แต่ก่อนหน้านี้จะลบไฟล์ทั้งหมดที่ผู้ใช้นั้นเป็นเจ้าของออกจากระบบ อย่างน้อยถ้าmanpage คือการได้รับความเชื่อถือ
GNU find
มี-user
การทดสอบเพื่อให้คุณสามารถทำเพื่อหาไฟล์ทั้งหมดของผู้ใช้find / -user xxx
จะเป็นชื่อผู้ใช้และสามารถ (และในกรณีนี้จะต้องมีเนื่องจากผู้ใช้ไม่มีอยู่แล้ว) เป็นรหัสตัวเลขของผู้ใช้ ยังมีตัวเลือกดังนั้นxxx
xxx
find
-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
เพื่อให้แน่ใจว่าไม่มีสิ่งใดที่คุณต้องการเก็บไว้และจับข้อผิดพลาดใด ๆ ที่คุณได้เขียนคำสั่งที่เหลือข้อผิดพลาดเมื่อทำการลบแบบเรียกซ้ำ/
ไม่เหมาะสำหรับคนใจร้อน ของหัวใจ)
rm
ใช้xargs
(แต่อาจจะถึงขีด จำกัด การโต้แย้งหากมีผลลัพธ์มากเกินไป) แต่ดูที่-depth
อ้างถึงคู่มือข้อมูล: "ถ้าคำสั่ง` find 'ของคุณลบไดเรกทอรีคุณอาจพบว่า คุณได้รับข้อความแสดงข้อผิดพลาดปลอมเมื่อ `ค้นหา 'พยายามเรียกคืนไปยังไดเรกทอรีที่ถูกลบไปแล้วตอนนี้การใช้ตัวเลือก` - ลึก' จะแก้ปัญหานี้ได้ตามปกติ " (และต่อมาในส่วนเดียวกัน "(` -delete 'หมายถึง `-depth' ต่อไป)))
find: 'user' is not the name of a known use
/etc/passwd
รายการที่แสดงผู้ใช้และ ID ของเขา คุณจะต้องค้นหารหัสตัวเลข ทำstat -c %u /home/user/
มันควรให้ ID ผู้ใช้ที่เป็นตัวเลขให้คุณใช้รหัสดังกล่าวxxx
ข้างต้น
อีกทางเลือกหนึ่งคือการเพิ่มผู้ใช้อีกครั้งด้วยการadduser
ระบุ UID เก่าจากนั้นเรียกใช้deluser
อีกครั้งคราวนี้ด้วยการ--remove-all-files
ตั้งค่าสถานะ
ตัวอย่างเช่นสมมติว่าผู้ใช้มีชื่อผู้ใช้alice
และ UID 1001
:
sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice
GNU พบมีตัวเลือก -nouser และ -nogroup man find
มองมันได้ใน ด้วยตัวเลือกเหล่านี้คุณสามารถค้นหาไฟล์ทั้งหมดในระบบไฟล์ของคุณที่ไม่มีผู้ใช้ที่เกี่ยวข้องใน / etc / passwd หากคุณยังไม่ได้สร้างผู้ใช้ใหม่ที่มี uids เก่าของผู้ใช้ที่ถูกลบของคุณนี่เป็นไปได้ที่จะค้นหาไฟล์เด็กกำพร้าเหล่านี้
อย่างไรก็ตามคุณอาจพบไฟล์เพิ่มเติม - ไม่เพียง แต่ไฟล์ที่เป็นของคุณเท่านั้น
-exec
ตัวเลือกในการค้นหาเพื่อรันคำสั่ง rm แบบกำหนดเองหากคุณต้องการควบคุมการลบของคุณอีกเล็กน้อย แต่ฉันไม่เคยลองใช้ YMMV เลย