Bash не может запустить программу, которая это там и имеет все правильные полномочия

Мы используем ServersAlive для обработки нашего контроля. Имеет встроенное дисковое пространство и файлы в контроле папки.

4
задан 5 August 2009 в 02:14
8 ответов

lm флаг в Вашем /proc/cpuinfo указывает, что Ваш сервер имеет ЦП на 64 бита.

Информация от file prog указывает, что программа компилируется для архитектуры на 32 бита. Попытайтесь установить эти 32 библиотеки. Я не знаком с тем, как сделать это в хинду, но возможно эта хинду статья Wiki может помочь.

У меня была подобная проблема (удар, сообщая о файле, не находимом) при попытке выполнить Мост Отладки Android на установке на 64 бита Ubuntu, потому что это компилируется для 32 битов.

10
ответ дан 3 December 2019 в 02:20
  • 1
    /proc/cpuinfo находится в вопросе... –  Rory 4 August 2009 в 19:47
  • 2
    Я couldn' t включают эту ссылку в мой ответ о флаге lm: linuxquestions.org/questions/linux-general-1/… –  Toby Stafford 4 August 2009 в 21:35
  • 3
    Согласованный, отсутствие 32-разрядных библиотек (или главное, отсутствие 32-разрядного компоновщика) являются, вероятно, причиной. file вывод команды говорит, что программа динамично связана, но ldd говорит это isn' t. Если I' m ошибочный, ldd потребности динамический компоновщик для определения необходимых общих библиотек. На моем хинду Xen VM я имею и /lib32/ld-linux.so.2 и /lib64/ld-linux.so.2, таким образом, I' d предполагают, что исходный плакат отсутствует /lib32 версия. –  James Sneeringer 4 August 2009 в 23:09
  • 4
    Так 64-разрядная двоичная работа, но 32-разрядный не делают. Я полагаю, что Toby прав, Вы просто don' t имеют любую из 32-разрядных установленных библиотек совместимости. Ссылка, которую он предоставил, должна помочь. You' ll нужно к emerge набор пакетов, которые могут взять некоторое время, но необходимо закончить с системой, которая может выполнить 32-разрядные двоичные файлы. –  James Sneeringer 5 August 2009 в 07:28
  • 5
    Установка всех тех emul -* программы hasn' t помог... –  Rory 5 August 2009 в 12:32

Попробуйте следующее:

ldd /usr/local/bin/prog

Или выполненный это под strace:

strace /usr/local/bin/prog

Я предположил бы, что программа связана против общей библиотеки, которая или отсутствует, или скомпилированная для неправильной архитектуры. Учитывая, что это - закрытый исходный код, любой возможен.

3
ответ дан 3 December 2019 в 02:20
  • 1
    strace далек от точки - исполняемый файл даже не найден оболочкой –  nik 4 August 2009 в 19:36
  • 2
    Я выполнил strace и ldd и I' ve обновил вопрос –  Rory 4 August 2009 в 19:40
  • 3
    nik - Некоторые оболочки сообщают о " никакой такой файл или directory" если исполняемый файл динамично связан, и одна или несколько общих библиотек отсутствует. В этом случае strace покажет Вам неудавшееся открытое () вызов. Более новые версии Bash, по-видимому, предлагают более полезный " ошибка, в то время как загрузка совместно использовала libraries" сообщение, все же. –  James Sneeringer 4 August 2009 в 20:03
  • 4
    @James, Положительная сторона. –  nik 4 August 2009 в 20:20

Что относительно того, чтобы установить исполнительный флаг в файловой системе монтируются?

mount -o remount,exec server:/path /mntpoint

Если исполнительный флаг не установлен для файловой системы, никакой исполняемый файл не может быть выполнен от той файловой системы.

2
ответ дан 3 December 2019 в 02:20
  • 1
    Я могу выполнить другие команды в этой файловой системе, it' s смонтированный как ' значения по умолчанию, nosuid' that' s все. –  Rory 5 August 2009 в 02:01

Можно ли получить результаты для,

  • which prog
  • cat /proc/cpuinfo - я предполагаю, что Вы имеете /proc

Небольшие указатели,

  1. Можно ли выполнить некоторый другой исполняемый файл успешно, который также показывает 32-разрядный?
    • Можно ли выполнить некоторый другой исполняемый файл также по точке монтирования
      (Вы могли скопировать тот там на машине сервера, должен появиться по монтированию после копии),
1
ответ дан 3 December 2019 в 02:20
  • 1
    то, которое./прогр дает корректный полный путь прогр/proc/cpuinfo, рассматриваемо –  Rory 4 August 2009 в 19:42

Файл нельзя было бы действительно назвать 'прогр'. Unix позволяет Вам использовать любой символ в имени файла, включая клавишу Backspace, пространство, и т.д. Например, файл можно было назвать 'p^Hprog' и всем, что Вы будете видеть, "прогр". Так как у Вас есть удар, можно использовать в своих интересах автоматическое заполнение:

> ls ./[TAB] # where [TAB] means you hit the tab key

если это соответствует чему-нибудь, Вы могли

> mv ./[TAB]

Если бы Вы - написание кода, Вы хотели бы перечислить все файлы в каталоге и выставочных шестнадцатеричных значениях для каждого символа в имени файла.

1
ответ дан 3 December 2019 в 02:20
  • 1
    Хорошее предложение - но другие команды оболочки, показанные в вопросе, находит файл прекрасным, таким образом, я don' t думают, что это - проблема. –  Bevan 4 August 2009 в 22:44
  • 2
    Ой! пропущенный это! –  atk 4 August 2009 в 23:32
  • 3
    Очень умный, это hadn' t произошел со мной, чтобы сделать это. I' ll имеют в виду тот прием –  Rory 5 August 2009 в 02:05
$ less prog | head
ELF Header:
Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
Class:                             ELF32
Data:                              2's complement, little endian
Version:                           1 (current)

Это подозрительно (если у Вас нет усовершенствованного LESSPIPE)... может Вы делать

ls -l prog

(для размера)

xxd prog | head

(для фактического содержания)

Кроме того, попытайтесь переименовать его к myprog и затем выполнить./myprog

1
ответ дан 3 December 2019 в 02:20

Да я понимаю, что этому вопросу два года. Но вот возможный ответ:

execve () возвращает ENOENT, когда он не может найти интерпретатор ELF. В моем случае мне была нужна символьная ссылка от/lib/ld_lsb.so.3-> ld_linux.so.2. Это - указанное местоположение Основы Стандарта Linux для интерпретатора ELF. Может быть пакет в Вашем распределении, которое предоставляет эту символьную ссылку, вероятно, названную чем-то как 'lsb'.

1
ответ дан 3 December 2019 в 02:20

Я нашел этот лакомый кусочек внутри PDF-файла:

Чтобы установить поддержку 32-разрядной среды выполнения, выполните следующие команды:

  • $ sudo apt-get update
  • $ sudo apt -get install ia32-libs

Обратите внимание, что это устанавливает более 200 пакетов и занимает несколько минут.

Выполнение этого позволило мне запустить под 64-битным Linux: ldd для работы, как а также, например, двоичный код NVIDIA nvflash ...

0
ответ дан 3 December 2019 в 02:20

Теги

Похожие вопросы