Score:0

ไม่มีคำสั่งดำเนินการเมื่อฉันลบ /lib64

ธง au

ฉันดำเนินการคำสั่ง rm -rf * เมื่อฉันอยู่ใน lib64 หรือไดเรกทอรีภายในนั้น

(ผ่านความคิดเห็น / คำตอบปัญหาคือฉันลบ ld-linux-x86-64.so.2 และฉันไม่มีชั่วคราวข้างใน /var/lib64)

(ฉันมี busybox )

จากนั้นฉันไม่สามารถรันคำสั่ง bash ส่วนใหญ่ได้ ,ทุบตี. เมื่อฉันพยายามดำเนินการ ฉันเห็น:

bash: /usr/bin/bash: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

หรือ

bash: /usr/bin/ls: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

แต่คำสั่งจำนวนหนึ่งทำงานได้อย่างถูกต้องเช่น เสียงสะท้อน, ซีดี

และหลายคำสั่งทำงานได้ แต่ไม่ถูกต้อง ที่ ที่แสดงข้อผิดพลาดด้านล่าง:

ทุบตี: /usr/bin/ซึ่ง: /bin/sh: ล่ามที่ไม่ดี: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

เมื่อผมไป /usr/bin ผ่าน ซีดี แล้วดำเนินการคำสั่ง ไฟล์ซีดี $ มันส่งข้อผิดพลาด ตัวอย่างเช่น เมื่อฉันดำเนินการ ซีดี /usr/bin/ls มันแสดงให้ฉันเห็น:

bash: cd: /usr/bin/ls: ไม่ใช่ไดเรกทอรี

หรือ

bash: cd: /usr/bin/bash: ไม่ใช่ไดเรกทอรี

เมื่อฉันดำเนินการ 'cd /usr/bin/bash'

และเมื่อฉันเปิดเทอร์มินัลฉันแสดงข้อความด้านล่าง:

มีข้อผิดพลาดในการสร้างกระบวนการลูกสำหรับเทอร์มินัลนี้
ไม่สามารถดำเนินการกระบวนการย่อย â/bin/bashâ (ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว)

(มีสองตัวเลือก: การตั้งค่า เปิดใหม่)

ของฉัน $เส้นทาง เป็น /home/$me/.sdkman/candidates/springboot/current/bin:/home/$me/.cargo/bin:/home/$me/.local/bin:/usr/local/sbin:/usr/local /bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/grade/gradle-7.0.2/bin:/ opt/apache-maven-3.8.1/bin:/home/$me/v8/depot_tools:/home/$me/.config/composer/vendor/bin ฉันสามารถใช้เบราว์เซอร์ หรือ/และโปรแกรมที่เปิดใช้ก่อนหน้านี้ได้ แต่ฉันไม่สามารถเปิดมันได้อีก

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

สิ่งที่ไม่เข้าใจคือข้อผิดพลาดด้านล่าง:

