Hoàn nguyên thư mục gốc di chuyển đệ quy


14

Tôi có một máy tính để bàn Ubuntu được sử dụng như một máy chủ. Sáng nay tôi vô tình chuyển tất cả gốc của mình sang../

 root@server:/tmp/UPS/up/upsilon# mv /* ../
 mv: impossibile spostare "/dev" in "../dev": Dispositivo o risorsa occupata
 mv: impossibile spostare "/proc" in "../proc": Dispositivo o risorsa occupata
 mv: impossibile spostare "/run" in "../run": Dispositivo o risorsa occupata
 mv: impossibile spostare "/sys" in "../sys": Dispositivo o risorsa occupata
 mv: impossibile spostare "/tmp" in una sottodirectory di sé stessa, "../tmp"
 root@server:/tmp/UPS/up/upsilon# ls
 -bash: /bin/ls: No such file or directory

Tôi đã được kết nối từ xa trong ssh. Bây giờ, tôi không thể truy cập được nữa. Tôi cũng không thể xem Webmin.

Vì vậy, bây giờ tôi không thể khởi động lại hệ thống chính xác? Và tôi phải truy cập vật lý vào bảng điều khiển hệ thống và gõ lệnh này:

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*}

đúng?

Thư mục gốc của tôi đã đi đâu và làm thế nào tôi có thể lấy lại được? Lệnh trên có hoạt động không?


10
Ồ Đó là một sai lầm ấn tượng! :(
Sparhawk

3
Tôi có hiểu chính xác rằng thư mục làm việc tại thời điểm đó là /? Nếu vậy, khi tôi cố gắng mv tempdir/ ../, tôi nhận được mv: ‘tempdir/’ and ‘../tempdir’ are the same file, không có gì di chuyển.
Sparhawk

Lần sau, đừng đăng nhập với quyền root. Và nếu bạn sẽ làm mvthêm công -itắc.
Braiam

1
Tôi không đồng ý. Đôi khi bạn muốn đăng nhập với quyền root hơn là học cách vô thức đặt 'sudo' trước mỗi lệnh. Tuy nhiên hãy cẩn thận khi đăng nhập với quyền root. Đặc biệt với các lệnh xóa và di chuyển. --- Tuy nhiên, lỗi vẫn xảy ra và chúng ta học hỏi từ những điều đó. @MaxDL: Bạn có thể khôi phục / partion từ bản sao lưu không? Bạn có bản sao lưu? Bạn có thể sử dụng Dell DRAC, HP ILO hoặc công cụ truy cập từ xa khác để truy cập bảng điều khiển máy chủ mà không cần khởi động HĐH không?
Hennes

Câu trả lời:


12

Bạn chưa di chuyển thư mục gốc (bạn không thể), bạn vừa chuyển gần như mọi thứ trong thư mục đó sang bất kỳ đường dẫn nào bạn đang đi.

Để làm phức tạp mọi thứ, bạn cũng đã di chuyển mvđể không làm việc như mong đợi. Các thao tác sau sẽ hoạt động (miễn là bạn chưa khởi động lại kể từ khi hỏi điều này!) Nếu bạn vẫn ở trong cùng thư mục khi bạn tắt mv cuối cùng.

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /

Nếu bạn không có bất kỳ thứ gì trong số đó, chỉ cần bỏ qua chúng khỏi lệnh.

Và nếu bạn không có quyền truy cập (bạn sẽ không thể đăng nhập mới trong khi mọi thứ ở trạng thái này), bạn sẽ phải gắn kết hệ thống tệp bên ngoài (thông qua một cái gì đó như LiveCD và gắn hệ thống tệp và sau đó di chuyển các tệp vào đúng chỗ. Câu trả lời của Braiam sẽ giúp với phần này.


Điều làm tôi bối rối là dòng root@server:/# ls, gợi ý cho tôi rằng thư mục hiện tại là /. (Do đó nhận xét thứ hai của tôi ở trên.)
Sparhawk

Xin lỗi, đó là lệnh hoàn chỉnh: root @ server: / tmp / UPS / up / upsilon # mv / * ../ Tôi đã được kết nối từ xa trong ssh. Bây giờ, tôi không thể truy cập được nữa.
MaxDL

Sau đó, lệnh cần khắc phục là/tmp/UPS/up/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /
Sparhawk

10

Nếu bạn đã khởi động lại hoặc đã đăng xuất, bạn có thể khởi động trong liveCD / USB để sửa hệ thống của mình. Tôi sẽ bỏ qua phần mà bạn biết cách tạo một hệ thống Live và khởi động với Ubuntu (đĩa cd thay thế cũng hoạt động, chỉ cần thả vào một vỏ gốc):

Trước tiên, bạn nên gắn hệ thống của mình vào một nơi nào đó, vì vậy:

mkdir /mnt/system
mount /dev/sda1 /mnt/system

Tôi giả sử /dev/sda1là gốc của bạn. Nếu bạn đã tách /binhoặc /usrbạn cũng nên gắn kết chúng:

mount /dev/sda2 /mnt/system/usr

Bây giờ, bạn nên đến thư mục bạn đã ở trước thảm họa:

cd /mnt/system/tmp/UPS/up/upsilon

Bây giờ với lệnh mà Oli đưa ra, mà tôi sẽ sao chép với sự trắng trợn:

mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /mnt/system/

Bây giờ xác minh mọi thứ theo thứ tự:

# ls /mnt/system/
bin boot etc home media mnt opt root sbin selinux usr var etc...

Khởi động lại hệ thống của bạn và thận trọng hơn trong tương lai.


1

Tôi gặp vấn đề này, tôi thấy rằng tôi cần phải gọi lệnh mv như thế này:

/tmp/UPS/up/lib/ld-linux-x86-64.so.2 --library-path /tmp/UPS/up/lib/ /tmp/UPS/up/test/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var} /

Hy vọng điều này sẽ giúp những người khác.

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.