当前位置:  技术问答>linux和unix

windows下的.exe是执行文件,Linux下可执行文件用什么做扩展名呢?

    来源: 互联网  发布时间:2015-11-29

    本文导语:  windows下的.exe是执行文件,Linux下可执行文件用什么做扩展名呢? | linux下,当你使用./xxx运行一个程序时,首先是SHELL来接管你的输入,然后用fork派生子进程,最后用execv系列将你的那个程序...

windows下的.exe是执行文件,Linux下可执行文件用什么做扩展名呢?

|
linux下,当你使用./xxx运行一个程序时,首先是SHELL来接管你的输入,然后用fork派生子进程,最后用execv系列将你的那个程序的代码交给内核

1。检查你运行的文件的属性,其属性在它的I节点中描述,如果你的那个文件不是可执行的属性,结果就会拒绝执行,如果有可执行的属性,但可执行的权限高于你目前正在使用的用户的权限,拒绝执行
2。检查是SHELL文件吗?如果是,调用相应的SHELL来解析你的这个脚本文件
3。是ELF文件格式吗??是coff文件格式吗?是a.out文件格式吗?如果是其中任何一种,并且当前的LINUX内核都支持这三种文件格式,那么就由操作系统内核分析你的文件格式,去掉文件头信息,将真正的代码,数据等加载进内存(实际过程并不是这样的,只不过为了描述简单,所以省略了很多细节,更多详细说明,请参见内核中的execv系统调用)...
4.等待系统的进程调度,当内核选中你的那个程序的时候,你的那个程序就得到运行了

LINUX下的文件扩展名是形同虚设的,只是一种习惯,为了给用户更好的理解其作用,比如配置文件一般都以.conf结尾,“文本文件”一般都以.txt结尾(主要是为了跟WINDOWS用户习惯相接近),ELF文件不用扩展名,所以当你说可执行文件的时候千万不要说是exe文件,那是很不严格的说法,只说明你仅是一个WINDOWS程序员而已

|
在linux下不向windows那样重视文件的名称,它是用文件的属性来区分是哪类文件的,而不是文件的名称。

|
用 ls -l filename看看
----x--x--x


第一个x表示此文件的owner有可执行的权限
第二个x表示此文件的owner所在的group的所有成员有可执行的权限
第三个x表示此文件的其他人有可执行的权限

当然,直接运行的时候还要看PATH,如果当前目录不在PATH中,那么可以使用./filename来直接运行该程序,当然,前提是你要有可执行的权限

|
linux原则上是没有扩展名这个概念的,它是通过文件的属性来判断此文件是否可读、可写或者可执行,但是习惯上用.o等等的扩展名来表示可执行文件,但是这并不是必需的;如果文件的属性表明是可执行的,那么不用任何扩展名照样可以执行。

|
Windows的exe头也有MZ(DOS带来的,OS/2什么的也有),PE标记,所以也称PE文件
linux多数都是ELF
OS X是比较特殊的Mach-O

说执行权限、chmod什么的都严重误导,Windows下面你把你用户的执行权限禁止掉了,一样不能执行。Windows只不过是对Administrator这样的用户默认开启执行权限罢了

下面引用redgrid发表的内容:

Linux不是根据文件名来判断是否执行文件。而是通过文件开始的2个字节值(位于头部中)来判断文件的类型的。这两个字节被称为魔幻数(Magic Number),不同的值被定义为不同类型的文件。对于MINIX的a.out可执行文件来说,其Magic Number 是 0x0301。当你执行一个文件时,内核执行程序(exec())就会读取该执行文件的头部信息来分析,如果确实是一个可执行文件,例如其Magic number是 0x0301,并且头部中其他信息也符合要求,那么内核就会为该执行文件设置执行环境,然后就会(退出)跳转到内存中该程序开始处执行。当然,由于程序还没有被加载到内存中,因此一执行就会引发内存异常,从而在异常处理程序中执行程序的加载操作。 另外,头部不会被加载进内存中

关于这个,我做个考古。魔幻数法是SCO(到处起诉Linux侵权的那个公司,UNIX在AT&T之后的所有者)的发明,Executable and Linking Format则是USL(UNIX系统实验室)发明ABI时候的产品。这些都是UNIX时代的东西了,所以几乎所有操作系统都是这样的(包括MSDOS那个MZ),这个文章后面说的MINIX亦是(Linux==Linus的MINIX)。扩展名则是在此之前的系统的遗留产物。
顺便说一句,ELF的魔幻数是4位。COFF是Windows用的对象格式,a.out根本不是什么格式,不要混为一谈

    
 
 

