Câu hỏi Bạn sẽ nhận được bao nhiêu với lệnh 'rm -rf /'?


Tôi thường tự hỏi làm thế nào đến nay hệ thống sẽ thực sự có được nếu bạn chạy rm -rf /. Tôi nghi ngờ hệ điều hành sẽ có thể xóa chính nó (?)

Câu hỏi thưởng: Sau khi lệnh đã được thực hiện, sẽ rm đã tự xóa?

Cập nhật: Tôi đã thử nghiệm điều này trong một vài bản phân phối unix chính sử dụng VirtualBox và các câu trả lời mô tả chính xác những gì sẽ xảy ra. Nếu đưa ra các tham số chính xác, rm sẽ loại bỏ mọi bit dữ liệu vật lý trên đĩa. Tuy nhiên, tôi gặp phải một số vấn đề khi sử dụng phiên bản rm khác với phiên bản GNU. Ví dụ, tôi tin rằng BusyBox có phiên bản riêng của họ và nó không cho phép bạn loại bỏ nhiều nhất có thể.

Câu hỏi này là Câu hỏi của người dùng trong tuần.
  Đọc ngày 7 tháng 7 năm 2011 mục blog để biết thêm chi tiết hoặc gửi của riêng bạn Câu hỏi của Tuần.


200
2017-07-20 13:48


gốc


Thật buồn cười khi bạn hỏi câu hỏi này. Tôi vừa trả lời một câu hỏi rm -f khác trên một diễn đàn khác và bắt đầu nhớ lại một bài báo tôi đã đọc một lúc. May mắn là tôi đã lưu nó cho những lúc như thế này: CÁC câu chuyện kinh dị Unix cổ điển Bên cạnh thực tế là nó thú vị để xem nó sẽ đi xa như thế nào ... Tôi nghĩ rằng đó là một bài viết rất hay và đọc rất tốt! - akseli
Tôi vừa thử sudo rm -rf / trên tinycore / microcore linux và có vẻ như hệ điều hành bảo vệ một số thư mục (/ sys và những người khác) khỏi bị xóa. - n0pe
Tôi đã thử rm -f /bin/rm Một lần. Thật không may, nó làm việc, và tôi đã dành một giờ tiếp theo để có được phiên bản phù hợp rm từ lõi của GNU. - squircle
Đợi đã, tôi sẽ thử ... - Martijn Courteaux
Tôi làm điều này tại cửa hàng táo mọi lúc - eggie5


Các câu trả lời:


Nếu bạn có rm từ GNU coreutils (có thể là nếu nó là bản phân phối Linux thông thường), rm -rf / sẽ bị từ chối bởi tính năng bảo vệ tích hợp (theo manpage và Wikipedia, chưa thử).

Bạn có thể ghi đè bảo vệ này bằng --no-preserve-root. rm sau đó sẽ xóa mọi thứ có thể, mà không dừng lại sau khi đã cố gắng xóa từng tệp. Tất nhiên nó sẽ không loại bỏ các hệ thống tập tin ảo như /proc và /sys, nhưng điều đó không liên quan - nó sẽ xóa mọi thứ trên đĩa của bạn.

Sau khi lệnh kết thúc, đĩa của bạn sẽ bị xóa sạch, bao gồm cả hệ điều hành. Các hạt nhân và các quy trình hiện tại sẽ tiếp tục chạy từ bộ nhớ, nhưng nhiều tiến trình sẽ chết vì chúng sẽ không truy cập được một số tệp. Hệ điều hành sẽ không khởi động được vào lần sau.


188
2017-07-20 14:36



