Sau khi vô tình đổi tên / usr, làm cách nào để đổi tên lại?


62

Tôi vô tình đổi tên thư mục /usrthành /usr_bak.

Tôi muốn thay đổi nó trở lại, vì vậy tôi nối đường dẫn /usr_bak/binđể $PATHcho phép hệ thống để tìm ra lệnh sudo.

Nhưng bây giờ sudo mv /usr_bak /usrcho tôi lỗi:

sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory

Có cách nào để đổi tên /usr_baknhư /usrbên cạnh việc cài đặt lại hệ thống không?


2
Đây là hệ điều hành nào? Tôi tự hỏi làm thế nào sudothậm chí đến giai đoạn thư viện, nó thường xảy ra /usr/bin/và đã thất bại với lỗi không tìm thấy lệnh. Ngoài ra, bạn có một bộ mật khẩu root?
muru

3
@muru Đó là Ubuntu. Bạn nói đúng, tôi đã nhận được báo lỗi về not foundtrước vì vậy tôi nối con đường mới /usr_bak/binđể $PATHvà bây giờ tôi nhận được lỗi trong bài viết của tôi ở đây ...
Yves

2
@ user1717828 thật phức tạp. Tôi phải biên dịch một dự án, được phát triển trên Ubuntu 16.04, trên Ubuntu 17.10. Vì vậy, tôi đang suy nghĩ nếu tôi có thể đơn giản sao chép /usrUbuntu 16.04 để ghi đè lên /usrUbuntu 17.10 ...
Yves

6
Bạn đã cân nhắc sử dụng VM để biên dịch dự án thay vì những thay đổi mạnh mẽ như vậy chưa?
Kevin

3
Bạn có thể chạy hộp ảo trong chế độ không đầu . Có thể dễ dàng nhất để thiết lập một khách trên một máy khác hoặc có được một cấu hình được cấu hình sẵn.
Kevin

Câu trả lời:


109

Vì bạn đã đặt mật khẩu cho root, sử dụng subusybox, được cài đặt theo mặc định trong Ubuntu. Tất cả các suthư viện cần thiết đều có trong /lib. Busybox là một tập hợp các tiện ích được liên kết tĩnh, vì vậy các thư viện bị thiếu không phải là một vấn đề. Làm:

su -c '/bin/busybox mv /usr_bak /usr'

(Mặc dù Busybox cũng có một suapplet, /bin/busyboxnhị phân không được setuid và do đó không hoạt động trừ khi được chạy dưới quyền root.)

Nếu bạn không có mật khẩu gốc, có lẽ bạn có thể sử dụng giải pháp của Gilles tại đây bằng cách sử dụngLD_LIBRARY_PATH hoặc (Gilles nói rằng điều này sẽ không hoạt động với các nhị phân setuid như sudo) và chỉnh sửa menu GRUB để khởi động init=/bin/busyboxnhư một tham số kernel và di chuyển thư mục trở lại.


73
Bây giờ, đừng vô tình đổi tên /lib.
sleblanc

5
LD_LIBRARY_PATHSẽ không giúp chạy sudo vì sudosetuid. Nếu các thư viện của nó không ở đúng nơi, sudo sẽ không hoạt động cho đến khi root sửa chữa nó.
Gilles 'SO- ngừng trở nên xấu xa'

3
@ Ghi chú lịch sử: các hương vị cũ của Unix (cũ hơn nhiều so với Linux) bao gồm một tập hợp nhỏ các nhị phân được liên kết tĩnh trong /sbinchính xác loại kịch bản đó: "Tôi đang thực hiện một số hoạt động trong đó các thư viện thời gian chạy sẽ bị xáo trộn nhưng cần phải thao tác với các tập tin. " Về cơ bản cách tiếp cận tương tự trước khi Busybox được phát minh. (Số lượng lệnh có sẵn theo kiểu này rất hạn chế, vì các tệp nhị phân được liên kết tĩnh này đã
ngấu nghiến không gian

8
@ Nếu bạn đã đổi tên /lib, thì có lẽ bạn phải khởi động lạiinit=/bin/busybox
muru

3
@ Yves: Khởi động từ thanh USB, với một bản phân phối trực tiếp có thể gắn kết các hệ thống tệp của bạn và bạn đã sẵn sàng sửa mọi thứ. Thậm chí tải xuống các tập tin thay thế từ gói gương nếu bạn đã xóa một cái gì đó.
Peter Cordes

33

Ngoài câu trả lời của muru :

  • bạn có thể đã sử dụng một số khóa USB khởi động cứu hộ để sửa chữa hệ thống của mình; ví dụ nếu hệ thống của bạn là một số Debian hoặc Ubuntu, khởi động phím USB cài đặt trong chế độ cứu hộ, và làm thích hợp mountmvumount.

  • để có thể sửa chữa dễ dàng hơn sai lầm như vậy, tôi thường cũng cài đặt một vỏ tĩnh với một số lệnh dựng sẵn (đặc biệt là với một số cp, rm, mvbuiltins -like) như sash(nó được đóng gói trong Debian & Ubuntu, và cũng có sẵn như là sash-3.8. tar.gz ở dạng nguồn) và khởi động với init=/bin/sashGrub.

PS: sashhơi lỗi, và không hoàn toàn tuân thủ Posix, nhưng vẫn rất hữu ích.


Bạn có thể giải thích cách cài đặt shell tĩnh với một số lệnh dựng sẵn không? Có một số hướng dẫn?
Yves

1
Trên Debian hoặc Ubuntu : apt-get install sash. Nhưng bạn cũng có thể tải xuống sash-3.8.tar.gz và biên dịch nó.
Basile Starynkevitch

Tôi giữ một liveiso trên hdd với một mục grub tùy chỉnh cho các vấn đề như thế này. Không cần phức tạp, chỉ cần khởi động hệ điều hành trực tiếp và thao tác các tệp một cách tự do :)
FreeSoftwareServers

