首页 > 系统相关 >Ubuntu下执行可执行二进制文件报文件找不到的错误:No such file or directory

Ubuntu下执行可执行二进制文件报文件找不到的错误:No such file or directory

时间:2024-03-24 16:13:58浏览次数:33  
标签:文件 查看 temp No 二进制 file 执行

  这个问题之前有碰到,但是没有在意去解决,最近使用Docker部署的时候又出现这个问题,找了一下资料,有了一个解决办法。

  比如我们有二进制文件,正常来说它应该是这个样子的,可以执行并输出:

  

  但是现在它报错,找不到文件了:

  

  那么我们一步步来解决

  第一步:查看文件是否存在

  这个很容易,我们只需要像上面的图片中一样,使用ls 命令查看一下即可,或者我们使用绝对路径执行试试(注意文件名不要写错了,比如空格,1和l等):  

    # 输出查看文件是否存在
    ls ./temp
    # 或者使用绝对路径执行试试
    /temp

  如果依赖于环境变量,那么可以输出环境参数,看二进制文件是否存在于环境参数中(echo $PATH),如果不在,那么可能需要将二进制文件添加到上面的环境参数目录中,或者将二进制文件所在的目录添加到环境变量中。

  

  如果使用了软链接,那么我们还需要查看软链接指向的文件是否存在:  

    # 先查看软链接
    ls -l temp
    # 然后查看链接指向的文件是否存在,比如我这里是(/root/temp)
    ls /root/temp

  

  如果是使用了sudo 命令执行找不到文件,可以参考:使用sudo执行命令提示command not found

  总之,第一步就是要保证能找到文件,显然,我这里是可以找到文件的。

  第二步:查看文件是否具有可执行的权限  

  我们只需要使用ls -l 命令查看一下即可:

  

  第一列的-rwxr-xr-x 中的x 就是可执行权限,我这里有三个x,就表示所有用户均具有可执行权限。

  如果不是这个样子的,那么就需要添加可执行权限:sudo chmod +x 文件 ,比如我这里就是执行:sudo chmod +x temp

  如果文件是sh 脚本之类的,还可以尝试使用sh 或者bash 命令执行试试

  显然我这里的二进制文件是可执行的

  第三步:确认文件是完整的

  通常我们的文件是通过远程传输的形式放上来的,那么可能只传输了一部分,这个时候我们可以比较一下文件的大小,比如我这里的文件大小就是上图的88422178

  另外,我们也可以把文件放到另外一个系统环境下,看能否执行

  第四步:确认系统是否支持运行的

  我们要确认系统是否支持执行这个二进制文件,比如在windows下执行的二进制文件,在Linux下执行就会保存,或者需要安装相应的包来支持,相信绝大部分人不会犯这个错误。

  其次,我们的系统是分32位和64位的,同样,我们的二进制文件也会需要适配,我们可以使用file 命令和uname -a 命令来查看:  

    # 如果file命令不存在,那么可以使用apt安装
    sudo apt update
    sudo apt install file
    # 使用file命令查看:file 文件
    file temp
    # 打印系统信息
    uname -a

  

  可以看出我这里的文件是一个64位的ELF可执行文件,适用于GNU/Linux系统,所以系统是可支持执行的。  

  第五步:查看文件依赖是否完成

  可执行文件很多时候都是依赖于一些系统包或者第三方包,这样,我们就需要使用这些包提前正确的安装,执行命令:ldd 文件

  

  可以看到我的依赖包是完整的,如果不完整,那么会提示找不到,那么我们就需要找到对应的包进行安装。

  第六步:查看程序头部信息,看是否缺少共享库

  我们执行readelf -l 命令查看即可  

    # 如果提示readelf找不到,那么我们还需要安装
    sudo apt update
    sudo apt install binutils
    # 查看程序头部信息:readelf -l 文件
    readelf -l temp

  我这里显示的结果大概是这个样子的:  

	root@ubuntu:/# readelf -l temp

	Elf file type is DYN (Shared object file)
	Entry point 0x8a7c1
	There are 13 program headers, starting at offset 64

	Program Headers:
	  Type           Offset             VirtAddr           PhysAddr
					 FileSiz            MemSiz              Flags  Align
	  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
					 0x00000000000002d8 0x00000000000002d8  R      0x8
	......
	  LOAD           0x0000000000a4c000 0x0000000000a7e000 0x0000000000a7e000
					 0x00000000000027f8 0x00000000000027f8  RW     0x1000
	  INTERP         0x0000000000a4e7a0 0x0000000000a807a0 0x0000000000a807a0
					 0x0000000000000030 0x0000000000000030  R      0x1
		  [Requesting program interpreter: /snap/core20/current/lib64/ld-linux-x86-64.so.2]

	 Section to Segment mapping:
	  Segment Sections...
	   00     
	   01     .note.ABI-tag .gnu.hash .dynsym .gnu.version .gnu.version_d .gnu.version_r .rela.dyn .rela.plt 
	   ......
	   12     .interp 
	root@ubuntu:/# apt install binutils

   可以看到,正在请求程序解释器/snap/core20/current/lib64/ld-linux-x86-64.so.2 时没有响应,查看这个文件,确实不存在,所以我这里就是这个问题了

  

  到这里,知道原因了,剩下的就是安装这个包,然后再试试了。

  然后问题解决!!!

 

  总结

  这里只是根据个人处理这个问题的经验总结,具体情况具体看,可能还有没碰到的情况,慢慢积累吧,这里就先做个笔记了

 