Chính xác những gì tôi đang tìm kiếm. Bây giờ để sử dụng sức mạnh này để TAKE TRÊN THẾ GIỚI. - n0pe
+1 đặc biệt cho --no-preserve-root bởi vì điều đó thường không được đề cập. - Matěj G.
@MaxMackie, đáng chú ý là tin tặc nhanh chóng tìm thấy điều này là ít nhất điều hữu ích mà họ có thể làm cho người dùng. Nó phá hủy bất kỳ dữ liệu nào có thể được sử dụng để kiếm tiền mặt, và ngăn không cho hacker khai thác thêm máy. Giống như một con mèo với côn trùng, bạn không muốn giết nó, bạn chỉ muốn chơi với nó một lúc bởi vì nó rất vui. - zzzzBov
Để trả lời câu hỏi khác của OP, có rm sẽ tự xóa. Nó hoàn toàn có thể sửa đổi hoặc xóa một tập tin thực thi ngay cả khi có một thể hiện của nó đang chạy. Nó cũng sẽ tiếp tục chạy, và sẽ không bị ảnh hưởng bởi sự thay đổi. - thomasrutter
Tôi muốn đề cập đến "chmod -R user: user *" tại /, bởi vì nó cũng là một sai lầm đệ quy và tốn kém. Tôi đã làm điều đó một lần, và đã có nửa chừng / nhà vào lúc tôi có thể hủy bỏ. / bin / boot / etc / dev được sở hữu. May mắn là máy chủ tiếp tục chạy trong khi tôi đã dành vài giờ tiếp theo theo cách thủ công và đặt lại quyền sở hữu từ hệ thống tham chiếu. Tuy nhiên, không ai khác có thể sử dụng su hoặc sudo sau đó. Cuối cùng phát hiện ra rằng / bin / su không còn có bộ bit setuid của nó nữa. Hãy lưu ý cho tương lai: chowning / bin / su reset bit setuid của nó! - Andy Lee Robinson


Đối với những người thích làm những việc như thế này một cách trực quan trong khi nghe nhạc techno.

Chạy rm-rf trên Linux (video)

Điểm thưởng nếu bạn có thể đặt tên cho các quá trình khi chúng bắt đầu chết.


41
2017-07-20 23:23





Thiết lập máy ảo và thử vui vẻ?

Nó sẽ đi khá xa ... nếu bạn đang sử dụng một gui bạn có thể vui vẻ nhận thấy mọi thứ làm suy giảm rõ ràng hơn. (biểu tượng trên menu ngừng tải, v.v.)

Nếu bạn để nó đi, hệ điều hành sẽ khá nhiều được vượt quá phục hồi mặc dù bạn có thể có được một số dữ liệu trở lại một cách dễ dàng.

Dù bằng cách nào, bạn sẽ muốn thực hiện cài đặt lại hệ điều hành.


22
2017-07-20 13:52



Tôi thậm chí không nghĩ về việc thử nó trong một máy ảo. Hãy thử ngay bây giờ! ooo này thật vui. - n0pe
Viết nhầm lệnh vào Terminal của hệ thống máy chủ - slhck
Xem bài viết tôi đăng. "Câu chuyện kinh dị Unix cổ điển!" - akseli
Tôi đang làm việc ngay bây giờ và không có thời gian để đi qua một cài đặt đầy đủ của một distro phổ biến (ubuntu / slack / suse / fedora). Nếu bất cứ ai khác có thể sao chép một tập tin đĩa VM và thử nó cho chúng tôi, nó sẽ là tuyệt vời. - n0pe
Với Amazon EC2, bạn nên nhanh chóng kích hoạt một trong những AMI của họ đã cài đặt và kích hoạt Linux ... - David d C e Freitas


Vâng, hãy thử nó trên http://bellard.org/jslinux/ sản xuất:

rm: không thể xóa '/ dev / pts': Thiết bị hoặc tài nguyên bận
  rm: không thể xóa '/ dev': Thư mục không trống
  rm: không thể xóa '/ proc / swaps': Thao tác không được phép
  rm: không thể xóa '/ proc / kallsyms': Thao tác không được phép
  rm: không thể xóa '/ proc / dma': Thao tác không được phép

Mục nhập SNIP 881

rm: không thể xóa '/ proc / 149 / oom_adj': Quyền bị từ chối
  rm: không thể xóa '/ proc / 149': Thao tác không được phép
  rm: không thể xóa '/ proc': Thiết bị hoặc tài nguyên bận
  rm: không thể xóa '/ tmp': Thiết bị hoặc tài nguyên bận
  rm: không thể xóa '/': Thiết bị hoặc tài nguyên bận


