प्रतीकात्मक लिंक से स्वामित्व कैसे बदलें?


47

मैं नरम लिंक बनाने के साथ कुछ समस्या का सामना कर रहा हूं। निम्नलिखित मूल फ़ाइल है।

$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11  2014 /etc/init.d/jboss

लिंक निर्माण फ़ाइल के स्वामी के लिए एक अनुमति समस्या के साथ विफल हो रहा है:

ln -sv  jboss /etc/init.d/jboss1
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

$ id
uid=689(askar) gid=500(admin) groups=500(admin)

इसलिए, मैंने sudo विशेषाधिकार के साथ लिंक बनाया:

$ sudo ln -sv  jboss /etc/init.d/jboss1
`/etc/init.d/jboss1' -> `jboss'

$ ls -l /etc/init.d/jboss1
  lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss

अगला मैंने मूल उपयोगकर्ता के लिए नरम लिंक के स्वामित्व को बदलने की कोशिश की।

$ sudo chown askar.admin /etc/init.d/jboss1

$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss

लेकिन सॉफ्ट लिंक की अनुमति नहीं मिल रही है।

लिंक की अनुमति बदलने के लिए मैं यहां क्या याद कर रहा हूं?


आप कौन से ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं?
mjturner

$ बिल्ली / आदि / रेडहैट-रिलीज़ Red Hat Enterprise Linux सर्वर रिलीज़ 6.6 (सैंटियागो)
ज़मा क्स

जवाबों:


68

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

यदि आप स्वयं लिंक का स्वामित्व बदलना चाहते हैं, तो आपको निम्न -hविकल्प का उपयोग करना होगा chown:

-h, -no-dereference किसी भी संदर्भित फ़ाइल के बजाय प्रत्येक प्रतीकात्मक लिंक को प्रभावित करता है (केवल सिस्टम पर उपयोगी है जो एक सिमलिंक के स्वामित्व को बदल सकता है)

उदाहरण के लिए:

$ touch test
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
$ sudo ln -s test test1
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
$ sudo chown root:root test1
$ ls -l test*
-rw-r--r-- 1 root root 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test

ध्यान दें कि लिंक का लक्ष्य अब रूट के स्वामित्व में है।

$ sudo chown mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test

और फिर, लिंक test1अभी भी रूट के स्वामित्व में है, भले ही testवह बदल गया हो।

$ sudo chown -h mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 mj mj 4 Jul 27 08:47 test1 -> test

और अंत में हम -hविकल्प का उपयोग करके लिंक के स्वामित्व को बदलते हैं ।


एक निराशाजनक स्पर्शरेखा के रूप में: न cp -asहै और न ही installऔर न ही lnसीधे एक निर्दिष्ट उपयोगकर्ता / समूह के साथ सिमलिंक बना सकते हैं।
उलरिच श्वार्ज़

7

जब सहानुभूति पर अभिनय किया जाता है, तो आपको अधिकांश उपकरण (चाउन, चामोड, एलएस ...) को लिंक से विचलन करने के लिए नहीं बताना चाहिए: आपको -hपैरामीटर जोड़ना होगा , जैसा कि मैनपेज में कहा गया है:

-h, --no-dereference
          affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)

इसलिए कोशिश करें : sudo chown -h askar.admin /etc/init.d/jboss1


1
सबसे संक्षिप्त जवाब। ज्यादातर लोग यहाँ आते हैं क्योंकि इसके द्वारा चुना गया काम नहीं करता है - "-एच" इसे ठीक करता है।
इतोक्टोपस

4

यह भी ध्यान दें कि आपने जो त्रुटि दी है

ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

सिम्लिंक के स्वामी के मूल फ़ाइल के स्वामी के अलावा किसी और के होने के कारण नहीं है। यह (शायद सबसे अधिक) उपयोगकर्ता आस्कर द्वारा निर्देशिका तक पहुंच नहीं लिखने के कारण होता है /etc/init.d


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