क्या हमारे पास लिनक्स में एक पूर्ववत है?


52

मैंने एक बैच स्क्रिप्ट में कुछ फाइलों का नाम बदला। क्या उन परिवर्तनों को पूर्ववत करने का कोई तरीका है, जो उन्हें वापस नाम दिए बिना हैं?

क्या लिनक्स undoआईएनजी के कुछ मूल तरीके प्रदान करता है ?


जवाबों:


53

लिनक्स (अन्य यूनियनों की तरह) मूल रूप से एक पूर्ववत सुविधा प्रदान नहीं करता है। दर्शन यह है कि अगर यह चला गया, यह चला गया। यदि यह महत्वपूर्ण था, तो इसे वापस किया जाना चाहिए था।

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

इस तरह की दुर्घटनाओं से बचाव का सबसे अच्छा तरीका एक संस्करण नियंत्रण प्रणाली (सीवीएस, बाज़ार, दर्क्स, गिट, मर्क्यूरियल, तोड़फोड़, ...) का उपयोग करना है। इसे सीखने में थोड़ा समय लगता है, लेकिन मध्यम और दीर्घावधि में यह काफी कम हो जाता है।


1
अच्छा विकल्प gitfs हो सकता है, जो डेवेलोपमेंट के अंतर्गत है
टेस्ट 30

1
यदि आप गलती से किसी ऐसी फाइल को डिलीट या ओवरराइट कर देते हैं जिसे आपने अभी तक स्टेज नहीं किया है या कमिट नहीं किया है, तब भी CVS मदद नहीं करता है
xdevs23

14

दुर्भाग्यवश नहीं।


19
मुझे नहीं पता कि मैं इसे दुर्भाग्यपूर्ण मानता हूं ... यह पूर्ववत लागू करने के लिए काफी संसाधन लेगा। मुझे डिफ़ॉल्ट रूप से सक्षम -iपर विकल्प भी पसंद नहीं है rm। मेरे यूनिक्स सिस्टम को मेरा हाथ नहीं पकड़ना चाहिए।
xenoterracide

5
मैं डिफ़ॉल्ट रूप से सक्षम है ?! न मेरा डिस्ट्रो, न सर!
स्टीफन

9

नहीं, किसी भी यूनिक्स में कोई जादुई पूर्ववत् नहीं है। यूनिक्स मानता है कि आप जानते हैं कि आप क्या कर रहे हैं। पूर्ववत समर्थन के लिए VCS का उपयोग करें (आपके पाठ संपादक ने शायद इसे भी बनाया है)।

अधिकांश फाइलसिस्टम में पारदर्शी तरीके से इसे करने की क्षमता नहीं होती है।

मैक और विंडोज़ पर क्रमशः टाइम मशीन और सिस्टम रिस्टोर सिर्फ बैकअप / चेंज कंट्रोल सिस्टम हैं।


7

कमांड लाइन में कोई पूर्ववत नहीं है। हालाँकि, आप कमांड को चला सकते हैं rm -iऔर mv -i। यह आपको "क्या आपको यकीन है?" आदेश को निष्पादित करने से पहले प्रश्न।

स्टार्टअप स्क्रिप्ट (उदाहरण के लिए ) ~/.bashrcया इसके लिए एक उपनाम जोड़ना भी संभव है /etc/bash.bashrc:

alias remove='rm -i'
alias move='mv -i'

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


1
+1। बस यहाँ जोड़ने के लिए। उपनामों के ऊपर सेट करने के बाद अगर कुछ मामलों में आप बिना सीधे सीधे हटाना चाहते हैं, "क्या आपको यकीन है" शीघ्रता से आप उपनाम को बायपास करने के लिए \ rm और \ mv का उपयोग कर सकते हैं। आप -f विकल्प का भी उपयोग कर सकते हैं।
हेमंत

2
mv -iकेवल तभी संकेत देता है जब यह एक फ़ाइल को अधिलेखित कर देगा (जो इसे उपयोगी और अप्रिय नहीं बनाता है)। उसी तरह से, alias cp='cp -i'
गिल्स एसओ- बुराई को रोकें '

8
Alming rm और mv एक बहुत बुरा विचार है। (आरएम सभी से भी बदतर है।) आरएम का मतलब आरएम -आई का उपयोग करने की आदत में कभी मत जाओ - आप अंततः इसका उपयोग कहीं और करेंगे जहां उपनाम परिभाषित नहीं है और आप अच्छे के लिए कुछ हटा देंगे। यदि आपको संकेत दिया जाना पसंद है, तो हर समय आरएमआई -आई का उपयोग करने की आदत डालें।
सुश्रीकर

यदि आपको संकेत दिया जाना पसंद है, तो किसी अन्य नाम के तहत एक उपनाम का उपयोग करें। मैं मूव = 'mv -i', copy = 'cp -i', symlink = 'ln -si' का उपयोग करता हूं, और rm के बजाय उपयोग करने के लिए ट्रैश कमांड स्थापित करता हूं। मैं अभी भी स्क्रिप्टिंग करते समय सीधे mv, cp, और rm का उपयोग करता हूं, लेकिन इंटरेक्टिव उपयोग के लिए ये उपनाम उपयोगी हैं।

@mahmoudsakr आप पूरी तरह से सही हैं, मैंने उस बिंदु को याद किया। मेरे पास ये आदेश या तो अलियास नहीं हैं। एक अलग कमांड के रूप में उन्हें अलियास करना सबसे अधिक समझदार विकल्प की तरह लगता है!
vdboor