11
2017-07-20 14:23



Tôi cũng nhận được những lỗi / cảnh báo đó. Bạn có nghĩ tiêu chuẩn này không? - n0pe
/ proc, / sys, đôi khi / dev và bất kỳ điểm gắn kết nào là thuộc tính của hệ điều hành và không thể bị xóa. - pjc50
Cùng với @ pcj50, những tệp này không phải là tệp gốc trên đĩa cứng, vì vậy việc "xóa" chúng không có ý nghĩa. - CarlF


Tôi nhớ lại điều này được nhai trên alt.sysadmin.recovery trở lại trong ngày của yore, khi không có những điều như /proc/dev chỉ là một thư mục thường xuyên chứa các mục nhập cho một loạt các inode khác thường ...

... nhưng, trên một số biến thể của Unix (hồi ức của tôi là HP-UX, nhưng điều đó có thể hoàn toàn sai), bạn có thể không phải loại bỏ mục nhập thư mục cuối cùng cho một chương trình đang chạy. (Thư viện được chia sẻ? Cái gì vậy?)

Trên các hệ thống như vậy, nếu bạn bắt đầu một trong chế độ bảo trì (vì vậy không có gì đang chạy nhưng vỏ của bạn, thậm chí không initvà không có hệ thống tệp phụ nào được gắn kết) và đã exec /bin/rm -rf /, bạn sẽ bị bỏ lại với hệ thống tệp gốc trống hoàn toàn ngoại trừ cái đó /bin và /bin/rm sẽ tồn tại.

Các cư dân của tu viện ma quỷ đáng sợ coi đây là phù hợp và thích hợp.


7
2017-07-21 00:06





rm -rf / không được phép triển khai gần đây vì nó đã được đề xuất là vi phạm tiêu chuẩn POSIX:

"rm -rf /"bảo vệ trên blog của Oracle

Dù sao, cuối cùng, chúng tôi đã sửa đổi spec, và Solaris 10 có (kể từ khi xây dựng 36) một phiên bản của / usr / bin / rm (/ bin là một sym-link đến / usr / bin trên Solaris) và / usr / xpg4 / bin / rm hoạt động như sau:

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

4
2017-07-20 15:58



"chỉ ra rằng nếu một người cố gắng loại bỏ" / "đệ quy, người ta cuối cùng sẽ cố gắng loại bỏ" .. "và". ", và tất cả những gì chúng tôi đang làm là cho phép rm xác định trước điều này một cách heuristically. ! "- er, không phải là không cho phép xóa bất kì danh mục? Thông số thực tế chỉ không cho phép .. và. trong các đối số dòng lệnh thực tế, nó không nói bất cứ điều gì về những gì bạn "cuối cùng cố gắng loại bỏ" - Random832
Tại sao nó không cho phép loại bỏ bất kỳ thư mục? Thư mục gốc là chỉ có liên quan ở đây và loại bỏ nó rõ ràng ngụ ý loại bỏ "." và "..", bất kể thư mục hiện tại là gì. Cảm giác thông thường không bị cấm trong việc diễn giải tiêu chuẩn. - jlliagre
Dòng tranh cãi đó là thiên tài thuần khiết. - Nate C-K
Tiêu chuẩn quy định rằng rm không được phép tiếp tục nếu một đối số có chuỗi "." hoặc ".." làm thành phần cơ sở. Bạn không thể xóa /foo/.. ngay cả khi bạn không ở /foo. Nó không không phải chỉ định rằng bạn không được phép xóa thư mục hiện tại (ví dụ: rm -r `pwd`) hoặc phụ huynh của thư mục hiện tại. - Random832
Thật vậy, tôi đã hiểu nhầm lời phát biểu và bạn đã đúng. Hy vọng rằng, những kẻ tiêu chuẩn chấp nhận hành vi thông minh hơn là tuân thủ tiêu chuẩn. Loại bỏ các bộ phận lớn nếu không phải tất cả các hệ thống tập tin sẽ nhanh chóng làm cho hệ điều hành không tuân thủ tiêu chuẩn anyway. - jlliagre


