हिन्दी (Hindi)

Linux कमांड लाइन में फ़ाइल और डायरेक्टरी कैसे हटाएं

4 min
VPS/VDS होस्टिंग

इस ट्यूटोरियल के अंत तक आप एक फ़ाइल, खाली डायरेक्टरी, पूरा डायरेक्टरी ट्री, और नाम या उम्र के आधार पर छांटी गई फ़ाइलें हटाना सीख जाएंगे। हर बार कार्रवाई से पहले आप निशाने की जांच भी करेंगे। Linux की कमांड लाइन में रीसायकल बिन नहीं होता: हटाई गई चीज़ हमेशा के लिए चली जाती है। इसलिए कमांड जितना ही तरीका भी मायने रखता है।

पूर्वापेक्षाएं

  • किसी Linux मशीन का शेल एक्सेस (लोकल या SSH), उदाहरण के लिए एक Linux VPS
  • संबंधित डायरेक्टरी में लिखने के अधिकार वाला यूज़र (या sudo)
  • जो कुछ महत्वपूर्ण है, उसका हाल का बैकअप

हटाने से पहले निशाने की जांच करें

सही डायरेक्टरी में जाएं और उसकी सामग्री सूचीबद्ध करें। इसमें दो सेकंड लगते हैं और ज़्यादातर दुर्घटनाएं यहीं रुक जाती हैं।

Bash
pwd ls -la

किसी पैटर्न (एक्सटेंशन, प्रीफ़िक्स) के लिए पहले देखें कि वह किन फ़ाइलों को छुएगा। rm ठीक यही सूची इस्तेमाल करेगा।

Bash
ls -d *.log

एक फ़ाइल हटाएं

बुनियादी कमांड rm है।

Bash
rm report.txt

-i जोड़ने पर यह पुष्टि मांगता है, और -v जोड़ने पर बताता है कि क्या हटा रहा है।

Bash
rm -iv report.txt

इसके बाद ls report.txt से जांचें: "No such file or directory" संदेश आए तो फ़ाइल हट चुकी है।

कई फ़ाइलें एक साथ हटाएं

शेल के वाइल्डकार्ड से फ़ाइलों का समूह चुना जा सकता है। पहले ls से सूची देखें, फिर हटाएं।

Bash
rm -v *.tmp rm -v photo_{01..05}.jpg

ऐसे डायरेक्टरी में सीधे rm * चलाने से बचें जिसके बारे में आप निश्चित नहीं हैं। अगर किसी फ़ाइल का नाम हाइफ़न से शुरू होता है, तो विकल्पों के अंत का संकेत देने के लिए -- इस्तेमाल करें:

Bash
rm -- -strange-file.txt

खाली डायरेक्टरी हटाएं

rmdir केवल खाली डायरेक्टरी हटाता है। यह जानबूझकर किया गया है: यह एक सुरक्षा कवच का काम करता है।

Bash
rmdir old_folder

जो पैरेंट डायरेक्टरी खाली हो जाएं, उन्हें भी हटाने के लिए:

Bash
rmdir -p project/cache/tmp

डायरेक्टरी और उसकी पूरी सामग्री हटाएं

इसके लिए रिकर्सिव विकल्प -r चाहिए। पहले अंदाज़ा लगा लें कि आप क्या खोने वाले हैं।

Bash
du -sh old_project find old_project -type f | wc -l

फिर पुष्टि के साथ हटाएं:

Bash
rm -ri old_project

हज़ारों फ़ाइलों पर हर बार पुष्टि देना व्यावहारिक नहीं रहता। -f विकल्प इसे बंद कर देता है:

Bash
rm -rf old_project

इस कमांड में कभी बिना जांची हुई वेरिएबल न रखें। rm -rf "$DIR"/ में अगर $DIR खाली हुआ, तो निशाना रूट डायरेक्टरी बन जाती है। स्क्रिप्ट में set -u जोड़ें या "${DIR:?}" इस्तेमाल करें, जो वेरिएबल खाली होने पर निष्पादन रोक देता है।

उम्र के आधार पर फ़ाइलें हटाएं

find सटीक मानदंडों (नाम, प्रकार, उम्र, आकार) पर छांटता है। सिद्धांत यह है: पहले बिना कोई कार्रवाई जोड़े चलाएं, फिर -delete लगाएं।

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30

अगर सूची वही है जो आप चाहते थे:

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete

-mtime +30 का मतलब है वे फ़ाइलें जो 30 दिन से ज़्यादा पहले बदली गई थीं। -delete को सबसे अंत में रखें: find शर्तों को बाएं से दाएं परखता है, और बहुत पहले रखा गया -delete सब कुछ हटा देता है।

