Rm -rf làm gì?


25

Làm gì rm -rfkhi được sử dụng để loại bỏ các tập tin hoặc thư mục?

Làm thế nào để -r-fcác tùy chọn làm việc cùng nhau?



16
@DanDascalescu Bởi vì nó được trả lời một cách tầm thường bằng cách đọc trang người đàn ông, đây sẽ là cổng gọi đầu tiên của bất kỳ ai để trả lời một câu hỏi như thế này.
David Richerby

9
Hãy thử nó và xem. (Spoiler: không.)
imallett

3
Bởi Golly! Câu hỏi này phải là một trò đùa từ DevRobot! Làm thế nào bạn có thể làm cho nó đến mức nghiệp của bạn mà không bao giờ tham khảo các trang người đàn ông. Bây giờ ... bạn là con người?!
Cbhihe

2
Hoàn toàn đọc như một trò đùa thực sự. Như thể ai đó cố gắng hỏi, "mưa có phải là H2O không?" (A tốt câu trả lời sẽ là: Thông thường có, nhưng trong tương lai, một khi người đàn ông sẽ đã bị phá hủy một nửa số thực vật của Trái đất, 50% trong số đó sẽ quay sang axit (như trong mưa axit))
Lỗi Cú pháp

Câu trả lời:


52

Lệnh rm -rfnày giống như rm -r -f.

Từ rmtrang man của (nhập man rmvào một thiết bị đầu cuối để xem nó) -r:

remove directories and their contents recursively

-fkhông:

ignore nonexistent files and arguments, never prompt

Vì vậy, trong sự kết hợp họ làm cả hai.

Trên thực tế, đây là một lệnh rất nguy hiểm vì nó sẽ loại bỏ đệ quy mọi thứ trong thư mục bạn chọn (hoặc chỉ xóa tệp bạn chọn) và nó sẽ làm như vậy mà không bao giờ nhắc bạn.

Vui lòng sử dụng lệnh này một cách cẩn thận!


@Paul, dấu gạch chéo sẽ làm gì? Tôi sử dụng lệnh này để loại bỏ dir thường xuyên và w / oa slash.
Bạch tuộc

1
@Octopus, slash tự nó chỉ ra thư mục gốc. rm -rf /về mặt lý thuyết sẽ xóa mọi tệp trên máy tính của bạn nằm trong thư mục mà bạn có quyền ghi. Nếu bạn đã root, điều đó có nghĩa là xóa sạch toàn bộ hệ thống. (Trong thực tế, nó không hoạt động vì GNU rmcó trường hợp đặc biệt từ chối cho phép rm -r /trừ khi bạn cũng nói --no-preserve-root.)
cjm

10
Tất cả đều giống nhau, tôi không khuyên bạn nên thử rm -rf /xem nó có bị bắt đúng không.
cjm

2
@mattburnett Điều đó cũng nguy hiểm trong VM: bạn có thể có các mount không cục bộ với VM. Cụ thể, tôi tin rằng việc gắn một trong các thư mục của máy chủ trên VM để chia sẻ các tệp giữa máy chủ và VM là khá phổ biến.
hvd

1
@mattburnett Mình có máy ảo. Tôi không có máy ảo cách ly. Tôi chỉ không chạy thực thi không xác định. :)
hvd

22

Ngoài câu trả lời đúng trước đây, tôi muốn dạy bạn cách câu cá:

Khi bạn không chắc chắn về cách thức hoạt động của một lệnh, các tùy chọn có và những gì nó làm, hãy mở một thiết bị đầu cuối và gõ

man <command>

Ví dụ:

man rm

Khi ở đó, bạn có thể tìm kiếm tùy chọn. Một trang man có thể rất dài để đọc, vì vậy trong loại thiết bị đầu cuối:

/<pattern>

Vì vậy, ví dụ, làm:

/-f

Bạn có thể dễ dàng hạ cánh để:

-f, --force
              ignore nonexistent files and arguments, never prompt

Dành cho -r làm:

-r, -R, --recursive
              remove directories and their contents recursively

Bạn có thể di chuyển giữa các kết quả tìm kiếm bằng cách sử dụng n(tiếp theo) và N(trước đó).

Tiền thưởng:

Nếu bạn cần làm gì đó, nhưng bạn không biết tên lệnh, hãy sử dụng aproposđể tìm kiếm trong các trang man:

apropos <pattern>

Ví dụ:

apropos directory listing

8

rmlà viết tắt của loại bỏ. Các rlá cờ là thư mục remove và nội dung của đệ quy và các flực lượng phương tiện, và nó quan trọng hơn bất kỳ nhắc nhở xác nhận.


3
Nói đúng ra r flag is to remove directories là không đúng..tôi loại bỏ các thư mục cùng với nội dung của nó, nó là một hoạt động đệ quy..theo lời nói của bạn, nó sẽ chỉ xóa các thư mục, còn các thư mục con, các tập tin theo nó thì sao? vì mục nhập thư mục chỉ chứa ánh xạ tên
nút

Bạn nói đúng, tôi sẽ chỉnh sửa câu trả lời của tôi.
Chris

1
-r loại bỏ các thư mục và nội dung của chúng đệ quy.
Jim Balter

3

Như đã được đề cập, rm -rf <ARG>có nghĩa là mạnh mẽ loại bỏ các tệp đệ quy, nơi <ARG>là một thư mục (mặc dù nó có thể là một tệp tốt).

Toàn bộ quan điểm của -r(loại bỏ đệ quy) là rmkhông thể xóa các thư mục nếu chúng không trống, đơn giản vì lệnh gọi hệ thống cơ bản rmsử dụng ( hủy liên kết ) chỉ hoạt động trên các thư mục trống. Do đó, -rcờ làm gì , là tìm kiếm theo chiều sâu giảm dần vào các thư mục và xóa các tệp trước, và chỉ sau đó khi thư mục trống - nó sẽ xóa nó. Hiệu ứng tương tự này đạt được thông qua findlệnh với -deletecờ (khi bạn không chỉ định lọc theo -type, nhưng đó là một câu chuyện khác).

Đối với -f, nó thực hiện hai điều - một là ngăn nhắc bạn có muốn xóa tệp hay không (chẳng hạn như khi bạn xóa tệp do người dùng khác sở hữu trong thư mục của mình, nó sẽ không hiển thị rm: remove write-protected regular empty file 'f1'?lời nhắc xác nhận) và bỏ qua tập tin không tồn tại. Vì vậy, ví dụ, với tên tệp không tồn tại, bạn sẽ gặp rm: cannot remove 'nonexistent': No such file or directorylỗi.

Xem thêm:

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.