Исполняемый файл «на самом деле не существует» после rsync

Исполняемый файл «на самом деле не существует» после rsync

Я запускаю следующую команду rsync (скрывая точный путь и хост), которая должна скопировать два двоичных файла:

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)

С любой точки зрения я могу сказать, что команда была выполнена успешно.

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

Но когда я пытаюсь запустить любой из двоичных файлов, я получаю следующую ошибку

root@rapunzel:/s/h/p/cgi-bin # >>> ./german-numbers
zsh: no such file or directory: ./german-numbers

Так что, похоже, двоичный файл «не совсем там», но с другой стороны, я могу его явно открыть и прочитать:

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

У меня нет идей, почему zsh (и, кстати, bash) не находит этот файл. Есть у кого-нибудь идеи?

решение1

Вы пытаетесь запустить 32-битный исполняемый файл в 64-битной системе. Сделайте это, вам нужно установить 32-битные библиотеки, короче говоря, вам нужно сделать вашу систему multilib.

или попробуйте перекомпилировать, отправив исходники через rsync.

решение2

Вывод file german-numbersи uname -aпокажет подробности, включая архитектуру.

Скорее всего, вы скопировали

  1. 32-битный файл на 64-битную систему или vv
  2. Intel to ARM или vv
  3. У вас отсутствует одна или несколько динамически связанных библиотек, на которые ссылается исполняемый файл. Используйте ldd german-numbersдля просмотра списка требуемых библиотек

Связанный контент