Mv kullanırken dizin hakları doğru olmasına rağmen neden izin alamıyorum?


16

Klasör taşımak için çalışırken izin reddedildi olsun Musicyoluyla mvdizin sahibi Neler oluyor 7'ye ayarlanır benim kullanıcı ve kullanıcı izinleri ayarlı olduğu halde?

(Sudo kullanabileceğimi biliyorum ama neyin yanlış olduğunu bulmak istiyorum. Burada bir şeyler balık kokuyor). Ps: Mac OS X El Capitan'dayım.

Terminal ekran görüntüsü


1
Aynı hatayı tökezleyen herkes, bunun nedeni açık olan bir dosyayı mv yapmaya çalışmanız olabilir. OP davası değil, sadece söyleyerek yardımcı olabilir.
aderchox

Yanıtlar:


21

Zaman klasörde, o notu mı ahareket betmek c, klasör izinleri abelirlemek ne yapabildiğini.

Bu durumda, izinler .çok önemli olacaktır.

İzinlerin basitçe olduğundan daha karmaşık olduğunu gözlemleyin rwx. Kişisel musicklasör bir sahip @sonunda, .klasör vardır +sonunda.

  • xattr -h@ Sembolü için karmaşık izinleri belirlemek için kullanın .
  • getfacl+ Sembolünün ACL'sini belirlemek için kullanın .

"Karmaşık izinleri" kapsayan bir kaynağınız var mı?
user1717828

man xattriyi bir başlangıç ​​noktası olabilir.
Konerak

1
Hayır, manuel giriş yok. Google'da başka bir ad bulabildim: başka biri daha fazla bilgi edinmek istiyorsa genişletilmiş özellikler .
user1717828

4
Veya kullanın ls -la@e. Büyük olasılıkla burada, deny deleteyeniden adlandırmayı önleyen bir ACL vardı.
Stéphane Chazelas

1
@Timo, bu ACL'ler bu dizinlerin silinmesini veya yeniden adlandırılmasını engelliyor. Muhtemelen, bazı uygulamalar orada olmalarına güveniyor ve aksi takdirde başarısız olacak gibi, bir nedenden dolayı oraya konuldu.
Stéphane Chazelas

20

Linux için Windows Subsystem kullanıyordum. Dizini farklı bir bash örneğinde açtım. Kapatmak, dizini hareket ettirmeme izin veriyor.


5
WSL üzerinde uzaktan kumandalı VS Code'da editörü kapatmam ve bu VS Code projesi dışında WSL'ye bir terminal açmam gerekiyordu.
Bjorn

10

Sanki dizinde derin bir yerde doğru izinlere sahip olmayan en az 1 dosya varmış gibi görünüyor.

Yani, yaptığım şey:

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music

Şimdi çalışıyor.


17
Sorun ne olursa olsun, müzik dosyalarına yürütme izinleri vermek çözüm olmamalı.
Stéphane Chazelas

3
Ve bir nesne olası görünüyor içinde bir dizin o dizini yeniden adlandırmak için yeteneği engel olabilir.
Scott

Garip olduğunu biliyorum ama hile yaptı. Dizinin üzerinde chmod ve chown kullanmanın hiçbir etkisi olmadı.
Timo

o mümkündür chmod 755special kaldırıldı '@' Müzik klasörüne izinlerini?
HorusKol

@HorusKol veya chown. OP'nin belirtileri, silme ACL'lerini reddetme dizinleriyle eşleşir , ancak en azından Yosemite'de, bir chown veya chmod 755 yapmak, bu ACL'yi silmez. Buna ihtiyacın chmod -a 'everyone deny delete' Musicvar. El Capitan'da durum farklı olabilir.
Stéphane Chazelas

4

Buradaki sorun büyük olasılıkla Müzik klasörünün Erişim Kontrol Listesi (ACL) ile ilgilidir. ACL, normalde tarafından listelenen normal POSIX sistemlerine ayrı bir izin sistemidir ls -l. Giriş klasöründeki ve başka yerlerdeki bazı diğer dizinlerde de ACL'ler bulunur.

Giriş dizini içindeki ACL'leri görmek için şunu kullanın:

/bin/ls -le ~

Büyük olasılıkla 0: group:everyone deny deleteMüzik dizini için bir kural göreceksiniz . Belirttiğiniz gibi, sorunu geçersiz kılabilirsiniz sudo. Bunu yapmak istemiyorsanız (veya yapamıyorsanız), dosyanın sahibi olduğunuz göz önüne alındığında başka seçenekleriniz de vardır. Sorunlu girişi Müzik direktörünün ACL'sinden dizinine göre kaldırabilirsiniz (yukarıda verdiğim örnekte 0):

