Mülkiyet sembolik bağlardan nasıl değiştirilir?


47

Yumuşak bağlantılar oluşturma konusunda bazı sorunlar yaşıyorum. Orijinal dosya aşağıdadır.

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

Bağlantı oluşturma, dosyanın sahibi için izin sorunu ile başarısız oluyor:

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)

Böylece, bağlantıyı sudo ayrıcalıklarıyla oluşturdum:

$ 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

Daha sonra, yazılım bağlantısının sahipliğini orijinal kullanıcıya devretmeye çalıştım.

$ 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

Ancak yazılım bağlantısının izni değişmiyor.

Bağlantının iznini değiştirmek için burada neyi özlüyorum?


Hangi işletim sistemini kullanıyorsunuz?
mjturner

$ cat / etc / redhat-yayın Red Hat Enterprise Linux Sunucusu sürüm 6.6 (Santiago)
Zama Ques

Yanıtlar:


68

Bir Linux sisteminde, bir sembolik bağlantının sahipliğini kullanarak değiştirilirken chown, varsayılan olarak sembolik bağlantının hedefini değiştirir (yani, sembolik bağın neye işaret ettiğini ).

Bağlantının sahipliğini değiştirmek isterseniz, -hseçeneği aşağıdakileri yapmanız gerekir chown:

-h, --no-dereference başvurulan herhangi bir dosya yerine her sembolik bağlantıyı etkiler (yalnızca bir bağlantı bağlantısının sahipliğini değiştirebilen sistemlerde yararlıdır)

Örneğin:

$ 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

Not hedef bağlantının artık kökünden aittir.

$ 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

Ve yine, test1yine testde değişmiş olsa da , link hala root aittir .

$ 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

Ve sonunda -hseçeneği kullanarak bağlantının sahipliğini değiştirdik .


Hayal kırıklığı yaratan bir teğetsel olarak: ne belirtilen cp -asne installde lndoğrudan belirli bir kullanıcı / grup ile sembolik bağlantılar oluşturamaz.
Ulrich Schwarz

7

Sembolik bağlantılar üzerinde hareket ederken, araçların çoğuna (chown, chmod, ls ...) bağlantıyı engellememesini söylemelisin: -hparametre sayfasında, kılavuzda belirtildiği gibi eklemelisiniz :

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

O zaman dene : sudo chown -h askar.admin /etc/init.d/jboss1


1
En özlü cevap. Çoğu insan buraya gelir, çünkü kendi başına doğrama işe yaramaz - "-h" bunu düzeltir.
itoctopus

4

Ayrıca yukarıda verdiğiniz hatanın olduğunu unutmayın.

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

Bunun nedeni, bağlantının sahibinin orijinal dosyanın sahibinden başka biri olması değildir. (Büyük olasılıkla) kullanıcı askarı dizine yazma erişiminin olmamasından kaynaklanmaktadır /etc/init.d.


Bunu anladım. Grup için yazma izni
eklenmedi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.