/ bin / etc / lib64 / root / sbin ถูกลบหรือย้ายโดยโฟลเดอร์ mv / * / * ในขณะที่ su


11

ระบบปฏิบัติการ Centos 6.5 64-bit

ฉันดาวน์โหลดไฟล์ tar และต้องการยกเลิกการติดตั้งและmvมัน

ฉันไม่ได้ทำการทดสอบแล้วโดยไม่ตั้งใจ (ขณะที่รูท) รันmv folder/* /*แทนที่จะmv folder/* .ทุบตีว่ามันไม่สามารถเขียนทับไฟล์บางไฟล์ได้จากนั้นจึงขออนุญาตจากผู้อื่น ฉัน ctrl-c'd ออกมา

ฉันเปิดเซสชันเทอร์มินัลแล้ว แต่ออกsuแล้ว

ตอนนี้ผมได้สูญเสียการเข้าถึงมากที่สุดshellคำสั่งไม่สามารถlsไดเรกทอรีใด ๆ suและไม่สามารถรับกลับไป

เว็บเซิร์ฟเวอร์และบริการยังคงทำงานอยู่ ฉันสามารถเรียกใช้คำสั่งน้อยมากcdเป็นหนึ่งของพวกเขาและเมื่อฉันพยายามที่จะcdไป/etcหรือมันผิดพลาดกับ/binno directory found

แก้ไขพบเพียงโฟลเดอร์ทั้งหมดหายไปจาก/( bin, etc, lib64, root, sbin) ได้ย้ายไปยัง/varไดเรกทอรีผมพยายาม/var/bin/suและได้รับ: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory


1
คุณวิ่ง/var/bin/suไปไม่ได้เหรอ
Darkhogg

โปรดอย่าแก้ไขคำถามด้วยโซลูชัน ในเครือข่ายการแลกเปลี่ยนสแต็คที่คุณต้องการเพิ่มคำตอบให้แสดงความคิดเห็นที่คำตอบที่มีอยู่เพื่อปรับปรุงคำตอบ
Bernhard

@ Darkhogg /var/bin/su: user root does not existฉันคิดว่าเราคิดว่ามันไม่สามารถทำได้เพราะ / etc อยู่ที่ / var / etc
webaholik

@Bernhard พยายามแก้ไข
webaholik

คำตอบ:


22

หากระบบของคุณbusyboxติดตั้งคุณสามารถใช้สิ่งนี้เพื่อนำสิ่งต่าง ๆ กลับมา

busyboxเป็นเลขฐานสองที่มีสาธารณูปโภคมาตรฐานจำนวนมากติดตั้งอยู่ภายใน สิ่งต่างๆเช่นmv, sh, lsฯลฯ

/varจากความคิดเห็นของคุณกับคำตอบของพาเวลมันเสียงเหมือนทุกอย่างจบลง /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /คุณสามารถลองทำ ซึ่งควรทำให้ระบบของคุณใช้งานได้อีกครั้ง มีไดเรกทอรีบางอย่างเช่น/tmpที่มีอยู่/var/tmpด้วยดังนั้นคุณจึงไม่สามารถย้ายได้ หวังว่าคนเหล่านั้นจะเป็นคนที่mvบ่นและพวกเขาถูกทิ้งให้อยู่ตามลำพัง

 

รับรูตเชลล์

คุณยังพูดถึงว่าคุณทำรูทเชลล์ของคุณหายและนั่นsuทำให้คุณเกิดld-linuxข้อผิดพลาดกับไลบรารี คุณอาจจะสามารถใช้สิ่งต่อไปนี้:

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

หมายเหตุ: เมื่อพยายามทำเช่นนี้จะไม่ทำงาน นี้เป็นเพราะsuต้องใช้หลายแฟ้มใน/etc( passwd, pam.dและอื่น ๆ ) หาก/etcยังคงไม่บุบสลายนี่จะเป็นโอกาสที่ดีที่จะประสบความสำเร็จ

 

ไม่มีกล่องไม่ว่าง

หากคุณไม่มี busybox ให้ใช้งานคุณอาจใช้เคล็ดลับ ld-linux เช่นเดียวกับ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} /

 

จากซีดีสด

ตามที่กล่าวไว้ในความคิดเห็นหากคุณทำรูทเชลล์หายคุณก็ติดอยู่มาก โดยทั่วไปเพื่อแก้ไขปัญหานี้คุณต้องมีสิทธิ์ใช้งานรูท วิธีเดียวที่จะไปถึงที่นั่นคือมียูทิลิตี้เช่นsuหรือsudoเพิ่มการอนุญาตของคุณ (ซึ่งทั้งสองอย่างนี้ไม่สามารถใช้งานได้ในตอนนี้) หรือจี้โปรแกรมอื่นที่รันอยู่ในสถานะรูท (ขึ้นอยู่กับสิ่งที่กำลังทำงาน

ทำให้ตัวเลือกเดียวเท่านั้นที่เป็นซีดีสด เมื่อ booted ลงในแผ่นซีดีสด (หรือสด USB หรืออะไรก็ตาม) เพียงแค่ติดปริมาณรากและย้ายไดเรกทอรีที่ได้รับผลกระทบจากการกลับไปที่บ้านเดิมของพวกเขาใน/var/


เรื่องย่อของสิ่งที่เกิดขึ้น

folder/*จะมีการขยายตัวออกไปในบางสิ่งบางอย่างเช่นและfolder/foo จะมีการขยายตัวออกไปในสิ่งที่ต้องการ การสังเกตว่าเป็นรายการสุดท้าย ดังนั้นเมื่อเปลือกหอยขยายตัวออกไปมันจะมีลักษณะดังนี้:folder/bar
/*/bin /lib32 /lib64 /etc /home /root /var/var

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

