/ bin / etc / lib64 / root / sbin đã bị xóa hoặc di chuyển bởi thư mục mv / * / * trong khi su


11

HĐH là Centos 6.5 64-bit

Tôi đã tải xuống một tập tin tar và muốn gỡ rối và mvnó.

Tôi không biết, sau đó vô tình (với quyền root) chạy mv folder/* /*thay vì mv folder/* .bash nói rằng nó không thể ghi đè lên một số tệp, sau đó xin phép người khác. Tôi ctrl-c'd ra.

Tôi đã bỏ phiên thiết bị đầu cuối mở, nhưng đã thoát su.

Bây giờ tôi đã mất quyền truy cập vào hầu hết shellcác lệnh, không thể có lsbất kỳ thư mục nào và không thể quay lại su.

Máy chủ web và dịch vụ dường như vẫn đang chạy. Tôi có thể chạy rất ít lệnh, cdlà một trong số họ và khi tôi cố gắng cdđể /etchoặc /binnó lỗi với no directory found.

EDIT Chỉ cần nhận thấy tất cả các thư mục mất tích từ /( bin, etc, lib64, root, sbin) đã chuyển đến /varthư mục, tôi đã cố gắng /var/bin/suvà nhận được: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory


1
Bạn không thể chạy /var/bin/sutrực tiếp?
Darkhogg

Vui lòng không chỉnh sửa câu hỏi bằng các giải pháp. Trên mạng trao đổi ngăn xếp, bạn thay vì thêm câu trả lời, hãy để lại nhận xét tại câu trả lời hiện có để cải thiện câu trả lời.
Bernhard

@Darkhogg /var/bin/su: user root does not existTôi nghĩ rằng chúng tôi đã xác định rằng không thể thực hiện được vì / etc nằm ở / var / etc
webaholik

@Bernhard đã cố gắng sửa
webaholik

Câu trả lời:


22

Nếu hệ thống của bạn đã busyboxđược cài đặt, bạn có thể sử dụng điều này để đưa mọi thứ trở lại.

busyboxlà một nhị phân với rất nhiều tiện ích tiêu chuẩn được tích hợp trong nó. Những thứ như mv, sh, lsvv

Từ nhận xét của bạn về câu trả lời của Pavel, có vẻ như mọi thứ đã kết thúc /var. Bạn có thể thử làm /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Điều đó sẽ nhận được hầu hết các hoạt động hệ thống của bạn một lần nữa. Có một vài thư mục như /tmptồn tại /var/tmp, vì vậy bạn không thể di chuyển chúng. Hy vọng rằng đó là những người mvphàn nàn và họ bị bỏ lại một mình.

 

Lấy một cái vỏ gốc

Bạn cũng đã đề cập rằng bạn bị mất shell gốc và điều đó sugây ra ld-linuxlỗi thư viện. Bạn có thể sử dụng như sau:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Lưu ý: Khi thử điều này, nó không hoạt động. Điều này là do suđòi hỏi nhiều file trong /etc( passwd, pam.d, và những người khác). Nếu /etcvẫn còn nguyên vẹn, điều này sẽ có cơ hội thành công.

 

Không có busybox

Nếu bạn không có sẵn busybox, bạn có thể sử dụng thủ thuật ld-linux tương tự như đối với su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

Từ một đĩa CD trực tiếp

Như đã thảo luận trong các bình luận, nếu bạn mất vỏ gốc, bạn sẽ bị kẹt khá nhiều. Về cơ bản để khắc phục điều này, bạn cần quyền root. Cách duy nhất để đến đó là có một tiện ích như suhoặc sudotăng cường quyền của bạn (cả hai đều không hoạt động tại thời điểm này) hoặc chiếm quyền điều khiển một chương trình khác đã chạy bằng root (tùy thuộc vào những gì đang chạy, không có khả năng).

Điều này để lại tùy chọn duy nhất là một đĩa CD trực tiếp. Sau khi khởi động vào đĩa CD trực tiếp (hoặc USB trực tiếp hoặc bất cứ thứ gì), chỉ cần gắn ổ đĩa gốc và di chuyển các thư mục bị ảnh hưởng ra khỏi /varnhà ban đầu của chúng /.


Tóm tắt những gì đã xảy ra

folder/*sẽ mở rộng ra một cái gì đó như folder/foofolder/bar.
/*sẽ mở rộng ra một cái gì đó như /bin /lib32 /lib64 /etc /home /root /var. Lưu ý đó /varlà mục cuối cùng.
Vì vậy, khi cái vỏ mở rộng ra tất cả những khối u đó, nó sẽ chạy một thứ như thế này:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

/varmục cuối cùng trong danh sách, mọi thứ đã được chuyển vào đó.


Tại sao có /var/bin/sulỗi với/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Hầu như tất cả các nhị phân trong linux đều được liên kết động với ld-linux. ld-linuxlà thư viện chịu trách nhiệm tải các thư viện khác cần thiết bởi nhị phân. Trên hệ thống của bạn, cuộc sống này tại /lib64/ld-linux-x86-64.so.2. Vì thư mục này đã được di chuyển, mọi thực thi được liên kết động sẽ không còn hoạt động.

Lý do busybox hoạt động là busybox được liên kết tĩnh. Nó không sử dụng ld-linux.


Ý tưởng tốt. CentOS thường có một hộp bận được cài đặt vì initramfs , do đó có thể hoạt động tốt.
Pavel imerda

busyboxNghe có vẻ như là giải pháp hoàn hảo, không may không được cài đặt, sau khi sửa lỗi này ... trong khi đó, liệu có cách nào để sửa đường dẫn cho các lệnh thực thi /var/lib64/ld-linux-x86-64.so.2thay vì /lib64/ld-linux-x86-64.so.2không? Đây dường như là thứ đang giết chết các lệnh trong/var/bin
webaholik

@Patrick: Bạn có thể vui lòng thêm thông tin mà lệnh OP dự định sử dụng là sai không? Sau đó tôi có thể xóa câu trả lời của mình vì bây giờ (gần như) dư thừa. Đây có phải là cách đúng đắn để sử dụng trao đổi ngăn xếp?
Pavel imerda

1
Nó đang tìm kiếm một vài điều trong /etcđó không có ( /etc/passwd, /etc/nsswitch, /etc/pam.d, và có lẽ nhiều hơn). Để sulàm việc, /etcphải trở lại vị trí ban đầu của nó. Trừ khi bạn có một vỏ gốc nằm xung quanh, tôi nghĩ bạn bị mắc kẹt :-(
Patrick

2
@ user1296209 Khi bạn nhận được một livecd, chỉ cần gắn khối lượng gốc và di chuyển các thư mục đó trở lại. Đó nên là tất cả những gì bạn cần để chạy lại.
Patrick

10

mv folder/* ./*cũng sai Bạn nên cẩn thận hơn về ngữ nghĩa của các lệnh bạn chạy. Các mvlệnh với hơn hai đối số chỉ mất tất cả lý lẽ ngoại trừ người cuối cùng và di chuyển các đường dẫn chúng trỏ tới vào thư mục chỉ định trong đối số cuối cùng.

Để di chuyển tất cả các thư mục (trừ những thư mục bị ẩn) từ thư mục sang thư mục hiện tại, bạn nên sử dụng:

mv folder/* .

Bạn đã phá vỡ hệ thống chạy của bạn. Lệnh shell và lệnh dựng sẵn của bạn tiếp tục hoạt động. Bạn sẽ phải khởi động một đĩa CD trực tiếp và di chuyển các thư mục trở lại. Tôi không biết về một bash dựng sẵn để di chuyển / đổi tên các tệp cho phép bạn khắc phục tình trạng mà không cần khởi động lại, xem câu trả lời của Patrick để biết thêm chi tiết.


Tôi đã không nhận ra rằng: Tôi có thể cd sang / var / bin & / var / etc, có vẻ như các thư mục đã được chuyển sang var, dù sao tôi có thể di chuyển chúng trở lại? ... mà không cần livecd?
webaholik

Tôi cố gắng / var / bin / su & nhận được: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: interpreter ELF Nhược điểm: Không có tập tin hoặc thư mục
webaholik

Aha ... Tôi sẽ sửa câu trả lời.
Pavel imerda

mvLệnh của tôi nên làm gì để di chuyển tất cả các tệp và thư mục từ thư mục này sang thư mục hiện tại?
webaholik

1
@ user1296209: Nếu bạn khởi động một hệ thống trực tiếp, bạn chắc chắn có quyền truy cập root trên hệ thống cuộc sống của bạn. Hệ thống thực tế của bạn chỉ là một phân vùng được gắn kết không có ý nghĩa đặc biệt cho hệ thống trực tiếp. Sự phức tạp duy nhất là thư mục của bạn /và các /varthư mục có thể nằm trên các phân vùng khác nhau, trong trường hợp đó bạn phải gắn kết cả hai.
celtschk

2

Tôi vô tình chuyển / usr sang / usr_old và mọi thứ đã đi vào địa ngục. May mắn thay, tôi đã ở lại trong dấu nhắc và có thể thực hiện lệnh sau để khôi phục thư mục usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr

Welcomme đến U & L, đó có phải là lệnh duy nhất bạn gõ không? Vui lòng cung cấp một thủ tục chi tiết hơn. (đặc biệt cho một câu hỏi cũ mười mont, không cần phải vội vàng)
Archemar 11/2/2015

1
Có sau khi tôi gõ lệnh đó, mọi thứ đã được khôi phục. Có lẽ tôi nên đề cập rằng tôi đã root trong tất cả điều này.
Mansehr

1

QUAN TRỌNG Nếu bạn ở đây và đã chạy mvkhông chính xác, không thể chạy shellcác lệnh và các thư mục bị thiếu trong thư mục gốc ( /), trước hết, nếu bạn có SU, KHÔNG thoát ra SUcho đến khi cố định, vì bạn sẽ không lấy lại được. Nếu bạn được kết nối từ xa, nếu bạn ngắt kết nối, bạn sẽ không thể ssh, để máy chủ một mình, không reboot- hầu hết các dịch vụ đang chạy sẽ ổn. Bạn có thể thử một trong nhiều giải pháp được đề xuất bởi Patrick ... tuy nhiên, bạn có thể sẽ cần quyền truy cập vật lý nếu bạn làm hỏng như tôi đã làm.

Khi ở trước máy, tôi khởi động lại nó. Như mong đợi, tôi đã nhận được một hoảng loạn hạt nhân.

Tôi nghĩ rằng đây sẽ là một sửa chữa khá dễ dàng, chèn livecd, vào chế độ cứu hộ LÊN TỚI ĐIỂM NÀY DỄ DÀNG - sau đó tôi phải thử và gắn thư mục gốc của mình. Tuy nhiên tôi cần nhiều hơn là một lệnh mount đơn giản.

Điều này là do tôi, giống như nhiều người, có hệ thống tệp lvm, và đây là lần đầu tiên tôi phải đối phó với một cuộc giải cứu như thế này. Tôi đã phải tìm kiếm trên web để xem những gì tôi cần làm. Tôi đã tổng hợp thông tin đó cho bài viết này. Đây là quá trình của tôi để khắc phục vấn đề của tôi.

1) Đã chèn Centos_6.4_min cd

2) Giao diện GUI hỏi tôi muốn làm gì, chọn Cứu

3) Cứu đã cố gắn hệ thống hiện tại, nhưng cho biết tôi không có phân vùng Linux

4) Chọn để nhập shellkhi tùy chọn được đưa ra

Tại thời điểm này, tôi đã thử nhiều thứ để gắn kết hệ thống, không có may mắn, tôi khá chắc chắn đây là tất cả các bước tôi phải thực hiện (vì lvm):

5) Quét khối lượng của tôi,

lvmdiskscan

6) Ran lvscan, cho thấy tất cả được liệt kê là "không hoạt động"

lvscan

7) mô-đun thiết bị tải

modprobe dm-mod

8) thay đổi âm lượng tồn tại thành hoạt động

vgchange -ay

9) Chạy lvscanlại, bây giờ tất cả các mục được liệt kê là "hoạt động"

10) Tạo điểm gắn kết và gắn kết phân vùng logic

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Đã chuyển các thư mục trở lại (BẠN có thể cần người khác):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) THÀNH CÔNG!

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.