"Tidak ada file atau direktori seperti itu" tetapi itu ada

94

Saya hanya ingin menjalankan eksekusi dari baris perintah ./arm-mingw32ce-g++, tetapi kemudian saya mendapatkan pesan kesalahan,

bash: ./arm-mingw32ce-g++: No such file or directory

Saya menjalankan Ubuntu Linux 10.10. ls -ldaftar

-rwxr-xr-x 1 root root  433308 2010-10-16 21:32 arm-mingw32ce-g++

Menggunakan sudo ( sudo ./arm-mingw32ce-g++) memberi

sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory

Saya tidak tahu mengapa OS bahkan tidak dapat melihat file ketika ada di sana. Ada pemikiran?

Warpspace
sumber

Jawaban:

82

Kesalahan ini dapat berarti bahwa ./arm-mingw32ce-g++tidak ada (tetapi memang ada), atau bahwa itu ada dan merupakan executable yang terhubung secara dinamis yang dikenali oleh kernel tetapi pemuat dinamisnya tidak tersedia. Anda dapat melihat pemuat dinamis apa yang dibutuhkan dengan menjalankan ldd /arm-mingw32ce-g++; apa pun yang ditandai not foundadalah pemuat dinamis atau pustaka yang perlu Anda instal.

Jika Anda mencoba menjalankan biner 32-bit pada instalasi amd64:

Gilles 'SO- berhenti menjadi jahat'
sumber
16
Luar biasa, berhasil! Omong-omong, keluaran dari ldd adalah not a dynamic executable(sebelum saya menginstal ia32-libs).
Warpspace
3
ia32-libs-*sudah usang di Ubuntu 16.04, instal lib32ncurses5dan lib32z1sebagai gantinya.
GaloisPlusPlus
2
Ini adalah masalah umum di Nix atau NixOS saat mencoba menjalankan binari pihak ketiga; lihat patchelf.
bbarker
30

Saya menghadapi kesalahan ini ketika saya mencoba membangun sumber Selenium di Ubuntu. Skrip shell sederhana dengan shebang yang benar tidak dapat dijalankan bahkan setelah saya memenuhi semua prasyarat.

file file-name # helped me in understanding that CRLF ending were present in the file.

Saya membuka file di Vim dan saya dapat melihat bahwa hanya karena saya pernah mengedit file ini di mesin Windows, itu dalam format DOS. Saya mengonversi file ke format Unix dengan perintah di bawah ini:

dos2unix filename # actually helped me and things were fine.

Saya harap kita harus berhati-hati setiap kali kita mengedit file di seluruh platform, kita juga harus menjaga format file.

h3xh4wk
sumber
Berhasil! setelah mencoba banyak hal, inilah solusinya. Terima kasih!
Pedro Perez
20

Kesalahan ini juga dapat terjadi jika mencoba menjalankan skrip dan shebang salah eja. Pastikan membaca #!/bin/sh, #!/bin/bash, atau mana interpreter yang Anda gunakan.

Zoltán
sumber
4
Saya mengacu pada yang dapat dieksekusi, bukan skrip. Kemudian lagi, orang lain mungkin menganggap komentar ini berguna
Warpspace
1
Benar, tapi saya mendapatkan pertanyaan ini untuk masalah yang tepat ini, jadi seperti yang Anda katakan, mungkin orang lain juga akan melakukannya.
Zoltán
Dalam kasus saya, saya mencoba lari, ./my/full/path/myscriptbukan ./myscript.
Noumenon
8

Saya mendapat pesan kesalahan yang sama ketika mencoba menjalankan skrip Python - ini bukan kasus penggunaan yang dimaksudkan @ Warpspace (lihat komentar lain), tetapi ini adalah salah satu hit teratas untuk pencarian saya, jadi mungkin seseorang akan menganggapnya berguna.

