Cygwin के लिए मूल NTFS प्रतीकात्मक लिंक सक्षम करें




mingw symlink (4)

⸻⸻⸻ संक्षिप्त जवाब ⸻⸻⸻

पर्यावरण चर को परिभाषित करें:

CYGWIN=winsymlinks:nativestrict

जैसा कि mwm द्वारा बताया गया है कि आपको प्रशासक के रूप में bash भी चलाना पड़ सकता है।

⸻⸻⸻ लंबा जवाब ⸻⸻⸻

डिफ़ॉल्ट सिग्विन सिमिलिंक केवल नियमित फाइलें हैं

डिफ़ॉल्ट रूप से Cygwin पाठ फ़ाइलों को Windows सिम्लिंक दोष के लिए समाधान के रूप में बनाता है। ये फाइलें वास्तव में symlinks नहीं हैं। लगभग सभी विंडोज प्रोग्राम इन फाइलों को सिम्बलिंक नहीं मानते हैं।

हाल ही में विंडोज संस्करणों पर मूल सिम्बलिंक उपलब्ध हैं

हाल ही में NTFS और Windows ने सहानुभूति लागू की है:

  • एनटीएफएस जंक्शन बिंदु को linkd या junction उपकरणों का उपयोग करके एनटीएफएस 3.0 (विंडोज 2000) के बाद से निर्देशिका सिम्लिंक के रूप में इस्तेमाल किया जा सकता है।
  • NTFS प्रतीकात्मक लिंक को विंडोज विस्टा से mklink टूल का उपयोग करके mklink (फाइल और निर्देशिका दोनों के लिए) के रूप में भी उपयोग किया जा सकता है।

Cygwin देशी NTFS सिमिलिंक बना सकता है

सिगविन प्रलेखन का सरलीकृत अर्क:

प्रतीकात्मक लिंक

[...]

सिगविन कई अलग-अलग तरीकों से संभावित रूप से प्रतीकात्मक लिंक बनाता है:

  • डिफ़ॉल्ट सिम्बलिंक एक मैजिक कुकी वाली प्लेन फाइलें हैं, जिसके बाद लिंक पॉइंट्स के लिए पथ होता है। [...]

  • शॉर्टकट स्टाइल सिम्बलिंक्स विंडोज .lnk [...] बनाया जाता है, अगर पर्यावरण चर CYGWIN [...] स्ट्रिंग winsymlinks या winsymlinks:lnk को समाहित करने के लिए सेट है। [...]

  • नेटिव विंडोज सिम्बलिंक केवल विंडोज विस्टा / 2008 और बाद में बनाए जाते हैं, और केवल फाइल सिस्टम पर ही रीपर बिंदुओं का समर्थन करते हैं। उनके अजीब प्रतिबंध और व्यवहार के कारण, वे केवल तभी बनाए जाते हैं यदि उपयोगकर्ता उन्हें बनाने का अनुरोध करता है। यह स्ट्रिंग winsymlinks:native शामिल करने के लिए पर्यावरण चर CYGWIN सेट करके किया जाता है winsymlinks:native या winsymlinks:nativestrict । [...]

  • एनएफएस फाइलसिस्टम पर, साइग्विन हमेशा वास्तविक एनएफएस सिम्लिंक बनाता है।

सिगविन को कॉन्फ़िगर करना

CYGWIN उपयोगकर्ता गाइड चर CYGWIN और विकल्प winsymlinks प्रस्तुत करता है:

CYGWIN पर्यावरण चर का उपयोग कई वैश्विक सेटिंग्स को कॉन्फ़िगर करने के लिए किया जाता है [...]। इसमें नीचे सूचीबद्ध विकल्प हैं, जो रिक्त वर्णों द्वारा अलग किए गए हैं। [...]

  • [...]
  • [...]
  • [...]
  • [...]
  • winsymlinks:{lnk,native,nativestrict} - अगर सिर्फ winsymlinks या winsymlinks:lnk सेट किया winsymlinks:lnk , Cygwin एक विशेष शीर्ष लेख R / O विशेषता सेट के साथ Windows शॉर्टकट के रूप में winsymlinks:lnk बनाता है।

    अगर winsymlinks:native लिए सेट किया winsymlinks:native या winsymlinks:nativestrict , Cygwin फाइल सिस्टम और OS वर्जन पर सपोर्ट करने वाले देशी विंडोज winsymlinks:nativestrict रूप में winsymlinks:nativestrict बनाता है। यदि ओएस को देशी सिम्लिंक (विंडोज एक्सपी, विंडोज सर्वर 2003) का समर्थन नहीं करने के लिए जाना जाता है, तो प्रति सत्र एक बार चेतावनी संदेश तैयार किया जाता है।

    winsymlinks:native और winsymlinks:nativestrict बीच का अंतर यह है: यदि फाइलसिस्टम देशी winsymlinks:nativestrict का समर्थन करता है और Cygwin किसी कारण के लिए एक देशी सिमलिंक बनाने में विफल रहता है, तो यह winsymlinks:native साथ winsymlinks:native बनाने पर वापस आ जाएगा winsymlinks:native , जबकि winsymlinks:nativestrict symlink(2) सिस्टम कॉल तुरंत विफल हो जाएगा।

