Bạn thực sự có thể sử dụng Terminal để đánh sập máy tính của bạn?


48

Những người không hiểu Terminal thường ngại sử dụng nó vì sợ rằng họ có thể làm hỏng lệnh của họ và làm hỏng máy tính của họ. Những người hiểu rõ hơn về Terminal biết rằng đó không phải là trường hợp - thường thì Terminal sẽ chỉ xuất ra một lỗi. Nhưng có thực sự các lệnh sẽ làm hỏng máy tính của bạn?

CẢNH BÁO: bạn có thể mất dữ liệu nếu bạn nhập chúng hoặc sao chép dán, đặc biệt sudormcác lệnh.


Một số anh chàng vô tình xóa sạch tất cả các máy tính của công ty anh ta trong một dòng, tôi đã thấy nó trên trang web này một vài năm trước, nó là giả nhưng, nó vẫn có thể dễ dàng xảy ra. Tôi sẽ liên kết nếu tôi có thể tìm thấy nó.

7
Terminal chỉ là giao diện dòng lệnh để chạy các chương trình. Nó là một thay thế cho một giao diện người dùng đồ họa . Bạn có thể chạy các chương trình tùy ý từ một trong hai. Do đó, câu hỏi của bạn không thực sự có nhiều ý nghĩa; thay vào đó bạn nên hỏi: Bạn có thể làm hỏng máy tính của mình bằng cách chạy một chương trình không?
jamesdlin

"Tai nạn" có nghĩa là gì? Các lệnh chạy trong thiết bị đầu cuối thường có thể mạnh mẽ và thường sẽ "làm những gì bạn nói và không phải những gì bạn muốn nói" mà không cần hỏi, không giống như hầu hết các lệnh GUI của Mac OS X. Nhưng trừ khi bạn cố tình cố gắng , bạn không có khả năng làm hỏng máy. (Tuy nhiên, tôi có thể nghĩ ra một vài cách để cố tình làm như vậy)
Josh

1
Dán lệnh wrom web có thể rất nguy hiểm . Bất kể khả năng để treo máy của bạn. Gõ các lệnh mà bạn hiểu ít nhất là mơ hồ không nên nguy hiểm. Nếu không thì rất nhiều cách để vặn máy tính của bạn. Nó giống như nhấp vào cài đặt cấu hình hệ thống ngẫu nhiên trong GUI nhưng trong GUI ít nhất khả năng bị hạn chế hơn. viết ra sự nguy hiểm của việc dán các lệnh - văn bản mà bạn nhìn thấy được sao chép có thể khác với văn bản thực tế được sao chép, do đó nó có thể chứa các lệnh độc hại được trộn lẫn.
akostadinov

Câu trả lời:


51

Một cách để đánh sập máy tính là thực hiện cái gọi là bom ngã ba .

Bạn có thể thực thi nó trên unix-sytem bằng cách:

:(){ :|: & };:

Đó là một lệnh sẽ sinh ra các quá trình sinh sản đệ quy cho đến khi HĐH quá bận rộn, nó sẽ không phản hồi bất kỳ hành động nào nữa.


49
@bunyaCoppy nếu tôi hiểu chính xác lệnh của bạn, thì đó là lệnh xóa tất cả các thư mục mà không cần nhắc , điều này rất nguy hiểm nếu nó hoạt động . Tôi muốn bạn viết một thông báo cảnh báo cho điều đó.
Andrew T.

80
@AndrewT. Mọi người không nên chỉ gõ các lệnh ngẫu nhiên mà họ tìm thấy trên Internet. (đặc biệt là những người trong một chủ đề gọi là "bạn có thể làm hỏng máy tính của mình qua thiết bị đầu cuối")
John Hamilton

34
OP yêu cầu một sự cố từ thiết bị đầu cuối, không phải là một lau.
bến tàu

16
Bom ngã ba thực sự sẽ gây sát thương tối thiểu trên Mac OS X vì nó có giới hạn trên cho số lượng quy trình.
GDP2

7
@bunyaCoppy thay thế ;bằng một &và bạn có thể xóa tất cả các tệp và fork fork cùng một lúc, và xem cái nào phá vỡ hệ thống trước!
Muzer

41

Không chắc chắn ý của bạn về việc 'làm hỏng máy tính - nếu bạn muốn diễn đạt lại cụm từ đó để nói' khiến máy tính không sử dụng được ', thì có. Chắc chắn tất cả chỉ là một lệnh đi lạc - chỉ là một khoảnh khắc mà bạn không suy nghĩ rõ ràng về những gì bạn đang làm, tương tự như khi bạn nói mà không suy nghĩ, và thiệt hại có thể rất lớn và gần như ngay lập tức. Ví dụ kinh điển:

$ sudo rm -rf /

