GNU/Linux >> Linux Esercitazione >  >> Linux

L'eseguibile Linux non riesce con File non trovato anche se il file è presente e in PATH

Questo:

$ file /usr/bin/wine
/usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, 
BuildID[sha1]=eaf6de433d8196e746c95d352e0258fe2b65ae24, stripped

In combinazione con questo:

$ ldd /usr/bin/wine
/usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory

Suggerisce fortemente che il sistema non ha il /lib/ld-linux.so.2 Interprete ELF. Cioè, questo sistema a 64 bit non ha alcuna libreria di compatibilità a 32 bit installata. Pertanto, la risposta di @ user1334609 è sostanzialmente corretta.


OK, sono stato impegnato nelle ultime otto ore per rimettere in funzione il mio sistema dopo l'arresto per surriscaldamento della CPU. Al riavvio è diventato evidente che era così incasinato che persino la console di riserva di initrd non riconosceva più la mia tastiera. Per me è un mistero come il sistema sia riuscito a rimanere operativo così a lungo, mentre cercavo di mettere in atto gli innumerevoli suggerimenti da voi (grazie mille!!)

Problema al riavvio:

Warning: /lib/modules/4.11.3-1-ARCH/modules.devname not found - ignoring
ERROR: device 'UUID=...' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=...'.
You are being dropped to a recovery shell
Type 'exit' to try and continue booting
sh: can't access tty: job control turned off

e nessuna tastiera funziona dopo :-)

Il problema era:un aggiornamento ha sostituito il collegamento simbolico /lib -> /usr/lib con una rubrica. Ciò significava tutte le librerie e i moduli del kernel, che dovrebbero essere in /lib mancavano :-)

Quindi ho ricreato il collegamento simbolico e reinstallato il sistema di base da un CD live.

Ora che ho di nuovo internet, ho trovato anche questo thread

Ho anche usato il gestore di pacchetti della mia installazione su disco in brick (chiamato pacman ) dal live CD per reinstallare tutti i pacchetti del gruppo base (forse solo il kernel, quindi il pacchetto linux sarebbe bastato, non so)

Per farlo, monta la partizione principale dell'installazione in brick su /mnt directory del sistema live CD e usa chroot per fare pacman pensa /mnt è / (inserisci la partizione principale del tuo sistema in muratura per sdXXX )

mount /dev/sdXXX /mnt
# Recreate the /lib -> usr/lib symlink
ln -s usr/lib /lib  
# Mount essential system folders also to the respective subfolders of /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
# Fake /mnt to be /, so that pacman installs the packages to the correct  places
chroot /mnt
# Reinstall the Arch Linux base system
pacman -Sy base

Per la cronaca:crea un collegamento simbolico relativo, quindi ln -s usr/lib /mnt/lib e non ln -s /usr/lib /mnt/lib , perché durante l'avvio iniziale del sistema (fase initrd) la partizione principale verrà montata prima su /new_root . Se il collegamento simbolico fosse assoluto, si otterrebbe l'errore sopra menzionato durante l'avvio iniziale.


Stai tentando di eseguire un'applicazione a 32 bit su un sistema operativo a 64 bit, quindi devi installare le librerie di compatibilità a 32 bit (glibc in particolare) prima che funzioni.


Linux
  1. Leggi e scrivi dati da qualsiasi luogo con reindirizzamento nel terminale Linux

  2. Migliora le prestazioni del sistema Linux con noatime

  3. Come acquisire le sessioni del terminale e l'output con il comando di script Linux

  4. Linux:perché non è presente alcun file system Rootfs sul sistema?

  5. Trova un file con i comandi Trova e individua in Linux

Introduzione al file system Linux

Scarica file con Wget sulla shell Linux - Spiegazione ed esempi

Come controllare la versione del sistema operativo e di Linux

Proteggi Linux con il file Sudoers

/bin/ls non trovato, anche se esiste!

Linux:dove mettere il file di scambio