$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped
Portanto, myfile
existe, mas a execução dá a mensagem "Nenhum arquivo ou diretório". Isso acontece na seguinte circunstância:
- O arquivo depende de um carregador - é um executável vinculado dinamicamente e precisa de um programa de carregamento para carregar as bibliotecas vinculadas dinamicamente. (O carregador também pode ser o intérprete designado por uma linha shebang, mas o bash detecta esse caso e fornece uma mensagem de erro diferente.)
- O arquivo do carregador não está presente.
A mensagem “Nenhum arquivo ou diretório” é realmente sobre o carregador, mas o shell não sabe que o carregador está envolvido, por isso ele relata o nome do arquivo original. Explico isso com mais detalhes em “Nenhum arquivo ou diretório” está em binários instalados pelo Optware .
Por que você não pode executar este programa? Porque você não tem o carregador dinâmico para executáveis de 64 bits.
$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped
Seu sistema tem um kernel de 64 bits, mas o resto do sistema é de 32 bits. O Linux suporta essa configuração (um kernel de 64 bits pode executar programas de 64 bits e de 32 bits, mas um kernel de 32 bits só pode executar programas de 32 bits). O kernel pode carregar o programa muito bem; você seria capaz de executar um executável amd64 vinculado estaticamente. No entanto, você não tem o carregador de 64 bits ( /lib64/ld-linux-x86-64.so.2
) nem presumivelmente qualquer biblioteca de 64 bits. Então você não pode executar executáveis amd64 dinamicamente vinculados.
Por que você executaria um kernel de 64 bits com uma área de usuário de 32 bits?
- Para usar mais de cerca de 3 GB de memória física. (Esta não é a única maneira - outra possibilidade é executar um kernel de 32 bits que suporte PAE).
- Para poder executar binários de 64 bits, por exemplo inicializando no SO ao vivo e então fazendo o script em um sistema de 64 bits instalado em algum lugar.
- Para reduzir o esforço de manutenção para a distribuição: forneça um único kernel para hardware recente e torne-o de 64 bits.
- Para executar máquinas virtuais de 64 bits (alguns mecanismos de VM exigem um kernel de 64 bits para executar uma VM de 64 bits).
Eu não acho que o Tails forneça um sistema de 64 bits. Você deve obter uma versão de 32 bits do executável. Se você não puder, use alguma outra distribuição (possivelmente em uma máquina virtual).