संवेदनशील फ़ाइल को ज़्यादा सुरक्षित तरीके से मिटाएं

rm फ़ाइल की प्रविष्टि हटाता है, डिस्क का डेटा ज़रूरी नहीं कि मिटे। shred हटाने से पहले सामग्री को ओवरराइट कर देता है।

Bash
shred -u -v secret.key

SSD, जर्नलिंग फ़ाइल सिस्टम या स्नैपशॉट वाले वॉल्यूम पर इस तरीके की सीमाएं हैं, क्योंकि वहां पुराना डेटा बचा रह सकता है। वाकई संवेदनशील डेटा के लिए शुरू से डिस्क एन्क्रिप्शन ही भरोसेमंद उपाय है।

आम त्रुटियां ठीक करें

Permission denied

पैरेंट डायरेक्टरी में आपके पास लिखने का अधिकार नहीं है (हटाने को फ़ाइल नहीं, पैरेंट डायरेक्टरी नियंत्रित करती है)। ls -ld DIRECTORY से जांचें, और उचित हो तो sudo इस्तेमाल करें:

Bash
sudo rm -v /path/to/file

sudo के साथ भी Operation not permitted

संभावना है कि फ़ाइल पर immutable एट्रिब्यूट लगा है। उसे देखें, हटाएं, फिर फ़ाइल मिटाएं।

Bash
lsattr file.txt sudo chattr -i file.txt sudo rm file.txt

Argument list too long

वाइल्डकार्ड ने सिस्टम की स्वीकार सीमा से ज़्यादा आर्गुमेंट बना दिए। find का सहारा लें, जो फ़ाइलों को एक-एक करके संभालता है:

Bash
find . -maxdepth 1 -type f -name "*.tmp" -delete

Directory not empty या Device or resource busy

rmdir के साथ पहला संदेश सामान्य है: डायरेक्टरी में फ़ाइलें हैं, छिपी हुई फ़ाइलें भी (ls -A)। अगर कोई माउंट पॉइंट या प्रक्रिया उसे इस्तेमाल कर रही है, तो lsof +D DIRECTORY या findmnt से उसे पहचानें और दोबारा कोशिश से पहले उसे मुक्त करें।

बिना जोखिम अभ्यास के लिए एक अस्थायी इंस्टेंस सुविधाजनक रहता है: VPS पर आप परीक्षण डायरेक्टरी बनाकर बिना किसी नुकसान के गलती कर सकते हैं। इसी तरह के और गाइड ट्यूटोरियल सेक्शन में एक जगह मिल जाएंगे।

FAQ

rm से हटाई गई फ़ाइल वापस मिल सकती है?

कम ही, और कोई गारंटी नहीं। अगर आप तुरंत डिस्क पर लिखना बंद कर दें, तो extundelete या testdisk जैसे टूल कभी-कभी डेटा खोज लेते हैं। एकमात्र भरोसेमंद सुरक्षा बैकअप ही है।

rm -r और rm -rf में क्या अंतर है?

rm -r रिकर्सिव रूप से हटाता है, लेकिन राइट-प्रोटेक्टेड फ़ाइलों पर पुष्टि मांगता है। rm -rf हटाने को ज़बरदस्ती करता है और जो फ़ाइलें मौजूद नहीं हैं उन्हें चुपचाप अनदेखा कर देता है। इसे केवल तभी इस्तेमाल करें जब आप निशाने की जांच कर चुके हों।

जिस डायरेक्टरी के नाम में स्पेस हो, उसे कैसे हटाएं?

नाम को उद्धरण चिह्नों में रखें या स्पेस से पहले बैकस्लैश लगाएं: rm -r "My folder" या rm -r My\ folder। ऐसा न करने पर शेल हर शब्द को अलग आइटम मान लेता है।

क्या कमांड लाइन में रीसायकल बिन जैसा कुछ है?

हां, trash-cli पैकेज (कमांड trash-put) के ज़रिए, जो चीज़ों को मिटाने के बजाय यूज़र के ट्रैश में ले जाता है। सर्वर पर यह आमतौर पर डिफ़ॉल्ट रूप से इंस्टॉल नहीं होता, इसलिए हटाने से पहले सूची देखने की आदत डालें।

नवीनतम ऑफ़र, छूट और विशेष प्रोमोशन से अपडेट रहें।

प्रोमोशन देखें

हम cookies का उपयोग करते हैं

हम अपनी साइट पर आपके अनुभव को बेहतर बनाने के लिए एनालिटिक्स cookies का उपयोग करते हैं। कोई भी डेटा तीसरे पक्ष को नहीं बेचा जाता है। हमारे बारे में और जानें गोपनीयता नीति.