4

कारण यह है कि लिनक्स / यूनिक्स सिस्टम के पास एक undelete नहीं है, जिस तरह से अधिकांश फाइल सिस्टम उनकी जानकारी संग्रहीत करते हैं। फ़ाइल मेटा-जानकारी सभी डिस्क के सामने डिस्क के बाकी हिस्सों में संदर्भ के साथ संग्रहीत होती है। आमतौर पर, अधिकांश फाइल सिस्टम इस मेटा-एरिया में एक फाइल में 10 ब्लॉक आवंटित करते हैं। पहले 7 में पहले 7 इनोड का उल्लेख है। 8 वें और 9 वें इनोडेस (दोगुने लिंक वाले ब्लॉक) की सूचियों में जाते हैं और 10 वीं सूची की सूचियों की सूची (ट्रिपली लिंक्ड ब्लॉक) पर जाती है। यह फ़ाइल सिस्टम से फ़ाइल सिस्टम (ext4, jfs, xfs, आदि) में भिन्न होता है, लेकिन ब्लॉक की ये सूची आमतौर पर 2GB से लेकर कई टीबी तक कहीं भी फ़ाइल आकार को संबोधित कर सकती है।

लेकिन क्योंकि यह सारी जानकारी डिस्क के सामने संग्रहीत है, जब कोई फ़ाइल मिटा दी जाती है, तो डिस्क पर इनोड्स को संदर्भित करने का कोई तरीका नहीं है कि वे मेटा-डेटा का क्या उपयोग करते हैं। इसके विपरीत FAT32 और NTFS वास्तव में फाइलों के साथ कुछ हेडर सूचनाओं को संग्रहित करते हैं, जिससे यह पहचानना आसान हो जाता है कि ब्लॉक का एक सेट किस फाइल का उपयोग करता है (ताकि उस स्थान को अभी तक नई फ़ाइलों द्वारा पुनः प्राप्त नहीं किया गया है)। लिनक्स काम में, जब आप कुछ हटाते हैं, तो दक्षता के लिए नए डेटा को तुरंत अधिलेखित किया जाना लगभग हमेशा पहली चीज है।


2

यदि आप वास्तव में एक पूर्ववत सुविधा चाहते हैं, तो स्रोत नियंत्रण का उपयोग करें। तोड़फोड़ वास्तव में एक उपयोगकर्ता मशीन पर बहुत अच्छी तरह से काम करता है। मैं अपने घर प्रणाली पर अपनी सभी व्यक्तिगत फ़ाइलों को नियंत्रित करने के लिए इसका उपयोग करता हूं। यह ओवरकिल की तरह लगता है, आपदा तक, एक दुष्ट स्क्रिप्ट या कमांड लाइन टाइपो हिट।


1
rm -r .हालांकि यह आपकी रक्षा नहीं करेगा । ;)
उमंग

1
@ युमंग ने वास्तव में एक बार गिट के साथ किया था, जहां मैं एक स्थानीय भंडार और गलती से रखता हूं rm -r project.git। सौभाग्य से अगर आप किसी अन्य सर्वर को किसी दूरस्थ सर्वर पर रखते हैं जो कि होने की संभावना नहीं है
phunehehe

1
@phunehehe और जिसने भी मेरी टिप्पणी को +1 किया: हम DVCS के लिए उपयोग कर रहे हैं यह महसूस करने के लिए कि मैं पूरी तरह से गलत था। एसवीएन रेपो (जो शाखा नहीं है) के लिए प्रतिबद्ध है। तो आप वास्तव में सुरक्षित रहेंगेrm -r . । वास्तव में मुझे बेवकूफ।
उमंग

2

एक चीज़ जो मुझे अपने .bashrc में जोड़ना पसंद है वह एक कॉपी और फंक्शन को हटाने की है। कुछ इस तरह:

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

लेकिन आपको cmm टाइप करने की आदत डालनी होगी, rm नहीं।

जाहिर है कि यदि आपके पास सीमित डिस्कस्पेस है, तो आपको हटाए गए क्षेत्र के शीर्ष पर रखने की आवश्यकता होगी।


4
आप वास्तव में छोटा कर सकते हैं कि एमवी $ 1 ~ / हटाए गए / $ 1
स्टीफन

हाँ, और यह एक फ़ाइल 'नया दस्तावेज़ 1' को एक और एक 'नए दस्तावेज़ 1' के साथ अधिलेखित कर देगा, यदि आपको सही उद्धरण मिलता है "$1":।
उपयोगकर्ता अज्ञात

@userunknown: क्या आपका मतलब डीनो में $ 1 है और स्टीफन के कोड को "$ 1" के रूप में उद्धृत किया जाना चाहिए?
टिम

@ समय: हाँ, मैं करता हूँ।
उपयोगकर्ता अज्ञात

Cp और rm की जगह क्यों नहीं चलती?
15:15 बजे user1559897

1

GitFS एक फ़्यूज़-आधारित फ़ाइल सिस्टम है, जो स्वचालित रूप से diffसंस्करणों के बीच गणना करता है और उन पर पुनर्स्थापना / ब्राउज़िंग की अनुमति देता है।

वेबपेज: https://www.presslabs.com/gitfs

डॉक्स: https://www.presslabs.com/gitfs/docs/usage/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.