Một điểm tôi không thấy bởi bất kỳ ai khác: các tệp hiện đang mở (ví dụ: rm), ngay cả khi bị xóa, sẽ không thực sự biến mất ổ đĩa cho đến khi đóng.


3
2017-07-20 17:12



Đúng vậy, bởi vì chúng được nạp vào bộ nhớ phải không? - n0pe
Tôi không chắc liệu điều đó có an toàn không; hạt nhân rất có thể chỉ cần tải tệp đã xóa vào bộ nhớ và xóa nó trên đĩa ngay lập tức và giữ bản sao trong bộ nhớ này cho đến khi tệp được mở (ví dụ: cho đến khi chạy rm). - Ambroz Bizjak
Tôi không suy đoán. Nếu một chương trình đang chạy, việc xóa nó không loại bỏ nó trên các hộp Linux của tôi, ít nhất. (Tâm trí bạn tôi đã không thử nghiệm này trong, oh, một vài năm.) - CarlF
rm  sẽ loại bỏ chính nó khỏi fs - chương trình được tải hoàn toàn vào bộ nhớ, chứ không phải tập tin - warren
@MaxMackie: không phải vì chúng được tải trong bộ nhớ, nhưng vì một tham chiếu tệp mở có cùng sức mạnh như một liên kết cứng (tức là nếu một tệp có ít nhất một liên kết cứng, nó sẽ không bị xóa khỏi đĩa). - Lie Ryan


Vì đã thử nó một lần (trên một máy chủ mà những gì pissing tôi tắt), đăng nhập như là người chủ, trong thiết bị đầu cuối, bạn sẽ mất gần như tất cả mọi thứ. Điều duy nhất sẽ không bị xóa sẽ chỉ là quá trình cần thiết cho hệ điều hành.


1
2017-07-20 13:55



"[không xóa] chỉ là quá trình cần thiết cho hệ điều hành" - oh, đừng lo lắng. Không giống như Windows, Linux sẽ xóa sạch mọi thứ một cách hạnh phúc, ngay cả khi tệp là hệ điều hành quan trọng và đang sử dụng. /boot, /sbin, /etc, /bin, /vmlinuz? Bam, đi đi. Chúc may mắn khởi động mà không có những người - trong thực tế, may mắn làm bất cứ điều gì sau khi xóa xong. - Piskvor
Nếu tôi nhớ lại có một số tập tin đã không bị xóa, và tôi để cho chạy Linux của tôi trong hơn 4 giờ. Nhưng vẫn còn, nó là tốt để biết những gì xảy ra, giống như làm một chmod 777 / * -fR;) - Anarko_Bizounours
"chmod 777 / * -fR" - Điều đó chỉ làm cho hệ thống rất không an toàn, mặc dù rất thân thiện với người dùng. - Bart van Heukelom
đã làm nó, nó rất không an toàn. Bạn không thể làm một điều, một số quá trình cần phải có quyền cụ thể, và chmod 777 sẽ thay đổi mọi quyền, bạn sẽ không bao giờ có thể tải một phiên, và một số quá trình để. - Anarko_Bizounours
@BartvanHeukelom, một số công cụ sẽ thực hiện tự kiểm tra nhanh hoặc được hệ thống kiểm tra quyền sở hữu và quyền thích hợp và từ chối hành động nếu bị định cấu hình sai. - killermist


Bạn có thể nhận được bao xa, về cơ bản nó phụ thuộc vào các bản phân phối Unix / Linux cụ thể.

Nhưng để trả lời câu hỏi cơ bản của bạn, vâng - rm lệnh sẽ bị xóa với lệnh cũng như bất kỳ lệnh tiêu chuẩn nào khác trong /bin và các thư mục khác.

