Estoy emitiendo el siguiente comando rsync (ofuscando la ruta exacta y el host), que debería copiar dos archivos binarios:
rsync -e "ssh -p 443" -a --info=progress2 -z user@remote:/srv/cgi-bin/ .
user@remotes's password:
5,970,149 100% 6.78MB/s 0:00:00 (xfr#2, to-chk=0/3)
Desde todos los puntos de vista que puedo decir, el comando se completó con éxito.
root@rapunzel:/s/h/p/cgi-bin # >>> ll
total 5.7M
-rwxrwxr-x 1 marcus marcus 3.9M Sep 10 2014 german-numbers
-rwxrwxr-x 1 marcus marcus 1.9M Sep 10 2014 german-numbers-cgi
Pero cuando intento ejecutar cualquiera de los archivos binarios, aparece el siguiente error
root@rapunzel:/s/h/p/cgi-bin # >>> ./german-numbers
zsh: no such file or directory: ./german-numbers
Entonces parece que el binario no está "del todo ahí", pero por otro lado puedo abrirlo y leerlo claramente:
root@rapunzel:/s/h/p/cgi-bin # >>> head -n1 ./german-numbers
ELF04��'4('$444444�=%�=%@%����t��I%������HHHDDP�tdT;%T�T�llQ�td/lib/ld-linux.so.2GNUGNU,B�]2�h$���ɢҒ�S'��� @�P
����ݣkĉ����|(�CE���K��8��]���?�������g���FcH▒3
�_��,�%}�??��>fM7�sn�������F����A{S3a��������,b��)�P▒h�wza�S~�y��*-��y�L
�����m���<�lp�6����W$%xZ�G��X{��V���� �!� �!�t����@��ԅ����I��ԅ��� ��Ș
��librt.so.1__gmon_start___Jv_RegisterClasseslibutil.so.1libdl.so.2libgmp.so.3__gmpz_tdiv_qr__gmpz_and__gmpz_tdiv_q__gmpz_tdiv_r__gmpz_fdiv_qr__gmpn_gcd_1__gmpz_fdiv_q__gmpz_fdiv_r__gmpz_ior__gmpz_mul_2exp__gmp_set_memory_functions_fini__gmpz_sub__gmpz_xor__gmpz_com__gmpz_gcd__gmpz_fdiv_q_2exp__gmpz_init__gmpz_mul__gmpz_divexact__gmpn_cmp__gmpz_addclock_gettimetimer_deletetimer_settimetimer_createdlopendlerrordlsymlibm.so.6modfldexplibc.so.6_IO_stdin_usedepoll_createfflushstrcpysprintfsetlocalefopenstrncmpftruncatestrrchrregexecpipeftruncate64mmap64siginterruptepoll_waitftellstrncpyforksigprocmaskregfreeunlinkpthread_mutex_lockselectmkdirreallocabortgetpidkillstrdupmkstempstrtodstrtolisattysetmntentmmapctime_rfeoffgetscallocstrlensigemptysetmemset__errno_locationtcsetattrfseekgetpagesizeeventfddup2pause__fxstat64sigaddsetpthread_mutex_unlockstdoutfputcgetrusagefputsregerrormemcpyfclosemprotectmallocraisegetgid__lxstat64nl_langinfohasmntopt__xstat64getenv__ctype_b_locregcompstderrsigdelsetmunmapgetuidgetegid__sysv_signalpthread_mutex_initfwritefreadgettimeofdayiconv_closesigactionepoll_ctlstatfsgeteuidlseek64strchrendmntentutimegetlineiconviconv_opentcgetattrbsearchfcntlgetmntent_rmemmovefopen64access_IO_getcstrcmpstrerror__libc_start_mainvfprintfsysconf__environ__cxa_atexit_edata__bss_start_endGLIBC_2.1GLIBC_2.0GLIBC_2.2GLIBC_2.3GLIBC_2.7GLIBC_2.3.4GLIBC_2.3.2GLIBC_2.1.3
No tengo ideas de por qué zsh (y para que conste: bash también) no encuentra ese archivo, ¿alguien tiene una idea?
Respuesta1
Está intentando ejecutar un ejecutable de 32 bits en un sistema de 64 bits. Para hacerlo, debe instalar las bibliotecas de 32 bits; en resumen, debe hacer que su sistema sea multilib.
o intente recompilar enviando las fuentes también a través de rsync.
Respuesta2
Salida de file german-numbers
y uname -a
mostrará detalles, incluida la arquitectura.
Lo más probable es que hayas copiado
- Un archivo de 32 bits a un sistema de 64 bits o vv
- Un Intel para ARM o vv
- Le faltan una o más bibliotecas vinculadas dinámicamente a las que hace referencia el ejecutable. Úselo
ldd german-numbers
para ver la lista de bibliotecas requeridas