Pertanyaan Tidak ada berkas atau direktori seperti itu? Tapi file itu ada!


Saya sudah mengunduh game (Shank) tetapi file bin tidak berjalan. Kesalahan yang ditampilkan saat saya mencoba meluncurkan eksekusi adalah:

bash: ./shank-linux-120720110-1-bin: No such file or directory

149
2018-05-07 19:06


asal


Mungkin "chmod u + x ./shank*bin" dulu? - agent86
juga seharusnya tidak menjadi '.bin' daripada '-bin', mungkin itu hanya salah ketik - Anake
Terimakasih atas balasan anda. Saya telah melakukan perintah yang Anda ucapkan kepada Agent86 tetapi saya memiliki hasil yang sama. Saya sudah mengunduh juga file .deb tetapi ada masalah juga. Saya tidak tahu masalah apa yang ada pada game ini. - Francesco
Silakan konfirmasi apakah Anda menjalankan instalasi 64-bit (itu kasus yang paling umum untuk masalah ini). - Gilles
Ya saya konfirmasi bahwa saya menggunakan arsitektur 64-bit di laptop saya. - Francesco


Jawaban:


Anda mungkin mencoba menjalankan biner 32-bit pada sistem 64-bit yang tidak memiliki dukungan 32-bit yang diinstal.

Ada tiga kasus di mana Anda bisa mendapatkan pesan "Tidak ada file atau direktori seperti itu":

  • File itu tidak ada. Saya kira Anda sudah memeriksa bahwa file itu ada (mungkin karena shell menyelesaikannya).
  • Ada file dengan nama itu, tetapi itu adalah tautan simbolis yang menggantung.
  • File itu ada, dan Anda bahkan dapat membacanya (misalnya, perintahnya file shank-linux-120720110-1-bin menampilkan sesuatu seperti "ELF 32-bit LSB executable ..."), namun ketika Anda mencoba untuk mengeksekusinya, Anda diberitahu bahwa file tersebut tidak ada.

Pesan kesalahan dalam kasus terakhir ini memang membingungkan. Apa yang dikatakannya adalah bahwa komponen kunci dari lingkungan runtime yang diperlukan untuk menjalankan program tidak ada. Sayangnya, saluran yang melaluinya kesalahan dilaporkan hanya memiliki ruang untuk kode kesalahan dan bukan untuk informasi tambahan ini bahwa itu benar-benar lingkungan runtime yang harus disalahkan. Jika Anda ingin versi teknis dari penjelasan ini, baca Mendapatkan pesan "Tidak ditemukan" saat menjalankan biner 32-bit pada sistem 64-bit.

Itu file perintah akan memberi tahu Anda apa itu biner ini. Dengan beberapa pengecualian, Anda hanya dapat menjalankan biner untuk arsitektur prosesor yang digunakan untuk rilis Ubuntu Anda. Pengecualian utama adalah Anda dapat menjalankan binari 32-bit (x86, a.k.a. IA32) pada sistem 64-bit (amd64, a.k.a. x86_64).

Di Ubuntu hingga 11.04, untuk menjalankan biner 32-bit pada instalasi 64-bit, Anda harus instal ia32-libs paket  Install ia32-libs. Anda mungkin perlu menginstal pustaka tambahan (Anda akan mendapatkan pesan kesalahan eksplisit jika Anda melakukannya).

Sejak 11.10 (satuiric) diperkenalkan multiarch dukungan, Anda masih bisa menginstal ia32-libs, tetapi Anda dapat memilih pendekatan yang lebih halus, cukup untuk mendapatkannya libc6-i386  Install libc6-i386 (ditambah perpustakaan lain yang diperlukan).


201
2018-05-07 21:47



Terima kasih atas jawaban yang bagus, Gilles. Meskipun saya belum mengalami masalah ini (belum!), Saya telah mengajukan jawaban Anda untuk referensi di masa mendatang. - Jim C
Terima kasih atas jawaban lengkapmu! File bin yang saya unduh adalah satu-satunya yang tersedia dalam format ini (bin). Jadi saya pikir bagus untuk semua arsitektur. Saya juga mengunduh file .deb untuk arsitektur saya (64bit) tetapi dengan kesalahan yang berbeda. Pada titik ini saya berpikir bahwa game dipengaruhi oleh beberapa bug atau saya tidak dapat menginstal game ini. Sekarang saya mencoba mengunduh libc6-i386 dan saya masih mencoba untuk menginstalnya. Saya akan menulis lagi jika ada perubahan yang signifikan. Terima kasih untuk waktu Anda. - Francesco
@Francesco Silakan lakukan posting solusi! Ini mungkin untuk membantu orang lain yang mencoba menjalankan Shank di Ubuntu. Sangat baik untuk menjawab pertanyaan Anda sendiri. - Gilles
Kamu dapat memakai ldd untuk memeriksa apakah Anda melewatkan perpustakaan. ldd kgio_ext.so mungkin mengatakan sesuatu seperti itu libruby.so.2.3 => not found diantara yang lain - EnabrenTane
Tampaknya ada skenario lain ketika bash: ...some...path...: No such file or directory dapat muncul: setelah memindahkan file yang dapat dieksekusi. Bash tampaknya cache path ke executable yang ditemukan dalam $ PATH; menjalankan hash -r untuk membersihkannya. Lihat: unix.stackexchange.com/a/5610/11352 - akavel


