Linux no such file or directory but directory exists

«No such file or directory» but it exists

This error can mean that ./arm-mingw32ce-g++ doesn’t exist (but it does), or that it exists and is a dynamically linked executable recognized by the kernel but whose dynamic loader is not available. You can see what dynamic loader is required by running ldd /arm-mingw32ce-g++ ; anything marked not found is the dynamic loader or a library that you need to install.

If you’re trying to run a 32-bit binary on an amd64 installation:

  • Up to Ubuntu 11.04, install the package ia32-libs .
  • On Ubuntu 11.10, install ia32-libs-multiarch .
  • Starting with 12.04, install ia32-libs-multiarch , or select a reasonable set of :i386 packages in addition to the :amd64 packages.

Awesome, works! By the way, output of ldd was not a dynamic executable (before I installed ia32-libs).

@mako You don’t get this error message if some shared library is missing. Only if the loader itself is missing.

I faced this error when I was trying to build Selenium source on Ubuntu. The simple shell script with correct shebang was not able to run even after I had all pre-requisites covered.

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

I opened the file in Vim and I could see that just because I once edited this file on a Windows machine, it was in DOS format. I converted the file to Unix format with below command:

dos2unix filename # actually helped me and things were fine. 

I hope that we should take care whenever we edit files across platforms we should take care for the file formats as well.

A decade late, but credit where credit is due. In my case using WSL2 on windows with windows directories mounted inside the distro running on WSL. Windows line endings — unix files.

Thanks, @BrentonThomas. I am glad that it helped. I haven’t tried WSL on Windows yet. I wish to use it soon.

Thanks, this was actually my mistake. I built a docker image on windows and copied a shell script to the image that had the wrong line endings.

This error may also occur if trying to run a script and the shebang is misspelled. Make sure it reads #!/bin/sh , #!/bin/bash , or whichever interpreter you’re using.

True, but I landed on this question for this exact problem, so as you said, maybe someone else will as well.

I had the same error message when trying to run a Python script — this was not @Warpspace’s intended use case (see other comments), but this was among the top hits to my search, so maybe somebody will find it useful.

In my case it was the DOS line endings ( \r\n instead of \n ) that the shebang line ( #!/usr/bin/env python ) would trip over. A simple dos2unix myfile.py fixed it.

I found my solution for my Ubuntu 18 here.

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

As mentioned by others, this is because the loader can’t be found, not your executable file. Unfortunately the message is not clear enough.

Читайте также:  Linux windows tiling manager

You can fix it by changing the loader that your executable uses, see my thorough answer in this other question: Multiple glibc libraries on a single host

Basically you have to find which loader it’s trying to use:

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

Then find the right path for an equivalent loader, and change your executable to use the loader from the path that it really is:

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

You will probably need to set the path of the includes too, you will know if you want it or not after you try to run it. See all the details in that other thread.

In my case on top of the confusing error message ldd also erroneously reported that the loader is found: /lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 , but it was actually not true. This can be fixed by ln instead of patchelf : sudo ln /lib64/ld-linux-x86-64.so.2 /lib/ld-linux-x86-64.so.2 .

patchelf is good if you don’t have root access to the machine, and/or if you’ll only fix one binary. If you have several binaries with this problem and need to create a system-wide link, then probably the system is inconsistent and it would be better to rethink the strategy. do some recovery or re-install.

I got this error “No such file or directory” but it exists because my file was created in Windows and I tried to run it on Ubuntu and the file contained invalid 15\r where ever a new line was there. I just created a new file truncating unwanted stuff

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 

I got the same error for a simple bash script that wouldn’t have 32/64-bit issues. This is possibly because the script you are trying to run has an error in it. This ubuntu forum post indicates that with normal script files you can add sh in front and you might get some debug output from it. e.g.

and see if you get any output.

In my case the actual problem was that the file that I was trying to execute was in Windows format rather than Linux.

Below command worked on 16.4 Ubuntu

This issue comes when your .sh file is corrupt or not formatted as per unix protocols.

dos2unix converts the .sh file to Unix format!

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

Added here for future reference (for users who might fall into the same case): This error happens when working on Windows (which introduces extra characters because of different line separator than Linux system) and trying to run this script (with extra characters inserted) in Linux. The error message is misleading.

Читайте также:  Linux no platform data

In Windows, the line separator is CRLF (\r\n) whereas in linux it is LF (\n). This can be usually be chosen in text editor.

In my case, this happened due to working on Windows and uploading to Unix server for execution.

I use docker, linux, but build it from Windows. My script started scriptdir=$(cd «$( dirname «$» )» && pwd) then cd $scriptdir || exit 1 but the \r in my windows-edited file got appended to the scriptdir value. So the message : no such file or directory was most confusing, since it ended up erasing what it was complaining about.

I had the same problem with a file that I’ve created on my mac. If I try to run it in a shell with ./filename I got the file not found error message. I think that something was wrong with the file.

open a ssh session to the server
cat filename
copy the output to the clipboard
rm filename
touch filename
vi filename
i for insert mode
paste the content from the clipboard
ESC to end insert mode
:wq!

take a look at previous answers, you have a problem because of windows style. If you had run dos2unix.exe over your file you would have got the same result :-).