/bin/chmod -a# 0 Music

Veya ACL'deki tüm girişleri kaldırabilirsiniz:

/bin/chmod -N Music

Şimdi dizini hareket ettirebilirsiniz (normal POSIX izinlerine tabi). ACL'yi taşımadan sonra geri koymak isterseniz, şunları kullanabilirsiniz:

/bin/chmod +a "group:everyone deny delete" Music_tmp

Ve /bin/ls -leACL'nin istediğiniz gibi olduğunu onaylamak için tekrar kullanın. man chmodDaha fazla bilgi için ACL örneklerine göz atın . Özellikle, bu giriş yardımcı olur:

Her dosyanın sıralı bir giriş listesi içeren bir ACL'si vardır. Her girdi bir kullanıcıya veya gruba atıfta bulunur ve bir dizi izin verir veya reddeder. Bir kullanıcı ve grubun aynı ada sahip olduğu durumlarda, ad türünü belirtmek için kullanıcı / grup adının başına "user:" veya "group:" öneki konulabilir.

EKL Siparişi

Man sayfasının siparişle ilgili kuralları açıkladığını düşünmüyorum, ancak bu sayfa EKL'lerin sipariş kurallarını açık bir şekilde açıklıyor. Özellikle, açık bir denykural açık bir kuraldan önce uygulanacaktır allow. Bu nedenle, group:everyone deny deletegiriş yerinde olduğu sürece , kullanıcılarınıza bir allowkuralla silme izni vermek mümkün değildir . Bunun nedeni everyone, sizi içeren gruba izin verilmemesi ve önce bu kuralın uygulanmasıdır.


2
Bunun neden reddedildiğini bilmiyorum. everyone deny deleteMacOS' varsayılan giriş dizinleri ACL giriştir gerçek dizinleri ne taşındı ne de silinebilir sebep. (Ayrıca, işletim sisteminin bunları istediğiniz zaman yeniden oluşturabileceğini unutmayın.)
Diti

1
bu cevap ROCKED !!! kutsal saçmalık, bu yeni ACL büyük bir PITA vardır.
Dean Hiller

3

Kaldırmaya çalıştığım bir dizinde bir dizi program çalışırken bu sorunu yaşadım. Dizini taşımak için önce o dizinden çalışan tüm programları öldürmek zorunda kaldım.

Aşağıdaki komutlarda, programınızın adını nasıl seçtiğinize çok dikkat edin . Başvuru için aşağıdaki komutları kullandım:

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | sudo xargs kill -9
sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2

Genel prosedür:

  1. söz konusu dizinden çalışan tüm programları öldür
  2. dizini yeniden adlandırmayı deneyin
  3. bu başarısız olursa, dizindeki tüm programları zorla öldürmeye ( kill -9çok dikkatli )
  4. dizini yeniden adlandırmayı deneyin
  5. bu başarısız olursa, programın tekrar çalışıp çalışmadığına bakın, yani farklı bir dizinden çalışan bazı arka plan programı tarafından yeniden başlatıldığını
  6. can sıkıcı programı yeniden başlatan daemon programını zorla öldür
  7. can sıkıcı programı öldürmeye zorla
  8. dizini yeniden adlandır
  9. kâr

1
OP'nin ~ / Music dizininden çalışan herhangi bir programı olduğunu düşünmüyorum. Her neyse, bu cevabın yaptığı sudo kullanmak istemediğini söyledi.
spinup

Söylediğim tek şey bu duruma sahip olduğum. OP için yararlı olmasa bile birisi için yararlı olabilir.
WattsInABox

Muhtemelen birisi için yararlıdır - bu yüzden aşağı indirmedim. Ancak StackExchange'in amacı, gönderilen cevapların aslında sorulan soruya cevap vermesidir.
1919'da

1
Başka bir potansiyel sorun, eğer bu cevabın bir acemi için genel olarak kullanılması anlamına geliyorsa: ilk önce arama terimlerinizi çok dikkatli bir şekilde seçme grepve kontrol etme konusunda herhangi bir uyarı sağlamazsınız . İlk önce grepne kill
koyarsanız

1
Güzel, @Watts, bence bu büyük bir gelişme
1919'da toparlanma

0

Bu, içindeki dosyalardan biri yazma korumalı olduğunda da olabilir. Bugün access.logdurdurulmuş olan Apache'ye yazma korumalı olduğunda son durumum vardı. Bu dosyayı yeni kaldırdım, bu yüzden üst dizini taşıyabildim.

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.