您可能感兴趣的文章:

  • AIX 5.3下调用windows 2000上的exe程序,且AIX下需要得到windows下程序执行的返回结果
  • 我在windows下把1.c编译成1.exe可以执行,请问我把1.exe拷贝到unix系统能否执行?怎样移植?
  • window下通过ftp执行linux脚本?
  • 在 Windows 执行 Linux 程序 Atratus
  • linux下的可执行文件是什么?windows下是.exe?
  • 在windows下用纯C写的可执行文件可否放到linux下运行?
  • Java中的类怎样变成可以在Windows环境下执行的.exe文件呢??
  • java 下如何调用 window or unix 下的可执行程序
  • 能否在linux下执行 windows程序呢?
  • linux下执行windows下程序,如何作?
  • redhatlinux 中是否有象windows中.exe或.bat那样的可执行文件。
  • 为何samba共享的文件在windows端编辑后会加上可执行的属性?
  • Windows系统下,Cygwin.bat批处理文件怎么添加并执行其他命令?
  • 请问各位“linuix下的执行程序能否在windows下运行”?
  • 请问有将class文件转换为可执行文件(如Windows下的exe文件)的工具吗?
  • 请问 Windows xp 中如何让 Applet 可以执行?
  • 求助:在Window系统中去连上Solaris系统并执行VMSTAT返回结果
  • Linux下相当于Windows下的排程(自动定时执行任务)的命令或文件夹是什么 , 或如何设置??
  • 编写shell脚本执行远端windows的批处理
  • 求助:我怎么生存 像 windows 下的 exe 可执行文件啊?谢谢!
  • WinDows8最新版文件夹加密
  • 急需windows server 2003系统c:windowssystem32文件夹下winlogon.exe、licdll.dll两个文件,在线等待!
  • windows/windows 7/windows 8 下打开查看、修改及保存超大(GB级)文本文件及其它类型文件的工具-PilotEdit
  • 请问如何在WINDOWS中访问linux下的文件,并把Windows下的文件复制到linux下的分区中
  • windows下文件名非法字符及相关命令
  • 怎么在Linux下改windows系统文件啊,我把windows的BOOT.INI改了,windows启动不了
  • 我是想写批处理文件将一个文件myfile自动拷到用户的 windowssystem 下,但不知用户的windows在c: 还是其他盘,我改怎做???
  • java中使用jxl生成excel文件,在unix中比在windows中明显慢,有高手知道原因吗?或者说unix和windows的文件系统哪个更快?
  • Linux + Windows2000 双启动,Windows2000起不来了,说是文件被破坏,进来看看……
  • 请问windows 2000怎么访问linux?我要从linux下拷文件到windows下
  • ubuntu的Linux与windows可以互ping,但是无法访问windows的共享文件夹,怎么解决
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类window.accessibleawtwindow的类成员方法: window.accessibleawtwindow定义及介绍
  • x-windows如何安装在linux(rdehat9)上面呢,是不是x-windows也分windows和linux版本的吗?
  • java命名空间java.awt类window的类成员方法: window定义及介绍
  • linux和windows串口问题!?linux向windows端发送,第一次write正常,继续write,windows接收到的就变成乱码了,这是什么原因??????
  • java命名空间java.awt.event类windowevent的类成员方法: window_activated定义及介绍
  • redhat7.3+window me +windows xp 共存,MBR在windows me 分区,现在要重裝windwos me,怎么办?
  • java命名空间java.awt.event类windowevent的类成员方法: window_deactivated定义及介绍
  • 装了Linux和Windows,怎样默认进入Windows
  • java命名空间java.awt.event类windowevent的类成员方法: window_gained_focus定义及介绍
  • Linux与windows共存时,如何将Windows设置为默认启动系统?
  • java命名空间java.awt.event类windowevent的类成员方法: window_lost_focus定义及介绍
  • 怎样是编好的java application在windows上像windows应用程序一样直接运行
  • java命名空间java.awt类window的类成员方法: setvisible定义及介绍
  • windows 和linux双系统,重装windows后,无法启动linux?
  • java命名空间java.awt类systemcolor的类成员方法: window定义及介绍
  • 如何将linux的一台机器加入windows 2000的域?并且通过一windows的机器上网?
  • java命名空间javax.accessibility类accessiblerole的类成员方法: window定义及介绍
  • 为什么在安装了WINDOWS和LINUX的电脑上,重装WINDOWS会破坏MBR?
  • java命名空间java.awt.event类keyevent的类成员方法: vk_windows定义及介绍
  • Linux和Windows2000双系统(为什么Windows2000中打开我的电脑非常慢?)
  • java命名空间java.awt类event的类成员方法: window_destroy定义及介绍
  • 我先装WINDOWS2000 然后装red hat 9 可以选择启动其中一个系统。现在我在windows下把linux的分区删了,重起grub进文本了,我怎么进windows


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3