2012年01月02日 星期一 10:35
在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… -- 项超 哈尔滨工业大学 计算机科学与技术系 邮箱:cloudaice在163.com gmail邮箱:cloudaice在gmail.com QQ:1214696737 -------------- 下一部分 -------------- 一个HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120102/6b75704a/attachment.html>
2012年01月02日 星期一 10:42
Source Package: .tar.gz Binary Distribution: .deb, .rpm, .txz (slackware) .src.rpm: source package C 文件 + autotools 生成的 configure 等脚本 = source package 安装: 将二进制放到正确的地方的步骤,例如将 foo 放到 /usr/bin, 将 foo.1 到 /usr/man/man1 里 去看看鸟哥的 Linux 私房菜,以及 Ubuntu 中文论坛,哲思似乎不是特别适合这种讨论。 另外,有个 mailing list 叫做 learning-linux-c-cpp 不错,在 http://learn.akae.cn/media/由于我在国内不方便上 Google Groups... 你想办法上去好了 -- Alex Difan Zhang (@tifan) http://difan.org.cn/ | http://blog.osqdu.org/ Graduate School, Towson University Towson MD 21204 Tel: 434-532-1042 2012/1/2 项超 <cloudaice at 163.com> > > > 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 > 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello > Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? > > 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… > -- > 项超 > 哈尔滨工业大学 > 计算机科学与技术系 > 邮箱:cloudaice at 163.com > gmail邮箱:cloudaice at gmail.com > QQ:1214696737 > > > > > _______________________________________________ > zeuux-universe mailing list > zeuux-universe at zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120102/766413bd/attachment.html>
2012年01月02日 星期一 10:54
谢谢Alex Zhang 在 2012-01-02 10:43:48,"Alex Zhang" <cheungtifan在gmail.com> 写道: Source Package: .tar.gz Binary Distribution: .deb, .rpm, .txz (slackware) .src.rpm: source package C 文件 + autotools 生成的 configure 等脚本 = source package 安装: 将二进制放到正确的地方的步骤,例如将 foo 放到 /usr/bin, 将 foo.1 到 /usr/man/man1 里 去看看鸟哥的 Linux 私房菜,以及 Ubuntu 中文论坛,哲思似乎不是特别适合这种讨论。 另外,有个 mailing list 叫做 learning-linux-c-cpp 不错,在 http://learn.akae.cn/media/ 由于我在国内不方便上 Google Groups... 你想办法上去好了 -- Alex Difan Zhang (@tifan) http://difan.org.cn/ | http://blog.osqdu.org/ Graduate School, Towson University Towson MD 21204 Tel: 434-532-1042 2012/1/2 项超 <cloudaice在163.com> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… -- 项超 哈尔滨工业大学 计算机科学与技术系 邮箱:cloudaice在163.com gmail邮箱:cloudaice在gmail.com QQ:1214696737 _______________________________________________ zeuux-universe mailing list zeuux-universe在zeuux.org http://www.zeuux.org/mailman/listinfo/zeuux-universe ZEUUX Project - Free Software, Free Society! http://www.zeuux.org -------------- 下一部分 -------------- 一个HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120102/593d2919/attachment-0001.html>
2012年01月05日 星期四 08:49
安装的原因是因为依赖。 例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME 下面,同时还有数据放到某个 share 下面。 所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share 下面。OK, Linux 下的安装就等于复制文件。。。 为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux 发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm 系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 2012/1/2 项超 <cloudaice在163.com>: > > 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 > 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello > Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? > 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊……
2012年01月06日 星期五 12:27
那编译后的可执行文件就是二进制文件吗? 在 2012-01-05 08:49:40,pansz <pan.shizhu在gmail.com> 写道: >安装的原因是因为依赖。 > >例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >下面,同时还有数据放到某个 share 下面。 > >所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >下面。OK, Linux 下的安装就等于复制文件。。。 > >为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 > >2012/1/2 项超 <cloudaice在163.com>: >> >> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >_______________________________________________ >zeuux-universe mailing list >zeuux-universe在zeuux.org >http://www.zeuux.org/mailman/listinfo/zeuux-universe > >ZEUUX Project - Free Software, Free Society! >http://www.zeuux.org
2012年01月06日 星期五 12:28
对。 On Friday, January 6, 2012, 项超 <cloudaice at 163.com> wrote: > 那编译后的可执行文件就是二进制文件吗? > 在 2012-01-05 08:49:40,pansz <pan.shizhu at gmail.com> 写道: >>安装的原因是因为依赖。 >> >>例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>下面,同时还有数据放到某个 share 下面。 >> >>所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>下面。OK, Linux 下的安装就等于复制文件。。。 >> >>为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >> >>2012/1/2 项超 <cloudaice at 163.com>: >>> >>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>_______________________________________________ >>zeuux-universe mailing list >>zeuux-universe at zeuux.org >>http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >>ZEUUX Project - Free Software, Free Society! >>http://www.zeuux.org > _______________________________________________ > zeuux-universe mailing list > zeuux-universe at zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org -- Sent from Gmail Mobile -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120106/ce2ef3fa/attachment.html>
2012年01月06日 星期五 16:22
哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan在gmail.com> 写道: 对。 On Friday, January 6, 2012, 项超 <cloudaice在163.com> wrote: > 那编译后的可执行文件就是二进制文件吗? > 在 2012-01-05 08:49:40,pansz <pan.shizhu在gmail.com> 写道: >>安装的原因是因为依赖。 >> >>例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>下面,同时还有数据放到某个 share 下面。 >> >>所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>下面。OK, Linux 下的安装就等于复制文件。。。 >> >>为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >> >>2012/1/2 项超 <cloudaice在163.com>: >>> >>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>_______________________________________________ >>zeuux-universe mailing list >>zeuux-universe在zeuux.org >>http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >>ZEUUX Project - Free Software, Free Society! >>http://www.zeuux.org > _______________________________________________ > zeuux-universe mailing list > zeuux-universe在zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org -- Sent from Gmail Mobile -------------- 下一部分 -------------- 一个HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120106/2d43b083/attachment-0001.html>
2012年01月06日 星期五 16:42
不完全是。 exec()也可以调用一些脚本,比如 #!/usr/bin/env python print "Hello World" 可以执行,但是不是二进制。其实这个有点复杂了,你可以file xxx看一下来判断,一般的“可执行二进制”会说 /bin/sh: Mach-O universal binary with 2 architectures /bin/sh (for architecture x86_64): Mach-O 64-bit executable x86_64 /bin/sh (for architecture i386): Mach-O executable i386 (Mac上的二进制) /sbin/sh: ELF 32-bit LSB executable 80386 Version 1 [FPU], dynamically linked, not stripped, no debugging information available (32位二进制) /usr/php/5.3/sbin/php-fpm: ELF 64-bit LSB executable AMD64 Version 1 [SSE2 SSE CMOV FPU], dynamically linked, stripped (64位二进制) 在UNIX里,可执行!=二进制 当然,二进制!=可执行,只不过我们一般说可执行二进制为二进制罢了 -- Alex Difan Zhang (@tifan) http://difan.org.cn/ | http://blog.osqdu.org/ Graduate School, Towson University Towson MD 21204 Tel: 434-532-1042 2012/1/6 项超 <cloudaice at 163.com>: > 哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 > > 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan at gmail.com> 写道: > > 对。 > > On Friday, January 6, 2012, 项超 <cloudaice at 163.com> wrote: >> 那编译后的可执行文件就是二进制文件吗? >> 在 2012-01-05 08:49:40,pansz <pan.shizhu at gmail.com> 写道: >>>安装的原因是因为依赖。 >>> >>>例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>>下面,同时还有数据放到某个 share 下面。 >>> >>>所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>>下面。OK, Linux 下的安装就等于复制文件。。。 >>> >>>为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>>发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>>系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >>> >>>2012/1/2 项超 <cloudaice at 163.com>: >>>> >>>> >>>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>>> >>>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>>> >>>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>>_______________________________________________ >>>zeuux-universe mailing list >>>zeuux-universe at zeuux.org >>>http://www.zeuux.org/mailman/listinfo/zeuux-universe >>> >>>ZEUUX Project - Free Software, Free Society! >>>http://www.zeuux.org >> _______________________________________________ >> zeuux-universe mailing list >> zeuux-universe at zeuux.org >> http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >> ZEUUX Project - Free Software, Free Society! >> http://www.zeuux.org > > -- > Sent from Gmail Mobile > > > > > _______________________________________________ > zeuux-universe mailing list > zeuux-universe at zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org
2012年01月07日 星期六 21:39
其实对于python 的脚本文件来说,不应该是可执行文件,因为是一种解释型语言,它只是在运行的时候通过解释器编程字节码,然后再在虚拟机上面运行,最终也是要变成二进制格式的代码送给CPU执行,可能过程还会更加复杂,只是这样子粗略的理解。但是绝大部分的安装在计算机上的文件都是可执行的二进制文件吧,至少在运行效率方面考虑也应该是这样子吧。关于一些python,java语言写的软件,发布安装在计算机中也是编译完成后的二进制文件,还是只是脚本文件? 在 2012-01-06 16:43:48,"Alex Zhang" <cheungtifan在gmail.com> 写道: >不完全是。 >exec()也可以调用一些脚本,比如 > >#!/usr/bin/env python >print "Hello World" > >可以执行,但是不是二进制。其实这个有点复杂了,你可以file xxx看一下来判断,一般的“可执行二进制”会说 >/bin/sh: Mach-O universal binary with 2 architectures >/bin/sh (for architecture x86_64): Mach-O 64-bit executable x86_64 >/bin/sh (for architecture i386): Mach-O executable i386 >(Mac上的二进制) >/sbin/sh: ELF 32-bit LSB executable 80386 Version 1 [FPU], >dynamically linked, not stripped, no debugging information available >(32位二进制) >/usr/php/5.3/sbin/php-fpm: ELF 64-bit LSB executable AMD64 >Version 1 [SSE2 SSE CMOV FPU], dynamically linked, stripped >(64位二进制) > >在UNIX里,可执行!=二进制 > >当然,二进制!=可执行,只不过我们一般说可执行二进制为二进制罢了 >-- >Alex Difan Zhang (@tifan) >http://difan.org.cn/ | http://blog.osqdu.org/ >Graduate School, Towson University >Towson MD 21204 >Tel: 434-532-1042 > > > >2012/1/6 项超 <cloudaice在163.com>: >> 哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 >> >> 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan在gmail.com> 写道: >> >> 对。 >> >> On Friday, January 6, 2012, 项超 <cloudaice在163.com> wrote: >>> 那编译后的可执行文件就是二进制文件吗? >>> 在 2012-01-05 08:49:40,pansz <pan.shizhu在gmail.com> 写道: >>>>安装的原因是因为依赖。 >>>> >>>>例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>>>下面,同时还有数据放到某个 share 下面。 >>>> >>>>所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>>>下面。OK, Linux 下的安装就等于复制文件。。。 >>>> >>>>为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>>>发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>>>系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >>>> >>>>2012/1/2 项超 <cloudaice在163.com>: >>>>> >>>>> >>>>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>>>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>>>> >>>>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>>>> >>>>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>>>_______________________________________________ >>>>zeuux-universe mailing list >>>>zeuux-universe在zeuux.org >>>>http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>> >>>>ZEUUX Project - Free Software, Free Society! >>>>http://www.zeuux.org >>> _______________________________________________ >>> zeuux-universe mailing list >>> zeuux-universe在zeuux.org >>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>> >>> ZEUUX Project - Free Software, Free Society! >>> http://www.zeuux.org >> >> -- >> Sent from Gmail Mobile >> >> >> >> >> _______________________________________________ >> zeuux-universe mailing list >> zeuux-universe在zeuux.org >> http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >> ZEUUX Project - Free Software, Free Society! >> http://www.zeuux.org >_______________________________________________ >zeuux-universe mailing list >zeuux-universe在zeuux.org >http://www.zeuux.org/mailman/listinfo/zeuux-universe > >ZEUUX Project - Free Software, Free Society! >http://www.zeuux.org
2012年01月08日 星期日 08:00
带#!的脚本可以运行,那是操作系统的功能,不是什么应该不应该的问题,而是既成事实 发自我的 iPad 在 2012-1-7,21:39,项超 <cloudaice在163.com> 写道: > 其实对于python 的脚本文件来说,不应该是可执行文件,因为是一种解释型语言,它只是在运行的时候通过解释器编程字节码,然后再在虚拟机上面运行,最终也是要变成二进制格式的代码送给CPU执行,可能过程还会更加复杂,只是这样子粗略的理解。但是绝大部分的安装在计算机上的文件都是可执行的二进制文件吧,至少在运行效率方面考虑也应该是这样子吧。关于一些python,java语言写的软件,发布安装在计算机中也是编译完成后的二进制文件,还是只是脚本文件? > 在 2012-01-06 16:43:48,"Alex Zhang" <cheungtifan在gmail.com> 写道: >> 不完全是。 >> exec()也可以调用一些脚本,比如 >> >> #!/usr/bin/env python >> print "Hello World" >> >> 可以执行,但是不是二进制。其实这个有点复杂了,你可以file xxx看一下来判断,一般的“可执行二进制”会说 >> /bin/sh: Mach-O universal binary with 2 architectures >> /bin/sh (for architecture x86_64): Mach-O 64-bit executable x86_64 >> /bin/sh (for architecture i386): Mach-O executable i386 >> (Mac上的二进制) >> /sbin/sh: ELF 32-bit LSB executable 80386 Version 1 [FPU], >> dynamically linked, not stripped, no debugging information available >> (32位二进制) >> /usr/php/5.3/sbin/php-fpm: ELF 64-bit LSB executable AMD64 >> Version 1 [SSE2 SSE CMOV FPU], dynamically linked, stripped >> (64位二进制) >> >> 在UNIX里,可执行!=二进制 >> >> 当然,二进制!=可执行,只不过我们一般说可执行二进制为二进制罢了 >> -- >> Alex Difan Zhang (@tifan) >> http://difan.org.cn/ | http://blog.osqdu.org/ >> Graduate School, Towson University >> Towson MD 21204 >> Tel: 434-532-1042 >> >> >> >> 2012/1/6 项超 <cloudaice在163.com>: >>> 哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 >>> >>> 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan在gmail.com> 写道: >>> >>> 对。 >>> >>> On Friday, January 6, 2012, 项超 <cloudaice在163.com> wrote: >>>> 那编译后的可执行文件就是二进制文件吗? >>>> 在 2012-01-05 08:49:40,pansz <pan.shizhu在gmail.com> 写道: >>>>> 安装的原因是因为依赖。 >>>>> >>>>> 例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>>>> 下面,同时还有数据放到某个 share 下面。 >>>>> >>>>> 所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>>>> 下面。OK, Linux 下的安装就等于复制文件。。。 >>>>> >>>>> 为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>>>> 发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>>>> 系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >>>>> >>>>> 2012/1/2 项超 <cloudaice在163.com>: >>>>>> >>>>>> >>>>>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>>>>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>>>>> >>>>>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>>>>> >>>>>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>>>> _______________________________________________ >>>>> zeuux-universe mailing list >>>>> zeuux-universe在zeuux.org >>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>> >>>>> ZEUUX Project - Free Software, Free Society! >>>>> http://www.zeuux.org >>>> _______________________________________________ >>>> zeuux-universe mailing list >>>> zeuux-universe在zeuux.org >>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>> >>>> ZEUUX Project - Free Software, Free Society! >>>> http://www.zeuux.org >>> >>> -- >>> Sent from Gmail Mobile >>> >>> >>> >>> >>> _______________________________________________ >>> zeuux-universe mailing list >>> zeuux-universe在zeuux.org >>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>> >>> ZEUUX Project - Free Software, Free Society! >>> http://www.zeuux.org >> _______________________________________________ >> zeuux-universe mailing list >> zeuux-universe在zeuux.org >> http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >> ZEUUX Project - Free Software, Free Society! >> http://www.zeuux.org > _______________________________________________ > zeuux-universe mailing list > zeuux-universe在zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org
2012年01月08日 星期日 12:22
这句话听的不是很明白,“是操作系统的功能”。操作洗系统也是可以说清楚的吧。并不是推给操作系统就万事大吉了吧。 在 2012-01-08 08:01:09,julyclyde <julyclyde在gmail.com> 写道: >带#!的脚本可以运行,那是操作系统的功能,不是什么应该不应该的问题,而是既成事实 > >发自我的 iPad > >在 2012-1-7,21:39,项超 <cloudaice在163.com> 写道: > >> 其实对于python 的脚本文件来说,不应该是可执行文件,因为是一种解释型语言,它只是在运行的时候通过解释器编程字节码,然后再在虚拟机上面运行,最终也是要变成二进制格式的代码送给CPU执行,可能过程还会更加复杂,只是这样子粗略的理解。但是绝大部分的安装在计算机上的文件都是可执行的二进制文件吧,至少在运行效率方面考虑也应该是这样子吧。关于一些python,java语言写的软件,发布安装在计算机中也是编译完成后的二进制文件,还是只是脚本文件? >> 在 2012-01-06 16:43:48,"Alex Zhang" <cheungtifan在gmail.com> 写道: >>> 不完全是。 >>> exec()也可以调用一些脚本,比如 >>> >>> #!/usr/bin/env python >>> print "Hello World" >>> >>> 可以执行,但是不是二进制。其实这个有点复杂了,你可以file xxx看一下来判断,一般的“可执行二进制”会说 >>> /bin/sh: Mach-O universal binary with 2 architectures >>> /bin/sh (for architecture x86_64): Mach-O 64-bit executable x86_64 >>> /bin/sh (for architecture i386): Mach-O executable i386 >>> (Mac上的二进制) >>> /sbin/sh: ELF 32-bit LSB executable 80386 Version 1 [FPU], >>> dynamically linked, not stripped, no debugging information available >>> (32位二进制) >>> /usr/php/5.3/sbin/php-fpm: ELF 64-bit LSB executable AMD64 >>> Version 1 [SSE2 SSE CMOV FPU], dynamically linked, stripped >>> (64位二进制) >>> >>> 在UNIX里,可执行!=二进制 >>> >>> 当然,二进制!=可执行,只不过我们一般说可执行二进制为二进制罢了 >>> -- >>> Alex Difan Zhang (@tifan) >>> http://difan.org.cn/ | http://blog.osqdu.org/ >>> Graduate School, Towson University >>> Towson MD 21204 >>> Tel: 434-532-1042 >>> >>> >>> >>> 2012/1/6 项超 <cloudaice在163.com>: >>>> 哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 >>>> >>>> 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan在gmail.com> 写道: >>>> >>>> 对。 >>>> >>>> On Friday, January 6, 2012, 项超 <cloudaice在163.com> wrote: >>>>> 那编译后的可执行文件就是二进制文件吗? >>>>> 在 2012-01-05 08:49:40,pansz <pan.shizhu在gmail.com> 写道: >>>>>> 安装的原因是因为依赖。 >>>>>> >>>>>> 例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>>>>> 下面,同时还有数据放到某个 share 下面。 >>>>>> >>>>>> 所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>>>>> 下面。OK, Linux 下的安装就等于复制文件。。。 >>>>>> >>>>>> 为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>>>>> 发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>>>>> 系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >>>>>> >>>>>> 2012/1/2 项超 <cloudaice在163.com>: >>>>>>> >>>>>>> >>>>>>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>>>>>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>>>>>> >>>>>>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>>>>>> >>>>>>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>>>>> _______________________________________________ >>>>>> zeuux-universe mailing list >>>>>> zeuux-universe在zeuux.org >>>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>>> >>>>>> ZEUUX Project - Free Software, Free Society! >>>>>> http://www.zeuux.org >>>>> _______________________________________________ >>>>> zeuux-universe mailing list >>>>> zeuux-universe在zeuux.org >>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>> >>>>> ZEUUX Project - Free Software, Free Society! >>>>> http://www.zeuux.org >>>> >>>> -- >>>> Sent from Gmail Mobile >>>> >>>> >>>> >>>> >>>> _______________________________________________ >>>> zeuux-universe mailing list >>>> zeuux-universe在zeuux.org >>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>> >>>> ZEUUX Project - Free Software, Free Society! >>>> http://www.zeuux.org >>> _______________________________________________ >>> zeuux-universe mailing list >>> zeuux-universe在zeuux.org >>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>> >>> ZEUUX Project - Free Software, Free Society! >>> http://www.zeuux.org >> _______________________________________________ >> zeuux-universe mailing list >> zeuux-universe在zeuux.org >> http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >> ZEUUX Project - Free Software, Free Society! >> http://www.zeuux.org >_______________________________________________ >zeuux-universe mailing list >zeuux-universe在zeuux.org >http://www.zeuux.org/mailman/listinfo/zeuux-universe > >ZEUUX Project - Free Software, Free Society! >http://www.zeuux.org
2012年01月08日 星期日 12:31
Please read: http://www.in-ulm.de/~mascheck/various/shebang/ The #! magic, details about the shebang/hash-bang mechanism on various Unix flavours 这个也可以参考: http://www.kernel.org/doc/Documentation/binfmt_misc.txt -- Alex Difan Zhang (@tifan) http://difan.org.cn/ | http://blog.osqdu.org/ Graduate School, Towson University Towson MD 21204 Tel: 434-532-1042 2012/1/8 项超 <cloudaice at 163.com>: > 这句话听的不是很明白,“是操作系统的功能”。操作洗系统也是可以说清楚的吧。并不是推给操作系统就万事大吉了吧。 > 在 2012-01-08 08:01:09,julyclyde <julyclyde at gmail.com> 写道: >>带#!的脚本可以运行,那是操作系统的功能,不是什么应该不应该的问题,而是既成事实 >> >>发自我的 iPad >> >>在 2012-1-7,21:39,项超 <cloudaice at 163.com> 写道: >> >>> 其实对于python 的脚本文件来说,不应该是可执行文件,因为是一种解释型语言,它只是在运行的时候通过解释器编程字节码,然后再在虚拟机上面运行,最终也是要变成二进制格式的代码送给CPU执行,可能过程还会更加复杂,只是这样子粗略的理解。但是绝大部分的安装在计算机上的文件都是可执行的二进制文件吧,至少在运行效率方面考虑也应该是这样子吧。关于一些python,java语言写的软件,发布安装在计算机中也是编译完成后的二进制文件,还是只是脚本文件? >>> 在 2012-01-06 16:43:48,"Alex Zhang" <cheungtifan at gmail.com> 写道: >>>> 不完全是。 >>>> exec()也可以调用一些脚本,比如 >>>> >>>> #!/usr/bin/env python >>>> print "Hello World" >>>> >>>> 可以执行,但是不是二进制。其实这个有点复杂了,你可以file xxx看一下来判断,一般的“可执行二进制”会说 >>>> /bin/sh: Mach-O universal binary with 2 architectures >>>> /bin/sh (for architecture x86_64): Mach-O 64-bit executable x86_64 >>>> /bin/sh (for architecture i386): Mach-O executable i386 >>>> (Mac上的二进制) >>>> /sbin/sh: ELF 32-bit LSB executable 80386 Version 1 [FPU], >>>> dynamically linked, not stripped, no debugging information available >>>> (32位二进制) >>>> /usr/php/5.3/sbin/php-fpm: ELF 64-bit LSB executable AMD64 >>>> Version 1 [SSE2 SSE CMOV FPU], dynamically linked, stripped >>>> (64位二进制) >>>> >>>> 在UNIX里,可执行!=二进制 >>>> >>>> 当然,二进制!=可执行,只不过我们一般说可执行二进制为二进制罢了 >>>> -- >>>> Alex Difan Zhang (@tifan) >>>> http://difan.org.cn/ | http://blog.osqdu.org/ >>>> Graduate School, Towson University >>>> Towson MD 21204 >>>> Tel: 434-532-1042 >>>> >>>> >>>> >>>> 2012/1/6 项超 <cloudaice at 163.com>: >>>>> 哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 >>>>> >>>>> 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan at gmail.com> 写道: >>>>> >>>>> 对。 >>>>> >>>>> On Friday, January 6, 2012, 项超 <cloudaice at 163.com> wrote: >>>>>> 那编译后的可执行文件就是二进制文件吗? >>>>>> 在 2012-01-05 08:49:40,pansz <pan.shizhu at gmail.com> 写道: >>>>>>> 安装的原因是因为依赖。 >>>>>>> >>>>>>> 例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>>>>>> 下面,同时还有数据放到某个 share 下面。 >>>>>>> >>>>>>> 所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>>>>>> 下面。OK, Linux 下的安装就等于复制文件。。。 >>>>>>> >>>>>>> 为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>>>>>> 发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>>>>>> 系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >>>>>>> >>>>>>> 2012/1/2 项超 <cloudaice at 163.com>: >>>>>>>> >>>>>>>> >>>>>>>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>>>>>>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>>>>>>> >>>>>>>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>>>>>>> >>>>>>>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>>>>>> _______________________________________________ >>>>>>> zeuux-universe mailing list >>>>>>> zeuux-universe at zeuux.org >>>>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>>>> >>>>>>> ZEUUX Project - Free Software, Free Society! >>>>>>> http://www.zeuux.org >>>>>> _______________________________________________ >>>>>> zeuux-universe mailing list >>>>>> zeuux-universe at zeuux.org >>>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>>> >>>>>> ZEUUX Project - Free Software, Free Society! >>>>>> http://www.zeuux.org >>>>> >>>>> -- >>>>> Sent from Gmail Mobile >>>>> >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> zeuux-universe mailing list >>>>> zeuux-universe at zeuux.org >>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>> >>>>> ZEUUX Project - Free Software, Free Society! >>>>> http://www.zeuux.org >>>> _______________________________________________ >>>> zeuux-universe mailing list >>>> zeuux-universe at zeuux.org >>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>> >>>> ZEUUX Project - Free Software, Free Society! >>>> http://www.zeuux.org >>> _______________________________________________ >>> zeuux-universe mailing list >>> zeuux-universe at zeuux.org >>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>> >>> ZEUUX Project - Free Software, Free Society! >>> http://www.zeuux.org >>_______________________________________________ >>zeuux-universe mailing list >>zeuux-universe at zeuux.org >>http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >>ZEUUX Project - Free Software, Free Society! >>http://www.zeuux.org > _______________________________________________ > zeuux-universe mailing list > zeuux-universe at zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org
2012年01月08日 星期日 12:48
嗯…… At 2012-01-08 12:35:00,"Alex Zhang" <cheungtifan在gmail.com> wrote: >Please read: http://www.in-ulm.de/~mascheck/various/shebang/ The #! >magic, details about the shebang/hash-bang mechanism on various Unix >flavours >这个也可以参考: http://www.kernel.org/doc/Documentation/binfmt_misc.txt >-- >Alex Difan Zhang (@tifan) >http://difan.org.cn/ | http://blog.osqdu.org/ >Graduate School, Towson University >Towson MD 21204 >Tel: 434-532-1042 > > > >2012/1/8 项超 <cloudaice在163.com>: >> 这句话听的不是很明白,“是操作系统的功能”。操作洗系统也是可以说清楚的吧。并不是推给操作系统就万事大吉了吧。 >> 在 2012-01-08 08:01:09,julyclyde <julyclyde在gmail.com> 写道: >>>带#!的脚本可以运行,那是操作系统的功能,不是什么应该不应该的问题,而是既成事实 >>> >>>发自我的 iPad >>> >>>在 2012-1-7,21:39,项超 <cloudaice在163.com> 写道: >>> >>>> 其实对于python 的脚本文件来说,不应该是可执行文件,因为是一种解释型语言,它只是在运行的时候通过解释器编程字节码,然后再在虚拟机上面运行,最终也是要变成二进制格式的代码送给CPU执行,可能过程还会更加复杂,只是这样子粗略的理解。但是绝大部分的安装在计算机上的文件都是可执行的二进制文件吧,至少在运行效率方面考虑也应该是这样子吧。关于一些python,java语言写的软件,发布安装在计算机中也是编译完成后的二进制文件,还是只是脚本文件? >>>> 在 2012-01-06 16:43:48,"Alex Zhang" <cheungtifan在gmail.com> 写道: >>>>> 不完全是。 >>>>> exec()也可以调用一些脚本,比如 >>>>> >>>>> #!/usr/bin/env python >>>>> print "Hello World" >>>>> >>>>> 可以执行,但是不是二进制。其实这个有点复杂了,你可以file xxx看一下来判断,一般的“可执行二进制”会说 >>>>> /bin/sh: Mach-O universal binary with 2 architectures >>>>> /bin/sh (for architecture x86_64): Mach-O 64-bit executable x86_64 >>>>> /bin/sh (for architecture i386): Mach-O executable i386 >>>>> (Mac上的二进制) >>>>> /sbin/sh: ELF 32-bit LSB executable 80386 Version 1 [FPU], >>>>> dynamically linked, not stripped, no debugging information available >>>>> (32位二进制) >>>>> /usr/php/5.3/sbin/php-fpm: ELF 64-bit LSB executable AMD64 >>>>> Version 1 [SSE2 SSE CMOV FPU], dynamically linked, stripped >>>>> (64位二进制) >>>>> >>>>> 在UNIX里,可执行!=二进制 >>>>> >>>>> 当然,二进制!=可执行,只不过我们一般说可执行二进制为二进制罢了 >>>>> -- >>>>> Alex Difan Zhang (@tifan) >>>>> http://difan.org.cn/ | http://blog.osqdu.org/ >>>>> Graduate School, Towson University >>>>> Towson MD 21204 >>>>> Tel: 434-532-1042 >>>>> >>>>> >>>>> >>>>> 2012/1/6 项超 <cloudaice在163.com>: >>>>>> 哦,如果我理解的没有措的话,哪些可执行文件就是一些二进制0,1机器代码。 >>>>>> >>>>>> 在 2012-01-06 12:28:39,"Alex Zhang" <cheungtifan在gmail.com> 写道: >>>>>> >>>>>> 对。 >>>>>> >>>>>> On Friday, January 6, 2012, 项超 <cloudaice在163.com> wrote: >>>>>>> 那编译后的可执行文件就是二进制文件吗? >>>>>>> 在 2012-01-05 08:49:40,pansz <pan.shizhu在gmail.com> 写道: >>>>>>>> 安装的原因是因为依赖。 >>>>>>>> >>>>>>>> 例如你的软件会使用一些动态库一般会放在某个 /lib 下面,同时可能会读取一些配置文件 可能放在某个 /etc 或者 HOME >>>>>>>> 下面,同时还有数据放到某个 share 下面。 >>>>>>>> >>>>>>>> 所谓安装,就是把主程序复制到某个 /bin 下面,库放到某个 /lib 下面,配置文件放到该放的位置,数据放到某个 /share >>>>>>>> 下面。OK, Linux 下的安装就等于复制文件。。。 >>>>>>>> >>>>>>>> 为什么要打包呢?有两点,一个当然是你可以指定把不同的文件放到不同的目录下去。二个是你会依赖不同的库,而这个库在不同的 Linux >>>>>>>> 发行版中叫不同的名字,之所以要打 rpm 跟 deb,是因为你依赖的库在 deb 系统跟 rpm >>>>>>>> 系统中往往叫不同的名字,你为了让系统自己知道怎么去找那些库,就得按照对应系统的命名规则来。 >>>>>>>> >>>>>>>> 2012/1/2 项超 <cloudaice在163.com>: >>>>>>>>> >>>>>>>>> >>>>>>>>> 在安装软件的时候,经常会碰到这样的问题,有源码包,二进制包,rpm包等等各种,有时候迷迷糊糊似乎是弄懂了一样,但是碰到另外的,就又迷糊了。怀疑自己理解的正确性了。看看网上的一些说法更是觉得晕了。 >>>>>>>>> 首先有一点,我是很清楚的。举一个例子就是,我在linux系统下,写一个“Hello >>>>>>>>> >>>>>>>>> Word”的c程序。然后用GCC编译,就可以生成可执行的文件了。我只要一运行这个可执行的文件。就算我这个软件已经完成了。我本来觉得就是这么简单的,至少对于这个足够小的程序来说。但是现在又发现不对劲了。我们平时所说的“安装”又是怎么一回事呢?安装完之后的可以用的程序,和我编译完成后的可执行的文件有什么区别呢? >>>>>>>>> >>>>>>>>> 另外还有什么二进制包,rpm,等等各种包,越发分不清楚了。之前也看过一些介绍这些的文章,因为也只是粗略的明白了点,但是碰到更多的类似的东西又糊涂了,怀疑自己了。还有那个编译完后的可执行文件不是二进制包吗?我一直以为编译完之后的可执行文件就是二进制文件。哎……好乱啊…… >>>>>>>> _______________________________________________ >>>>>>>> zeuux-universe mailing list >>>>>>>> zeuux-universe在zeuux.org >>>>>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>>>>> >>>>>>>> ZEUUX Project - Free Software, Free Society! >>>>>>>> http://www.zeuux.org >>>>>>> _______________________________________________ >>>>>>> zeuux-universe mailing list >>>>>>> zeuux-universe在zeuux.org >>>>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>>>> >>>>>>> ZEUUX Project - Free Software, Free Society! >>>>>>> http://www.zeuux.org >>>>>> >>>>>> -- >>>>>> Sent from Gmail Mobile >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> zeuux-universe mailing list >>>>>> zeuux-universe在zeuux.org >>>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>>> >>>>>> ZEUUX Project - Free Software, Free Society! >>>>>> http://www.zeuux.org >>>>> _______________________________________________ >>>>> zeuux-universe mailing list >>>>> zeuux-universe在zeuux.org >>>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>>> >>>>> ZEUUX Project - Free Software, Free Society! >>>>> http://www.zeuux.org >>>> _______________________________________________ >>>> zeuux-universe mailing list >>>> zeuux-universe在zeuux.org >>>> http://www.zeuux.org/mailman/listinfo/zeuux-universe >>>> >>>> ZEUUX Project - Free Software, Free Society! >>>> http://www.zeuux.org >>>_______________________________________________ >>>zeuux-universe mailing list >>>zeuux-universe在zeuux.org >>>http://www.zeuux.org/mailman/listinfo/zeuux-universe >>> >>>ZEUUX Project - Free Software, Free Society! >>>http://www.zeuux.org >> _______________________________________________ >> zeuux-universe mailing list >> zeuux-universe在zeuux.org >> http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >> ZEUUX Project - Free Software, Free Society! >> http://www.zeuux.org >_______________________________________________ >zeuux-universe mailing list >zeuux-universe在zeuux.org >http://www.zeuux.org/mailman/listinfo/zeuux-universe > >ZEUUX Project - Free Software, Free Society! >http://www.zeuux.org
2012年01月09日 星期一 08:22
2012/1/7 项超 <cloudaice在163.com>: > 其实对于python 的脚本文件来说,不应该是可执行文件 正解,终极的目标,当然只有二进制文件才可以执行。 但是一个脚本文件中一般是需要指向到一个可执行文件的。此时,这个脚本本身只是一种“数据”,或者说一个“参数”,实际的程序在里面指定的二进制文件。 当你在 python 脚本开头看到这样的字符: #!/usr/bin/env python 这样的开头中,实际调用的是 /usr/bin/env 这个二进制文件。所以最终,还是二进制文件才能得以执行。 脚本文件只是“看起来”被执行了,实际上它只是作为某个二进制文件的数据而已。就如同在 windows 下,doc 文件看起来能被双击执行,但他只是调用 word 打开自己而已。
2012年01月09日 星期一 10:35
那windows里的bat和cmd文件呢? Ren Xiaolei 2012/1/9 pansz <pan.shizhu在gmail.com>: > 脚本文件只是“看起来”被执行了,实际上它只是作为某个二进制文件的数据而已。就如同在 windows 下,doc > 文件看起来能被双击执行,但他只是调用 word 打开自己而已。
2012年01月09日 星期一 11:08
传给cmd.exe解释 On Monday, January 9, 2012, 任晓磊 <julyclyde at gmail.com> wrote: > 那windows里的bat和cmd文件呢? > > Ren Xiaolei > > > > 2012/1/9 pansz <pan.shizhu at gmail.com>: >> 脚本文件只是“看起来”被执行了,实际上它只是作为某个二进制文件的数据而已。就如同在 windows 下,doc >> 文件看起来能被双击执行,但他只是调用 word 打开自己而已。 > _______________________________________________ > zeuux-universe mailing list > zeuux-universe at zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org -- Sent from Gmail Mobile -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120109/b9a49ae3/attachment.html>
2012年01月09日 星期一 20:17
区别就在这里了。在windows命令提示符运行批处理,是由cmd解释的;资源管理器里运行,靠的是文件扩展名关联 而linux的#!机制是内核亲自处理的,只要有x权限就足够,无任何外部的文件关联机制 具体到syscall级别,可以直接exec一个脚本,而不需要提前解析其首行 On Monday, January 9, 2012, Alex Zhang <cheungtifan在gmail.com> wrote: > 传给cmd.exe解释 > > On Monday, January 9, 2012, 任晓磊 <julyclyde在gmail.com> wrote: >> 那windows里的bat和cmd文件呢? >> >> Ren Xiaolei >> >> >> >> 2012/1/9 pansz <pan.shizhu在gmail.com>: >>> 脚本文件只是“看起来”被执行了,实际上它只是作为某个二进制文件的数据而已。就如同在 windows 下,doc >>> 文件看起来能被双击执行,但他只是调用 word 打开自己而已。 >> _______________________________________________ >> zeuux-universe mailing list >> zeuux-universe在zeuux.org >> http://www.zeuux.org/mailman/listinfo/zeuux-universe >> >> ZEUUX Project - Free Software, Free Society! >> http://www.zeuux.org > > -- > Sent from Gmail Mobile > -- Ren Xiaolei -------------- 下一部分 -------------- 一个HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120109/e6655db7/attachment.html>
2012年01月09日 星期一 20:46
文件关联是内核态的吧?我记得非管理员用户都不许动的。 #!似乎是内核测试出来的,不过没有shebang的话,内核会调用一个默认解释器。 -- Alex Difan Zhang (@tifan) http://difan.org.cn/ | http://blog.osqdu.org/ Graduate School, Towson University Towson MD 21204 Tel: 434-532-1042 2012/1/9 任晓磊 <julyclyde at gmail.com> > 区别就在这里了。在windows命令提示符运行批处理,是由cmd解释的;资源管理器里运行,靠的是文件扩展名关联 > 而linux的#!机制是内核亲自处理的,只要有x权限就足够,无任何外部的文件关联机制 > 具体到syscall级别,可以直接exec一个脚本,而不需要提前解析其首行 > > > On Monday, January 9, 2012, Alex Zhang <cheungtifan at gmail.com> wrote: > > 传给cmd.exe解释 > > > > On Monday, January 9, 2012, 任晓磊 <julyclyde at gmail.com> wrote: > >> 那windows里的bat和cmd文件呢? > >> > >> Ren Xiaolei > >> > >> > >> > >> 2012/1/9 pansz <pan.shizhu at gmail.com>: > >>> 脚本文件只是“看起来”被执行了,实际上它只是作为某个二进制文件的数据而已。就如同在 windows 下,doc > >>> 文件看起来能被双击执行,但他只是调用 word 打开自己而已。 > >> _______________________________________________ > >> zeuux-universe mailing list > >> zeuux-universe at zeuux.org > >> http://www.zeuux.org/mailman/listinfo/zeuux-universe > >> > >> ZEUUX Project - Free Software, Free Society! > >> http://www.zeuux.org > > > > -- > > Sent from Gmail Mobile > > > > -- > Ren Xiaolei > > _______________________________________________ > zeuux-universe mailing list > zeuux-universe at zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120109/16c98801/attachment.html>
2012年01月10日 星期二 08:19
对最终用户(这里的用户是开发者)来说,由谁解释并无本质区别。无论是用户态解析还是内核态解析,终归是程序做的,终归也是在你的CPU上做的事情。 所以我仍然倾向于认为,任何非二进制的文件都不能独立被运行,最终都还是要被某个二进制的程序去解析。 没有 shebang 还会调用缺省的解释器的。 2012/1/9 任晓磊 <julyclyde在gmail.com>: > 区别就在这里了。在windows命令提示符运行批处理,是由cmd解释的;资源管理器里运行,靠的是文件扩展名关联 > 而linux的#!机制是内核亲自处理的,只要有x权限就足够,无任何外部的文件关联机制 > 具体到syscall级别,可以直接exec一个脚本,而不需要提前解析其首行
2012年01月10日 星期二 11:28
在shell里调用一个缺shebang的,自然是由“当前SHELL”执行的;不存在所谓“默认解释器”的概念 你可以尝试用strace执行一个缺shebang的脚本,会得到下列结果: # strace ./1.sh execve("./1.sh", ["./1.sh"], [/* 24 vars */]) = -1 ENOEXEC (Exec format error) dup(2) = 3 fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE) fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 209), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ba36c526000 lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) write(3, "strace: exec: Exec format error\n", 32strace: exec: Exec format error ) = 32 close(3) = 0 munmap(0x2ba36c526000, 4096) = 0 exit_group(1) = ? 请注意区分“执行”和“在shell中执行”这两个概念 对shebang的支持,是内核级的,纯粹的 Ren Xiaolei 2012/1/10 pansz <pan.shizhu在gmail.com>: > 对最终用户(这里的用户是开发者)来说,由谁解释并无本质区别。无论是用户态解析还是内核态解析,终归是程序做的,终归也是在你的CPU上做的事情。 > > 所以我仍然倾向于认为,任何非二进制的文件都不能独立被运行,最终都还是要被某个二进制的程序去解析。 > > 没有 shebang 还会调用缺省的解释器的。
2012年01月21日 星期六 14:46
任曉磊 <julyclyde在gmail.com> 於 2012年1月10日上午11:28 寫道: > 在shell裡調用一個缺shebang的,自然是由「當前SHELL」執行的;不存在所謂「默認解釋器」的概念 > 你可以嘗試用strace執行一個缺shebang的腳本,會得到下列結果: > > # strace ./1.sh > execve("./1.sh", ["./1.sh"], [/* 24 vars */]) = -1 ENOEXEC (Exec format > error) > dup(2) = 3 > fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE) > fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 209), ...}) = 0 > mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0x2ba36c526000 > lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) > write(3, "strace: exec: Exec format error\n", 32strace: exec: Exec format > error > ) = 32 > close(3) = 0 > munmap(0x2ba36c526000, 4096) = 0 > exit_group(1) = ? > > 請注意區分「執行」和「在shell中執行」這兩個概念 > > 對shebang的支持,是內核級的,純粹的 > > 那所有 sh 腳本都是內核級? bash 和 python 本質上有區別麼? 是不是都是解析器(對 sh 腳本和 python 腳本)。 > > Ren Xiaolei > > > > 2012/1/10 pansz <pan.shizhu在gmail.com>: > > 對最終用戶(這裡的用戶是開發者)來說,由誰解釋並無本質區別。無論是用戶態解析還是內核態解析,終歸是程序做的,終歸也是在你的CPU上做的事情。 > > > > 所以我仍然傾向於認為,任何非二進制的文件都不能獨立被運行,最終都還是要被某個二進制的程序去解析。 > > > > 沒有 shebang 還會調用缺省的解釋器的。 > _______________________________________________ > zeuux-universe mailing list > zeuux-universe在zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org > -- -- 小波 上 http://yuzhe.me http://fanfou.com/kfihihc htpp://twitter.com/kfihihc <http://twitter.com/kfihihc> http://about.me/xiaobo/bio -------------- 下一部分 -------------- 一?HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20120121/c6d671fa/attachment.html>
Zeuux © 2024
京ICP备05028076号