Có kịch bản nào cần rm -rf -no-reserved-root không?


27

Tôi đã thấy một số câu hỏi ở đây nơi mọi người vô tình làm rm -rf --no-preserve-roothoặc rm -rf *xóa sạch hầu hết hoặc tất cả hệ thống tệp của họ trước khi họ có thể phản ứng.

Có bao giờ một lý do để sử dụng --no-preserve-root, cho dù trong sử dụng bình thường, như một nhà phát triển hoặc là một quản trị viên?


4
Tôi không thể tưởng tượng bất kỳ trường hợp hữu ích nào. Tôi nghĩ rằng tùy chọn này chỉ tồn tại để có được tính trực giao của nguyên tắc UNIX (về mặt giữ những thứ giống nhau mà không có ngoại lệ). Bạn chắc chắn muốn có ngoại lệ trong trường hợp /, nhưng »trường hợp chung« vẫn được trình bày. Nói cách khác: »Đây không phải là công việc máy tính của tôi để cho tôi biết phải làm gì.« Và nó không nên.
Andreas Wiese

Đây là vũ khí có thể được sử dụng khi SkyNet tiếp quản.
Mitch Dart

Câu trả lời:


26

QUAN TRỌNG: Các hệ thống UEFI hiện đại gắn phần sụn trong /systhư mục và cung cấp cho HĐH. KHÔNG chạy lệnh này trên một hệ thống hiện đại vì nó sẽ loại bỏ phần sụn này, về cơ bản là làm hỏng máy của bạn.


Kịch bản đơn giản nhất tôi có thể nghĩ đến là ai đó muốn xóa tất cả dữ liệu khỏi ổ đĩa của họ. Có thể có những lý do hoàn toàn chính đáng để làm điều này và cách đơn giản nhất tôi có thể nghĩ đến là

rm -rf --no-preserve-root /

Hóa ra cái này thực sự được đưa ra làm ví dụ trong info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Một lý do hoàn toàn chính đáng khác là bạn muốn xóa một hệ thống tệp được gắn kết mà bạn đã chroottham gia. Trong trường hợp đó, rm -rf --no-preserve-root /sẽ xóa hệ thống trong chrootmôi trường nhưng sẽ giữ nguyên hệ thống của bạn.

Tôi chắc chắn có nhiều lý do có thể hơn, nhưng nói chung có vẻ như một cách tiếp cận rất hợp lý rằng hệ thống của tôi cho phép tôi làm bất cứ điều gì tôi muốn với nó. Đó là công việc của tôi phải cẩn thận, hệ thống chỉ nên cho phép tôi làm những gì tôi muốn làm. Nếu điều tôi muốn là ngu ngốc, thì đó là vấn đề của tôi chứ không phải của HĐH.

Dù sao, đây là một hạn chế tương đối mới, nó đã được thêm vào trong phiên bản thứ 7 của đặc tả POSIX ( phiên bản trước ở đây), trước đó rm -rf /là một lệnh hoàn toàn hợp lệ. Trên một ghi chú lịch sử, các thư mục ...luôn được bảo vệ rm, kể từ năm 1979, khi rmlần đầu tiên có được khả năng xóa các thư mục. Thêm về điều đó ở đây .


21
DO KHÔNG SỬ DỤNG NÀY ĐỂ XÓA TẤT CẢ DỮ LIỆU KHI HỆ THỐNG CỦA BẠN LÀ UEFI (máy tính mới) .Doing này xóa tất cả các các biến firmware và gây ra các bo mạch để được như vô dụng như một viên gạch
Suici Doga

5
@SuiciDoga: Nguồn, hay giải thích thêm? Phần sụn bo mạch chủ không nên được lưu trữ trên ổ cứng, nếu không chúng sẽ bị mất nếu bạn lấy ổ đĩa.
Tarka

15
@Tarka: / sys / firmware / efi / efivars / có thể được gắn kết và xóa đệ quy có thể loại bỏ các vars đó. Nó thực sự không nên gạch một hệ thống, nhưng có thể. Xem thenextweb.com/insider/2016/02/01/ cường
cyanic

4
@Tarka chúng không được lưu trữ trên ổ cứng và việc lấy ổ đĩa sẽ không ảnh hưởng đến chúng. Tuy nhiên, vì những lý do tôi chưa hiểu, chúng được gắn kết nên thực sự có thể truy cập được /.
terdon

20
Cách chính xác để làm trống một ổ đĩa là định dạng lại các phân vùng của nó (hoặc phân vùng lại hoàn toàn). rm -rf /Ví dụ, không phải tất cả các hệ thống tệp đều là đĩa cứng, vì vậy, bằng cách sử dụng, bạn có thể làm trống một máy từ xa trên giá đỡ NFS / CIFS / SSHFS của ai đó.
Điểm_Under

12

Sự tồn tại của công --no-preserve-roottắc không phải là để thêm chức năng bổ sung mà là ghi đè giảm chức năng rất lành mạnh. Công tắc này có khả năng dựa trên triết lý rằng máy tính nên thực hiện những gì nó đã nói và các lệnh đó sẽ có sẵn để thể hiện bất kỳ hành động mong muốn nào. Công tắc này có trước UEFI và dựa trên kinh nghiệm của tôi, tôi nói rằng nó đã lỗi thời.

Trong thực tế hiện đại, không có công tắc này, rmlệnh sẽ tránh được việc vô tình xóa thư mục gốc khi sử dụng một biến chưa được khởi tạo hoặc một không gian đi lạc.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Chú thích thú vị: Bảo vệ không phải là ý định của nó. Theo blog của Sun microsystems, việc xóa /thư mục sẽ xóa hoàn toàn thư mục làm việc hiện tại, vi phạm sự cân nhắc đặc biệt đã được thực hiện cho các thư mục .... Đây là lý do tại sao ủy ban tiêu chuẩn của họ cho phép ngoại lệ đặc biệt này - không phải để ngăn ngừa tai nạn. Thay đổi này lần đầu tiên được giới thiệu với Solaris 10 build 36.

http://archive.is/5lmc9


Cảm ơn các liên kết! Hy vọng rằng mẩu tin lịch sử sẽ được trích dẫn khi tôi tự hỏi lý do của sự thay đổi là gì.
Cameron Gagnon

Thông tin bổ sung thú vị - cảm ơn
Đánh dấu

1

Có lẽ đây không phải là một câu trả lời mà người hỏi ban đầu muốn, nhưng có một trường hợp sử dụng cần xóa tất cả các tệp đệ quy từ thư mục gốc. Mặc dù nó không thông qua rmlệnh, nhưng đó là một phần của quá trình switch_root (8) trong quá trình khởi động hệ thống Linux (không nhúng) của bạn.

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.