ทุบตี: /usr/bin/ซึ่ง: /bin/sh: ล่ามที่ไม่ดี: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
guiverc avatar
cn flag
คุณไม่ได้ให้รายละเอียดของระบบปฏิบัติการและรุ่น; แต่คุณจะต้องกู้คืนไดเร็กทอรีนั้นจากข้อมูลสำรองของคุณ หากคุณลบไฟล์ที่เปิดอยู่แล้ว โปรแกรมที่กำลังทำงานอยู่ยังคงสามารถอ่านเนื้อหาได้ (เนื่องจากไอโหนดจะไม่ถูกปล่อยให้ว่างจนกว่าจะไม่มีการใช้งาน - Ubuntu หรือ GNU/Linux เป็นระบบปฏิบัติการที่มีผู้ใช้หลายคน) แต่โปรแกรมที่ต้องการไลบรารีเหล่านั้นจะไม่สามารถใช้งานได้ เนื่องจากถูกลบไปแล้ว จึงไม่สามารถดำเนินการได้ เมื่อรีบูต (หรือออกจากระบบ คุณจะเห็นเอฟเฟกต์เพิ่มเติม) คุณจะเห็นเอฟเฟกต์ทั้งหมดจากคำสั่งของคุณ คุณสามารถติดตั้งใหม่ได้หากคุณไม่มีข้อมูลสำรอง
muru avatar
us flag
คุณอาจลบ `ld-linux.so` ซึ่งจำเป็นสำหรับการเรียกใช้โปรแกรมปฏิบัติการที่เชื่อมโยงแบบไดนามิก
Someone avatar
my flag
@muru คุณไม่คิดว่า [คำถามนี้](https://unix.stackexchange.com/q/123353/495805)[และคำตอบนี้](https://unix.stackexchange.com/a/123358/495805) แก้ปัญหานี้
PooiaFerdowsi avatar
au flag
@muru @algnis ฉันลบไฟล์นั้นแล้ว แต่ไม่มีไฟล์ ld-linux ชั่วคราวอยู่ในไดเร็กทอรี `/var/lib64` ดีกว่า: ไดเร็กทอรี `var` ของฉันไม่มีไดเร็กทอรี `lib64` อยู่ข้างใน
bac0n avatar
cn flag
`/usr/bin/busybox ash` (คุณต้องระบุเส้นทางแบบเต็ม) ควรแจ้งการทำงานให้คุณทราบ ตอนนี้คุณควรจะสร้างลิงก์ที่ขาดหายไปอีกครั้ง `ln -sf /lib/x86_64-linux-gnu/ld-2.33.so ld-linux-x86-64.so.2` ให้ความสนใจกับ ld-linux รุ่น.
bac0n avatar
cn flag
คุณสามารถทำได้เช่นเดียวกันจากเมนู grub, `e` แก้ไขรายการเมนูใดๆ, ต่อท้าย `break` ต่อท้ายบรรทัด *linux* และ *ctrl+x* ซึ่งควรนำข้อความแจ้ง `(initramfs)` มาด้วย คุณสามารถทำได้ จากนั้นเมานต์พาร์ติชันรูทของคุณ เช่น `mount /dev/sda1 /root`, `cd /root/lib64` คราวนี้คุณต้องใช้พาธสัมพัทธ์ `ln -sf ../lib/x86_64-linux-gnu/ ld-2.33.so ld-linux-x86-64.so.2`
Score:3
ธง cn

/usr/bin/ซึ่ง เป็นเชลล์สคริปต์:

~$ แมว /usr/bin/อันไหน
#! /ถัง/sh
ตั้ง -ef

ถ้าทดสอบ -n "$KSH_VERSION"; แล้ว
        ใส่ () {
                พิมพ์ -r -- "$*"
        }
อื่น
        ใส่ () {
                พิมพ์f '%s\n' "$*"
        }
ไฟ
...
...
...

นี่เป็นเพียงบรรทัดแรกของสคริปต์ มันยาวกว่านี้มาก แต่เราต้องดูที่บรรทัดแรกซึ่งก็คือ

#! /ถัง/sh

/ถังขยะ เชื่อมโยงกับ /usr/bin, ดังนั้น /ถัง/sh ชี้ไปที่ /usr/bin/sh.

ดูเหมือนว่าคุณลบไฟล์ระบบที่จำเป็นออกไป นั่นเป็นสาเหตุที่คำสั่งไม่ทำงานสำหรับคุณ ซีดี และ เสียงสะท้อน ไม่ใช่คำสั่ง แต่เป็น shell-buildins นั่นเป็นสาเหตุที่ยังคงใช้งานได้

เราไม่สามารถบอกคุณได้ว่าไฟล์ใดที่คุณนำออก เนื่องจากเราไม่ทราบว่าคุณเผยแพร่ไฟล์ดังกล่าวในไดเร็กทอรีใด rm -rf *-สั่งการ. อาจเป็นไปได้ที่จะคัดลอกไฟล์จาก live-session และทำให้ระบบกลับมาทำงานได้ แต่คุณจะต้องค้นหาด้วยตัวเองว่าไฟล์ใดหายไป มิฉะนั้นติดตั้งใหม่

คำแนะนำ: ในระบบของฉัน ฉันมีเพียงไฟล์เดียวใน /lib64:

~$ ~$ ~$ ls -la /lib64/
รวม 8
drwxr-xr-x 2 รูท รูท 4096 13 ต.ค. 03:37 น.
drwxr-xr-x 14 รูท 4096 13 ต.ค. 03:37 ..
lrwxrwxrwx 1 รูทรูท 42 ก.ย. 28 08:38 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

นี่คือ symlink แค่สร้าง symlink ขึ้นมาใหม่ก็เพียงพอแล้ว แต่เนื่องจากคำสั่งต่างๆ ใช้ไม่ได้อีกต่อไป คุณจึงต้องทำสิ่งนี้จากเซสชันสด

muru avatar
us flag
คุณควรลอง `ls -la /lib64/` เนื่องจากดูเหมือนว่า OP จะเข้าสู่ไดเร็กทอรีก่อนที่จะลบทุกอย่างในไดเร็กทอรี
mook765 avatar
cn flag
@muru ฉันไม่เห็นความแตกต่างระหว่าง `ls -la /lib64` และ `ls -la /lib64/`
muru avatar
us flag
นั่นค่อนข้างแปลก ตัวเลือกที่สองควรแสดงรายการเนื้อหาของไดเร็กทอรีเป้าหมายของ symlink (เนื้อหาที่ OP ในกรณีนี้ได้ลบออก) `ls -laH /lib64/` ถ้า `ls` ของคุณอาจเป็นนามแฝงที่มีตัวเลือกในการทำลายพฤติกรรมนั้น
mook765 avatar
cn flag
@muru ใช่ ฉันเห็นสิ่งนี้แล้ว คุณพูดถูก เนื่องจาก `/lib64` ไม่ใช่โฟลเดอร์ แต่เป็น symlink... แก้ไข...
Score:1
ธง in

ไดเร็กทอรี /lib64 มีไลบรารีแบบแบ่งใช้ที่จำเป็นสำหรับไฟล์ปฏิบัติการที่เชื่อมโยงแบบไดนามิก รหัสทั่วไปเหล่านี้ใช้ร่วมกันในไลบรารีที่ใช้ร่วมกันแทนที่จะคัดลอกลงในไฟล์ปฏิบัติการแต่ละไฟล์ สิ่งต่าง ๆ เช่นเชลล์สคริปต์อาจไม่ทำงานเช่นกัน เนื่องจากคำสั่งรันเหล่านั้นอาจเสียหาย

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

ความเสียหายต่อไดเร็กทอรีระบบ เช่น /lib64 นั้นใกล้จะร้ายแรงต่อระบบยูนิกซ์ หากต้องการกู้คืนฟังก์ชัน คุณต้องกู้คืนไฟล์ที่ขาดหายไป ตัวเลือกในการทำเช่นนี้รวมถึง:

  • คืนค่าจากการสำรองข้อมูล
  • ติดตั้งไฟล์ deb ที่พวกเขามาอีกครั้ง
  • คัดลอกไฟล์จากระบบอื่นที่เหมือนกันด้วยระบบปฏิบัติการรุ่นเดียวกัน
  • บูตจากดิสก์ติดตั้งจริงและใช้เครื่องมือบนดิสก์สดเพื่อแทนที่ไฟล์ที่หายไป
  • ติดตั้งระบบปฏิบัติการใหม่ทั้งหมด (สำรองข้อมูลก่อน)

อาจเป็นไปได้ที่จะทำการกู้คืนบางส่วนแล้วใช้บางอย่างเช่น dpkg -V เพื่อรับรายการสิ่งที่แตกต่างหรือขาดหายไปจากไฟล์สต็อก และติดตั้งแพ็คเกจที่เสียหายบางส่วนใหม่ด้วย ฉลาดติดตั้ง - ติดตั้งใหม่. น่าเสียดายที่ dpkg และเครื่องมือทั้งหมดนั้นใช้ไลบรารีที่ใช้ร่วมกัน ดังนั้นอย่างน้อยต้องมีไลบรารี่ที่สำคัญก่อนจึงจะช่วยได้

น่าเสียดายที่ในสถานการณ์เช่นนี้ การติดตั้งใหม่ตั้งแต่ต้นมักจะเร็วกว่าและง่ายกว่าการซ่อมแซมความเสียหาย

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา