Linux
/home/amnesia/myfile: 找不到命令 — 64 位執行檔,64 位核心
嘗試在終端上執行執行檔(我使用的是 Tails live OS),但我不斷收到錯誤消息。我已經設置了權限。我寫的命令:
sudo ./home/amnesia/myfile
我收到“找不到命令”?
我嘗試使用或不使用 sudo 執行它:
$ sudo /home/amnesia/myfile sudo: unable to execute /home/amnesia/myfile: No such file or directory $ /home/amnesia/myfile bash: /home/amnesia/myfile: No such file or directory
有關文件的資訊(它是二進製文件,而不是腳本):
$ ls -l /home/amnesia/myfile -rwxrwxrwx 1 amnesia amnesia 15327 Sep 3 2013 /home/amnesia/myfile $ 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
關於我的系統的資訊:
$ 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
$ /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
所以
myfile
存在,但執行它會給出消息“沒有這樣的文件或目錄”。這發生在以下情況:
- 該文件依賴於一個載入器——它是一個動態連結的執行檔,它們需要一個載入器程序來載入動態連結的庫。(載入程序也可以是 shebang 行指定的解釋器,但 bash 檢測到這種情況並給出不同的錯誤消息。)
- 載入程序文件不存在。
消息“沒有這樣的文件或目錄”實際上是關於載入器的,但 shell 不知道載入器參與其中,因此它報告了原始文件的名稱。我在“沒有這樣的文件或目錄”中更詳細地解釋了這一點,位於 Optware 安裝的二進製文件中。
為什麼不能執行這個程序?因為您沒有 64 位執行檔的動態載入程序。
$ 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
您的系統有一個 64 位核心,但係統的其餘部分是 32 位的。Linux 支持這種配置(64 位核心可以執行 64 位程序和 32 位程序,但 32 位核心只能執行 32 位程序)。核心可以很好地載入程序;您將能夠執行靜態連結的 amd64 執行檔。但是,您沒有 64 位載入程序 (
/lib64/ld-linux-x86-64.so.2
),也可能沒有任何 64 位庫。所以你不能執行動態連結的 amd64 執行檔。為什麼要在 32 位使用者空間下執行 64 位核心?
- 要使用大約 3GB 以上的物理記憶體。(這不是唯一的方法——另一種可能是執行支持 PAE 的 32 位核心。)
- 為了能夠執行 64 位二進製文件,例如通過在實時作業系統上啟動,然後在某處 chroot 到已安裝的 64 位系統。
- 為了減少分發的維護工作:為最近的硬體提供單個核心,並使其成為 64 位。
- 執行 64 位虛擬機(某些 VM 引擎需要 64 位核心才能執行 64 位 VM)。
我不認為 Tails 提供 64 位系統。您應該獲得 32 位版本的執行檔。如果不能,請使用其他發行版(可能在虛擬機中)。