Sembolik bir link için izinleri değiştirme


37

Bu izinlerle bir bağlantım var:

lrwxrwxrwx 1 myuser myuser       38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*

Sembolik link bir .tar.gz arşivinde bulunur. Şimdi tar.gz arşivini maven kullanarak açtığımda sembolik bağlantı artık geçerli değil. Bu yüzden sembolik bağlantıyı yeniden kurmaya çalışıyorum. İlk önce ln kullanarak sembolik link oluşturuyorum ama orijinal sembolik linkle aynı izinleri nasıl ayarlarım?

Yanıtlar:


59

Yeni bir sembolik link oluşturabilir ve eski linkin bulunduğu yere taşıyabilirsiniz.

ln -s <new_location> npm2
mv -f npm2 npm

Bu bağlantı sahipliğini koruyacaktır. Alternatif olarak, chownbağlantının sahipliğini manuel olarak ayarlamak için kullanabilirsiniz .

chown -h myuser:myuser npm

Çoğu sistemde, sembolik bağlantı izinleri önemli değildir. Sembolik bağlantı kullanılırken, sembolik bağlantı hedefinin bileşenlerinin izinleri kontrol edilecektir. Ancak, bazı sistemlerde önemli. MacOS, bağlantı için okuma izni gerektirir readlinkve NetBSD'nin sympermmount seçeneği, okuma ve geçiş için bağlantı izinleri kontrollerini zorlar. Bu sistemlerde (ve FreeBSD ve OpenBSD dahil olmak üzere yakınları) buna eşdeğer bir -hseçenek var chmod.

chmod -h 777 npm

1
CentOS 6.8 sunucusundaki sembolik bağlantılarda izin problemi ile karşılaştım Sembollerin sahibi: root grubu: root idi. Sahip ve grup, içinde bulundukları dizine sahip olan kullanıcı olarak değiştirildiğinde, bu yanıtta gösterildiği gibi, izin sorunu ortadan kalktı.
Gece Baykuş

Sadece bir açıklama yapmak. Bir sembolik link üzerindeki sahipliği veya hakları değiştirmek için, -h bayrağı, başvurulan dosya yerine sembolik link dosyasını etkiler.
UltimaWeapon

12

chmodBağlantının izinlerini ayarlamak için kullanmaya çalıştığınızda , aslında yaptığınız bağlantının hedefinin izinlerini ayarlamaktır. Bağlantının izinleri anlamsızdır.


2
Birisi bağlantıyı kötü amaçlı bir kodla değiştirirse? Orijinal kod, kökün yalnızca erişebileceği bir şey olabilir. Örneğin crontap komut dosyalarında.
aliqandil

@ aliqandil Genel olarak, bir kullanıcı yazma erişimi olan bir dizindeki herhangi bir dosyayı silebilir ve yeniden oluşturabilir. Bash, bir dosya testiçin -rw-rw-r-- root root, rm testben istemi alıyorum için rm: remove write-protected regular empty file 'test'?Çözüm, hassas dosyaları kullanıcıların salt okunur erişimi olan dizinlere yerleştirmektir.
AnCccasionalCashew

5

Gibi bir bağlantınız olduğunda:

link -> foo/bar

ve bunu değiştirmek istiyorum:

link -> new/target

Dikkate alınması gereken iki durum vardır:

  1. foo/barbir dizin değil veya mevcut değil veya arama erişiminiz yok foo. Sonra

    ln -s new/target link
    

    linkzaten var olduğundan başarısız olacak , ancak standardı kullanarak bunun üstesinden gelebilirsiniz:

    ln -fs new/target link
    
  2. foo/barBir dizindir (ve arama iznine sahip fooolduğunu belirlemek için muktedir foo/barbir dizindir). Bu durumda ne zaman:

    ln -s new/target link
    

    veya

    ln -fs new/target link
    

    Bu target, linkdizinin içinde yeni bir sembolik bağlantı oluşturmak olarak anlaşılır ( linkbir klasördür, çünkü dizinin bir bağlantısıdır foo/bar). Yani aslında bir tane yaratacaksınız:

    foo/bar/target -> new/target
    

    Bunun üstesinden gelmek için GNU ln, -Tlink adının her zaman link adı olarak kabul edilebileceği ve içinde link (ler) yaratacak bir dizin olarak görülmeyeceği bir seçeneğe sahiptir . Öyleyse GNU ile ln:

    ln -fsT new/target link
    

    çalışacak. Daha önce olduğu gibi, orijinal linksembolik bağı kaldırır ve new/targethedef olarak yeniden yaratır (ve işlem sahibi ve sahibi olarak abid ve aynen).

    GNU’nun lnda bir -nseçeneği var. Gerçekte -Tne zaman linkgerçek bir dizin olduğu gibi çalışır , bu durumda o dizinde bir link oluşturacaktır (bir hatayla başarısız olmak yerine).

    Taşınabilir olarak, en iyi seçeneğiniz önce bağlantıyı kaldırmak ve sonra yeniden oluşturmaktır:

    rm -f link && ln -s new/target link
    

Çoğu sistemde, sembolik bağlantılar üzerindeki izinler göz ardı edilir ve genellikle buna sabitlenir rwxrwxrwx.

Sembolik bağlantı izinlerinin önemli olduğu sistemlerde (hedefini çözebilmek için bir sembolik bağlantı için okuma iznine ihtiyaç duyduğunuz OS / X gibi), genellikle bunları değiştirmenin bir yolu vardır ( chmod -hOS / X'te).

Mülkiyet, yukarıda olduğu gibi, çoğu sistemde sembolik bağlantıda belirtilen dosyaya erişim ile ilgili olmamakla birlikte, ana dizinin veya kotaların bitiyle başka bir alaka düzeyine sahip olabilir t... ) ve onu değiştirmek için standart bir komut vardır:

chown -h user[:group] the-link
chgrp -h group the-link

0

Gerçekten sembolik izleri değiştirmeniz gerekiyorsa (genellikle diğer cevaplarda yazdığınız gibi anlamsız), şu -Rseçeneği kullanmakta başarılı oldum chown:

chown -R myuser:mygroup link

Eğer -Rkullanılmamış, izinler değiştirilmedi.


Bu GNU ile çalışacak chownçünkü orada -Rima -Pedildi, ancak bu garanti edilmedi ve diğer bazı kıymetli uygulamalarda çalışmayacak. Sembolik bağlantı sahipliğini değiştirmenin standart yolu -hseçenektir. Yanlış olan kabul edilen yanıtı yeni güncelledim.
Stéphane Chazelas 23:15
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.