Dalam kasus saya itu adalah akhir baris DOS ( \r\nbukan \n) bahwa garis shebang ( #!/usr/bin/env python) akan tersandung. A sederhana dos2unix myfile.pymemperbaikinya.

djlauk
sumber
4

Saya mendapat kesalahan yang sama untuk skrip bash sederhana yang tidak akan memiliki masalah 32/64-bit. Ini mungkin karena skrip yang Anda coba jalankan memiliki kesalahan di dalamnya. Posting forum ubuntu ini menunjukkan bahwa dengan file skrip normal Anda dapat menambahkan 'sh' di depan dan Anda mungkin mendapatkan beberapa keluaran debug darinya. misalnya

$ sudo sh arm-mingw32ce-g++

dan lihat apakah Anda mendapatkan hasil.

Dalam kasus saya, masalah sebenarnya adalah file yang saya coba jalankan dalam format Windows daripada linux.

icc97.dll
sumber
3

Saya mendapat kesalahan ini “No such file or directory”tetapi itu ada karena file saya dibuat di Windows dan saya mencoba menjalankannya di Ubuntu dan file tersebut berisi 15 \ r yang tidak valid di mana pun ada baris baru di sana. Saya baru saja membuat file baru yang memotong hal-hal yang tidak diinginkan

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh 
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed 
Panci
sumber
3

Perintah di bawah ini bekerja pada 16.4 Ubuntu

Masalah ini muncul ketika file .sh Anda rusak atau tidak diformat sesuai protokol unix.

dos2unix mengubah file .sh menjadi format Unix!

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh 
sudo ./test.sh
Karang
sumber
1

Saya memiliki masalah yang sama dengan file yang saya buat di mac saya. Jika saya mencoba menjalankannya di shell dengan ./filename, saya mendapat pesan kesalahan file tidak ditemukan. Saya pikir ada yang salah dengan file tersebut.

apa yang telah kulakukan:

buka sesi ssh ke server
cat nama file
salin output ke clipboard
rm nama file
sentuh nama file
vi nama file
i untuk mode
sisipkan konten dari clipboard
ESC untuk mengakhiri mode penyisipan
: wq!

Ini berhasil untuk saya.

ruang
sumber
1

Saya baru saja mengalami masalah ini mingw32 bash. Saya telah mengeksekusi node / npm dari Program Files (x86)\nodejsdan kemudian memindahkannya ke disableddirektori (pada dasarnya menghapusnya dari jalur). Saya juga memiliki Program Files\nodejs(mis. Versi 64bit) di jalur, tetapi hanya setelah versi x86. Setelah bash shell dimulai ulang, versi 64bit dari npm dapat ditemukan. nodebekerja dengan benar sepanjang waktu (diperiksa dengan node -vyang berubah ketika versi x86 dipindahkan).

Saya pikir bash -rakan berhasil daripada memulai ulang bash: https://unix.stackexchange.com/a/5610

Pasi Savolainen
sumber
1

Seperti yang disebutkan oleh orang lain, ini karena loader tidak dapat ditemukan, bukan file yang dapat dieksekusi. Sayangnya pesan tersebut kurang jelas.

Anda dapat memperbaikinya dengan mengubah pemuat yang digunakan dapat dieksekusi, lihat jawaban lengkap saya di pertanyaan lain ini: Beberapa pustaka glibc pada satu host

Pada dasarnya Anda harus menemukan loader mana yang coba digunakan:

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

Kemudian temukan jalur yang benar untuk loader yang setara, dan ubah executable Anda untuk menggunakan loader dari jalur yang sebenarnya:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

Anda mungkin perlu mengatur jalur penyertaan juga, Anda akan tahu apakah Anda menginginkannya atau tidak setelah Anda mencoba menjalankannya. Lihat semua detail di utas lainnya itu.

msb
sumber
1

Saya menemukan solusi saya untuk Ubuntu 18 saya di sini .

sudo dpkg --add-architecture i386

Kemudian:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
betontalpfa.dll
sumber
0

Saya mengalami masalah ini dan alasannya adalah EOL di beberapa editor seperti Notepad ++. Anda bisa mengeceknya di menu Edit / konversi EOL. Unix (LF) harus dipilih. Semoga bermanfaat.

pengguna3184564
sumber
Itu tidak mungkin menjadi masalah dalam kasus ini, karena perintah tidak dijalankan dari file.
RalfFriedl
0

Ditambahkan di sini untuk referensi di masa mendatang (untuk pengguna yang mungkin termasuk dalam kasus yang sama): Kesalahan ini terjadi saat bekerja di Windows (yang memperkenalkan karakter tambahan karena pemisah baris yang berbeda dari sistem Linux) dan mencoba menjalankan skrip ini (dengan karakter tambahan dimasukkan) di Linux. Pesan kesalahan menyesatkan.

Di Windows, pemisah garis adalah CRLF ( \ r \ n ) sedangkan di linux adalah LF ( \ n ). Ini biasanya dapat dipilih di editor teks.

Dalam kasus saya, ini terjadi karena bekerja pada Windows dan mengunggah ke server Unix untuk dieksekusi.

PALEN
sumber
1
Saya menggunakan buruh pelabuhan, linux, tetapi membangunnya dari Windows. Skrip saya mulai scriptdir=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)saat itu cd $scriptdir || exit 1tetapi \rfile yang diedit di windows saya ditambahkan ke scriptdirnilainya. Jadi pesannya : no such file or directorypaling membingungkan, karena akhirnya menghapus apa yang dikeluhkannya.
Jesse Chisholm