3

Tôi nghĩ cách an toàn nhất là khởi động lại bằng hệ điều hành khởi động USB, CD hoặc DVD (Debian, Ubuntu, Suse, v.v.). Sau đó gắn ổ đĩa chứa các vấn đề và thực hiện đổi tên.

An toàn hơn là khởi động vào một bãi mìn với / usr hoặc / lib bị mất hiệu quả.


1
Bạn có thể khởi động ISO trực tiếp từ Grub / HDD mà không cần USB / DVD, v.v ... Thủ thuật khá tiện lợi grub có vòng lặp cuộc gọi.
FreeSoftwareServers

0

Tôi chạy vào một vấn đề tương tự mà tôi đổi tên /usr/binđể /usr/bin_bkpcho một số thử nghiệm và sau đó tôi đã không thể đổi tên (như lệnh không tìm thấy sudotrong thư mục tiêu chuẩn mà là /usr/bin) và sau đó tôi đã đi đến /usr/bin_bkpthư mục bằng tay (sử dụng quản lý tập tin ) và hầu hết các chức năng (bao gồm cả đổi tên) khi nhấp chuột phải bị vô hiệu hóa.

Sau đó, tôi đã thử lệnh sau và nó đã khắc phục vấn đề

$/usr/bin_bkp/sudo mv /usr/bin_bkp/ /usr/bin/

Tôi đã gọi sudo từ đường dẫn hiện tại và nó đã hoạt động, bây giờ mọi thứ trở lại bình thường.

HĐH: Xubfox 14.04


-3

Tôi không thể thử điều này ngay bây giờ (và không chắc chắn tôi muốn), nhưng có vẻ như nó phải hoạt động để tạo cho mình một "/ usr" mới dưới dạng liên kết cứng (không phải là liên kết mềm) với " / usr_bak, sau đó xóa "/ usr_bak"

ln /usr_bak /usr
rm /usr_bak

Liên kết cứng được tạo bởi "ln" ( không có đối số "-s") trong hệ thống tệp sẽ làm cho cả thư mục usr và usr_bak liên kết hợp lệ đến các thư mục được đề cập. "Rm" chỉ xóa một liên kết mà bạn yêu cầu xóa, không phải cả hai liên kết. Vì vẫn còn một liên kết hợp lệ đến nội dung, nên chúng vẫn có thể truy cập được thông qua liên kết còn lại tại "/ usr".


5
Tôi có ấn tượng rằng Linux (hoặc ít nhất là Ubuntu) không cho phép các liên kết cứng đến các thư mục. Ví dụ: Askubfox.com/questions/210741/ Mạnh
Chris Bouchard

4
@Chris: Phải, Linux không cho phép các liên kết cứng thư mục (ngoài ..., do đó, số lượng liên kết trên một thư mục cho bạn biết số lượng các thư mục con cấp đầu tiên). Ngoài ra, rmkhông hoạt động trên các thư mục, bạn phải sử dụng rmdir. ( lnrmlàm việc trên các liên kết tượng trưng đến các thư mục, nhưng chúng ta đang nói về một thư mục thực tế). Ngoài ra, điều này không giải quyết được vấn đề, bởi vì nó yêu cầu rootgiống như mv, vì các quyền trên/ . Nếu bạn có thể chạy cái này, bạn có thể chạy mvthay vì như một người bình thường.
Peter Cordes

2
Các liên kết cứng đến thư mục không được hỗ trợ trên hầu hết (tất cả?) Các thông báo vì quá khó để phần mềm thực hiện thu thập dữ liệu hệ thống tệp đệ quy để phát hiện các vòng lặp vô hạn. Có thể nếu phần mềm theo dõi tất cả các nút được truy cập và nó thu thập dữ liệu hệ thống tệp nhận biết inode (không phải là FAT32 / NTFS), nhưng kiểm tra các liên kết tượng trưng và không đi qua chúng dễ dàng hơn nhiều. Tất cả những gì cần thiết là một cuộc gọi nhanh đến lstat (2) để kiểm tra loại tệp.
chim cánh cụt359

2
@Pryftan, tôi ln(1)trên Debian nói điều này cho các -d/ -F/ --directorytùy chọn: "cho phép superuser để cố gắng thư mục liên kết cứng (lưu ý: có thể sẽ thất bại do những hạn chế của hệ thống, ngay cả đối với superuser)" . Vì vậy, bạn có thể tự do thử, nhưng hệ thống tập tin của bạn có thể sẽ không cho phép bạn.
Toby Speight

1
@TobySpeight Một suy nghĩ khác: xem thêm symlink (7) có nội dung: Liên kết cứng có thể không tham chiếu đến các thư mục (để ngăn khả năng xảy ra các vòng lặp trong cây hệ thống tệp, điều này sẽ gây nhầm lẫn cho nhiều chương trình) và có thể không tham chiếu đến các tệp trên các hệ thống tệp khác nhau (vì số inode không phải là duy nhất trên các hệ thống tập tin). Điều này khiến tôi nghĩ rằng nỗ lực liên kết cứng thực sự có thể là cách diễn đạt một cái gì đó khác xảy ra cụ thể là hàm được gọi nhưng nó thất bại chính xác vì nó là một thư mục. (Các tài liệu tham khảo hệ thống tập tin là những gì tôi đã nghĩ đến việc trong các bình luận khác)
Pryftan
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.