(uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x7e60e35005254...stripped
#
如果是系
统
提供的
/etc/init.d/network
呢?
[root@study ~]#
file /etc/init.d/network
/etc/init.d/network: Bourne
-
Again shell script, ASCII
text executable
看到了吧!如果是
binary
而且是可以执行的时候,他就会显示执行文件类别
(ELF 64-bit LSB
executable)
,
同时会说明是否使用
动态函式库
(shared libs)
,而如果是一般的
script
,那他就会显示
出
text executables
之类的字样!
Tips
事实上,
network
的数据显示出
Bourne-Again ...
那一行,是因为你的
scripts
上面第
一行有宣告
#!/bin/bash
的缘故,如果你½
script
的第一行拿掉,那么不管
/etc/init.d/network
的权限为何,他其实
显示的是
ASCII
文本文件的信息喔!
既然
Linux
操作系统真正认识的其实是
binary program
,那么我们是如何做出这样的一支
binary
的
程序呢?首先,我们必须要写程序,用什么东西写程序?就是一般的字处理器啊!鸟哥都喜欢使
用
vim
来½行程序的撰写,写完的程序就是所谓的源代码啰!
这个程序代码文件其实就是一般的纯
文本档
。
在完成这个原始码文件的编写之后,再来就是要½这个文件『
编译
』成为操作系统看的懂
得
binary program
啰!而要编译自然就需要『
编译程序
』来动作,
经过编译程序的编译与连½之后,
就会产生一支可以执行的
binary program
啰。
举个例子来说,在
Linux
上面最标准的程序语言为
C
,所以我使用
C
的语法½行源代码的书写,
写完之后,以
Linux
上标准的
C
语言编译程序
gcc
这支程序来编译,就可以制作一支可以执行的
binary program
啰。整个的流程有点像这样:
图
21.1.1
、利用
gcc
编译程序½行程序的编译流程示意图
事实上,在编译的过程当中还会产生所谓的
目标文件
(Object file)
,这些文件是以
*.o
的扩展名样式
存在的!至于
C
语言的原始码文件通常以
*.c
作为扩展名。此外,有的时候,我们会在程序当中『引
用、呼½』
其他的外部子程序,或者是利用其他软件提供的『函数功能』,这个时候,我们就必须
要在编译的过程当中,
½该函式库给他加½去,如此一来,编译程序就可以½所有的程序代码与函
式库作一个连½
(Link)
以产生正确的执行档啰。