文章目录

  • 1. 什么是可执行文件
  • 2. 可执行文件的区别
  • ./ 表示什么?
  • 为什么是/usr/bin?
  • 总结

1. 什么是可执行文件

可执行文件指的是这个文件可以被运行.这个文件可以是一个代码文件,也可以是一个二进制文件
Linux文件系统中只有文件和目录(一切皆文件).

在Linux中,运行一个文件的方式主要有两种: bash test.sh或者./test.sh.
这个test.sh就被叫做可执行文件.
可执行文件分为两种: 一种是常见的二进制文件,一种是脚本文件.前者如常用的ls,mkdir命令等都是二进制的文件,后者常见的有shell脚本,或者Python脚本这些依赖于解释器执行的文件.

通过命令file可以查看一个文件的类型,如二进制文件会显示:

而脚本文件则输出:

2. 可执行文件的区别

在上面的两个脚本文件中可以看到,输出的内容是不同的.一个被识别为了shell script一个则认为就是普通的text文件.但是两个文件都是可执行的:

如图:两个文件运行后都会输出hello world!.

此处使用了两种不同的运行方式,第一种直接指定一个可执行文件./hello.sh,如果使用这种方式运行的话,脚本必须满足以下两个要求:

  1. 文件有"x"权限
  2. 文件如果不是二进制类型文件,那么在开头第一行必须指定了他的解释器

第一个就是指的Linux文件系统中的"rwx" r为只读,w代表可写,而"x"则意味着这个文件可执行.

这里判断这个文件可执行和"鸭子类型"有些类似,即只要一个动物会嘎嘎叫我就认为是鸭子.此时哪怕走过来一条狗嘎嘎叫了两声,那么也认为他是一个鸭子.
换算过去.不管文件类型是什么,只要这个文件具备"X"权限,那么系统就认为他是一个可执行文件.

示例: 新建一个text类型文件,内容为hello world!,然后添加"x"执行权限.

可以看到,查看文件类型时,他和上面Python脚本打印内容一致,认为这是个txt文件.
随后给他加上了执行权限,然后’./'运行,提示"未找到命令".
此处,系统把他当成了一个shell脚本去执行,依次从中读取内容,然后交给"/bin/bash"解释器去执行.

接下来如法炮制,将Python脚本也变成一个系统认可的可执行文件

此时,你也能用./去运行他了.

./ 表示什么?

一个文件运行有两种方式,第一种是用他的解释器直接去运行它,如:

每个解释器只能运行对应自己语法的脚本,如果用了别的解释器那么则会抛出错误,如Python解释器无法运行shell脚本.

接下来说./,点在Linux系统中表示"当前目录",而"/“就是个普通的路径分隔符,组合在一起无非就是个相对路径,如:

所以在执行一个系统认可的可执行文件的时候,./不是最重要的那部分,这个文件本身才是.比如我可以用绝对路径运行一个可执行文件:

如果连前面的/root/file/都去掉,然后删掉结尾的.py,也就是只输入"hello”,打印一个hello world!,那么这个文件似乎和Linux系统中的一个命令没什么区别了.

接下来就把他变成和ls这种命令相同的一个"命令".

  1. 先把这个可执行文件重命名了
  2. 接下来把他放到了 /usr/bin 目录下
  3. 直接输入hello,直接打印了hello world!

这也从侧面说明,只要你把一个脚本 变成 系统承认的可执行文件,并且放到/usr/bin 目录下,他就和常用的命令没什么两样.

为什么是/usr/bin?

实际上在Linux系统中有个变量叫做PATH,这个变量中是一组路径的集合,当你输入一个命令的时候(如ls),他就在这个变量的内容中给出的目录里,寻找是否有对应名称的文件,然后运行它.

所以,如果我能把当前目录也加入到这个变量中,那么当前目录下的文件也就可以直接被系统运行而不需要指定路径.

如果一个文件没有"x"属行,那么即便是丢到了/usr/bin目录下也无法执行.

一般很少会直接声明PATH变量,对这个变量操作时也会将其写入到~/.bashrc目录或者/etc/profile这两个环境变量的文件中,这样,在会话连接上来之后就会自动运行里面的内容,将这个目录加入到PATH变量中.

总结

如果一个脚本文件有了"x"权限同时又在第一行指定了对应的解释器,或者一个二进制文件有"X"权限,那么这个文件就成了系统认可的 可执行文件.这时候运行它不但可以指定绝对路径或者相对路径,也能通过他的解释器去执行他,更或者可以把它所在的目录加入到"PATH"这个变量中.

如果一个脚本文件不符合上面的要求,那你只能通过他的解释器去执行他,如"bash hello.sh"或者"python hello.py"这种方式.

