Por que o sh diz "não encontrado" quando está definitivamente lá? [duplicado]

21

Estou tentando adicionar ebtables a uma pequena caixa do roteador. Eu fui e peguei um binário compilado para a arquitetura correta, e coloquei na caixa em /sbin/ . Quando eu faço /sbin/ebtables , o shell diz /bin/sh: /sbin/ebtables: not found , mas eu posso fazer ls -l /sbin/ebtables e ele aparece perfeitamente:

-rwxr-xr-x    1 admin    admin        4808 Aug  4 10:36 /sbin/ebtables

Alguma idéia sobre o que está acontecendo aqui?

    
por Shawn J. Goff 04.08.2011 / 17:14

2 respostas

26

Pode ser uma dependência ausente. Notavelmente, você obterá esse tipo de mensagem se o vinculador de tempo de execução ("intérprete de programa") definido no cabeçalho ELF não existir em seu sistema.

Para verificar isso, execute:

readelf -l your_executable|grep "program interpreter"

Se o que ele der a você não existir em seu sistema, ou tiver dependências ausentes (verifique com ldd ), você receberá essa mensagem de erro estranha.

Demo:

$ gcc -o test t.c
$ readelf -l test|grep "program interpreter"
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ ./test
hello!

$ gcc -Wl,--dynamic-linker -Wl,/i/dont/exist.so -o test t.c
$ readelf -l test|grep "program interpreter"
      [Requesting program interpreter: /i/dont/exist.so]
$ ./test
bash: ./test: No such file or directory
    
por 04.08.2011 / 21:21
-2

Você está executando como root ? IIRC algumas implementações bash se recusam a executar qualquer coisa de /sbin e /usr/sbin se você não for root .

Eu encontrei este artigo para uma explicação (talvez não relacionada, fala sobre o OpenSUSE).

    
por 04.08.2011 / 17:28