I just had this issue in mingw32 bash . I had execuded node/npm from Program Files (x86)\nodejs and then moved them into disabled directory (essentially removing them from path). I also had Program Files\nodejs (ie. 64bit version) in path, but only after the x86 version. After restarting the bash shell, the 64bit version of npm could be found. node worked correctly all the time (checked with node -v that changed when x86 version was moved).

I think bash -r would’ve worked instead of restarting bash: https://unix.stackexchange.com/a/5610

I had this issue and the reason was EOL in some editors such as Notepad++. You can check it in Edit menu/EOL conversion. Unix(LF) should be selected. I hope it would be useful.

Hit this error trying to run terraform/terragrunt (Single go binary).

Using which terragrunt to find where executable was, got strange error when running it in local dir or with full path

bash: ./terragrunt: No such file or directory 

Problem was that there was two installations of terragrunt, used brew uninstall terragrunt to remove one fixed it.

After removing the one, which terragrunt showed the new path /usr/bin/terragrunt everything worked fine.

For those encountering this error when running a java program, it’s possible that you’re trying to run a 64-bit java program using on a 32-bit linux operating system.

I only realised when I ran ldd on 64-bit java which reported:

Whereas the old 32 bit java reported sensible results:

In a .sh script, each line MUST end with a single character — newline ( LF or » \n «).

Don’t make mistakes like me, because my text-editor of choice is Notepad++ in Win. The default line ending in Win is » \r\n » ( CR LF ), and such ending is not standard for Linux shell scripts.

Читайте также:  Linux автоматический запуск файла

In my case, it turns out the file was a symlink:

$ cat deluge-gtk.lock cat: deluge-gtk.lock: No such file or directory $ file deluge-gtk.lock deluge-gtk.lock: broken symbolic link to 32309 

Misleading errors like this are fairly common on Linux. Related discussion: https://lwn.net/Articles/532771/

Give it a try by changing the name of file or folder which is not showing in terminal/command prompt.

step1 : change the name of file or folder. step2 : cd filename/foldername

There are fifteen existing answers to this question, including an accepted answer with 100 upvotes. Are you sure your answer hasn’t already been provided? If not, why might someone prefer your approach over the existing approaches proposed? Are you taking advantage of new capabilities? Are there scenarios where your approach is better suited?

As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.

For future readers, I had this issue when trying to launch a Django server using gunicorn. I was using AWS CodeBuild to build the virtual environment and run tests and using CodeDeploy to put the built artifacts onto the production server and launch the new version (all environments were Ubuntu 20.04). I had mistakenly thought that env/bin/. contained actual binaries of native libraries but that was not the case. It was just Python scripts with a shebang of the path to the Python interpreter on the build machine. In my case, the machine installing the packages and actually running the packages was different. To be more specific, all of the files in env/bin had the shebang #!/codebuild/output/src715682316/src/env/bin/python , so of course running env/bin/gunicorn on the production server would fail. The cryptic error message was when Ubuntu would tell me that env/bin/gunicorn didn’t exist as opposed to saying /codebuild/output/src715682316/src/env/bin/python didn’t exist. I was able to fix this problem by starting gunicorn using python3 env/bin/gunicorn instead of env/bin/gunicorn .

This: sed -i -e ‘s/\r$//’ FILE , could potentially fix your problem.

As many answers already have explained, this issue could be caused by line endings being \r\n in Windows and only \n in Linux. A suggested approach was to use dos2unix . As far as I understand this is not standard on most Linux distributions, and in my case I could not install / use it.

Therefore I used the following approach, (mentioned in Bash script – «/bin/bash^M: bad interpreter: No such file or directory»), where you can use the sed command instead.

sed -i -e ‘s/\r$//’ FILE where you replace FILE with the name of your file, e.g. sed -i -e ‘s/\r$//’ myscript.sh

If you for some reason do not have sed installed but do not want to use dos2unix you can use the following to install sed :

sudo apt-get update sudo apt-get install sed 

Источник

Оцените статью
Adblock
detector