Error 'No existe tal archivo o directorio' en bash, pero ¿existe el archivo?

29

En Ubuntu, aparece el error 'No existe tal archivo o directorio' cuando intento ejecutar un comando.

Verifiqué con ls -la, el archivo adbestá allí y tiene la bandera 'x' Entonces, ¿por qué recibo un 'No existe tal archivo o directorio'?

~/Programs/android-sdk-linux_x86/platform-tools$ ./adb
 bash: ./adb: No such file or directory
~/Programs/android-sdk-linux_x86/platform-tools$ ls -la
 total 34120
 drwxrwxr-x 3 silverstri silverstri     4096 2011-10-08 18:50 .
 drwxrwxr-x 8 silverstri silverstri     4096 2011-10-08 18:51 ..
 -rwxrwxr-x 1 silverstri silverstri  3764858 2011-10-08 18:50 aapt
 -rwxrwxr-x 1 silverstri silverstri   366661 2011-10-08 18:50 adb
 -rwxrwxr-x 1 silverstri silverstri   906346 2011-10-08 18:50 aidl
 -rwxrwxr-x 1 silverstri silverstri   328445 2011-10-08 18:50 dexdump
 -rwxrwxr-x 1 silverstri silverstri     2603 2011-10-08 18:50 dx
 drwxrwxr-x 2 silverstri silverstri     4096 2011-10-08 18:50 lib
 -rwxrwxr-x 1 silverstri silverstri 14269620 2011-10-08 18:50 llvm-rs-cc
 -rwxrwxr-x 1 silverstri silverstri 14929076 2011-10-08 18:50 llvm-rs-cc-2
 -rw-rw-r-- 1 silverstri silverstri      241 2011-10-08 18:50 llvm-rs-cc.txt
 -rw-rw-r-- 1 silverstri silverstri   332494 2011-10-08 18:50 NOTICE.txt
 -rw-rw-r-- 1 silverstri silverstri      291 2011-10-08 18:50 source.properties
Miguel
fuente
¿Qué se obtiene si ejecutafile adb
jdigital
me sale este '$ file adb adb: ELF ejecutable LSB de 32 bits, Intel 80386, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.8, no eliminado'
michael

Respuestas:

16

Es un archivo ejecutable que pierde las bibliotecas requeridas. Use lddpara ver qué necesita, luego proporcione estos archivos.

Daniel Beck
fuente
11
me sale este '$ ldd ./adb no es un ejecutable dinámico'
michael
55

Android SDK requiere bibliotecas de 32 bits. Probablemente tenga 64 bits y necesite las bibliotecas de 32 bits. Aquí están las instrucciones de solución de problemas de developer.android.com

Para Ubuntu 13.10 (Saucy Salamandra) y por encima, instale el libncurses5:i386, libstdc++6:i386y zlib1g:i386paquetes usando apt-get:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386

Para versiones anteriores de Ubuntu, instale el ia32-libspaquete usando apt-get:

apt-get install ia32-libs
hoffmanc
fuente
2
maldita sea que instala muchas cosas. Pero funciona.
Travis Reeder
1
Al igual que michael, "archivo" me dijo que era un binario ELF de 32 bits y ldd me dijo que no era un ejecutable dinámico. La instalación de estas bibliotecas de 32 bits solucionó el problema.
Epónimo
2
¡El mensaje de error más engañoso NUNCA! o_O
MathematicalOrchid
re: {Aquí están las instrucciones de solución de problemas de developer.android.com} No veo ninguna dirección de solución de problemas allí ...
ruslo
4
sudo apt-get install --reinstall libc6-i386

También es necesario para mí.

Shawe
fuente
3
¿Quiso decir que ayudó? ¿Alguna idea de por qué? ¿De dónde sacaste esto?
Tamara Wijsman
3

También estaba viendo lo mismo después de cambiar mi máquina de ubuntu de 32 bits a 64 bits. Bash informaría 'No existe tal archivo o directorio' de archivos que claramente existían con el atributo ejecutar

sudo apt-get install --reinstalar libc6-i386

Solucionado el problema. Estas son la "Biblioteca GNU C: bibliotecas compartidas de 32 bits para AMD64"

Parece que esto es un error en bash. Tenga en cuenta que también cambié el shell predeterminado de guión a bash usando

sudo dpkg-reconfigure dash

antes de intentar ejecutar el ejecutable de 32 bits. Así que no estoy seguro de si el problema hubiera sucedido con el shell de tablero predeterminado

usuario240504
fuente
2

En una nueva instalación de Xubuntu 13.10 x64 pude adbejecutar con:

sudo apt-get install --reinstall libc6-i386
sudo apt-get install libstdc++6:i386

Y también zlib1g:i386para hacer el aapttrabajo.

y si aún te falta algo usa:

lld adb
Stéphane
fuente
Esto funcionó muy bien para mí, pero tuve que llamar sudo dpkg --add-architecture i386; sudo apt-get updatepara que libstdc ++ 6: i386 estuviera disponible
nicopico
Creo que quisiste decir ldd adb
Prashanth Chandra
1

Para adb, asegúrese de tener el SDK desempaquetado y de haber ejecutado el SDK Manager para completar el SDK. Además, asegúrese de tener instalado lo siguiente: A.) JDK 6 o mejor B.) lib32stdc ++ 6 C.) lib32ncurses5

hoffmanc fue lo más cercano a hacerlo bien, realmente no entiendo por qué la respuesta de Daniel Beck está marcada como correcta cuando ni siquiera está cerca y no tiene nada que ver con el problema.

Por cierto, si intentas ejecutar un comando verdaderamente inexistente (es decir:

# fakecommand

obtendrá: fakecommand: comando no encontrado, mientras que en su situación el resultado que está viendo en realidad proviene de adb, aunque no está muy claro que ese sea el caso.

Justin Buser
fuente
1

Ubunto parece tener algunos problemas con la compatibilidad con LSB, así que intente esto si está en Ubunto

apt-get install lsb

Tenga en cuenta que ldd mostrará que todas las bibliotecas están allí, pero no lo están.

usmp-vm-lamp01$ ldd lmgrd
 linux-vdso.so.1 =>  (0x00007fffb33fe000)
 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f10b0a48000)
 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10b074c000)
 libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f10b0535000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10b0175000)
 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f10aff71000)
 /lib64/ld-lsb-x86-64.so.3 => /lib64/ld-linux-x86-64.so.2 (0x00007f10b0c67000)
usmp-vm-lamp01$ locate libpthread.so.0
/lib/x86_64-linux-gnu/libpthread.so.0
usmp-vm-lamp01$ locate libm.so.6
/lib/x86_64-linux-gnu/libm.so.6
usmp-vm-lamp01$ locate /lib64/ld-lsb-x86-64.so.3
usmp-vm-lamp01$
Mark Lakata
fuente
Estaba teniendo este problema con un paquete de reconocimiento de voz llamado Julius. Esto es lo que me arregló.
Fireandlight27