菜鸟说给菜鸟听之Beginning Linux Programming——Chapter1(1)

    今天本来是打算把“菜鸟说给菜鸟听之VIM——入门(2)”写了的,但今天学的东西非常有趣,特别想记录下来,VIM入门就后面再来说呗,总结和归纳新知识最重要哦!!

---------------------------飘逸的分割线---------------有关a.out-------------------废飘逸分割线----------------------------------

    好吧,我承认以前我一直觉得可执行的文件非常的NB,肯定是进行了各种封装加密啊乱七八糟的jump啊调度啊(一只合格的菜鸟从来都是各种弱),直到今天看了这本书才算是大彻大悟——尼玛可执行的文件就是一堆二进制码(机器码)让特定架构的CPU内部产生各种01信号得出各种结果!

    为什么以前我就不能明白呢?还是怪我windows用的太久了,觉得”改了.exe的后缀名就无法执行“这事儿绝对有蹊跷,可执行文件必定藏着一个巨大的阴谋,当我到linux 的时候,弄出来一个a.out,自作聪明的以为原来linux可执行文件的后缀就是.out,这是不能改的,改了就不能输出”hello world“了。刚开始这样想还能理解,可是后来gcc -0 xxx 之后,产生的可执行文件没有后缀,还能执行,我怎么就没有感到奇怪呢?我是不是在想,这还不简单么,不就是”常见文件的后缀名隐藏”了嘛,太2了!

     BLP(beginning linux programming,下同)里面如是说(不是我装逼啊,我找不到中文文字版的PDF,只有用菜鸟头+有道词典+google翻译 来阅读这本经典了,还好看惯了datasheet,其实也不是很难的):

If you forget the  -o name option that tells the compiler where to place the executable, the compiler will
place the program in a file called  a.out(meaning assembler output).

注意粗体描述的,a.out这个文件只是用来放置 the program的地方,那么program是什么呢?对,就是二进制码,而a.out只是一个放这些二进制码的文件而已,当然文件名是可以随便改的了。那为什么默认是a.out呢,原来它的意思就是assembler output(汇编码输出)。

 -----------------------------------------本节完--------------------------------------------------------------------

---------------------------飘逸的分割线---------------有关环境变量PATH-------------------废飘逸分割线------------------------

    在linux中,当你在bash shell里面输入命令(比如ls)的时候,你有没有想过,系统是怎么识别这个命令的呢?其实,系统也是对你的输入进行搜索,找到这个文件,如果这个文件是可执行的(2进制文件)那么就执行这个程序,如果找不到这个文件,或者文件是不能执行的(非二进制文件),那么终端就是提示“ls不是一个命令”或者“找不到ls这个命令”。

    那系统默认的搜索路径在哪里呢?这就引出了PATH这货,系统只搜索PATH文件中标明的地址,比如/usr/bin:/usr/sbin:/usr/local/bin 等等,如果我们想在任何地方调用我们自己编写的xxx程序(不再当前PATH目录下)怎么办呢?当然是把这个路径添加进去,方法如下:

$ sudo export PATH="$PATH:path1:path2 …"

注意黑体部分一定不能少,不然你的PATH就变成了path1:path2了,再也找不到系统命令了,例如ls。当然也不用害怕,这货只是零时的,重启一次就还原了。如果你想永久性的添加,也好说,直接打开~/.bashrc ,在末尾添加如下内容:

PATH=$PATH:path1:path2

然后重启,或者source .bashrc或者. .bashrc(.是source的别名,不是当前目录的意思哦),这样重启了也能找到你的程序了。

    大家有没有发现路径之间是用“:”分割,而不是像windows一样用“;”分割,哈哈,BLP里面这样说的:    

     Note that Linux, like UNIX, uses the colon (: ) character to separate entries in the  PATH variable, rather
than the semicolon ( ; ) that MS-DOS and Windows use. (UNIX chose : first, so ask Microsoft why
Windows is different, not why UNIX is different!)

同样,关于子目录的分割,BLP这样说的,看了之后当场就笑翻了,作者真可爱(同时,windows脸皮真厚):

     Remember, Linux uses a forward slash (/) to separate directory names in a filename
rather than the backslash (\) of Windows. Again, UNIX got there first.

所以大家不要说linux是抄windows的了!

---------------------------本节完---------------------------

本来还想说说ar工具以及静态动态连接库的,哪知道说了太多废话导致两节就花了1个小时,哈哈,算了把,下次聊

 

转载于:https://my.oschina.net/opl/blog/87969

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值