Có rm -rf theo liên kết tượng trưng?


72

Tôi có một thư mục như thế này:

$ 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

Và tôi muốn loại bỏ nó bằng cách sử dụng rm -r.

Tuy nhiên, tôi sợ rm -rsẽ theo symlink và xóa mọi thứ trong thư mục đó (điều này rất tệ).

Tôi không thể tìm thấy bất cứ điều gì về điều này trong các trang người đàn ông. Điều gì sẽ là hành vi chính xác của việc chạy rm -rftừ một thư mục trên thư mục này?


16
Làm thế nào khó khăn để tạo ra một dir giả với một liên kết tượng trưng chỉ đến một tập tin giả và thực hiện kịch bản? Sau đó, bạn sẽ biết chắc chắn làm thế nào nó hoạt động!

Câu trả lời:


57

Ví dụ 1: Xóa một thư mục chứa liên kết mềm sang thư mục khác.

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$

Vì vậy, chúng tôi thấy rằng mục tiêu của liên kết mềm tồn tại.

Ví dụ 2: Xóa một liên kết mềm vào một thư mục

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$

Chỉ, các liên kết mềm bị xóa. Mục tiêu của các liên kết mềm sống sót.

Ví dụ 3: Cố gắng xóa mục tiêu của liên kết mềm

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

Các tập tin trong mục tiêu của liên kết tượng trưng không tồn tại.

Các thử nghiệm trên đã được thực hiện trên hệ thống Debian GNU / Linux 9.0 (kéo dài).


12
rm -rf baz / * sẽ xóa nội dung
Wyrmwood

2
Có, nếu bạn thực hiện rm -rf [symlink], thì nội dung của thư mục gốc sẽ bị xóa! Hãy thật cẩn thận.
Butussy Butkus

@frnknstn Bạn nói đúng. Tôi thấy hành vi tương tự mà bạn đề cập trên hệ thống Debian mới nhất của tôi. Tôi không nhớ phiên bản Debian nào tôi đã thực hiện các thử nghiệm trước đó. Trong các thử nghiệm trước đây của tôi về phiên bản cũ hơn của Debian, a.txt phải tồn tại trong ví dụ thứ ba hoặc tôi phải mắc lỗi trong thử nghiệm của mình. Tôi đã cập nhật câu trả lời với hành vi hiện tại tôi quan sát được trên Debian 9 và hành vi này phù hợp với những gì bạn đề cập.
Susam Pal

19

Thư mục / home / me / dir của bạn sẽ an toàn nếu bạn rm -rf thư mục mà bạn đã chạy ls. Chỉ bản thân symlink sẽ bị xóa chứ không phải thư mục mà nó trỏ đến.

Điều duy nhất tôi sẽ thận trọng, sẽ là nếu bạn gọi một cái gì đó như "rm -rf dir /" (với dấu gạch chéo.) Đừng làm điều đó bởi vì nó sẽ xóa thư mục mà thông điệp trỏ tới, thay vì liên kết thông điệp Chính nó.


3
"Điều duy nhất tôi sẽ thận trọng, sẽ là nếu bạn gọi một cái gì đó như" rm -rf dir / "(với dấu gạch chéo.) Đừng làm điều đó bởi vì nó sẽ xóa thư mục mà tin nhắn trỏ tới, thay vì tin nhắn bản thân liên kết. " - Tôi không thấy điều này là đúng. Xem ví dụ thứ ba trong phản hồi của tôi dưới đây.

1
Tôi nhận được kết quả tương tự như @Susam ('rm -r symlink /' không xóa mục tiêu của symlink), điều mà tôi hài lòng vì nó sẽ là một lỗi rất dễ mắc phải.
Andrew Crabb

5

rmnên loại bỏ các tập tin và thư mục. Nếu tệp là liên kết tượng trưng, ​​liên kết sẽ bị xóa, không phải mục tiêu. Nó sẽ không giải thích một liên kết tượng trưng. Ví dụ: hành vi nên là gì khi xóa 'các liên kết bị hỏng' thoát ra bằng 0 chứ không phải khác không để biểu thị sự thất bại

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.