“ ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว” แต่มีอยู่


94

ฉันแค่ต้องการเรียกใช้ไฟล์ปฏิบัติการจากบรรทัดคำสั่ง./arm-mingw32ce-g++แต่แล้วฉันก็ได้รับข้อความแสดงข้อผิดพลาด

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

ฉันใช้ Ubuntu Linux 10.10 ls -lรายการ

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

การใช้ sudo ( sudo ./arm-mingw32ce-g++) ให้

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

ฉันไม่รู้ว่าทำไม OS ถึงไม่เห็นไฟล์เมื่ออยู่ที่นั่น ความคิดใด ๆ ?

คำตอบ:


82

ข้อผิดพลาดนี้อาจหมายความว่า./arm-mingw32ce-g++ไม่มีอยู่จริง (แต่เป็นเช่นนั้น) หรือมีอยู่และเป็นไฟล์ปฏิบัติการที่เชื่อมโยงแบบไดนามิกที่เคอร์เนลรู้จัก แต่ตัวโหลดแบบไดนามิกไม่พร้อมใช้งาน คุณสามารถมองเห็นสิ่งที่รถตักดินแบบไดนามิกเป็นสิ่งจำเป็นโดยทำงานldd /arm-mingw32ce-g++; สิ่งที่ทำเครื่องหมายไว้not foundคือตัวโหลดแบบไดนามิกหรือไลบรารีที่คุณต้องติดตั้ง

หากคุณกำลังพยายามเรียกใช้ไบนารี 32 บิตในการติดตั้ง amd64:

  • ขึ้นอยู่กับอูบุนตู 11.04 ia32-libsติดตั้งแพคเกจ
  • บน Ubuntu 11.10 ia32-libs-multiarchติดตั้ง
  • เริ่มต้นด้วย 12.04 ติดตั้งia32-libs-multiarchหรือเลือกชุด:i386แพ็คเกจที่เหมาะสมนอกเหนือจาก:amd64แพ็คเกจ

16
เจ๋งใช้ได้! อย่างไรก็ตามผลลัพธ์ของ ldd คือnot a dynamic executable(ก่อนที่ฉันจะติดตั้ง ia32-libs)
Warpspace

3
ia32-libs-*เลิกใช้แล้วใน Ubuntu 16.04 ให้ติดตั้งlib32ncurses5และlib32z1แทน
GaloisPlusPlus

2
นี่เป็นปัญหาทั่วไปใน Nix หรือ NixOS เมื่อพยายามเรียกใช้ไบนารีของบุคคลที่สาม ดู patchelf
bbarker

30

ฉันพบข้อผิดพลาดนี้เมื่อพยายามสร้างแหล่งซีลีเนียมบน Ubuntu เชลล์สคริปต์อย่างง่ายที่มี shebang ที่ถูกต้องไม่สามารถทำงานได้แม้ว่าฉันจะครอบคลุมข้อกำหนดเบื้องต้นทั้งหมดแล้วก็ตาม

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

ฉันเปิดไฟล์ใน Vim และฉันเห็นว่าเพียงเพราะครั้งหนึ่งฉันแก้ไขไฟล์นี้บนเครื่อง Windows มันอยู่ในรูปแบบ DOS ฉันแปลงไฟล์เป็นรูปแบบ Unix ด้วยคำสั่งด้านล่าง:

dos2unix filename # actually helped me and things were fine.

ฉันหวังว่าเราควรดูแลเมื่อใดก็ตามที่เราแก้ไขไฟล์ข้ามแพลตฟอร์มเราควรดูแลรูปแบบไฟล์ด้วยเช่นกัน


มันได้ผล! หลังจากลองหลาย ๆ สิ่งนี่คือวิธีแก้ปัญหา ขอบคุณ!
Pedro Perez

20

ข้อผิดพลาดนี้อาจเกิดขึ้นหากพยายามเรียกใช้สคริปต์และshebangสะกดผิด ตรวจสอบให้แน่ใจว่ามันอ่าน#!/bin/sh, #!/bin/bashหรือแล้วแต่จำนวนใดล่ามคุณกำลังใช้