CYGWIN=winsymlinks:native
हमेशा एक लिंक बनाता है लेकिन जब लक्ष्य मौजूद नहीं होता है तो साइगविन फॉल-बैक का उपयोग करता है

साइगविन पर:

$ export CYGWIN="winsymlinks:native"
$ ln -s -v target mylink
`mylink' -> `target'
$ echo content > target

MinGW पर:

$ cat mylink
content

Windows और Cygwin दोनों प्रोग्रामों का उपयोग करने वाले लोगों के पास ऐसे मुद्दे हो सकते हैं जब एक सिम्कलिन को डमी फ़ाइल के रूप में बनाया जाता है (जब लक्ष्य गायब होता है तो Cygwin बैकबैक ...)

CYGWIN=winsymlinks:nativestrict
हमेशा देशी-विंडोज सिम्लिंक का उपयोग करता है लेकिन जब लक्ष्य मौजूद नहीं होता है तो वह विफल हो जाता है

साइगविन पर:

$ export CYGWIN="winsymlinks:nativestrict"
$ rm -f  a b
$ ln -sv a b
ln: failed to create symbolic link `b': No such file or directory
$ touch    b
$ ln -sv a b
ln: failed to create symbolic link `b': File exists
$ rm b
$ touch a
$ ln -sv a b
`b' -> `a'

क्योंकि nativestrict को nativestrict निर्माण से पहले लक्ष्य की आवश्यकता होती है, लिंक बनाते समय कुछ कमांड / स्क्रिप्ट विफल हो सकते हैं।

नोट: केवल व्यवस्थापकों के पास विंडोज़ NT के तहत देशी NT सिम्लिंक बनाने की क्षमता है, सिग्विन टर्मिनल एमुलेटर (मिनिट) को एलीवेटेड विशेषाधिकारों के साथ चलाया जाना चाहिए (शॉर्टकट को राइट-क्लिक करें और एडमिनिस्ट्रेटर के रूप में रन चुनें या मिनिटेट संपत्ति सेट करें, उन्नत → प्रशासक के रूप में चलाएं )।

उनके योगदान के लिए Guria और Spooky विशेष धन्यवाद।

हाल ही में NTFS और Windows ने सहानुभूति लागू की है:

  • एनटीएफएस जंक्शन बिंदु को linkd या junction उपकरणों का उपयोग करके एनटीएफएस 3.0 (विंडोज 2000) के बाद से निर्देशिका सिम्लिंक के रूप में इस्तेमाल किया जा सकता है।
  • NTFS प्रतीकात्मक लिंक को विंडोज विस्टा से mklink टूल का उपयोग करके mklink (फाइल और निर्देशिका दोनों के लिए) के रूप में भी उपयोग किया जा सकता है।

लेकिन Cygwin 1.7 (विंडोज 7 पर स्थापित) पर, ln -s एक टेक्स्ट फ़ाइल बनाता है।

साइगविन पर:

$ ln -s -v target mylink
`mylink' -> `target'

MinGW (या आपके पसंदीदा संपादक) पर:

$ cat mylink
!<symlink>ÿþt a r g e t 

क्या Cygwing को NTFS जंक्शन बिंदु या NTFS प्रतीकात्मक लिंक का उपयोग करना संभव है?

अन्य प्रश्न: क्या यह मिनगडब्ल्यू पर उपलब्ध है?


आप शायद MSYS का उपयोग करते हुए कैटलॉग ट्री में किसी अन्य गंतव्य पर पहुंचने का रास्ता ढूंढ रहे थे। एक रास्ता है। आपको एक शेल स्क्रिप्ट ("* .sh" फ़ाइल) बनानी चाहिए जिसमें लाइन शामिल हो:

