Bir dizine symlink kaldırma


1085

Önemli bir dizine bir symlink var. Dizini arkasında tutarken, sembolik bağlantıdan kurtulmak istiyorum.

Denedim rmve geri döndüm rm: cannot remove 'foo'.
Denedim rmdirve geri rmdir: failed to remove 'foo': Directory not empty
döndüm, sonra ilerledim rm -f,rm -rf vesudo rm -rf

Sonra yedeklerimi bulmaya gittim.

Bebeği banyo suyuyla atmadan, sembolik bağlantıdan kurtulmanın bir yolu var mı?


74
linux ile ilgili sorular sormanın nesi yanlış? En son kontrol ettiğimde, yığın taşması
os'a

6
Bu soru Süper Kullanıcı veya Linux ile ilgili Yığın Değişimi için daha uygun olmaz mı?
mwfearnley

45
@mwfearnley Öyle olurdu, ama tarihi kontrol et. Süper Kullanıcı o zamanlar henüz bir şey değildi. Taşındı, o yüzden orada. Neden hala burada olduğundan emin değilim, ama bu benim en yüksek puanlama sorum ve ağızda hediye karması görünmeyeceğim.
Matthew Scouten

16
İPUCU: rm -r link/ hedefteki içeriği siler
Gayan Weerakutti

31
Then I went to find my back-ups- Bu beni kıkırdadı.
frakman1

Yanıtlar:


1308
# this works:
rm foo
# versus this, which doesn't:
rm foo/

Temel olarak, bir dizini silmek yerine bir dosyayı silmesini söylemeniz gerekir . C kütüphanesinin her birine davranış biçimindeki farklılıklar nedeniyle ve arasındaki farkın olduğuna inanıyorum .rmrmdir

Her halükarda, birincisi çalışmalı, ikincisi foo'nun bir dizin olmasından şikayet etmelidir.

Yukarıdaki gibi çalışmazsa, izinlerinizi kontrol edin. Dosyaları kaldırmak için içeren dizine yazma izninizin olması gerekir.


121
Ah evet. mantıklı. Asla foo yazmadım, f <tab> ve bash'ı a / benim için doldurdum.
Matthew Scouten

6
Bu her zaman işe yaramaz. rm -rf folderNameSymlink'i kaldırmak için zaman zaman (izleyen / olmadan) çalıştırmanız gerekir . Örneğin Amazon Linux bu gibi davranır.
brandonscript

18
@ r3mus: -rİçindeki her şeyi kaybetmek istemiyorsanız asla bir sembolik işaretle kullanmayın . -fbelki de dosya izinlerini geçersiz kılmak dışında gerekli olmamalıdır.
Matthew Scharley

27
Özellikle, AKA 'link' operasyonu ile bir unlinkilişkisi yoktur ln. Ad unlink, bir dosyanın dosya sisteminin dosya tablosundan kaldırılması / kaldırılması sürecini ifade eder, böylece içerikler herhangi bir referanstan ayrılır - bağlantısı kaldırılır. Özellikle bağlantılara ve sembolik bağlantılara uygulandığında aldatıcı yanıltıcı olan kafa karıştırıcı bir isim. türünden bağımsız olarak herhangi bir dosyaylaunlink çalıştığı için sembolik bağlantılarla çalışır .
Matthew Scharley

4
Eğer gerçekten aptalca bir şey yapmaktan endişe ediyorsanız, alias rm="rm -i"sanırım dışarıdaki herhangi bir şeyden daha fazla gizleme yaptı.
Matthew Scharley

832

"unlink" komutunu kullanın ve sonunda / bulunmadığından emin olun.

$ unlink mySymLink

unlink (), dosya sisteminden bir adı siler. Bu ad bir dosyanın son bağlantısıysa ve hiçbir işlem dosya açmazsa, dosya silinir ve kullandığı alan yeniden kullanılabilir hale gelir. Ad, bir dosyanın son bağlantısıysa ancak dosyada hala açık işlemler varsa, dosyaya başvuruda bulunan son dosya tanımlayıcı kapatılıncaya kadar dosya devam eder.

Doğru okuduğumda bunun sorunlu olabileceğini düşünüyorum.

Sembolik bir bağlantıya atıfta bulunulan ad bağlantı kaldırılır.

Bir sokete, fifoya veya cihaza atıfta bulunulan adın adı kaldırılır, ancak nesneyi açık olan işlemler onu kullanmaya devam edebilir.

https://linux.die.net/man/2/unlink


33
@OmarAbid "rm foo /" sürümü beni korkutuyor. Bu çok daha güvenli görünüyor :)
Joe Phillips

9
Ubuntu, ben test ~/c/a/file, /c/b/ile ln -s ~/c/a ~/c/b/. Yılında ~/c/b/, rm a/does not çalışmaları rm -rf a/sadece orijinal boşaltır a. unlink amükemmel çalışıyor ve unlink a/hiçbir şey yapmıyor.
Brady Trainor

3
OS X 10.10'da, unlinksadece bir takma addır rm. rmDizin yapınızın herhangi bir kısmı ile uğraşırken uygun disiplinin kullanılması gerektiğini gösterir .
Doug Powers

1
Komut rm -fdosyasında bir bağlantı var olsa da olmasa da sessizce silinir, oysa unlinkbağlantı mevcut değilse şikayet eder. Bağlantıyı kaldırma için -f seçeneği eşdeğeri yoktur, komut dosyasını daha karmaşık hale getirir.
shonky linux kullanıcısı

22
unlinknormal dosyaları silebilir. rmsemboliklerden daha az özellikli ve spesifik değildir. bayrak rmolmadan da dizinleri silmez -r. Bu yüzden rm'yi tercih etmenizi öneririm, ayrıntılı ve etkileşimli bayraklara sahiptir; anlamlı uyarı ve hata mesajları.
ThorSummoner

18

rm, sembolik bağlantıyı kaldırmalıdır.

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

17

rm symlinknameSonunda eğik çizgi kullanın, ancak eklemeyin (kullanmayın:) rm symlinkname/. Daha sonra yevet yanıtını vermek için sembolik işaretini kaldırmak isteyip istemediğiniz sorulacaktır .


63
Yanlış değilsiniz, ama doğru cevap zaten burada ve kabul edildi (4 yıl önce!). Neden rahatsız oluyorsun?
Matthew Scouten

1
Google, "Bir symlink'i kaldır" araması yaparken bunu öne çıkan snippet olarak kabul etti. Belki de sezgiselliğinin nasıl çalıştığından emin değil, onun özlüğünü beğendi. Her neyse, komut satırıma tekrar baktığımda derhal bir facepalm yaptım :-)
Randall

12

Aslında bir sembolik olduğunu varsayarsak,

$ rm -d symlink

Bunu çözmeli, ancak yapamayacağımızdan, artık mevcut olmayan ancak burada doğru olanı yapan başka bir dava için tasarlanan gizli kodu etkinleştiremeyiz.


7

Rm bir symlink'i kaldıramıyorsa, belki de symlink'i içeren dizindeki izinlere bakmanız gerekir. Dizin girişlerini kaldırmak için içeren dizine yazma izniniz olmalıdır.


4

Kurulumunuzun aşağıdaki gibi olduğunu varsayarsak: ln -s /mnt/bar ~/foosorunsuz bir şekilde yapabilmeniz gerekir rm foo. fooYapamıyorsanız, dosyanın sahibi olduğunuzdan ve dosyayı yazma / yürütme izniniz olduğundan emin olun . Yinelemeli olarak yapmadığınız sürece kaldırma foodokunulmaz bar.


2

CentOS üzerinde, sadece çalıştırın rm linknameve "sembolik bağlantı kaldırılsın mı?" Yazın Yve Enterbağlantı kaybolacak ve dizin güvenli olacaktır.


2

Windows Server'da çalışan MinGW (aslında Git Bash) ile bu sorunu yaşadım. Yukarıdaki önerilerin hiçbiri işe yaramadı. Sonunda, Windows Gezgini'nde yumuşak bağlantıyı sildikten sonra Geri Dönüşüm Kutusu'ndaki öğeyi sildiğinde dizinin bir kopyasını yaptı. Dosyaları siliyormuş gibi sesler çıkardı ama etmedi. Yine de bir yedekleme yapın!


3
"Dosyaları siliyormuş gibi sesler çıkardı ..." - Vay canına!
Sterex

LMFAO. "Dosyaları siliyormuş gibi sesler çıkardı ..."
Shivam Jha

Disketleri hatırlıyorum!
Keith Whittingham

Yukarıdakilerin hiçbiri benim için çalışmadı: eddyq @ eddyq-Latitude-E6440: ~ $ ls Masaüstü İndirmeleri Dropbox-Windows Müzik Herkese Açık Videolar w Belgeler Dropbox örnekler.desktop Resim Şablonları 'VmWare vmx dosyaları'
eddyq
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.