"Böyle bir dosya veya dizin yok" ama var


94

Sadece komut satırından bir yürütülebilir dosya çalıştırmak istiyorum ./arm-mingw32ce-g++, ancak sonra hata mesajını alıyorum,

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

Ubuntu Linux 10.10 kullanıyorum. ls -llisteler

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

Sudo ( sudo ./arm-mingw32ce-g++) kullanmak

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

İşletim sisteminin dosyayı oradayken neden göremediği hakkında hiçbir fikrim yok. Düşüncesi olan var mı?

Yanıtlar:


82

Bu hata, ./arm-mingw32ce-g++var olmadığı (ancak var olduğu) veya var olduğu ve çekirdek tarafından tanınan ancak dinamik yükleyicisi kullanılamayan dinamik olarak bağlantılı bir yürütülebilir dosya olduğu anlamına gelebilir . Çalıştırarak hangi dinamik yükleyicinin gerekli olduğunu görebilirsiniz ldd /arm-mingw32ce-g++; işaretlenen herhangi bir şey not found, yüklemeniz gereken dinamik yükleyici veya kitaplıktır.

Bir amd64 kurulumunda 32 bitlik bir ikili çalıştırmaya çalışıyorsanız:


16
Harika, çalışıyor! Bu arada, ldd'nin çıktısı not a dynamic executable(ia32-libs'i kurmadan önce) idi.
Warpspace

3
ia32-libs-*Ubuntu 16.04 önerilmiyor yüklemek lib32ncurses5ve lib32z1bunun yerine.
GaloisPlusPlus

2
Bu, 3. taraf ikili dosyalarını çalıştırmaya çalışırken Nix veya NixOS'ta yaygın bir sorundur; patchelf'e bakın.
bbarker

30

Ubuntu'da Selenium kaynağı oluşturmaya çalışırken bu hatayla karşılaştım. Doğru shebang'a sahip basit kabuk betiği, tüm ön koşulları karşılamama rağmen çalıştırılamadı.

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

Dosyayı Vim'de açtım ve bu dosyayı bir kez Windows makinede düzenlediğim için DOS formatında olduğunu görebiliyordum. Dosyayı aşağıdaki komutla Unix formatına çevirdim:

dos2unix filename # actually helped me and things were fine.

Umarım dosyaları farklı platformlarda düzenlerken dikkatli olmalıyız, dosya formatlarına da dikkat etmeliyiz.


İşe yaradı! birçok şeyi denedikten sonra çözüm buydu. Teşekkürler!
Pedro Perez

20

Bu hata, bir komut dosyası çalıştırılmaya çalışılırsa ve satır yanlış yazılmışsa da ortaya çıkabilir . Emin olun okur #!/bin/sh, #!/bin/bashya kullandığınız hangisi tercüman.


4
Bir komut dosyasına değil, çalıştırılabilir bir dosyadan bahsediyorum. Sonra tekrar, başka biri bu yorumu yararlı bulabilir
Warpspace

1
Doğru, ama tam olarak bu sorun için bu soruya geldim, sizin de dediğiniz gibi, belki başka biri de yapacak.
Zoltán

Benim durumumda ./my/full/path/myscriptbunun yerine koşmaya çalışıyordum ./myscript.
Noumenon

8

Bir Python betiğini çalıştırmaya çalışırken de aynı hata mesajını aldım - bu @ Warpspace'in amaçlanan kullanım durumu değildi (diğer yorumlara bakın), ancak bu, aramamın en çok izlenenleri arasındaydı, bu yüzden belki birileri onu faydalı bulabilir.

Benim durumumda , shebang satırının ( ) takılıp düşeceği DOS satırı sonları ( \r\nyerine \n) idi #!/usr/bin/env python. Basit bir dos2unix myfile.pydüzeltti.


4

32/64-bit sorunları olmayan basit bir bash betiği için aynı hatayı aldım. Bunun nedeni muhtemelen çalıştırmaya çalıştığınız komut dosyasının içinde bir hata bulunmasıdır. Bu ubuntu forum gönderisi , normal betik dosyalarıyla önüne 'sh' ekleyebileceğinizi ve ondan bazı hata ayıklama çıktıları alabileceğinizi gösterir. Örneğin

$ sudo sh arm-mingw32ce-g++

ve herhangi bir çıktı alıp almadığınıza bakın.

Benim durumumda asıl sorun, yürütmeye çalıştığım dosyanın linux yerine Windows formatında olmasıydı.


3