Linux可执行文件相关推荐

  1. 【Linux系统编程】Linux 可执行文件结构与进程结构

    Linux可执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内存前)分为代码区(text).数据区(d ...

  2. fastdfs windows部署_Go在windows下编译Linux可执行文件

    欢迎关注我的头条号:Wooola,专注于Java.Golang.微服务架构,致力于每天分享原创文章.快乐编码和开源技术. 前言 最近楼主做了一个滑块验证码登录功能,但有个问题,悲观估计一天大约会产生两 ...

  3. linux可执行文件剪裁

    linux可执行文件剪裁 查看sdk的代码时发现,linux内核编译出来的ko文件,并没有直接只用,实际使用的ko文件,不内核编译出来的文件小了很多,查看编译脚本发现是使用arm-buildroot- ...

  4. linux 下怎么将可执行文件做成镜像 开机就能运行这个可执行文件,圣诞老人的ELFs:在没有execve的情况下运行Linux可执行文件...

    这篇博客是年度的12 Days of HaXmas系列博客中的第11篇. Executable and Linkable Format ( ELF ) 是许多类Unix操作系统(如Linux,大多数现 ...

  5. goland 配置编译linux 可执行文件

    goland 配置编译linux 可执行文件 GOARCH=amd64;GOOS=linux 命令行操作, cd 切换到项目目录 SET GOARCH=amd64 SET GOOS=linux go ...

  6. 《Linux系统编程:Linux 可执行文件结构与进程结构》

    Linux可执行文件结构 在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 可以看出,此可执行文件在存储时(没有调入到内存前)分为代码区(text).数据区(d ...

  7. linux 可执行文件权限不够,root执行/media可执行文件权限不够,chmod修改权限无效...

    问题: 我想执行media文件夹下自己写的某个程序,但无法执行? 1. 于是我以root的身份在终端以输入指令chmod a+x 1,回车后没反应,查询该文件夹的属性,也没有改变,即修改权限无效. 2 ...

  8. Linux可执行文件如何装载进虚拟内存

    开篇先抛出几个问题,之后逐个击破: 什么是进程的虚拟地址空间?为什么进程要有自己的虚拟地址空间,这样做有什么好处? 我们都听说过页映射,什么是页映射,操作系统为什么要以页映射方式将程序映射到进程地址空 ...

  9. linux 可执行文件_linux中ELF二进制程序解析

    0. 简介 在Linux系统的可执行文件(ELF文件)中,开头是一个文件头,用来描述程序的布局,整个文件的属性等信息,包括文件是否可执行.静态还是动态链接及入口地址等信息:如下图所示: 程序文件中包含 ...

  10. linux可执行文件格式

    http://blog.csdn.net/dadalan/article/details/2890957 可执行文件可以是具有不同格式的二进制文件,也可以是一个文本的脚本.可执行文件映像中包含了进程执 ...

最新文章

  1. 一个与生命起源有关的悖论终于得到了解决
  2. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析
  3. 富文本编辑器-Ueditor
  4. 编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出。...
  5. k8s mysql重启_kubernetes Pod 应用自动恢复(重启策略 + 健康检查)简介
  6. dht11温湿度传感器_Arduino不调用库实现DHT11数据读取
  7. 巧用快捷键轻松设置Excel单元格格式
  8. frp ---- golang编写的内网穿透工具简介
  9. PYTHON1.day06
  10. 瀑布流 jquery。
  11. (转)ZooKeeper伪分布式集群安装及使用
  12. 贪心 - [POI2006]ORK-Ploughing
  13. 三星 9810 android 9,【极光ROM】-【三星NOTE9 N960X-9810】-【V19.0 Android-Q-TF5-OneUI2.1】...
  14. 用户界面之工具栏详解-AutoRunner自动化测试工具
  15. ftpclient覆盖上传文件
  16. LaaS,PaaS,SaaS介绍
  17. [附源码]Nodejs计算机毕业设计我的大学电子相册Express(程序+LW)
  18. freemarker
  19. CSDN怎么转载他人博客
  20. 百度总裁张亚勤宣布10月退休,李彦宏的人才建设要加紧了

热门文章

  1. 数据库高级查询与性能优化1,开窗函数与子查询
  2. 怎么用Canoe CAPL发送诊断
  3. 营业执照在线生成_潍坊综合保税区发出全省首张覆盖四大市场主体类型的“微信秒批”营业执照...
  4. javaweb框架学习开端
  5. (附源码)springboot自律健身房会员管理系统 毕业设计456466
  6. Java基础SE.03.Java面向对象
  7. 神经网络控制器设计原理,神经网络控制系统设计
  8. Altium Designer,打开PCB文件,提示:File type not recognised
  9. Kettle使用教程之Job使用
  10. 2021-07-31