Rm -rf sembolik bağları takip ediyor mu?


72

Bunun gibi bir dizin var:

$ ls -l
total 899166
drwxr-xr-x 12 me scicomp       324 Jan 24 13:47 data
-rw-r--r--  1 me scicomp     84188 Jan 24 13:47 lod-thin-1.000000-0.010000-0.030000.rda
drwxr-xr-x  2 me scicomp       808 Jan 24 13:47 log
lrwxrwxrwx  1 me scicomp        17 Jan 25 09:41 msg -> /home/me/msg

Ve onu kullanarak kaldırmak istiyorum rm -r.

Ancak korkuyorum rm -rsembolik bağlantıyı takip edecek ve o dizindeki her şeyi silecek (ki bu çok kötü).

Bu konuda man sayfalarında hiçbir şey bulamıyorum. Bunun rm -rfüstünde bir dizinden kaçma davranışının tam olarak ne olduğu ?


16
Sahte bir dosyaya işaret eden sembolik bir kukla direk oluşturmak ve senaryoyu yürütmek ne kadar zor? O zaman nasıl çalıştığını kesin olarak bileceksiniz!

Yanıtlar:


57

Örnek 1: Başka bir dizine yumuşak link içeren bir dizini silmek.

susam@nifty:~/so$ mkdir foo bar
susam@nifty:~/so$ touch bar/a.txt
susam@nifty:~/so$ ln -s /home/susam/so/bar/ foo/baz
susam@nifty:~/so$ tree
.
├── bar
   └── a.txt
└── foo
    └── baz -> /home/susam/so/bar/

3 directories, 1 file
susam@nifty:~/so$ rm -r foo
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

Böylece, yumuşak bağlantının hedefinin hayatta kaldığını görüyoruz.

Örnek 2: Bir dizine yumuşak bağlantı silme

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

Yalnızca yumuşak bağlantı silinir. Yumuşak bağlantının hedefi hayatta kalır.

Örnek 3: Bir yazılım bağlantısının hedefini silmeye çalışma

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz/
rm: cannot remove 'baz/': Not a directory
susam@nifty:~/so$ tree
.
├── bar
└── baz -> /home/susam/so/bar

2 directories, 0 files

Sembolik bağın hedefindeki dosya hayatta değil.

Yukarıdaki deneyler bir Debian GNU / Linux 9.0 (stretch) sistemi üzerinde yapıldı.


12
rm -rf baz / * içeriği kaldırır
Wyrmwood

2
Evet, rm -rf [sembolik link] yazarsanız, orijinal dizinin içeriği silinir! Çok dikkatli ol.
Buttle Butkus

@frnknstn Haklısın. En son Debian sistemimde bahsettiğiniz davranışları görüyorum. Daha önceki deneylerde hangi Debian sürümünü yaptığımı hatırlamıyorum. Debian'ın daha eski bir versiyonundaki önceki deneylerimde üçüncü örnekte a.txt denenmiş olmalı veya denememde bir hata yapmış olmalıyım. Yanıtı Debian 9'da gözlemlediğim mevcut davranışla güncelledim ve bu davranış bahsettiğinizle tutarlıdır.
Susam Pal

19

/ Home / me / msg dizininiz, çalıştırdığınız dizini rm-rf olarak açtığınızda güvende olacaktır. Sadece sembolik bağlantı silinir, işaret ettiği klasör değil.

Dikkatli olacağım tek şey, "rm -rf msg /" (izleyen eğik çizgi ile) gibi bir şey çağırırsanız olur. kendisi.


3
"Dikkatli olacağım tek şey," rm -rf msg / "(izleyen eğik çizgiyle) gibi bir şey çağırırsanız olur.) Bunu yapmayın; sembolik bağlantı " - Bunu doğru bulmuyorum. Aşağıdaki cevabımdaki üçüncü örneğe bakınız.

1
@Susam ('rm -r symlink /' symlink hedefini silmez) ile aynı sonucu alıyorum, ki bunu yapmak çok kolay bir hata olurdu.
Andrew Crabb

5

rmdosyaları ve dizinleri kaldırmalı. Dosya sembolik bir bağ ise, hedef değil bağlantı kaldırılır. Sembolik bir bağı yorumlamayacak. Örneğin, 'kopuk bağlantıları' silerken davranışın ne olması gerektiğini göstermek için 0 ile çıkın

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.