2010-04-07 11 views
6

का उपयोग करके लिनक्स/सोलरिस में फ़ाइलों/फ़ोल्डर को कॉपी/प्रतिलिपि करें, ऐसी स्थिति थी जब किसी ने पूरी रूटडिर को एक रिमोट सिस्टम पर एक उपदिर में स्थानांतरित कर दिया, इस प्रकार सभी सिस्टम टूल्स जैसे सीपी, एमवी, आदि ' अब काम नहीं करते हैं। हमारे पास एक सक्रिय सत्र था, लेकिन केवल बैश बिल्ट-इन्स का उपयोग करके फ़ाइलों को कॉपी/स्थानांतरित करने का कोई तरीका नहीं मिला।केवल बाश बिल्ट-इन्स

क्या किसी को इसे प्राप्त करने के तरीके के बारे में पता है?

मैं भी के बारे में सोचा

while read -r; do echo $LINE; done 

साथ currentdir में सीपी या mv द्विआधारी कॉपी और फिर एक फाइल करने के लिए इस अनुप्रेषित, लेकिन यह काम नहीं किया। एक बाइनरी फ़ाइल में सभी विशेष गैर प्रिंट करने योग्य वर्णों के कारण अनुमान लगाएं जिन्हें प्रतिध्वनि का उपयोग करके प्रतिलिपि/प्रदर्शित नहीं किया जा सकता है।

धन्यवाद।

+2

और यहां तक ​​कि अगर यह काम करता है, तो आप प्रतिलिपि + x' प्रतिलिपि कैसे करेंगे? :-( – ephemient

उत्तर

0
/subdir/bin/mv /subdir/

या क्या मुझे आपकी स्पष्टीकरण में कुछ याद आ रही है?

+3

यदि '/ bin/mv' गतिशील रूप से जुड़ा हुआ है (जैसा कि इन दिनों सामान्य है), तो यह लोड नहीं होगा यदि'/lib' भी स्थानांतरित हो गया है। – ephemient

+0

हां, यह गतिशील रूप से जुड़ा हुआ है। – KullDox

5

यदि आपने sash पूर्व-स्थापित के साथ तैयार किया है, तो यह स्थैतिक है और इसकी प्रतिलिपि बनाई गई है (-cp)।

अन्यथा LD_LIBRARY_PATH=/copied/to/path/lib /copied/to/path/bin/cp काम कर सकता है?

मुझे लगता है कि यह अपेक्षित जगह में एलडी-नहीं होने के साथ समस्या हो सकती है।

+0

सही, ld -so जगह एक मुद्दा है। – KullDox

0

यदि आपके पास दूसरी मशीन तक पहुंच है, तो एक समाधान Busybox बाइनरी डाउनलोड और संकलित करना है। यह एक बाइनरी होगी जिसमें आपके सिस्टम को पुनर्स्थापित करने के लिए आवश्यक अधिकांश सामान्य टूल शामिल हैं। यदि आपका सिस्टम दूरस्थ है तो यह काम नहीं कर सकता है।

+0

हाँ, हमने कुछ इसी तरह की तलाश करने की कोशिश की है। SUNWsutl पैकेज को डाउनलोड करने के लिए देखा लेकिन कोई भी नहीं मिला। लेकिन फिर भी, हम इसे सिस्टम में कैसे अपलोड कर सकते हैं? – KullDox

+0

रिमोट मशीन (एनएमएपी) पर कोई भी सेवा खुली है जिसका उपयोग आप बाइनरी प्राप्त करने के लिए कर सकते हैं? क्या डगलस से एलडी_LIBRARY_PATH उत्तेजना बुनियादी आदेशों में मदद नहीं करती है? –

+0

बेहतर अभी तक, आपके पास क्या आदेश हैं? –

10
/newroot/lib/ld-linux.so.2 --library-path /newroot/lib \ 
    /newroot/bin/mv /newroot/*/

(सोलारिस के लिए इसी तरह, लेकिन मैं गतिशील लिंकर ld.so.1 या कुछ और उन पंक्तियों के साथ नामित किया गया है लगता है।)

या, अपने खोल श की तरह (csh की तरह नहीं) है अगर,

LD_LIBRARY_PATH=/newroot/lib /newroot/bin/mv /newroot/*/
+0

दरअसल शायद क्रेल कमांड एक बेहतर समाधान होगा http://chrismiles.info/systemsadmin/solaris/articles/ld-path-customisation-on-solaris/ यह जांचने की आवश्यकता है कि यह उपलब्ध है या नहीं। – KullDox

3

यहां cp के लिए उचित यहूदी विकल्प प्रतिस्थापन है। यदि आप नई लाइन (जैसे अधिकांश टेक्स्ट फाइलों) के साथ समाप्त होते हैं, तो , echo -nE यदि यह नहीं है (अधिकांश बाइनरीज़ की तरह)।

echo -nE "`< in.file`" > out.file 
+1

0x00 मान के साथ यह छोड़ देता है (कम से कम) बाइट्स। उस ट्रिकरी के उदाहरण के लिए आपको इसका सहारा लेना है, [मेरा जवाब यहां देखें] (http://stackoverflow.com/questions/2003803/show-hexadecimal-numbers-of-a-file/2004276#2004276) जिसमें मैं उपस्थित हूं 'हेक्सडम्प' का एक संस्करण पूरी तरह से बैश बिल्टिन का उपयोग करके लिखा गया है। और फिर, ** महाकाव्य ** के रूप में कहा: "आप प्रतिलिपि + x' प्रतिलिपि कैसे करेंगे?" –

+0

वाह, अद्भुत सामान। मैं आपके बैश जादूगर का अध्ययन करूंगा! –

0

पुराना धागा, लेकिन बिल्कुल वही बेवकूफ गलती मिली।/lib64 को दूरस्थ रूप से/lib64.bak में ले जाया गया था और सबकुछ काम करना बंद कर दिया था।

यह एक x86_64 स्थापित था, इसलिए ephemient के समाधान काम नहीं कर रहा था:

# /lib64.bak/ld-linux-x86-64.so.2 --library-path /lib64.bak/ /bin/mv /lib64.bak/ /lib64 

अब प्रणाली बचाया जाता है:

# /lib64.bak/ld-linux.so.2 --library-path /lib64.bak/ /bin/mv /lib64.bak/ /lib64 
/bin/mv: error while loading shared libraries: /bin/mv: wrong ELF class: ELFCLASS64 

उस मामले में, एक अलग ld-linux इस्तेमाल किया जा सकता था । धन्यवाद ephemient!

संबंधित मुद्दे