Sistem Ubuntu Multiarch 64 bit

Ikuti jawaban ini hanya jika output file file-name acara,

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

Untuk menjalankan file executable 32bit dalam sistem multi-arch Ubuntu 64 bit, Anda harus menambahkan i386 arsitektur dan juga Anda harus menginstal libc6:i386,libncurses5:i386,libstdc++6:i386 tiga paket perpustakaan ini.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name

40
2018-04-24 13:14



Saya akan menggunakan sudo untuk perintah terakhir: meluncurkan biner 32-bit (jadi jelas tidak dikompilasi oleh Anda atau Ubuntu) karena sudo bisa berisiko. (baik, bahkan sebagai non root, diakui) - alci
apa pun itu pada akhirnya tetapi itu berhasil. - Avinash Raj
Perlu dicatat bahwa jika Anda menggunakan CentOS atau RedHat, jawaban ini tidak berlaku. Dilemparkan selama beberapa jam karena ini. - oMiKeY
Pada Kali 2 64 bit, saya hanya perlu menginstal libselinux1:i386 - Aralox


Dengan menginstal deb untuk 32 bit, saya menyadari bahwa saya kehilangan beberapa pustaka (selain ia32-libs dan libc6). Saya pertama memecahkan masalah ini dengan memberikan perintah ini:

sudo apt-get install -f          

Lalu saya mendapat kesalahan lain:

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

Tentunya, pustaka ini dipasang dengan benar. Tanpa masuk ke rincian saya harus menghubungkan perpustakaan dengan tangan. Saya menyadari bahwa itu juga bisa menjadi solusi yang lebih mudah melalui Synaptic menginstal paket-paket berikut:

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

Setelah itu masalah berikutnya adalah layar hitam saat bermain, yang saya pecahkan dengan mengganti executable di / Shank / bin dengan ini: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar.bz2.

Saya berharap ini akan berguna bagi seseorang. Jika Anda membutuhkan bantuan lebih lanjut atau lebih banyak detail jangan ragu untuk menghubungi saya.


4
2018-05-09 19:12





Berikut adalah transkrip yang menunjukkan sedikit lebih banyak tentang sifat masalah, dan bagaimana memperbaikinya pada Ubuntu 16.04. Perhatikan itu meskipun file laporan "terkait secara dinamis", ldd laporan "bukan dieksekusi secara dinamis".

$ ./myprogram
bash: myprogram: No such file or directory

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

Setelah Anda menginstal libc6: i386, hal-hal mulai membaik ...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Untuk menyelesaikan pekerjaan, Anda mungkin perlu mengidentifikasi dan menginstal pustaka tambahan satu per satu ...

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

Saya tidak tahu apakah ada cara sistematis untuk mengidentifikasi pustaka yang benar untuk dipasang. Ada sedikit tebakan yang memetakan pesan kesalahan ke nama paket (bantuan penyelesaian tab).


3
2018-06-08 20:57



ldd (salah) melaporkan "tidak dapat dieksekusi secara dinamis". - nobar


Untuk memperluas jawaban @Gilles, setidaknya ada tiga skenario yang menghasilkan kesalahan ini:

  1. File itu tidak ada.
  2. File itu ada tetapi merupakan tautan simbolis yang menggantung.
  3. File ada (mis. file perintah berfungsi), membuat pesan galat yang membingungkan. Ini mungkin berarti ada masalah dengan loader.

Kategori masalah loader:

  1. Loader executable tidak ada. Anda dapat memeriksa ini menggunakan perintah file dan melihat apakah loader memang ada. Misalnya.

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    Melihat interpreter /lib64/ld-lsb-x86-64.so.3; jika file ini tidak ada, Anda perlu menginstalnya. Untuk loader khusus ini pada 16.04, jawabannya ternyata sudo apt-get install lsb.

  2. Masalah dengan pemuat skrip (lihat jawaban ini).

  3. Hilang pustaka bersama - gunakan ldd <file-name> untuk memeriksa pustaka "tidak ditemukan" apa pun. Lihat jawaban ini untuk info lebih lanjut.

Loader yang tidak ada bisa disebabkan oleh ketidakcocokan 32/64 bit atau alasan lainnya. Mungkin ada jenis kesalahan loader lain yang tidak saya ketahui.


2
2018-05-11 18:54



Dalam hal ini, file lmutil tidak menunjukkan penerjemah, tapi ldd lakukan, dan menginstal lsb memecahkan masalah. - meowsqueak