एक उपयोगकर्ता और इस उपयोगकर्ता के स्वामित्व वाली सभी फ़ाइलों को हटा दें


12

मैंने deluserपैरामीटर के बिना उपयोग किया है --remove-all-files:

$ deluser 'user'

क्या rm -r /home/userअब उपयोगकर्ता के स्वामित्व वाली सभी फ़ाइलों को हटाने के अलावा कोई रास्ता नहीं है (क्योंकि मैंने पहले ही मायाजाल को अंजाम दिया है)?

जवाबों:


19

आपको मैन्युअल रूप से फ़ाइलों को ढूंढना होगा, जो कि संभवतया deluserऐसा होगा।

कृपया ध्यान दें --remove-all-filesकि ऐसा नहीं है rm -r /home/user। उत्तरार्द्ध केवल होमेडिर को हटा देता है (जिसमें उस उपयोगकर्ता के स्वामित्व वाली फाइलें शामिल नहीं हो सकती हैं, हालांकि सामान्य नहीं हैं), पूर्व सिस्टम से उस उपयोगकर्ता के स्वामित्व वाली सभी फ़ाइलों को हटा देता है। कम से कम अगर मैनपेज पर भरोसा किया जाए

जीएनयू findका एक -userपरीक्षण है, इसलिए आप find / -user xxxउपयोगकर्ता के स्वामित्व वाली सभी फ़ाइलों को खोजने के लिए कर सकते हैं xxxxxxउपयोगकर्ता नाम होगा, और (और इस मामले में कर सकते हैं करेंगे उपयोगकर्ता के रूप में अब मौजूद नहीं है, के लिए है) होना उपयोगकर्ता की अंकीय आईडी। findएक -deleteविकल्प भी है , इसलिए

find / -user xxx -delete

यह करना चाहिए, हालांकि मैंने एक ही समय में सभी विकल्पों के साथ कमांड का परीक्षण नहीं किया है।

EDIT: न्यूमेरिक आईडी: इस कारण से मैंने आपको एक संख्यात्मक आईडी का उपयोग करने के लिए कहा है, क्योंकि जैसा कि आपने पहले ही उपयोगकर्ता /etc/passwdको हटा दिया था , उसका प्रवेश हटा दिया गया था (यह अन्य सामान के साथ, उपयोगकर्ता आईडी, उसके उपयोगकर्ता नाम के साथ) ।

इसलिए, यदि आपने उसका होमडायर नहीं निकाला है, तो सबसे आसान तरीकों में से एक उस होमडायर के मालिक की आईडी के लिए क्वेरी करना है:

stat -c %u /home/user/

( statफाइलसिस्टम डेटा पढ़ने के लिए एक उपकरण है। यह -c %uबताता है statकि इसका आउटपुट कैसे लिखना है, यहाँ मैं इसे यूजर आईडी बनाने के लिए कह रहा हूँ)

यदि आप एक-लाइनर पसंद करते हैं, तो आप दोनों कमांड को भी चेन कर सकते हैं:

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

(निश्चित रूप से आप इसे पहले से ही चलाना पसंद कर सकते हैं, यह -deleteसुनिश्चित करने के लिए कि आप कुछ भी नहीं रखना चाहते हैं, और किसी भी गलती को पकड़ने के लिए जो आपने बाकी कमांड को लिख कर दिया है। गलतियों को हटाते समय पुनरावर्ती ऑपरेशन करना गलत /नहीं है। दिल का।)


-execयदि आप अपने विलोपनों पर थोड़ा अधिक नियंत्रण चाहते हैं, तो आप कस्टम rm कमांड चलाने के लिए खोज के विकल्प का भी उपयोग कर सकते हैं , लेकिन मैंने कभी भी ऐसा प्रयास नहीं किया है ताकि YMMV हो।
agc93

यह सच है, या तो आउटपुट का rmउपयोग करने के लिए xargs(लेकिन यह संभवतः तर्क सीमा को मार देगा यदि बहुत अधिक परिणाम हैं), लेकिन -depthजानकारी मैनुअल को उद्धृत करते हुए देखें: "यदि आपका` कमांड 'निर्देशिकाओं को हटाता है, तो आप पा सकते हैं कि जब आपको 'खोज' एक निर्देशिका में पुन: प्राप्त करने का प्रयास करता है, तो आपको एक त्रुटि संदेश मिलता है, जो `-डेप 'विकल्प का उपयोग करके सामान्य रूप से इस समस्या को हल करेगा।" (और बाद में एक ही खंड पर, "(` -delete 'का अर्थ है
-'दीप

@njsg खैर मुझे मिलता है:find: 'user' is not the name of a known use
pl1nk

1
@ pl1nk: जैसा कि मैंने कहा, आपको उपयोगकर्ता की संख्यात्मक आईडी का उपयोग करना होगा - जैसा कि आपने पहले ही उपयोगकर्ता को हटा दिया है, /etc/passwdउपयोगकर्ता और उसकी आईडी को सूचीबद्ध करने में कोई मैपिंग नहीं है । आपको संख्यात्मक आईडी ढूंढनी होगी। क्या stat -c %u /home/user/, यह आपको संख्यात्मक उपयोगकर्ता आईडी दे सकता है, जैसा कि 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 find के पास विकल्प -nouser और -nogroup हैं, इसे ऊपर देखें man find। इन विकल्पों के साथ आप अपने फाइलसिस्टम (ओं) में सभी फाइलें पा सकते हैं जिनके पास / etc / passwd में कोई संगत उपयोगकर्ता नहीं है। यदि आपने अपने हटाए गए उपयोगकर्ताओं के पुराने uids के साथ एक नया उपयोगकर्ता नहीं बनाया है, तो इन अनाथ फ़ाइलों को खोजने की संभावना है।

हालाँकि, आपको अधिक फ़ाइलें मिल सकती हैं - न केवल वे जो आपके डिलीट किए गए हैं।


मेरा मानना ​​है कि आपके पास सबसे अच्छा उत्तर है! ... "$ Find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" कमांड में वे सभी फाइल्स मिल जाती हैं जिनके पास कोई उपयोगकर्ता नहीं है और न ही समूह है। उन्हें स्वचालित रूप से हटा देता है।
डैंगलिंगपॉइंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.