4
ฉันหมายถึงปฏิบัติการไม่ใช่สคริปต์ จากนั้นอีกครั้งอาจมีคนอื่นพบว่าความคิดเห็นนี้มีประโยชน์
Warpspace

1
จริง แต่ฉันถามคำถามนี้สำหรับปัญหานี้อย่างที่คุณพูดอาจจะมีคนอื่นเช่นกัน
Zoltán

ในกรณีของฉันฉันพยายามเรียกใช้./my/full/path/myscriptแทน./myscript.
Noumenon

8

ฉันมีข้อความแสดงข้อผิดพลาดเดียวกันเมื่อพยายามเรียกใช้สคริปต์ Python - นี่ไม่ใช่กรณีการใช้งานที่ตั้งใจไว้ของ @ Warpspace (ดูความคิดเห็นอื่น ๆ ) แต่นี่เป็นหนึ่งในรายการยอดนิยมในการค้นหาของฉันดังนั้นอาจมีคนพบว่ามีประโยชน์

ในกรณีของฉันมันเป็นจุดสิ้นสุดของบรรทัด DOS ( \r\nแทนที่จะเป็น\n) ที่บรรทัด shebang ( #!/usr/bin/env python) จะข้ามไป dos2unix myfile.pyแก้ไขได้ง่ายๆ


4

ฉันได้รับข้อผิดพลาดเดียวกันสำหรับสคริปต์ทุบตีธรรมดาที่ไม่มีปัญหา 32/64 บิต อาจเป็นเพราะสคริปต์ที่คุณพยายามเรียกใช้มีข้อผิดพลาด โพสต์ฟอรัมอูบุนตูนี้ระบุว่าด้วยไฟล์สคริปต์ปกติคุณสามารถเพิ่ม 'sh' ที่ด้านหน้าและคุณอาจได้รับผลลัพธ์การดีบักจากมัน เช่น

$ sudo sh arm-mingw32ce-g++

และดูว่าคุณได้รับผลลัพธ์หรือไม่

ในกรณีของฉันปัญหาที่แท้จริงคือไฟล์ที่ฉันพยายามเรียกใช้งานอยู่ในรูปแบบ Windows แทนที่จะเป็น linux


3

ฉันได้รับข้อผิดพลาดนี้“No such file or directory”แต่มีอยู่เนื่องจากไฟล์ของฉันถูกสร้างใน Windows และฉันพยายามเรียกใช้บน Ubuntu และไฟล์มี 15 \ r ที่ไม่ถูกต้องซึ่งเคยมีบรรทัดใหม่อยู่ที่นั่น ฉันเพิ่งสร้างไฟล์ใหม่เพื่อตัดทอนสิ่งที่ไม่ต้องการ

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

คำสั่งด้านล่างทำงานบน 16.4 Ubuntu

ปัญหานี้เกิดขึ้นเมื่อไฟล์. sh ของคุณเสียหายหรือไม่ได้รับการจัดรูปแบบตามโปรโตคอล Unix

dos2unix แปลงไฟล์. sh เป็นรูปแบบ Unix!

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

1

ฉันมีปัญหาเดียวกันกับไฟล์ที่ฉันสร้างบนเครื่อง Mac ถ้าฉันพยายามเรียกใช้ในเชลล์ด้วย. / ชื่อไฟล์ฉันได้รับข้อความแสดงข้อผิดพลาดไม่พบไฟล์ ฉันคิดว่ามีบางอย่างผิดปกติกับไฟล์

ฉันทำอะไรลงไป:

เปิดเซสชัน ssh ไปยัง
ชื่อไฟล์เซิร์ฟเวอร์cat
คัดลอกผลลัพธ์ไปยัง
ชื่อไฟล์คลิปบอร์ดrm ชื่อไฟล์
สัมผัสชื่อไฟล์
vi
สำหรับโหมดแทรก
วางเนื้อหาจากคลิปบอร์ด
ESC เพื่อสิ้นสุดโหมดแทรก
: wq!

สิ่งนี้ได้ผลสำหรับฉัน


1

ฉันเพิ่งมีปัญหานี้ในmingw32 bash. ฉันได้ execuded node / npm จากProgram Files (x86)\nodejsนั้นย้ายไปไว้ในdisabledไดเร็กทอรี (โดยพื้นฐานแล้วจะลบออกจากพา ธ ) ฉันยังมีProgram Files\nodejs(เช่นเวอร์ชัน 64 บิต) ในเส้นทาง แต่หลังจากเวอร์ชัน x86 เท่านั้น หลังจากรีสตาร์ท bash shell จะพบเวอร์ชัน 64 บิตของ npm nodeทำงานอย่างถูกต้องตลอดเวลา (ตรวจสอบด้วยnode -vว่าเปลี่ยนแปลงเมื่อย้ายเวอร์ชัน x86)

ฉันคิดว่าbash -rจะใช้งานได้แทนที่จะรีสตาร์ท bash: https://unix.stackexchange.com/a/5610


1

ดังที่ผู้อื่นกล่าวไว้นั่นเป็นเพราะไม่พบตัวโหลดไม่ใช่ไฟล์ปฏิบัติการของคุณ น่าเสียดายที่ข้อความไม่ชัดเจนเพียงพอ

คุณสามารถแก้ไขได้โดยเปลี่ยนตัวโหลดที่ใช้งานได้ดูคำตอบอย่างละเอียดของฉันในคำถามอื่น ๆ นี้: ไลบรารี glibc หลายแห่งในโฮสต์เดียว

โดยทั่วไปคุณต้องหาตัวโหลดที่พยายามใช้:

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

จากนั้นค้นหาเส้นทางที่ถูกต้องสำหรับตัวโหลดที่เท่ากันและเปลี่ยนไฟล์ปฏิบัติการของคุณเพื่อใช้ตัวโหลดจากเส้นทางที่เป็นจริง:

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

คุณอาจต้องกำหนดเส้นทางของการรวมด้วยคุณจะรู้ว่าคุณต้องการหรือไม่หลังจากที่คุณพยายามเรียกใช้ ดูรายละเอียดทั้งหมดในชุดข้อความอื่น ๆ


1

ผมพบว่าวิธีการแก้ปัญหาของฉันสำหรับอูบุนตูของฉัน 18 ที่นี่

sudo dpkg --add-architecture i386

จากนั้น:

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

0

ฉันมีปัญหานี้และเหตุผลก็คือ EOL ในตัวแก้ไขบางตัวเช่น Notepad ++ คุณสามารถตรวจสอบได้ในเมนูแก้ไข / การแปลง EOL ควรเลือก Unix (LF) ฉันหวังว่ามันจะเป็นประโยชน์


ซึ่งไม่น่าจะเป็นปัญหาในกรณีนี้เนื่องจากคำสั่งไม่ได้ถูกเรียกใช้จากไฟล์
RalfFriedl

0

เพิ่มไว้ที่นี่เพื่อใช้อ้างอิงในอนาคต (สำหรับผู้ใช้ที่อาจตกอยู่ในกรณีเดียวกัน): ข้อผิดพลาดนี้เกิดขึ้นเมื่อทำงานบน Windows (ซึ่งแนะนำอักขระพิเศษเนื่องจากตัวคั่นบรรทัดต่างจากระบบ Linux) และพยายามเรียกใช้สคริปต์นี้ (โดยมีอักขระพิเศษแทรก) ใน Linux ข้อความแสดงข้อผิดพลาดทำให้เข้าใจผิด

ใน Windows ตัวคั่นบรรทัดคือ CRLF ( \ r \ n ) ในขณะที่ในลินุกซ์คือ LF ( \ n ) โดยปกติแล้วสามารถเลือกได้ในโปรแกรมแก้ไขข้อความ

ในกรณีของฉันสิ่งนี้เกิดขึ้นเนื่องจากการทำงานบน Windows และการอัปโหลดไปยังเซิร์ฟเวอร์ Unix เพื่อดำเนินการ


1
ฉันใช้ docker, linux แต่สร้างจาก Windows สคริปต์ของฉันเริ่มต้นscriptdir=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)แล้วcd $scriptdir || exit 1แต่\rในไฟล์ที่แก้ไข windows ของฉันได้ต่อท้ายscriptdirค่า ดังนั้นข้อความ: no such file or directoryจึงสับสนมากที่สุดเนื่องจากมันลบสิ่งที่บ่นออกไป
Jesse Chisholm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.