标签:文件,查看,temp,No,二进制,file,执行
From: https://www.cnblogs.com/shanfeng1000/p/18088148

相关文章

  • 使用 adb 命令修改 Android/data 目录下的文件(给碧蓝档案国服吃布丁)
    本文记录如何使用adb命令修改Android/data目录下的文件,然后给国服的碧蓝档案打上布丁......
  • 九、文件操作
    本章专题脉络1、文件和流的介绍文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件,avi文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音...C程序中,对于文件中数据的输入/输出操作以“流(st......
  • 基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览RTL图:   仿真图:   导入到matlab显示效果如下:   2.算法运行软件版本matlab2022a vivado2019.2 3.算法理论概述      在计算机视觉领域,基于肤色模型和中值滤波的手部检测方法是一种常见的初步定位策略。该方法主要分为......
  • 继续nodejs
    昨天学习完了读写模块,今天继续学习Path路径模块1、路径拼接,path.join方法用法很简单,首先,使用路径模块要声明个常量,constpath=require(‘path’)然后直接使用就好了,constfpath=path.join(‘路径1’,‘路径2’,‘路径3’,‘路径4’,‘路径5’)输出的结果就是这几个路径连在一起......
  • C++共享之道:用extern实现源文件变量与类成员函数的巧妙共享
    概述:在C++中,使用`extern`关键字可实现在源文件之间共享变量与类成员函数。通过声明变量或类在头文件中,再在一个源文件中定义,其他源文件通过`extern`引用,促使模块化、可维护的代码组织。在C++中,extern关键字可用于在源文件之间共享变量。它告诉编译器某个变量的声明在其他源文......
  • Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向
    Java基础什么是JavaJava是一种由SunMicrosystems于1995年首次发布的编程语言和计算平台。Java是一种通用的、基于类的、面向对象的编程语言,旨在减少实现依赖性。它是一个应用程序开发的计算平台。Java快速、安全、可靠,因此在笔记本电脑、数据中心、游戏机、科学超级计......
  • 解决主流办法没能HttpMediaTypeNotAcceptableException: No acceptable representatio
    问题描述:        写web项目时遇到一些小问题,前端请求后端死活报406错误问题,一些网络上主流的方法试过之后仍然无法解决问题。问题分析:        @RestController会在返回结果时直接返回对象,再由Spring将对象转为json,如果结果对象没有get方法,就会报以上错误......
  • Redis中AOF文件重写与同步
    AOF文件的写入与同步Redis服务器进程就是一个时间循环(loop),这个循环中的文件时间负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件则负责执行像serverCron函数这样需要定时运行的函数。因为服务器在处理文件事件时可能会执行些命令,使得一些内容被追加到aof_b......
  • matlab批量读取目录下的文件的方法
    批量处理可以提高效率,这里提供一个可以批量读取nc文件的代码:address='C:\Users\HelloWorld!!\DESKTOP\TerraClimate_ppt\';%Getthelistoffilesudir=address;form='*.nc';%Getthelistofstationnamesfiles=GetFiles(udir,form); [n,p]=size(files......
  • Deepin-安装Monodevelop
    Deepin安装MonoDev1.确定系统版本cat/etc/debian_version2.添加密钥sudoapt-getinstallapt-transport-httpsdirmngrsudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recv-keys3FA7E0328081BFF6A14DA29AA6A19B38D3D831EFecho"debhttps://download.......