LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 946|回复: 8

关于Linux可执行文件的格式问题

[复制链接]
发表于 2004-7-4 15:51:58 | 显示全部楼层 |阅读模式
初学Linux,对Linux的可执行文件格式有点搞不清楚,下面我详细说说我的困惑,希望得到各位大侠指点。

  我目前掌握的知识: 在windows平台下,可执行文件总是.exe或者.com的,也就是说,我们通过后缀名来识别该文件是否可执行。但是在linux平台下,这样的方法失效了,我们要知道一个文件是否可执行,似乎并非通过后缀名来判断。我知道的方式是用ls -F命令,如果文件名后面带有*号,则为可执行文件。

  我的困惑:
  1、从论坛搜索到的一些信息显示, linux下面的可执行文件分为ELF、a.out、misc等格式,还有.bin格式的二进制文件,请问这四种格式有什么关系和区别?.bin格式的二进制文件必须加上后缀名.bin吗?ELF、a.out、misc三种格式又是不是二进制形式?它们和.bin格式是包含和被包含关系,还是并行关系?
  2、在windows下我们可以直接输入可执行文件的程序名来运行它,或者通过鼠标在窗口环境下直接点击可执行文件。那么在linux环境下,我们也是通过直接在console下面输入可执行文件名来运行它的吗?或者用在xwindows下用鼠标直接点击文件名?我看到一些大侠在运行可执行文件的时候给出了“./可执行文件名”或者“#./可执行文件名”的格式,请问这个“./”和“#./”是什么意思?同时我知道“./可执行文件名 &”是在后台运行的意思,请问后台运行和前台有什么区别?
  3、后缀名为.sh的是shell脚本文件的意思吗?脚本文件是不是可执行文件?我尝试过在console下直接输入脚本文件名但无法执行,请问我应该如何执行脚本文件?
  4、我用gcc自己编译的程序,例如 gcc -o obj main.c,生成的obj属于哪类可执行文件呢?

问题很多,希望各位大侠能够尽量回答,即使只回答了一小部分,我也非常感谢各位的指导!
发表于 2004-7-4 16:48:21 | 显示全部楼层
1,在linux下,判断文件类型用file命令:
file filename
2, ./file 是执行当前目录下的文件, ./表示当前目录
3,linux下可执行文件的含义是此文件被赋予了执行权限!要是脚本文件的话
chmod +x filename后,就可以 ./filename来执行他了! 或者 sh filename
只知道那么多 :sorry ;)
发表于 2004-7-4 16:52:10 | 显示全部楼层
我也是新手,我只知道 ./表示当前目录 好象unix下没有想win下执行文件默认路径为当前目录这一说,所以执行文件要加上./表示当前目录。
另可执行文件要加上执行权限才可以执行。
.sh脚本一样,要执行他就要给他执行权限。
这是我理解,其他的我就不清楚了,也不知道对不对,望高手指点。
发表于 2004-7-4 17:21:05 | 显示全部楼层
unix默认执行文件目录是社在PATH变量里面
echo $PATH就可以看到
如果要执行一个不在path里面的文件就要把文件的路径写出来:/usr/bin/fcitx
如果要执行的文件在当前目录就可以./fcitx
. 是当前目录,.. 是当前目录的上级目录,在任一个目录下ls -a都可以看到.和..两个文件夹
发表于 2004-7-9 15:52:59 | 显示全部楼层
顶一下。这个问题我也想问。
不知道哪位大虾能指导一下。
不过第4个问题,obj文件应该不属于可执行文件,只是经编译形成的目标文件而已。
发表于 2004-7-9 16:29:04 | 显示全部楼层
另外,除了可执行文件外,其他文件是怎么回事?
比如.deb文件是靠扩展名识别的吗?.zip文件和文本文件又是怎么回事?为什么我有两个.rpm文件,有一个识别为软件包,有一个识别为脚本?
发表于 2004-7-9 16:45:23 | 显示全部楼层
unix(几乎)从来不用扩展名识别文件
ELF a.out bin和interpreted都有文件头的
通过文件头识别
比如文件头有个#!的
肯定是interpreted
发表于 2004-7-9 16:46:31 | 显示全部楼层
现代的GNU/linux雇佣ELF档案格式
发表于 2004-7-9 17:16:47 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表