Nếu bạn để lệnh đó chạy chỉ trong một giây, điều đó có thể xóa sạch đủ hệ thống của bạn để khiến nó không thể khởi động được và có thể gây mất dữ liệu không thể đảo ngược. Đừng làm điều đó.


2
Và chỉ để chia sẻ lý do tại sao tôi muốn làm rõ lại cụm từ .. để 'đánh sập' máy tính theo nghĩa truyền thống - để làm cho nó bị khóa - bạn cần phải cung cấp cho CPU đủ công việc để làm điều đó mà nó không thể đáp ứng một cách kịp thời cho các công việc khác .. chẳng hạn như cập nhật đồ họa và di chuyển con trỏ chẳng hạn. Tôi chắc chắn có một cách để làm điều đó từ dòng lệnh.
Harvest

6
@DonielF -rcó nghĩa là xóa đệ quy các tệp trong một thư mục. -fcó nghĩa là "bắt buộc" như không yêu cầu xác nhận, bất kể quyền của một tệp đã cho. /là thư mục gốc của hệ thống tập tin, có nghĩa là nó sẽ phá hủy mọi thứ và mọi thứ, ngoại trừ có thể một số tệp đặc biệt không hoạt động như các tệp thông thường. Ngoài ra, bạn sẽ có một thời gian khá khó khăn để tìm một lệnh ngắn gọn sẽ làm sập hệ thống của bạn mà không có quyền root / admin.
GDP2

11
Tôi đã thử rm -rf /một lúc trước và rmnói rằng nếu bạn muốn xóa root, thì hãy sử dụng cờ tương tự. Không có dữ liệu bị mất. Có vẻ như có một bảo vệ an ninh bây giờ khỏi chạy mù quáng rm -rf /.
alexyorke

27
--no-reserved-root đã được yêu cầu từ năm 2006 để hoạt động như dự định
Encaitar

6
Đây là một trường hợp thực tế trong đó điều này thực sự đã xảy ra - một trường hợp rm -rf thực sự tương tự như một trường hợp pháp, đã thực sự sai: /
mgarciaisaia

30

Giả sử bạn không biết những gì bạn đang làm và cố gắng sao lưu một số ổ đĩa cứng

dd if=/dev/disk1 of=/dev/disk2 

Vâng, nếu bạn trộn chúng lên (chuyển đổi nếu và của), nó sẽ ghi đè lên dữ liệu mới với dữ liệu cũ, không có câu hỏi nào.

Mix up tương tự có thể xảy ra với các kho lưu trữ. Và thẳng thắn với hầu hết các tiện ích dòng lệnh.

