Puncte:0

Nicio comandă nu se execută când am șters /lib64

drapel au

Am executat comanda rm -rf * cand eram in lib64 sau un director în interiorul acestuia.

(Prin comentarii/răspunsuri problema este că am șters ld-linux-x86-64.so.2 și nu am unul temporar înăuntru /var/lib64)

(Am busybox)

Atunci nu pot executa majoritatea comenzilor bash, cum ar fi ls,bash. Când încerc să le execut, văd:

bash: /usr/bin/bash: Nu există un astfel de fișier sau director

sau

bash: /usr/bin/ls: Nu există un astfel de fișier sau director

Dar o serie de comenzi funcționează corect ca ecou, CD

Și o serie de comenzi funcționează, dar nu le plac în mod corespunzător care care arată eroarea de mai jos:

bash: /usr/bin/which: /bin/sh: interpret defectuos: Nu există un astfel de fișier sau director

Cand merg la /usr/bin prin CD și apoi executați comanda cd $fișier aruncă o eroare. de exemplu, când execut cd /usr/bin/ls imi arata:

bash: cd: /usr/bin/ls: Nu este un director

sau

bash: cd: /usr/bin/bash: Nu este un director

când am executat „cd /usr/bin/bash”

și când deschid terminalul afișez mesajul de mai jos:

A apărut o eroare la crearea procesului copil pentru acest terminal
Nu s-a executat procesul copil â/bin/bashâ (Nu s-a putut executa un astfel de fișier sau director)

(Cu două opțiuni: Preferințe, Relansare)

Ale mele $PATH este /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 Pot folosi browserul sau/și programele lansate anterior. Dar nu le pot lansa din nou.

Am o filă de terminal deschisă cu un număr de comenzi menționate anterior și un browser și un cititor de documente. Funcționează, dar nu pot fi lansate din nou.

Ceea ce nu se poate înțelege este eroarea de mai jos:

bash: /usr/bin/which: /bin/sh: interpret defectuos: Nu există un astfel de fișier sau director
guiverc avatar
drapel cn
Nu ați furnizat detalii privind sistemul de operare și versiunea; dar va trebui să restaurați acel director din copiile de rezervă. Dacă ștergeți un fișier care este deja deschis; programul existent care rulează poate citi în continuare conținutul (deoarece inodurile nu sunt eliberate până când nimic nu le folosește - Ubuntu sau GNU/Linux este un sistem de operare multi-utilizator), dar programele care au nevoie de acele biblioteci nu le vor avea disponibile deoarece au fost șterse , prin urmare nu se poate executa. La repornire (sau deconectare, veți vedea mai multe efecte) veți vedea efectul complet al comenzii dvs. De asemenea, puteți reinstala dacă nu aveți copii de rezervă.
muru avatar
drapel us
Probabil ați șters `ld-linux.so`, care este necesar pentru a rula orice executabil conectat dinamic.
Someone avatar
drapel my
@muru nu crezi [această întrebare](https://unix.stackexchange.com/q/123353/495805)[Și acest răspuns](https://unix.stackexchange.com/a/123358/495805) rezolvă această problemă
PooiaFerdowsi avatar
drapel au
@muru @algnis exact am șters acel fișier. dar niciun fișier temporar ld-linux nu se află în directorul `/var/lib64`. mai bine: directorul meu `var` nu are directorul `lib64` înăuntru.
bac0n avatar
drapel cn
`/usr/bin/busybox ash` (trebuie să furnizați calea completă) ar trebui să vă ofere un prompt de lucru. acum, ar trebui să puteți re-creați legătura lipsă `ln -sf /lib/x86_64-linux-gnu/ld-2.33.so ld-linux-x86-64.so.2` acordați atenție ld-linux versiune.
bac0n avatar
drapel cn
puteți face același lucru din meniul grub, `e` editați oricare dintre intrările din meniu, adăugați `break` la linia *linux* și *ctrl+x*, acest lucru ar trebui să aducă un prompt `(initramfs)`, puteți apoi montați partiția rădăcină, ceva de genul `mount /dev/sda1 /root`, `cd /root/lib64`, de data aceasta trebuie să utilizați o cale relativă `ln -sf ../lib/x86_64-linux-gnu/ ld-2.33.so ld-linux-x86-64.so.2`
Puncte:3
drapel cn

/usr/bin/care este un shellscript:

~$ cat /usr/bin/care
#! /bin/sh
set -ef

if test -n "$KSH_VERSION"; atunci
        pune() {
                print -r -- "$*"
        }
altfel
        pune() {
                printf „%s\n” „$*”
        }
fi
...
...
...

Acestea sunt doar primele rânduri ale scenariului, este mult mai lung. Dar trebuie doar să aruncăm o privire la prima linie care este

#! /bin/sh

/cos este legat de /usr/bin, asa de /bin/sh arata spre /usr/bin/sh.

Se pare că ați șters fișierele de sistem esențiale, de aceea comenzile nu funcționează pentru dvs. CD și ecou nu sunt comenzi ci shell-builtins, de aceea încă funcționează.

Nu vă putem spune ce fișiere ați eliminat, deoarece nu știm în ce director ați emis fișierul rm -rf *-comanda. Poate că este posibil să copiați fișierele dintr-o sesiune live și să readuceți sistemul să funcționeze, dar va trebui să aflați singur ce fișiere lipsesc. În caz contrar, reinstalați.

Sugestie: Pe sistemul meu am doar un singur fișier /lib64:

~$ ~$ ~$ ls -la /lib64/
total 8
drwxr-xr-x 2 root root 4096 Oct 13 03:37 .
drwxr-xr-x 14 root root 4096 Oct 13 03:37 ..
lrwxrwxrwx 1 root root 42 Sep 28 08:38 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

Acesta este un link simbolic, doar recrearea linkului simbolic ar trebui să fie suficientă, dar din moment ce comenzile nu mai funcționează, va trebui să faceți acest lucru dintr-o sesiune live.

muru avatar
drapel us
Ar trebui să încercați `ls -la /lib64/`, deoarece se pare că OP a intrat în director înainte de a șterge totul din el.
mook765 avatar
drapel cn
@muru Nu văd nicio diferență între `ls -la /lib64` și `ls -la /lib64/`.
muru avatar
drapel us
Este destul de ciudat. A doua opțiune ar trebui să listeze conținutul directorului țintă al link-ului simbolic (conținutul pe care OP în acest caz l-a eliminat). `ls -laH /lib64/`, atunci dacă `ls` dvs. ar putea fi un alias care are o opțiune care distruge acel comportament.
mook765 avatar
drapel cn
@muru Da, văd asta acum, ai dreptate. Deoarece `/lib64` nu este un folder ci un link simbolic... editat...
Puncte:1
drapel in

Directorul /lib64 conține biblioteci partajate care sunt necesare pentru executabilele legate dinamic. Acestea partajează cod comun în bibliotecile partajate, mai degrabă decât să-l copieze în fiecare executabil. Lucruri precum scripturile shell probabil nu ar funcționa, deoarece acelea rulează comenzi care pot fi întrerupte.

Comenzile care funcționează sunt fie încorporate în shell-ul tău (cum ar fi CD și ecou) sau sunt legate static. Comanda busybox este prin proiectare legată static și are versiuni abreviate ale multor comenzi încorporate în ea.

Daunele aduse directoarelor de sistem precum /lib64 sunt aproape fatale pentru un sistem Unix. Pentru a restabili funcționalitatea, trebuie să restaurați fișierele lipsă. Opțiunile pentru a face acest lucru ar include:

  • a restabili din fisierul de backup
  • reinstalând fișierele deb din care provin
  • copierea fișierelor dintr-un alt sistem identic cu aceeași versiune a sistemului de operare
  • porniți de pe un disc de instalare live și utilizați instrumentele de pe discul live pentru a înlocui fișierele lipsă
  • reinstalați complet sistemul de operare (mai întâi faceți o copie de rezervă a datelor)

Este posibil să faceți o restaurare parțială și apoi să utilizați ceva de genul dpkg -V pentru a obține o listă cu lucruri diferite sau care lipsesc din fișierele stoc și reinstalați unele dintre pachetele deteriorate cu apt install --reinstall. Din păcate, dpkg și instrumentele pe care le folosește se bazează toate pe biblioteci partajate, așa că cel puțin cele critice trebuie să fie acolo înainte ca acest lucru să ajute.

Din păcate, în astfel de situații, este adesea mai rapid și mai ușor să reinstalați de la zero decât să reparați deteriorarea.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.