Bu hatayı aldım “No such file or directory”ama var çünkü dosyam Windows'ta oluşturuldu ve Ubuntu'da çalıştırmayı denedim ve dosya, yeni bir satırın olduğu yerde geçersiz 15 \ r içeriyordu. İstenmeyen şeyleri kesen yeni bir dosya oluşturdum

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 

3

Aşağıdaki komut 16.4 Ubuntu'da çalıştı

Bu sorun, .sh dosyanız bozuk olduğunda veya unix protokollerine göre biçimlendirilmediğinde ortaya çıkar.

dos2unix, .sh dosyasını Unix formatına dönüştürür!

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

1

Mac'imde oluşturduğum bir dosyayla aynı sorunu yaşadım. ./Filename ile bir kabukta çalıştırmayı denersem, dosya bulunamadı hata mesajı aldım. Sanırım dosyada bir sorun var.

ne yaptım:

sunucuya bir ssh oturumu açın
cat dosya adı
çıktıyı panoya kopyala
rm dosya adı
dokun dosya adı
vi dosya adı
i ekleme modu
için panodan
ESC içeriğini yapıştırarak ekleme modunu sonlandırın
: wq!

Bu benim için çalıştı.


1

Bu sorunu yeni yaşadım mingw32 bash. Düğüm / npm'yi içinden çalıştırdım Program Files (x86)\nodejsve sonra onları disableddizine taşıdım (esasen onları yoldan kaldırdım). Ayrıca Program Files\nodejsyolumda (yani 64bit sürümü) vardı , ancak yalnızca x86 sürümünden sonra. Bash kabuğunu yeniden başlattıktan sonra npm'nin 64bit sürümü bulunabilir. nodeher zaman doğru çalıştı ( node -vx86 sürümü taşındığında bunun değiştiği kontrol edildi).

bash -rBash'i yeniden başlatmak yerine işe yarayacağını düşünüyorum : https://unix.stackexchange.com/a/5610


1

Başkaları tarafından belirtildiği gibi, bunun nedeni çalıştırılabilir dosyanız değil, yükleyicinin bulunamamasıdır. Maalesef mesaj yeterince açık değil.

Çalıştırılabilir dosyanızın kullandığı yükleyiciyi değiştirerek sorunu çözebilirsiniz, bu diğer soruda tam cevabıma bakın : Tek bir ana bilgisayarda birden çok glibc kitaplığı

Temel olarak hangi yükleyiciyi kullanmaya çalıştığını bulmanız gerekir:

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

Ardından eşdeğer bir yükleyici için doğru yolu bulun ve yürütülebilir dosyanızı, yükleyiciyi gerçekte olduğu yoldan kullanacak şekilde değiştirin:

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

Muhtemelen içerilenlerin yolunu da ayarlamanız gerekecek, çalıştırmayı denedikten sonra isteyip istemediğinizi bileceksiniz. Diğer konu başlığındaki tüm ayrıntıları görün.


1

Ubuntu 18'im için çözümümü burada buldum .

sudo dpkg --add-architecture i386

Sonra:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

0

Bu sorunu yaşadım ve nedeni Notepad ++ gibi bazı editörlerde EOL idi. Bunu Düzenle menüsünde / EOL dönüşümü içinde kontrol edebilirsiniz. Unix (LF) seçilmelidir. Umarım faydalı olur.


Komut bir dosyadan çalıştırılmadığından, bu durumda sorunun bu olması pek olası değildir.
RalfFriedl

0

Gelecekte referans olması için buraya eklendi (aynı duruma düşebilecek kullanıcılar için): Bu hata, Windows üzerinde çalışırken (Linux sisteminden farklı satır ayırıcı nedeniyle ekstra karakterler ortaya çıkarır) ve bu komut dosyasını çalıştırmaya çalışırken (ekstra karakterler eklenmiş olarak) meydana gelir. Linux'ta. Hata mesajı yanıltıcıdır.

Windows'ta satır ayırıcı CRLF ( \ r \ n ) iken, linux'ta LF ( \ n ) 'dir. Bu genellikle metin düzenleyicide seçilebilir.

Benim durumumda, bu, Windows üzerinde çalışmak ve yürütmek için Unix sunucusuna yüklemek nedeniyle oldu.


1
Docker, linux kullanıyorum, ancak Windows'tan oluşturuyorum. Betiğim scriptdir=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)daha sonra başladı, cd $scriptdir || exit 1ancak \rWindows'ta düzenlenen dosyamda scriptdirdeğere eklendi. Yani mesaj : no such file or directoryen kafa karıştırıcıydı, çünkü şikayet ettiği şeyi sildi.
Jesse Chisholm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.