Có phải 'rm -rf' xóa bất kỳ tập tin nào không?


16

Gần đây tôi đã chạy rm -rf, không rm -rf /, nhưng không có gì xảy ra. Tôi chỉ nhận được một kết quả như thế này:

Thiết bị đầu cuối

Tôi đã sợ hãi vì tôi lo lắng rằng nó có thể xóa một số tệp, nhưng nó đã không. Chỉ cần chắc chắn, điều này có thể đã xóa bất kỳ tập tin từ thư mục của tôi?


36
Nếu bạn không chắc chắn (nhất định 100%) thì đừng chạy lệnh.
Năng lượng mặt trời Mike

5
Không bao giờ gõ các lệnh bạn không hiểu. Tất cả bạn cần là một. hoặc a / và bạn sẽ xóa rất nhiều thứ.
Nelson

18
Nếu bạn muốn thử nghiệm các lệnh nguy hiểm tiềm tàng, hãy xem xét việc cài đặt một máy ảo.
sĩ523

6
Thử nghiệm tất cả những gì bạn muốn (miễn là dữ liệu của bạn được sao lưu an toàn). Đây chỉ là phần mềm và bạn luôn có thể cài đặt lại nếu có sự cố. Đừng để ai huấn luyện bạn sợ máy tính.
hobbs

3
Tuyệt đối không chạy lệnh nếu bạn không chắc chắn 100%. Chỉ có rất nhiều cách để học, và thực sự chạy chúng là một trong số đó. Rõ ràng emptor và có bản sao lưu, rõ ràng, và sử dụng VM và tất cả những thứ đó. Nhưng không chạy theo bất cứ điều gì vì sợ hãi sẽ làm rất ít để giúp bạn phát triển. Rõ ràng là phải hết sức cẩn thận (ví dụ, rm), nhưng đối với nhiều / hầu hết các lệnh khác, ví dụ: tất cả các lệnh thao tác văn bản dựa trên đường ống, chỉ cần thử chúng thường xuyên là cách dễ nhất / đơn giản nhất bạn có thể làm. Cùng với việc nghiên cứu trang người đàn ông, rõ ràng.
AnoE

Câu trả lời:


49

Không, rm -rfsẽ không xóa bất kỳ tệp nào vì bạn không cung cấp đối số cho lệnh.


