Bạn đã nâng cấp libc của mình (thư viện hệ thống cơ bản nhất) và hiện tại không có chương trình nào hoạt động. Nói chính xác, không có chương trình liên kết động nào hoạt động.
Trong kịch bản cụ thể của bạn, khởi động lại sẽ hoạt động. Libc hiện được cài đặt yêu cầu kernel mới hơn và nếu bạn khởi động lại, bạn sẽ nhận được kernel mới hơn.
Miễn là bạn vẫn còn vỏ chạy, thường có cách để phục hồi, nhưng sẽ rất khó nếu bạn không lập kế hoạch cho nó. Nếu bạn không có shell thì thường không có giải pháp nào khác ngoài việc khởi động lại.
Ở đây bạn có thể không phục hồi được nếu không khởi động lại, nhưng ít nhất bạn có thể dễ dàng tìm ra kernel nào đang chạy. Chỉ cần sử dụng một cách để đọc /proc/version
mà không yêu cầu một lệnh bên ngoài.
read v </proc/version; echo $v
echo $(</proc/version) # in zsh/bash/ksh
Nếu bạn vẫn còn một bản sao của libc cũ, bạn có thể chạy các chương trình với nó. Ví dụ: nếu libc cũ nằm trong /old/lib
và bạn có các tệp thực thi hoạt động với libc cũ này /old/bin
, bạn có thể chạy
LD_LIBRARY_PATH=/old/lib /old/lib/ld-linux.so.2 /old/bin/uname
Nếu bạn có một số nhị phân được liên kết tĩnh, chúng sẽ vẫn hoạt động. Tôi khuyên bạn nên cài đặt các tiện ích hệ thống được liên kết thống kê cho loại vấn đề này (nhưng bạn phải làm điều đó trước khi vấn đề bắt đầu). Ví dụ: trên Debian / Ubuntu / Mint /, hãy cài đặt một hoặc nhiều busybox-static (bộ sưu tập các công cụ dòng lệnh Linux cơ bản bao gồm shell), sash (shell có thêm một số nội dung bổ sung), zsh-static (chỉ là một trình bao với khá nhiều công cụ tiện dụng được tích hợp sẵn).
busybox-static uname
sash -c '-cat /proc/version'
zsh-static -c '</proc/version'