cd "/drive_letter/SubCatalogue/SubFolder/..." 

मुझे लगता है कि सबसे आसान तरीका है

  1. स्थानीय समूह नीति संपादक से SeCreateSymbolicLinkPrivilege (डिफ़ॉल्ट रूप से, गैर-घरेलू संस्करणों द्वारा पथ पर gpedit.msc)

  2. पथ (बैच या बैश) पर ln नामक स्क्रिप्ट बनाएं, ऊपर वर्णित शेल फ़ंक्शन के समान कार्यान्वयन

  3. फायदा


स्वीकृत उत्तर सही है, दो छोटे साइड नोट्स।

यदि आप केवल कमांड लाइन पर खुद को बनाए जाने वाले cygutils-extra बारे में परवाह करते हैं, तो cygutils-extra पैकेज स्थापित करें, इसमें एक winln कमांड शामिल है, जिसमें ln जैसा ही सिंटैक्स है, लेकिन देशी विंडोज लिंक बनाता है। एक उपनाम बनाएँ: alias ln=winln (केवल इंटरेक्टिव शेल में काम करता है), या यहां तक ​​कि ln फ़ाइल को winln (शेल स्क्रिप्ट में भी काम करता है) के साथ winln - लेकिन यह अगली बार मिल सकती है जब coreutils पैकेज अपडेट हो जाता है।

मुझे केवल यह पता चला है कि जब मैंने पहले से ही सिग्विन स्थापित किया था, तो देशी सिमिलिंक का उपयोग करना संभव है, और अपने आप से कुछ सिमिलिंक भी जोड़े। इसलिए जब मैं CYGWIN=winsymlinks:native सेट CYGWIN=winsymlinks:native को मेरे सिस्टम पर्यावरण चर के रूप में, मैं सभी मौजूदा गैर-देशी लिंक को मूल में बदलना चाहता था। यहाँ मैंने क्या किया है।

बस के मामले में, पहले अपने पूरे Cygwin निर्देशिका का बैकअप लें।

सभी सिम्लिंक्स ढूंढें और सूची को /links फ़ाइल में सहेजें: cd /; find . -regextype egrep -regex './(dev|proc|mnt|cygdrive)' -prune -o -type l -print >links cd /; find . -regextype egrep -regex './(dev|proc|mnt|cygdrive)' -prune -o -type l -print >links

links समीक्षा करें। सभी लिंक के साथ एक tar आर्काइव बनाएं: tar c --files-from=links >links.tar

tar आर्काइव निकालें: tar x --files-from=links <links.tar चूंकि देशी tar x --files-from=links <links.tar अब सक्षम हैं, टार पुराने tar x --files-from=links <links.tar देशी tar x --files-from=links <links.tar अधिलेखित कर देगा।

क्लीन अप: rm -f links links.tar

PS सबसे पहले मैंने CYGWIN=winsymlinks:nativestrict इस्तेमाल किया, लेकिन तब मुझे पता चला कि अगर target मौजूद नहीं है, तो ln -s target link विफल रहता है। इसके विपरीत, native एक Cygwin (गैर-देशी) सिम्नलिन link बनाएगा, जो कि किसी भी target को इंगित नहीं करेगा - यह UNIX सिस्टम पर ln के व्यवहार से मेल खाता है। दुर्लभ मामलों में, nativestrict कुछ प्रोग्राम या स्क्रिप्ट को तोड़ सकता है, उदाहरण के लिए nativestrict run-crons स्क्रिप्ट एक लॉकफाइल का उपयोग करता है जो कि रनिंग प्रक्रिया के पीआईडी ​​की ओर इशारा करते हुए एक सिमलिंक है। nativestrict मोड में स्क्रिप्ट ने काम करना बंद कर दिया, क्योंकि यह अब nativestrict नहीं बना सकता था। नोट: run-crons cron.{hourly,daily,weekly,monthly}/ गेंटू लिनक्स पर एक क्रॉस्टैब हेल्पर स्क्रिप्ट है, cron.{hourly,daily,weekly,monthly}/ लिए समर्थन जोड़ रहा है cron.{hourly,daily,weekly,monthly}/ डायर, यह साइगविन के साथ बहुत अच्छी तरह से काम करता है।