Nếu bạn muốn một ví dụ về một ký tự trộn lẫn sẽ làm sập hệ thống của bạn, hãy xem kịch bản này: Bạn muốn di chuyển tất cả các tệp trong thư mục hiện tại sang một ký tự khác:

 mv -f ./* /path/to/other/dir

Hãy chấp nhận thực tế là bạn đã học cách sử dụng ./để biểu thị thư mục hiện tại. (Tôi làm) Vâng, nếu bạn bỏ qua dấu chấm, nó sẽ bắt đầu di chuyển tất cả các tệp của bạn. Bao gồm các tập tin hệ thống của bạn. Bạn thật may mắn vì bạn đã không làm điều này. Nhưng nếu bạn đọc ở đâu đó rằng với 'sudo -i', bạn sẽ không bao giờ phải gõ sudo nữa, bạn đã đăng nhập bằng root ngay bây giờ. Và bây giờ hệ thống của bạn đang ăn chính nó ngay trước mắt bạn.

Nhưng một lần nữa tôi nghĩ những thứ như ghi đè lên các tệp mã quý giá của mình bằng rác, bởi vì tôi đã nhầm lẫn một ký tự hoặc do tôi trộn lẫn thứ tự các tham số, sẽ gặp nhiều rắc rối hơn.

Giả sử tôi muốn kiểm tra mã trình biên dịch mã mà gcc đang tạo:

gcc -S program.c > program.s

Giả sử tôi đã có một chương trình và tôi sử dụng hoàn thành TAB. Tôi đang vội và quên TAB hai lần:

gcc -S program.c > program.c

Bây giờ tôi có mã trình biên dịch chương trình trong chương trình của mình và không còn mã c nữa. Đó ít nhất là một trở ngại thực sự đối với một số người, nhưng đối với những người khác, đó là bắt đầu lại từ đầu.

Tôi nghĩ rằng đây là những người sẽ gây ra "tác hại" thực sự. Tôi không thực sự quan tâm nếu hệ thống của tôi gặp sự cố. Tôi sẽ quan tâm về dữ liệu của tôi bị mất.

Thật không may, đây là những sai lầm sẽ phải được thực hiện cho đến khi bạn học cách sử dụng thiết bị đầu cuối với các biện pháp phòng ngừa thích hợp.


16
Điểm cuối cùng của bạn là một trong nhiều lý do tại sao mọi người nên sử dụng kiểm soát phiên bản
Darren H

4
Tôi đã từng phá hủy một chương trình mà tôi đang thực hiện bằng cách sử dụng gcc program.c -o program.cchính xác nhờ hoàn thành tab. Tôi đã học cách sử dụng kiểm soát phiên bản một cách tôn giáo sau đó.
nneonneo

2
Câu trả lời tốt nhất cho đến nay, đăng các lệnh trông hợp pháp có thể là kết quả của một lỗi đánh máy đơn giản nhưng vẫn có thể dẫn đến một thiệt hại lớn.
gaazkam

1
"Bây giờ tôi có mã trình biên dịch chương trình trong chương trình của mình." Không. Bạn chẳng có gì. Việc chuyển hướng đã cắt bớt tệp trước khi GCC thậm chí mở nó.
muru

1
Ôi trời, tôi thực sự rất vui vì họ đã thêm cải tiến giao diện người dùng trong GCC. Đã được một thời gian kể từ sai lầm cuối cùng của tôi, nhưng thật tuyệt khi thấy rằng tôi sẽ có một chút bảo vệ từ lần tiếp theo.
nneonneo

28

Gây ra sự hoảng loạn hạt nhân gần giống với sự cố hơn so với các câu trả lời khác mà tôi đã thấy ở đây cho đến nay:

sudo dtrace -w -n "BEGIN{ panic();}"

(mã được lấy từ đâycũng được tìm thấy trong tài liệu riêng của Apple )

Bạn cũng có thể thử:

sudo killall kernel_task

Tôi chưa xác minh rằng cái thứ hai ở đó thực sự hoạt động (và tôi không có ý định vì tôi thực sự có một số công việc mở ngay bây giờ).


2
Chỉ cần thử cái thứ hai trong máy ảo 10.12.3 và nó chỉ nói:No matching processes were found
Alexander O'Mara

3
Ngoài ra, cái đầu tiên dường như không hoạt động, ít nhất là nếu SIP được bật,dtrace: system integrity protection is on, some features will not be available dtrace: description 'BEGIN' matched 1 probe dtrace: could not enable tracing: Permission denied
Alexander O'Mara

@ AlexanderO'Mara Không ngạc nhiên lắm với kết quả của bạn trong lệnh thứ hai; Tôi hình dung rằng Mac OS X sẽ không cho phép bạn gỡ bỏ tiến trình kernel theo cách như vậy. Các kết quả cho lệnh đầu tiên cũng được dự kiến, như dtraceđã được SIP thực hiện một cách hiệu quả.
GDP2

1
kernel_taskkhông phải là một quá trình bình thường. Nó bất tử; Nó không thể bị giết trừ khi có lỗi của chính nó (và đó sẽ được gọi là KP và đưa toàn bộ máy xuống). kernel_taskPID của danh nghĩa là 0, nhưng nếu bạn cung cấp số đó cho tòa nhà kill(pid, sig), trang người đàn ông nói Nếu pidbằng 0, thì sigsẽ được gửi đến mọi quy trình trong nhóm quy trình của quy trình gọi. . Vì vậy, bạn chỉ đơn giản là không thể gửi kernel_tasktín hiệu.
Idillotexist Idillotexist

@IwillnotexistIdonotexist Vâng, tôi đoán là sẽ có nhiều như vậy; Cảm ơn thông tin mặc dù. Những thứ tốt để có trong tâm trí.
GDP2

19

Hiện đại MacOS làm cho nó thực sự khó có thể đụng xe máy của bạn như là một người dùng không có đặc quyền (tức là không sử dụng sudo), bởi vì hệ thống UNIX có nghĩa là để xử lý hàng ngàn người sử dụng mà không để cho bất kỳ trong số họ phá vỡ toàn bộ hệ thống. Vì vậy, rất may, bạn thường sẽ phải được nhắc nhở trước khi bạn làm điều gì đó phá hủy máy của bạn.

Thật không may, sự bảo vệ đó chỉ áp dụng cho chính hệ thống. Như xkcd minh họa, có rất nhiều thứ bạn quan tâm không được bảo vệ bởi Bảo vệ toàn vẹn hệ thống, đặc quyền gốc hoặc lời nhắc mật khẩu:

XKCD 1200

Vì vậy, có hàng tấn nội dung bạn có thể nhập vào sẽ phá hỏng tài khoản người dùng và tất cả các tệp của bạn nếu bạn không cẩn thận. Một vài ví dụ:

  • rm -rf ${TEMPDIR}/*. Điều này có vẻ hoàn toàn hợp lý, cho đến khi bạn nhận ra rằng biến môi trường được đánh vần TMPDIR. TEMPDIRthường không được xác định, mà làm cho điều này rm -rf /. Ngay cả khi không có sudo, điều này sẽ vui vẻ xóa bất cứ thứ gì bạn có quyền xóa, thường sẽ bao gồm toàn bộ thư mục nhà của bạn. Nếu bạn để nó chạy đủ lâu, nó cũng sẽ không có bất kỳ ổ đĩa nào được kết nối với máy của bạn, vì bạn thường có quyền ghi vào những cái đó.
  • find ~ -name "TEMP*" -o -print | xargs rm. findthông thường sẽ xác định vị trí các tệp phù hợp với tiêu chí nhất định và in chúng ra. Nếu không có -ođiều này sẽ làm những gì bạn mong đợi và xóa mọi tệp bắt đầu TEMP*( miễn là bạn không có khoảng trắng trong đường dẫn ). Nhưng, -ophương tiện "hoặc" (không phải "đầu ra" như đối với nhiều lệnh khác!), Khiến lệnh này thực sự xóa tất cả các tệp của bạn. Bummer.
  • ln -sf link_name /some/important/file. Thỉnh thoảng tôi nhận được cú pháp cho lệnh này và nó sẽ vui vẻ ghi đè lên tệp quan trọng của bạn bằng một liên kết tượng trưng vô dụng.
  • kill -9 -1 sẽ giết mọi chương trình của bạn, đăng xuất bạn khá nhanh và có thể gây mất dữ liệu.

3
FYI (đối với những người khác đọc điều này) findcó một -deletelập luận an toàn hơn nhiều so với đường ống đếnxargs rm
Josh

MacOS hiện đại có thực sự chống va chạm hơn không? Hầu hết các hệ thống này là dành cho một người dùng. Họ có thực sự có maxprocs / cpulimits lành mạnh không? Bạn có thể cung cấp một tài liệu tham khảo?
user2497

1
Bạn, trong tất cả mọi người, sẽ biết rõ thiệt hại ln -sfcó thể gây ra ... và cách phục hồi từ nó :-)
Idillotexist Idonotexist

1
@Josh: cảm ơn vì đã chỉ ra điều đó Và, trong trường hợp chung, người ta nên sử dụng find -print0 | xargs -0để xử lý một cách an toàn các ký tự lạ trong tên tệp.
nneonneo

1
Đã đồng ý. Lời khuyên hữu ích hơn về xargs: sử dụng <whatever> | xargs echo <something>trước, để xem trước những lệnh xargs nào sẽ thực sự chạy. xargs là một ví dụ tuyệt vời về lý do tại sao CLI mạnh mẽ như vậy: bạn có thể hoạt động trên nhiều, nhiều mặt hàng cùng một lúc mà không cần xác nhận và cầm tay ... chỉ cần đảm bảo rằng bạn đang bảo nó làm những gì bạn muốn.
Josh

16

Một điều khác bạn có thể làm (mà tôi đã làm do nhầm lẫn trước đây) là:

sudo chmod 0 /

Điều này sẽ khiến toàn bộ hệ thống tệp của bạn (có nghĩa là tất cả các lệnh và chương trình) không thể truy cập được ... ngoại trừ bởi người dùng root. Điều này có nghĩa là bạn sẽ cần phải đăng nhập trực tiếp với tư cách là người dùng root và khôi phục hệ thống tệp, NHƯNG bạn không thể truy cập sudolệnh (hoặc bất kỳ lệnh nào khác, cho vấn đề đó). Bạn có thể khôi phục quyền truy cập vào các lệnh và tệp bằng cách khởi động vào chế độ người dùng đơn, gắn và khôi phục hệ thống tệp với chmod 755 /.

Nếu điều này được thực hiện đệ quy với chmod -R 0 /thì điều này sẽ khiến hệ thống không thể sử dụng được. Cách khắc phục thích hợp tại thời điểm đó là sử dụng Disk Utility từ phân vùng phục hồi để sửa chữa quyền truy cập đĩa . Bạn có thể tốt hơn chỉ là khôi phục ảnh chụp nhanh hoặc sao lưu hệ thống tệp của mình nếu điều này được chạy đệ quy.


8
"Bạn có thể sửa nó bằng ... chmod 755 /" - Không bạn không thể. Nhiều tệp yêu cầu các quyền khác nhau từ 755, để bảo mật hoặc hoạt động. chmod 755 /sẽ khiến hệ thống của bạn không an toàn và bị hỏng theo những cách tinh tế. Khôi phục hoàn toàn duy nhất chmod 0 /là thông qua khôi phục ảnh chụp nhanh, khôi phục sao lưu và / hoặc cài đặt lại.
marcelm

2
@marcelm Điểm tốt. Đề nghị của tôi là chỉ khôi phục quyền truy cập vào các lệnh, không phải là một sửa chữa vĩnh viễn. Tôi đã cập nhật câu trả lời của mình để phản ánh điều đó. Theo như tôi biết, chmod không được đệ quy trừ khi bạn sử dụng -Rcờ - vì vậy tôi nghĩ rằng quyền của thư mục con sẽ không bị ảnh hưởng?
sĩ523

5
@marcelm bạn đúng, nhưng lệnh hiển thị không được đệ quy nên chỉ /bị ảnh hưởng.
Andrea Lazzarotto

Tôi đã từng sudo chmod -R 700 /một máy tính mới, hình dung nó sẽ an toàn hơn rất nhiều nếu tôi làm điều đó. Đáng ngạc nhiên, nó khởi động, và kết thúc với một thanh thực đơn trống và máy tính để bàn trống. Không có gì khác hoạt động, nhưng Quyền Khôi phục Tiện ích Đĩa của phân vùng phục hồi thực sự được quản lý để thiết lập hầu hết mọi thứ đúng!
nneonneo

2
Tiện ích @marcelm Disk có tùy chọn "Sửa quyền" sẽ sửa lỗi này mà không cần khôi phục toàn bộ hệ thống
Josh

10

Câu trả lời rằng cuộc gọi sudonên được coi là không hợp lệ. Đây đã giả định truy cập quản trị vào hệ thống.

Hãy thử perl -e 'exit if fork;for(;;){fork;}'. OSX có thể có một số biện pháp bảo vệ chống lại điều này ngay bây giờ. Nếu được trình bày một bong bóng táo hỏi bạn có muốn chấm dứt ứng dụng và quy trình con Terminal hay không, bạn (gần như) tốt.

while true ; do cat /dev/zero > /dev/null & donecũng rất tiện dụng, đặc biệt. nếu bạn không có perl.

for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & donesẽ chỉ làm một bài kiểm tra tải CPU nhỏ vui. Rất tốt để kiểm tra xem tản nhiệt và quạt của bạn có ngang tầm hay không.


Đây được gọi là Fork Bomb và có khả năng sẽ khiến hệ thống không sử dụng được (có thể được coi là "sự cố") nhưng sẽ không gây ra thiệt hại vĩnh viễn. Nhưng thật khó chịu!
Josh

@Josh "nhưng sẽ không gây ra thiệt hại vĩnh viễn" Ngoại trừ mọi công việc chưa được mở hiện đang mở.
thiệu lại vào

@reirab Josh đã thêm câu "có khả năng" vào câu nói của mình. Nhưng MacOS chủ yếu là để chỉnh sửa ảnh và video. Các chương trình Adobe có tự động lưu tự động không?
user2497

1
Ngoài ra, công việc chưa được lưu luôn có nguy cơ cho đến khi nó được lưu. Nếu máy tính của bạn được hiển thị không sử dụng được, thì bạn không thể lưu bất cứ thứ gì bạn đã mở :)
Josh

@Josh MacOS rất dễ dàng để lưu nội dung. Nó luôn luôn là 🍎-S. Bạn không nên viết 'có khả năng' user
user2497

7

Chắc chắn, đảm bảo bạn có một bản sao lưu và lưu bất kỳ tệp nào bạn quan tâm, sau đó nhập halt

Giả sử sau đó bạn sử dụng sudođể root, Mac sẽ gặp sự cố.

Rủi ro lớn nhất từ ​​dòng lệnh là mất dữ liệu. Giao diện macOS được thiết kế qua nhiều thập kỷ để không làm mọi người ngạc nhiên và cắt nhỏ dữ liệu hoặc cài đặt hoặc ứng dụng của họ. Giao diện đồ họa macOS cũng tồn tại để loại bỏ đường cong học tập (dốc đứng) để an toàn và làm chủ kịch bản shell.

Bạn mất các biện pháp bảo vệ đó là lý do tại sao tôi cảnh báo mọi người bắt đầu với ứng dụng đầu cuối hoặc ssh. Nếu bạn có một bản sao lưu mà bạn biết là có tác dụng và có thời gian cũng như sự tự tin / kỹ năng để thực hiện khôi phục, thì bạn nên lao vào và học hỏi và thậm chí phá vỡ mọi thứ.


3
Bạn nói, "... và thậm chí phá vỡ mọi thứ.", Đây là một trường hợp sử dụng tốt để một người làm những việc rủi ro trong một máy ảo. :)
dùng3439894

1
Làm thế nào điều này sẽ sụp đổ? Nó chỉ cần tắt hệ thống ngay lập tức. Nó thậm chí xóa bộ đệm kernel để không mất dữ liệu (đã lưu). developer.apple.com/legacy/l
Josh

7
sudo kill -9 -1  

Tôi vô tình thực hiện một kill -9 -1tập lệnh perl, chạy bằng root. Đó là nhanh như kéo dây điện. Khi khởi động lại, máy chủ đã thực hiện kiểm tra hệ thống tệp và tiếp tục chạy đúng.

Tôi chưa bao giờ thử sudo kill -9 -1lệnh đó trên dòng lệnh. Nó có thể không hoạt động, vì ID tiến trình "-1" có nghĩa là "tiêu diệt tất cả các quy trình thuộc nhóm quy trình của người gọi".

Không chắc chắn, nếu với sudo, điều đó cũng có nghĩa là init và tất cả các công cụ kernel ... Nhưng nếu bạn đã root, kill -9 -1chắc chắn sẽ dừng ngay lập tức - giống như kéo dây nguồn. Nhân tiện - không có gì sẽ xuất hiện trong logfiles, bởi vì lệnh đó là kẻ giết người nhanh nhất ở phía tây!

Trên thực tế, để phục hồi, tôi đã đến sysadins của chúng tôi và nói với họ, những gì tôi đã làm. Họ đã thực hiện khởi động lại một cách khó khăn, vì không có cách nào để đăng nhập vào máy chủ đó (RHEL6).

Một kill -9 -1root sẽ giết chết mọi tiến trình, chạy như root. Đó là sshd. Điều đó đã đăng xuất tôi ngay lập tức và ngăn không cho bất cứ ai đăng nhập lại. Bất kỳ quá trình nào được bắt đầu bởi init - bao gồm init đã bị giết, trừ khi chúng thay đổi UID hoặc GID. Ngay cả việc đăng nhập thông qua bảng điều khiển nối tiếp cũng không thể thực hiện được nữa. ps -eaf | grep roothiển thị một số quy trình ưa thích, nếu chúng phản ứng trên SIGKILL theo cách mặc định, gần như sẽ dừng ngay cả việc ghi cơ bản lên HD.

Bây giờ tôi sẽ không thử điều này trên máy tính xách tay của mình :-) Tôi không đủ tò mò để tìm hiểu, nếu một kill -9 165([ext4-rsv-conver]) sẽ thực sự dừng ghi lên HD.


Bạn không thể "giết" kernel và điều này không nên tự kiểm tra hệ thống tập tin. Làm thế nào bạn phục hồi từ tình hình? Bạn đã làm một khởi động lại cứng? Bởi vì đó có thể là nguyên nhân gây ra việc kiểm tra hệ thống tập tin :)
Josh

Câu trả lời chỉnh sửa của bạn có ý nghĩa. Bạn thực sự không thể giết initbình thường, nhưng bạn có thể giết tất cả các phiên gettys và SSH và khiến máy không thể sử dụng được. Một Magic SysRq đáng lẽ đã cho phép khởi động lại sạch, nhưng thường dễ dàng hơn chỉ là chu kỳ năng lượng và dựa vào tạp chí FS :)
Josh

5

Có, bạn hoàn toàn có thể phá hủy hệ thống của bạn. Vô tình làm một cái gì đó với các sudođặc quyền là một ví dụ đã được đăng, cho dù đó là quên một vài ký tự hướng dẫn thiết bị đầu cuối làm điều gì đó hoàn toàn khác với dự định của bạn. rming /thay vì /tmp/\*chỉ là một sự khác biệt 5 ký tự. Đặt một không gian ở sai vị trí cũng có thể làm một cái gì đó hoàn toàn khác. Những lần khác, các hướng dẫn có vẻ có nghĩa cũng có thể có mã độc được giấu trong đó. Một số người trên internet rất giỏi trong việc làm xáo trộn mã.

Ngoài ra còn có các lệnh, sử dụng html, có thể được tạo thành cỡ chữ 0, do đó, một cái gì đó hoàn toàn vô hại, khi được sao chép vào bảng tạm, trên thực tế có thể cài đặt git repo của ai đó làm nguồn đáng tin cậy và tải xuống phần mềm độc hại.

Và có những lệnh mà bạn có thể chạy để mở bạn khai thác hoặc có thể hoàn toàn có chủ đích nhưng loại bỏ các tệp hoặc chương trình quan trọng hoặc làm hỏng đĩa của bạn. Trong thực tế, sử dụng các công cụ không chính xác có thể làm một cái gì đó cơ bản như vô tình ghi lên khu vực khởi động của bạn, hoặc đầu đĩa của bạn, hoặc nhiều vấn đề khác.

Một ví dụ về một cái gì đó ít phá hủy chưa được đăng là mở các tệp nhị phân vi. Nếu bạn đã từng thử nó, bạn sẽ biết rằng nó có thể làm rối thiết bị đầu cuối của bạn đến mức không thể sử dụng được cho đến khi nó được reset.

Ngoài ra, có các lệnh sẽ làm hỏng máy của bạn, như:

yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & 

Bạn có thể thử cái đó, nó sẽ không gây sát thương, nhưng nó sẽ làm hỏng bộ xử lý của bạn và bạn sẽ phải giết từng quá trình bạn sinh ra.

Điều đó đang được nói, trong điện toán, người ta thường nói rằng bạn không thể làm món trứng tráng mà không làm vỡ một vài quả trứng. Bạn nên thận trọng ở thiết bị đầu cuối, nhưng cách duy nhất để người ta có thể trở nên tốt hơn khi sử dụng HĐH là học và thực hành.


Ví dụ đầu tiên của bạn hầu như không có hại. Vim thực sự khá lành mạnh khi chỉnh sửa các tệp nhị phân. Và trong trường hợp xấu nhất bạn có thể đóng cửa sổ xuống. Ví dụ thứ hai với "có" gây phiền nhiễu và sẽ sử dụng một lượng CPU người dùng hợp lý, nhưng hệ thống sẽ vẫn phản hồi và bạn có thể dễ dàng giết chết cửa sổ đầu cuối cha mẹ.
nneonneo

1
Tôi không đồng ý với việc "làm rối thiết bị đầu cuối của bạn đến mức không thể sử dụng được cho đến khi bạn khởi động lại" - hãy thử reset, điều đó sẽ xóa một thiết bị đầu cuối có đầu ra nhị phân được in ra. hoặc, chỉ cần sinh ra một TTY mới
Josh

1
Thật tuyệt, nw @JFA. Tôi thực sự phải mất nhiều năm để học được resetmẹo này! Để biết thêm thông tin: unix.stackexchange.com/questions/79684
Josh

1
@Josh cảm ơn bạn vì điều đó, nó là một trợ giúp lớn. Nó thực sự đã được nhiều năm đối với tôi: P
JFA

1
@Josh Sau đó, 'stty sane ^ M' và 'tput reset' cũng sẽ gây hứng thú cho bạn.
user2497

4

Tôi chỉ là người mới bắt đầu bash, nhưng bạn có thể thiết lập True; làm LỆNH; làm xong; Hầu hết mọi người sẽ thử Ctrl + C sẽ dừng lệnh, không phải quá trình bên ngoài (ctrl + Z, sau đó cần phải bị giết). Tôi đoán rằng nếu lệnh là một số hoạt động nặng nề như nhân số lượng lớn với sức mạnh của chính họ, điều đó có thể gây rối với các nguồn tài nguyên của bạn. Nhưng thực sự, hệ điều hành hiện đại thường được bảo vệ chống lại sự lộn xộn như vậy.


2
Nó chỉ chạy rất nhanh, nó sẽ không gặp sự cố gì. Bạn chỉ cần thực hiện một số tính toán chuyên sâu để maxprocs kernel không làm bạn buồn. thửwhile true do cat /dev/zero > /dev/null & done
user2497

cảm ơn. Tôi đã mong đợi xử lý số lượng lớn để làm cho máy tính chạy chậm, đôi khi nó xảy ra với các chương trình java / python rất đơn giản mà tôi đã sử dụng cho máy học.
Ando Jurai

1
Con mèo từ 0 đến null là một hoạt động số lượng lớn, ít nhất là trong I / O. Tôi sử dụng một trong số này cho mỗi lõi của CPU để thực hiện các bài kiểm tra nhiệt.
user2497

1
^C cũng sẽ giết vòng lặp while, nhưng nó chỉ lặp lại quá nhanh để ngắt bị bắt. Giữ ^Ccó thể thoát ra khỏi vòng lặp. Đóng thiết bị đầu cuối cũng sẽ :)
Josh

2
@Josh Sẽ dễ dàng bắt INT hơn nếu có một khoảng dừng nhỏ, như ngủ 0,1, sau nhiệm vụ chuyên sâu về cpu.
user2497

3

Chắc chắn bạn vẫn có thể gây ra sự cố hệ thống bằng cách sử dụng các lệnh được nhập bằng Terminal.

Với nhiều năm, điều đó trở nên khó khăn hơn có thể do tất cả các loại giới hạn và biện pháp bảo vệ được áp dụng nhưng như luật pháp của Murphy quy định: "Không có gì là khó tin đối với một kẻ ngốc đủ khả năng."

"Bom nĩa" và tất cả những thứ rm -rfkịch bản kiddies là những thứ được biết đến từ xa xưa đối với UNIX. Với Mac OS X, bạn có thể có nhiều niềm vui hơn khi sử dụng các bộ phận hệ thống phụ GUI ( WindowServerđề cập đến) hoặc một cái gì đó như tường lửa OpenBSD hay còn gọi PFlà các kỹ sư của Apple đã đưa vào nhưng không bao giờ quản lý để cập nhật kể từ trạng thái năm 2008. PFhoạt động trong kernel, vì vậy khi nó bắt đầu giải quyết, đó là lúc Apple nói với bạn rằng " bạn đã khởi động lại máy tính do hoảng loạn" hoặc những thứ như thế này.

Phần tồi tệ nhất của điều này là bạn không bao giờ có thể có ý tưởng về lý do tại sao nó hoảng loạn - vì Apple không cung cấp bất kỳ dấu vết ngăn xếp có ý nghĩa nào; bạn chỉ có thể có số hex của địa chỉ trả về của stack stack.


Câu trả lời tốt, và điểm tuyệt vời. Tôi muốn thêm vào danh sách các cách tốt để khiến OS X phát hoảng trên sàn nhảy mà tôi yêu thích, nhưng không có thuật ngữ rõ ràng để tránh sự ngu ngốc của kịch bản. Tôi dỡ một phần mở rộng kernel có liên quan đến NFC. Hoạt động mọi lúc, ngay lập tức. Người ta có thể dễ dàng vũ khí hóa điều này vào một DOS bằng cách lập lịch trình này với số lượng chia hết là 5 phút. Do đó nó sẽ khởi động sau đó thiên nga lặn. Điều này đòi hỏi phải cài đặt lại hệ điều hành với hầu hết các quản trị viên và thậm chí các kỹ thuật viên sẽ bỏ lỡ điều này ....
Francis từ

3

Đó là một chút mơ hồ những gì bạn có nghĩa là "sụp đổ" máy tính của bạn ... và không có câu trả lời chính xác cho điều đó, mặc dù có một số ví dụ hữu ích trong các câu trả lời khác. Vì câu hỏi của bạn mơ hồ và chung chung hơn, tôi muốn tập trung vào bản chất của câu hỏi và đưa ra câu trả lời tổng quát hơn.

Những người không hiểu Terminal thường ngại sử dụng nó vì sợ rằng họ có thể làm hỏng lệnh của họ và làm hỏng máy tính của họ

Tôi nghĩ rằng dòng lệnh là một con dao hai lưỡi, và thường là một con dao rất sắc. Điểm mạnh lớn nhất của nó cũng là điểm yếu lớn nhất của nó đối với người dùng mới: các chương trình CLI làm những gì bạn nói, mà không hỏi liệu đó có thực sự là ý bạn không. Họ thường không yêu cầu xác nhận, họ không cung cấp trợ giúp tương tác hoặc cầm tay và các tùy chọn của họ là các chuỗi dựa trên văn bản ngắn, thường ngắn gọn, đôi khi khó hiểu. Lưu ý rằng họ đang nói chung rất tốt tài liệu, người ta chỉ có đọc hướng dẫn (đó là hầu như luôn luôn man <command you are about to run>) và dành thời gian để hiểu những gì các dòng lệnh họ sẽ chạy sẽ làm.

Chế độ hoạt động này rất mạnh mẽ - điều đó có nghĩa là người dùng CLI dày dạn có thể tạo ra các "đường ống" dài, thực hiện các tác vụ phức tạp với các lệnh đơn. Điều này là do nhiệm vụ sẽ không hỏi "Bạn có chắc chắn?" mỗi bước của con đường, nó làm những gì nó nói. Nhưng đối với người dùng không quen với chế độ này và đã quen với GUI trong đó trợ giúp trực tuyến chỉ là một cú nhấn chuột , điều đó không quen thuộc và đáng sợ.

Nhưng có thực sự các lệnh sẽ làm hỏng máy tính của bạn?

Bạn có thể "đánh sập" máy tính của mình bằng CLI không? Có lẽ. Bạn chắc chắn có thể gây mất dữ liệu nếu bạn sử dụng lệnh phá hủy không chính xác. Nhiều câu trả lời ở đây đề cập đến rm, một lệnh xóa các tập tin. Rõ ràng, bạn có thể gây mất dữ liệu với lệnh đó , đó là những gì lệnh được thiết kế để làm.

Như các câu trả lời khác đã chỉ ra, bạn có thể sử dụng dòng lệnh để khiến máy của bạn hầu như không sử dụng được trong một khoảng thời gian: bạn có thể tắt mà không cần xác nhận, gây ra quá trình sử dụng 100% tài nguyên có sẵn mà không cần xác nhận, giết tất cả các chương trình của bạn hoặc phá hủy hệ thống tập tin của bạn. Nếu bạn thực sự muốn, bạn có thể sử dụng CLI để tạo một phần mở rộng kernel khiến kernel bị hoảng loạn (gần nhất với "sự cố" mà tôi có thể nghĩ ra).

Dòng lệnh (được truy cập thông qua Terminal) là một công cụ mạnh mẽ. Thường thì việc giải quyết vấn đề bằng Terminal nhanh hơn GUI. Một số giải pháp chỉ khả dụng khi sử dụng lệnh Terminal. Tuy nhiên, chìa khóa của CLI là sự hiểu biết . Đừng thực hiện các lệnh ngẫu nhiên mà bạn thấy trực tuyến. Đọc các trang man và hiểu những gì lệnh làm. Nếu bạn không chắc chắn, hãy hỏi ai đó hoặc tìm hiểu thêm về một lệnh trước khi chạy 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.