เช่นเดียว/varกับรายการสุดท้ายในรายการทุกอย่างถูกย้ายเข้าไป


ทำไมถึง/var/bin/suเกิดข้อผิดพลาดด้วย/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

ld-linuxเกือบไบนารีทั้งหมดในลินุกซ์มีการเชื่อมโยงกับแบบไดนามิก ld-linuxเป็นห้องสมุดที่รับผิดชอบในการโหลดไลบรารีอื่น ๆ ที่จำเป็นโดยไบนารี /lib64/ld-linux-x86-64.so.2ในระบบของคุณนี้อาศัยอยู่ที่ เนื่องจากไดเร็กทอรีนี้ถูกย้ายไฟล์ปฏิบัติการที่ลิงก์แบบไดนามิกจะไม่ทำงานอีกต่อไป

เหตุผลที่ทำให้ busybox ใช้งานได้นั่นคือ busybox นั้นถูกเชื่อมโยงแบบคงที่ ld-linuxมันไม่ได้ใช้


ความคิดที่ดี. CentOS มักจะมีการติดตั้ง busybox เนื่องจากinitramfsดังนั้นจึงอาจทำงานได้ดี
Pavel Šimerda

busyboxฟังดูเหมือนโซลูชันที่สมบูรณ์แบบขออภัยที่ไม่ได้ติดตั้งหลังจากนี้จะได้รับการแก้ไขหรือไม่ ... ในระหว่างนี้มีวิธีแก้ไขพา ธ สำหรับคำสั่งเพื่อดำเนินการ/var/lib64/ld-linux-x86-64.so.2แทน/lib64/ld-linux-x86-64.so.2หรือไม่ นี่น่าจะเป็นสิ่งที่ฆ่าคำสั่งใน/var/bin
webaholik

@ แพทริก: คุณช่วยเพิ่มข้อมูลที่คำสั่ง OP ที่ต้องการใช้ผิดได้ไหม? ฉันสามารถลบคำตอบของฉันเพราะตอนนี้ (เกือบ) ซ้ำซ้อน มันเป็นวิธีที่ถูกต้องในการใช้การแลกเปลี่ยนสแต็ค
Pavel Šimerda

