Ln का उपयोग किए बिना एक प्रतीकात्मक लिंक कैसे बनाएं?


31

मैंने एक महत्वपूर्ण प्रतीकात्मक लिंक को हटा दिया - libc.so.6। मेरे पास वह फ़ाइल है जो उसे इंगित करनी चाहिए, लेकिन लिंक गायब होने के कारण बुनियादी कमांड जैसे कि काम नहीं करेगी lnया wgetनहीं करेगी। हालांकि, echoया अन्य बैश बिल्डिंस काम करते हैं।

मैं इस प्रतीकात्मक लिंक को फिर से बनाने का एक तरीका ढूंढ रहा हूं।


1
@ सेबास, मुझे लगता है कि आप सभी बैश बिलियन का मतलब सिर्फ नहीं थे echo
क्रिस्टियन सियुपिटु

@CristianCiupitu शायद, यह क्या है? catअक्षम है ... वास्तव में सब कुछ था।
सेबास

1
@ सबास, ऐसा इसलिए catहै क्योंकि एक बाहरी कार्यक्रम है। बैश अंतर्निहित आदेश मैन्युअल पृष्ठ क्या उपलब्ध हो सकता है के बारे में जानकारी नहीं है।
क्रिस्टियान सियुपिटु

3
मेरा मानना ​​है कि जब आप "यूनिक्स" कहते हैं तो जीएनयू / लिनक्स आधारित सिस्टम का मतलब है कि कई अन्य * निक्स सिस्टम में मानक उपयोगिताओं के "बचाव" संस्करण हैं जो केवल "उफ़" क्षणों के लिए सांख्यिकीय रूप से जुड़े हुए हैं।
क्रिस एस

यहाँ मुझे लगता है कि
चेरोटिंग

जवाबों:


58

आप ldconfig का उपयोग कर सकते हैं, यह सिमिलिंक को फिर से बनाता है:

# rm /lib/libc.so.6 
rm: remove symbolic link `/lib/libc.so.6'? y
# ls -l /lib/libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file:
# ldconfig 
# ls -l /lib/libc*
[skip]
lrwxrwxrwx. 1 root root      12 May 11 07:59 /lib/libc.so.6 -> libc-2.12.so

जैसा आपने देखा वैसा ही परीक्षण किया।


4
और, आसानी से, / sbin / ldconfig सांख्यिकीय रूप से जुड़ा हुआ है। ldconfig उन प्रतीकात्मक लिंक के लिए पहली जगह में जिम्मेदार है।
इथरफिश

16
यह वास्तव में सिर्फ "सुविधाजनक" नहीं है, सांख्यिकीय रूप से जुड़ा हुआ द्विआधारी उपकरण का एक आवश्यक डिजाइन घटक है जो आपके गतिशील पुस्तकालयों को बनाए रखता है! लेकिन यह वही है जो इस समस्या को ठीक करने के लिए एक आदर्श उपकरण बनाता है, और IMHO एकमात्र "सही" तरीका है। यहाँ सवाल वास्तव में एक हटाए गए सिमलिंक के बारे में नहीं है (99.999% लोगों को परिणाम के बिना हटाया जा सकता है), यह "मैंने अपने सिस्टम के गतिशील पुस्तकालय स्टोर को तोड़ दिया"। @ नेटएक्सो का सुझाव देते हुए, "उस उपकरण का उपयोग करके इसे ठीक करें जो उस स्टोर को प्रबंधित करता है", स्पष्ट और समझदार। और कुछ भी (मैन्युअल रूप से लिंक को फिर से बनाना) एक हैकी वर्कअराउंड है।
FeRD

हां, यह वास्तव में आगे बढ़ने के लिए अधिक तार्किक है, हालांकि अन्य उत्तर भी सही था।
सेबास

(नेक्रोमेंसी, सॉरी) इस मामले में सबसे बड़ा कारण, बीटीडब्लू, सीलिंग को हटा रहा है, यह एकमात्र तरीका नहीं है जिससे आप अपने डायनेमिक लाइब्रेरी स्टोर को खराब कर सकते हैं। उदाहरण के लिए, उदाहरण के लिए, आपने गलती से नाम बदल दिया /lib/libc-2.12.soहै /lib/foobar। ठीक है, बकवास, और नहीं mv। लेकिन गलत नाम वाली फ़ाइल को इंगित करने के लिए ldconfig -l /lib/foobarपर्याप्त स्मार्ट है । (आर्ग की आवश्यकता होती है, डिफ़ॉल्ट रूप से फाइलनामों को अनदेखा करता है जो "लिबास" से शुरू नहीं होते हैं और ".so" होते हैं।) जिस बिंदु पर आप इसे वापस कर सकते हैं (या यदि आप पागल / स्मार्ट हैं), तो फिर से साफ करने के लिए फिर से चलाएं। । /lib/libc.so.6ldconfigmvcp -pldconfig
FeRD

44

सेंटोस 6 आम तौर पर busyboxयूनिक्स उपकरणों के एक सांख्यिकीय-जुड़े सेट के साथ आता है , जिसमें स्थापित किया गया है /sbin। आप इसे इस तरह से चला सकते हैं:

/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6

1
+1, बस एक परीक्षण vm में सिमलिंक को हटाने के बाद इसका परीक्षण किया, यह
सेंटोस

+1 यह जेनेरिक प्रश्न का उत्तर प्रश्न शीर्षक में भी देता है।
मैटबियानको

डेबियन / उबंटू पर यह / बिन / बिजीबॉक्स
PHZ.fi-Pharazon

23

संबंधित लाइब्रेरी को प्रीलोड करने के लिए LD_PRELOAD सेट करें। मैंने इसे परिवाद के साथ आजमाया और यह काम करने लगता है:

root@spirit:~# mv /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0-bak
root@spirit:~# chattr
chattr: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
root@spirit:~# LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0-bak chattr
Usage: chattr [-RVf] [-+=AaCcDdeijsSu] [-v version] files...

दिलचस्प है, यह दूसरों के द्वारा कही गई बातों को पुन: एकत्रित करता है।
सेबास

21

slnठीक उसी उद्देश्य से कार्य करता है: प्रतीकात्मक लिंक को ठीक करने के लिए जब आप नियमित एल.एन. इसके मैन पेज को उद्धृत करने के लिए:

विवरण

  The  sln  program creates symbolic links.  Unlike the ln(1) program, it
  is statically linked.  This means that if for some reason  the  dynamic
  linker  is  not  working,  sln  can  be  used to make symbolic links to
  dynamic libraries.

अच्छा, मैं इस उपकरण को नहीं जानता था।
सेंटोस में यह ग्लिब

8

LD_LIBRARY_PATHजहाँ निर्देशिका वास्तविक libc.so.6है उसे शामिल करने के लिए आप चर सेट कर सकते हैं :

 export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"

इसके अलावा, ldconfigलिंक को फिर से बनाने के लिए इसे निष्पादित करें । इससे कमांड को काम करना चाहिए ताकि आप lnअपने सिस्टम को ठीक करने के लिए कमांड का उपयोग कर सकें ।

एक और तरीका यह होगा कि आप वहां LiveCD और लिंक फाइल के माध्यम से बूट कर सकते हैं।


उसके बाद ही लाइव एलसीडी और लिंक फाइल को चेरोट में बूट करने का तरीका।
फूप्स

1
इसके अलावा, आपको केवल LD_LIBRARY_PATH को निर्देशिका शामिल करने के लिए सेट करना चाहिए जहां libc.so.6 फ़ाइल है। यह आपको आज्ञाओं का उपयोग करने की अनुमति दे सकता है क्योंकि यह लिब का पता लगाना चाहिए।
फूप्स

रफ़ू, माफ करना, मैंने पहले ऐसा नहीं सोचा था।
फूप्स

2
यह काम नहीं करता है, फ़ाइल को लिंक किया गया है क्योंकि libc.so.6 नाम नहीं है। आपको मेरे जवाब में LD_PRELOAD सेट करना होगा।
डेनिस कार्सेमेकर

1
मैंने इसे Fedora 20 पर आज़माया और यह काम नहीं किया।
क्रिस्टियन सियुपिटु

-4

Ln के एक सांख्यिकीय रूप से जुड़े संस्करण की प्रतिलिपि बनाने के लिए scp या sftp का उपयोग करें। सुनिश्चित करें कि यह निष्पादन योग्य है। फिर फ़ाइल को ठीक करने के लिए इसका उपयोग करें।


1
scp और sftp काम नहीं करेगा क्योंकि वे उस फाइल को लोड नहीं कर पाएंगे।
फ्लोरिन असावोई

scp, sftp, ftp को रिमोट होस्ट से चलाया जाएगा। यह मानता है कि टूटी मशीन में डेमॉन पहले से ही चल रहा है। फ़ाइल स्थानांतरण के लिए अन्य संभावनाएं फ़ाइल सिस्टम हैं जो पहले से ही घुड़सवार हैं, या तो स्थानीय या रिमोट।
रॉबर्ट जैकब्स

3
कृपया गलत सूचना देना बंद करें। एससीपी के लिए आवश्यक है कि वह एसपीपी बाइनरी मौजूद हो और दोनों मेजबानों पर निष्पादित हो। एसएफटीपी ने ओपनएसएसएच से संबंधित नई प्रक्रियाओं को भी लॉन्च किया है जिनके लिए संबंधित बाइनरी की आवश्यकता होती है। अधिकांश एफ़टीपी डेमॉन ही करते हैं।
फ्लोरिन असावोई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.