5
Và bởi vì -f, nó không phải là một lỗi để chạy nó mà không có đối số. rm -rsẽ phàn nàn về "toán hạng bị thiếu", nhưng -floại bỏ điều đó và cũng loại bỏ các lỗi đối với các tệp không tồn tại. (Vì vậy, ví dụ, một tập lệnh có thể sử dụng rm -rf /foo/bar/*để làm trống một thư mục có thể đã trống, mà không phải xóa các 2>/dev/nulllỗi.)
Peter Cordes

34

Từ trang hướng dẫn :

rm loại bỏ từng tập tin được chỉ định.

Điều này có nghĩa là bạn có thể sử dụng nó để xóa danh sách các tệp cùng một lúc, ví dụ như với

rm -rf test1.txt test2.txt

May mắn thay, tất cả những gì bạn đã làm là vượt qua một danh sách các tập tin trống , vì vậy nó không xóa được gì. Ngoài ra, những gì @SolarMike nói : nếu bạn không biết lệnh đó làm gì , đừng chạy nó . macOS được thiết kế để 'ẩn' tất cả các hoạt động Unix nguy hiểm (nhưng có khả năng mạnh mẽ) khỏi người dùng cuối.


7
FYI -rcờ là không cần thiết trừ khi bạn đang xóa các thư mục đệ quy. Nếu nó chỉ là các tệp, rmlà đủ - thì -fbắt buộc phải làm, nó không hỏi bạn "bạn có chắc không" cho mọi tệp.
Tim S.

9
Ngoài ra, -f dẫn đến thông báo sử dụng không được hiển thị khi bạn sử dụng sai. Đây là lý do tại sao không có đầu ra nào khi OP chạy rm -rf. Nếu họ chạy 'rm -r' mà không có tệp / thư mục được chỉ định, họ sẽ nhận được thông báo sử dụng này: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash

2
@barrycarter Điều đó hoàn toàn không đúng - nó vẫn sẽ cố xóa /, nó sẽ chỉ bỏ qua tệp không tồn tại xyz*(đơn giản là sẽ không mở rộng vì thiếu khớp).
lông mịn

3
@barrycarter Hành vi đó phụ thuộc vào cấu hình toàn cầu của shell của bạn. Ít nhất là trong mặc định của bash trên macOS, trên thực tế nó xóa abđối với tôi - ngay cả khi không chỉ định -f. echo rm -f a b c*Thay vào đó hãy thực hiện các lệnh tương tự để xem hành vi thực tế.
lông mịn

2
@barrycarter và fluffy: Điều gì xảy ra phụ thuộc vào việc biến nonomatch biến shell có được đặt hay không.
Thomas Padron-McCarthy

13

Dành cho người mới cư sĩ / Linux / Unix:

rm một mình không làm gì cả vì bạn đã không nói với nó những gì cần phải loại bỏ.

man rm có thể giải thích hầu hết điều này, nếu bạn hiểu nó.

-r có nghĩa là đệ quy, như trong "bao gồm mọi thứ trong các thư mục con"

-f có nghĩa là ép buộc, "đừng yêu cầu tôi xác nhận" chế độ

rm -rf(KHÔNG LÀM NÀY)/ sẽ nói xóa mọi thứ trong /(thư mục gốc) mà không kiểm tra (trên các phiên bản macOS gần đây SIP sẽ ngăn bạn xóa chính macOS bằng cách này, nhưng rất nhiều nội dung khác sẽ bị xóa)

rm [some file name] sẽ chỉ xóa tập tin đó.

rm -rf /home/myuser/bookssẽ xóa mọi thứ trong myuser's booksthư mục, cũng như các thư mục.


6
Ngày nay bạn cần phải làm rm -rf / --no-preserve-rootđể bắn chân của bạn một cách chính xác.
Gallifreyan

1
@Gallifreyan Có bao giờ có cách bắn chân chính xác không?
PascalVKooten

1
Điều này được cho là hoạt động tốt. Tôi không biết gì khác :)
Gallifreyan

1
@Gallifreyan trên macOS? pastebin.com/aVAsNcKC biểu thị khác
nohillside

@Gallifreyan: find / -deletenên "làm việc" (nghĩa là thực sự xóa mọi thứ, vì vậy đừng chạy nó.)
Peter Cordes

4

Không nhưng nếu bạn muốn xóa Đây là một ví dụ:

Sau khi bạn khởi chạy Terminal (trong thư mục / Ứng dụng / Tiện ích), hãy nhập cd ~ / Desktop để điều hướng đến thư mục Desktop. Nếu bạn có một tệp ở đây có tên MyFile.rtf mà bạn không bao giờ muốn gặp lại, bạn có thể chạy lệnh này:

rm MyFile.rtf

Khi bạn nhấn Return, tập tin sẽ gặp sự cố! Nó sẽ biến mất, bánh mì nướng, lịch sử. Bạn không thể lấy lại.


Trên thực tế, rm loại bỏ tất cả các tham chiếu của tệp, không xóa sạch ổ cứng của tệp bằng cách ghi đè từng byte, nếu tôi hiểu đúng tài liệu.
NoBugs

@NoBugs Nhưng công bằng mà nói, đây là cách tất cả các 'xóa' hiện đại, bao gồm Windows. Nếu tính năng xóa được ghi đè lên từng byte thì nó sẽ được quảng cáo như vậy (chủ yếu là vì nó mất nhiều thời gian hơn và hầu như không cần thiết trong hầu hết thời gian).
Mất trí
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.