Tôi đã mắc một lỗi tối qua, đã vô tình xóa 1800GB Máy chủ tệp của tôi


27

Tôi đã chạy lệnh này ngày hôm qua, tôi nghĩ trên một máy thử nghiệm, nhưng đó là một Máy chủ tệp được kết nối thông qua SSH.

sudo rm -rf /tmp/* !(lost+found)

Trình giả lập thiết bị đầu cuối của tôi là Konsole. Hệ thống của tôi là Debian 7.

Câu hỏi:

Lệnh này có xóa các tệp khác ngoài các tệp trong / tmp không?


Có thể đó là / hệ thống tập tin nhà không được gắn kết?
Emmanuel

@Emmanuel Tôi đã xác nhận rằng các tập tin bị mất.
một cái gì đó

1
Lịch sử của bạn không hiển thị bất kỳ lỗi xóa. Bạn đã giết nhiều quy trình hệ điều hành trong khi thực hiện "kill $ (lsof / usr ...)". Hệ thống tập tin chia sẻ deamon có thể đã bị ảnh hưởng. Bạn đã thử khởi động lại dịch vụ hay khởi động lại trình quay phim chưa?
Emmanuel

1
@s SomethingS Something Konsole không phải là trình bao, nó là trình giả lập thiết bị đầu cuối mặc định của KDE. Cố gắng nhập một số ký tự trong thiết bị đầu cuối, thích dsgsadfsfvà nhấn enter. Xem kết quả. Nếu có bash: dsgsadfsf: command not found, thì vỏ của bạn là bash.
Gabor Farkas

5
Tôi hy vọng bạn có bản sao lưu tốt. Nếu bạn đang cố gắng khôi phục, hãy ngừng sử dụng hệ thống đó cho đến khi bạn có thể tạo một bản sao cấp byte của ổ đĩa để thử nghiệm. Bất kỳ ghi vào hệ thống tập tin trong câu hỏi sẽ làm trầm trọng thêm thiệt hại.
một CVn

Câu trả lời:


43

Cú pháp đúng trong bash là như sau:

rm /tmp/!(lost+found)

Như @goldilocks đã viết trong các bình luận, lệnh ban đầu thực hiện mở rộng truy vấn (nó sẽ xóa tất cả các tệp trong /tmpthư mục, sau đó tiếp tục và xóa tất cả các tệp trong thư mục làm việc hiện tại, trong trường hợp của bạn là homethư mục).

Bạn có thể thử kiểm tra xem bạn có thể khôi phục một số dữ liệu của mình không. Có một câu hỏi về phục hồi dữ liệu Linux ở đây .


28
À, vậy thì đây thực chất là một trường hợp khác của "khoảng trống bị thiếu trong dòng lệnh của tôi đã phá hủy tất cả dữ liệu của tôi" - giống như trong rm -rf / tmp^^
Martin von Wittich

8
Tôi không thể nhấn mạnh đủ, rằng hoang tưởng sysadmin không phải là vô nghĩa. :) Luôn sao lưu dữ liệu có giá trị nhất của bạn ở một nơi, nơi bạn chỉ có thể viết dưới dạng root.
Gabor Farkas

9
Tôi muốn sao lưu vào một đĩa cứng hoặc máy chủ riêng biệt thậm chí không thể ghi được để root trong các trường hợp thông thường. OP đã sử dụng sudo, vì vậy một thư mục bình thường chỉ có thể ghi cho root sẽ không nhất thiết phải giúp đỡ.
Martin von Wittich

Điểm hay, tôi đã không chú ý đầy đủ đến OP. Một máy chủ có thể tốn kém, tuy nhiên một đĩa riêng là đủ công bằng. Tôi đã sử dụng một phân vùng riêng biệt mà không được đếm theo mặc định. Đơn giản và bẩn, nhưng hiệu quả.
Gabor Farkas

1
@simonzack nó có thể làm giảm khả năng xảy ra tai nạn bằng cách cài đặt nó, do đó, nó là đủ cho tôi :)
Gabor Farkas

26

Lệnh !(lost+found)của bạn rmcó lẽ là sai lầm chết người:

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)

Tôi không biết chính xác những gì bashđang làm với điều đó, nhưng lệnh này bên dưới in mọi thứ trong /tmp/thư mục hiện tại của tôi (hiện tại ~):

echo /tmp/* !(lost+found)

Đây !(folder)là một phần của lệnh tôi đã từng chạy, đã xóa tất cả ngoại trừ folder.
một cái gì đó

3
Nghe có vẻ như một cái gì đó có thể làm việc với zsh; Bash tôi không nghĩ vậy. Tôi nhận được !lost+found: event not foundnhư !được sử dụng để lấy các lệnh từ lịch sử.
wurtel

9
Rất tiếc! "Tôi không biết chính xác bash đang làm gì với điều đó" -> nó đang thực hiện một bản mở rộng. Đoán xem "mọi thứ trừ cái này" là gì? cd /; echo !(lost+found)> _ <
goldilocks

13
Xin lưu ý rằng !(foo)hoạt động trong bash là "tất cả ngoại trừ foo" chỉ khi extglobtùy chọn được đặt. Ngoài ra, OP không chỉ định anh ta đang sử dụng shell nào, vì vậy rất khó đoán chính xác rm !(lost+found)lệnh đã thực hiện trong trường hợp của anh ta.
jimmij

5
Nhận xét tuyệt vời, mặc dù OP tuyên bố anh ta đang sử dụng Debian 7, có bashvỏ mặc định. Anh ta rất có thể đã không thay đổi điều này. Hơn nữa, trong Debian 7, extglobtùy chọn được đặt thành truemặc định (tôi chỉ kiểm tra cái này).
Gabor Farkas
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.