Đây là bài kiểm tra đơn giản mà tôi đã thực hiện trong Linux Ubuntu 15.04 sử dụng VM.

  1. Khởi tạo máy ảo qua vagrant:

    vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
    
  2. Sau đó, khi bạn đang cố gắng xóa tất cả các tệp theo cách tiêu chuẩn, nó không cho phép bạn:

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -fr /
    rm: it is dangerous to operate recursively on '/'
    rm: use --no-preserve-root to override this failsafe
    
  3. Vì vậy hãy cố gắng --no-preserve-root. Luôn kiểm tra kỹ xem bạn đã đăng nhập vào máy ảo chưa? vagrant@vagrant-ubuntu-vivid-64:~$), sau đó chạy (đừng thử ở nhà):

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -vfr --no-preserve-root /
    removed directory: '/lost+found'
    removed directory: '/opt'
    removed '/bin/nc'
    removed '/bin/less'
    removed '/bin/wdctl'
    removed '/bin/nano'
    ...
    removed '/bin/rmdir'
    removed '/bin/sh'
    removed '/bin/rm'
    ...
    removed directory: '/bin'
    removed directory: '/usr/games'
    removed '/usr/bin/byobu-launcher-install'
    removed '/usr/bin/ipcmk'
    removed '/usr/bin/sum'
    removed directory: '/usr/bin'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9.2'
    removed '/usr/lib/gcc/x86_64-linux-gnu/5.0.1'
    removed directory: '/usr/lib/gcc/x86_64-linux-gnu/5'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libquadmath.so'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libgomp.so'
    ...
    removed directory: '/run/initramfs'
    removed directory: '/media'
    rm: cannot remove '/proc/fb': Operation not permitted
    rm: cannot remove '/proc/fs/ext4/sda1/options': Operation not permitted
    ...
    removed '/vmlinuz'
    removed '/boot/config-3.19.0-23-generic'
    removed '/boot/grub/grubenv'
    ...
    removed directory: '/boot'
    removed '/lib64/ld-linux-x86-64.so.2'
    rm: cannot remove '/dev/hugepages': Device or resource busy
    rm: cannot remove '/dev/mqueue': Device or resource busy
    rm: cannot remove '/dev/shm': Device or resource busy
    removed '/dev/vcsa7'
    ...
    removed '/dev/mem'
    removed '/dev/rfkill'
    removed '/dev/vga_arbiter'
    ...
    rm: cannot remove '/sys/fs/ecryptfs/version': Operation not permitted
    removed directory: '/etc'
    removed directory: '/mnt'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_provision'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_set_name'
    removed '/vagrant/.vagrant/machines/default/virtualbox/creator_uid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/id'
    removed '/vagrant/.vagrant/machines/default/virtualbox/index_uuid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/private_key'
    removed '/vagrant/.vagrant/machines/default/virtualbox/synced_folders'
    removed directory: '/vagrant/.vagrant/machines/default/virtualbox'
    removed directory: '/vagrant/.vagrant/machines/default'
    removed directory: '/vagrant/.vagrant/machines'
    removed directory: '/vagrant/.vagrant'
    removed '/vagrant/Vagrantfile'
    rm: cannot remove '/vagrant': Device or resource busy
    

    Sau đó nó quay trở lại dấu nhắc trình bao như không có gì xảy ra, nhưng bạn không thể thực thi bất kỳ lệnh nào ngoài các lệnh được cài sẵn và kill, vì vậy bạn có thể hoàn thành công việc của mình và giết phiên của bạn :)

    Ví dụ:

    $ rm
    rm: command not found
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    $ which kill
    -bash: /usr/bin/which: No such file or directory
    $ kill -9 $$
    Connection to 127.0.0.1 closed.
    

Vì vậy, nó khá loại bỏ tất cả mọi thứ, bao gồm rm, ls và tất cả các lệnh khác, nhưng bạn vẫn đăng nhập. Có một số thư mục đặc biệt không bị xóa như một số thiết bị từ /dev, /proc hoặc là /sys đó không phải là các thư mục / tệp thông thường, nhưng đó là hệ thống tệp giả cung cấp các giao diện để xử lý và dữ liệu hạt nhân.

Nếu bạn không có Vagrant hoặc Linux, bạn có thể chơi với một số Trình giả lập JavaScript Linux x86.

Nếu bạn quan tâm đến khả năng khôi phục từ thảm họa như vậy, hãy kiểm tra:


1
2017-09-27 15:17