1
มันมองหาหลายสิ่งหลายอย่างใน/etcที่ไม่ได้มี ( /etc/passwd, /etc/nsswitch, /etc/pam.dและอาจจะมากกว่า) สำหรับsuการทำงาน/etcต้องกลับมาอยู่ที่เดิม ถ้าคุณไม่มีรูตเชลล์วางอยู่รอบ ๆ ฉันคิดว่าคุณติดอยู่ :-(
แพทริค

2
@ user1296209 เมื่อคุณได้รับ livecd up เพียงติดตั้งวอลุ่ม root และย้ายไดเรกทอรีเหล่านั้นกลับมา นั่นควรจะเป็นสิ่งที่คุณต้องการเพื่อให้ทำงานได้อีกครั้ง
แพทริค

10

mv folder/* ./*ผิดเช่นกัน คุณควรระมัดระวังเกี่ยวกับความหมายของคำสั่งที่คุณใช้ mvคำสั่งที่มีมากกว่าสองอาร์กิวเมนต์ใช้เวลาเพียงอาร์กิวเมนต์ทั้งหมดยกเว้นคนสุดท้ายและย้ายเส้นทางที่พวกเขาชี้ไปลงในไดเรกทอรีที่ระบุไว้ในข้อโต้แย้งที่ผ่านมา

หากต้องการย้ายไดเรกทอรีทั้งหมด (ยกเว้นไดเรกทอรีที่ซ่อนอยู่) จากโฟลเดอร์ไปยังไดเรกทอรีปัจจุบันคุณควรใช้:

mv folder/* .

คุณใช้ระบบการทำงานที่ใช้งานไม่ได้ คำสั่ง shell และ builtin ของคุณยังคงทำงานต่อไป คุณจะต้องบูตซีดีสดและย้ายไดเรกทอรีกลับมา ฉันไม่ทราบว่า bash builtin จะย้าย / เปลี่ยนชื่อไฟล์ที่จะช่วยให้คุณแก้ไขสถานการณ์ได้โดยไม่ต้องบูตเครื่องใหม่โปรดดูคำตอบของ Patrick สำหรับรายละเอียดเพิ่มเติม


ฉันไม่ทราบว่า: ฉันสามารถ cd ไปที่ / var / bin & / var / etc ดูเหมือนว่าโฟลเดอร์ถูกย้ายไปที่ var แล้วฉันสามารถย้ายกลับได้หรือไม่ ... โดยไม่ต้อง livecd?
webaholik

ฉันลอง / var / bin / su & ได้รับ: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: ล่าม ELF ไม่ดี: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
webaholik

อ้า ... ฉันจะแก้ไขคำตอบ
Pavel Šimerda

mvคำสั่งของฉันควรจะย้ายไฟล์และโฟลเดอร์ทั้งหมดจากโฟลเดอร์ไปยังไดเรกทอรีปัจจุบันคืออะไร?
webaholik

1
@ user1296209: หากคุณบูตระบบจริงคุณจะมีสิทธิ์เข้าถึงรูทบนระบบชีวิตของคุณ ระบบจริงของคุณเป็นเพียงพาร์ติชันที่เมาท์ซึ่งไม่มีความหมายพิเศษสำหรับระบบจริง ภาวะแทรกซ้อนเดียวคือของคุณ/และ/varไดเรกทอรีอาจอยู่ในพาร์ทิชันที่แตกต่างกันซึ่งในกรณีนี้คุณต้องติดตั้งทั้งสองอย่าง
celtschk

2

ฉันย้าย / usr ไปที่ / usr_old โดยไม่ตั้งใจและทุกอย่างไปสู่นรก โชคดีที่ฉันยังอยู่ในพรอมต์และสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อกู้คืนโฟลเดอร์ usr:

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

ยินดีต้อนรับสู่ U&L นั่นเป็นคำสั่งเดียวที่คุณพิมพ์หรือไม่ โปรดระบุขั้นตอนโดยละเอียดเพิ่มเติม (พิเศษสำหรับคำถามเก่าสิบ mont ไม่จำเป็นต้องรีบ)
Archemar

1
ใช่หลังจากฉันพิมพ์คำสั่งนั้นทุกอย่างจะถูกกู้คืน บางทีฉันควรจะพูดถึงว่าฉันเป็นรากในระหว่างทั้งหมดนี้
Mansehr

1

สิ่งสำคัญ หากคุณอยู่ที่นี่และทำงานmvไม่ถูกต้องไม่สามารถเรียกใช้shellคำสั่งและโฟลเดอร์ที่ขาดหายไปจากไดเรกทอรีราก ( /) ก่อนอื่นถ้าคุณมีSUอย่าออกSUจนกว่าจะได้รับการแก้ไขเพราะคุณจะไม่ได้รับกลับมา หากคุณเชื่อมต่อจากระยะไกลหากคุณยกเลิกการเชื่อมต่อคุณจะไม่สามารถsshออกจากเซิร์ฟเวอร์เพียงอย่างเดียวไม่ได้reboot- บริการที่ทำงานอยู่ส่วนใหญ่ควรจะเป็น OK คุณสามารถลองใช้วิธีแก้ไขปัญหาที่แนะนำโดย Patrick ... แต่คุณอาจต้องใช้การเข้าถึงทางกายภาพหากคุณรู้สึกผิดเหมือนที่ฉันเคยทำ

เมื่อด้านหน้าของเครื่องฉันรีบูตมัน ตามที่คาดไว้ฉันได้รับความตื่นตระหนกของเคอร์เนล

ฉันคิดว่านี่จะเป็นการแก้ไขที่ง่ายมาก, แทรก livecd, เข้าสู่โหมดช่วยเหลือจนถึงจุดนี้มันง่าย - แล้วฉันต้องลองและติดตั้งไดเรกทอรีรากของฉัน อย่างไรก็ตามฉันต้องการมากกว่าแค่คำสั่ง mount อย่างง่าย

นี่เป็นเพราะฉันเหมือนคนหลาย ๆ คนมีระบบไฟล์ LVM และนี่เป็นครั้งแรกที่ฉันต้องจัดการกับการช่วยเหลือแบบนี้ ฉันต้องค้นหาเว็บเพื่อดูว่าฉันต้องทำอะไร ฉันได้รวบรวมข้อมูลนั้นไปยังโพสต์นี้แล้ว นี่คือกระบวนการของฉันเพื่อแก้ไขปัญหาของฉัน

1) ซีดีที่ใส่ Centos_6.4_min

2) ส่วนต่อประสาน GUI ได้ถามว่าฉันต้องการทำอะไรเลือก Rescue

3) Rescue พยายามติดตั้งระบบปัจจุบัน แต่ระบุว่าฉันไม่มีพาร์ติชัน Linux

4) เลือกที่จะป้อนshellเมื่อได้รับตัวเลือก

ณ จุดนี้ฉันพยายามหลายสิ่งเพื่อให้ระบบติดตั้งโดยไม่มีโชคฉันค่อนข้างแน่ใจว่าสิ่งเหล่านี้เป็นขั้นตอนทั้งหมดที่ฉันต้องทำ (เพราะ lvm):

5) สแกนวอลลุ่มของฉัน

lvmdiskscan

6) Ran lvscan แสดงรายการทั้งหมดเป็น "ไม่ใช้งาน"

lvscan

7) โมดูลอุปกรณ์โหลด

modprobe dm-mod

8) เปลี่ยนวอลุ่มที่มีอยู่ให้ใช้งานได้

vgchange -ay

9) เรียกใช้lvscanอีกครั้งตอนนี้รายการทั้งหมดที่ระบุว่า "ใช้งานอยู่"

10) สร้างจุดติดตั้ง & เมานต์โลจิคัลพาร์ติชันแล้ว

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) ย้ายโฟลเดอร์กลับ (คุณอาจต้องใช้คนอื่น):

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

12)reboot

13) ความสำเร็จ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.