LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: freesky64

问:Gentoo Linux的工作原理?

[复制链接]
 楼主| 发表于 2005-6-1 12:37:28 | 显示全部楼层
Post by sunmoon1997
混淆了 shell 变量和环境变量。

shell变量和环境变量有什么区别呢?
export 出去的shell变量是不是就是环境变量?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-1 12:42:45 | 显示全部楼层
Post by reer
内核大概是控制硬件和提供一些底层的操作吧

在内核上需要有C库,还有其它的很多软件包提供具体的功能,这些软件包也会调用库或直接调用内核吧

你说的这些我也知道,操作系统原理的书我也看过一点,内核的功能就是些:进程调度、内存管理、文件系统、设备管理等,看了过后我还是对Linux系统工作原理还是一知半解。

那内核来说吧,系统创建的第一个进程是init,在古老的Linux内核这个进程是内核源代码里面的main.c,现在的比如Gentoo,init是另外实现的一个程序呢?还是内核的一部分?
回复 支持 反对

使用道具 举报

发表于 2005-6-1 13:50:24 | 显示全部楼层
每个进程都有自己的环境变量,在进程地址空间的堆栈底部,main函数的参数(argc,argv)的上方
每个进程都有能力改变的自己的环境变量
man 3 setenv
man 3 getenv
man 3 putenv
man 3 clearenv
man 5 environ
不是每个进程都会去改变自己的环境变量
但基本都会根据自己的环境变量来决定自己的行为方式

shell变量就是shell里的环境变量
和一般的进程的环境变量相比,它有更重要的意义
因为除了守护进程其他进程都是shell启动的
export了的bash的环境变量就可以在fork的时候传递给子进程
子进程就可以根据从shell继承过来的环境变量,决定自己的行为
还有就是shell是交互式的,改变环境变量也容易
回复 支持 反对

使用道具 举报

发表于 2005-6-1 14:05:09 | 显示全部楼层
如何使用gdb查看一个进程的环境变量

int main(){}

将上面这一行写入一个文件,例如test.c

gcc test.c

这样将得到一个a.out
用gdb 启动a.out

gdb a.out
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
设置断点
(gdb)b main   
执行
(gdb)r
然后a.out将在main函数入口处停住
然后以字符串方式检查堆栈
(gdb)x/1000s $esp
不断的按回车直到出现
0xc0000000:      <Address 0xc0000000 out of bounds>
相信这时你已经看到了
回复 支持 反对

使用道具 举报

发表于 2005-6-1 14:17:59 | 显示全部楼层
to zhllg:
在main前面停住,这时堆栈里的内容是什么?是a.out的环境变量吗?

对了,忘记说了:抱歉,在上班,不能试一下你的东西,所以直接问问题了

这个帖子因你的发言而精彩,呵呵
回复 支持 反对

使用道具 举报

发表于 2005-6-1 14:21:43 | 显示全部楼层
是a.out的环境变量吗?

definitely
回复 支持 反对

使用道具 举报

发表于 2005-6-1 14:29:32 | 显示全部楼层
看了这么多,我想我还是要提醒大家一句:在没有用熟练一个系统前,就去研究什么内核或者试图探讨更深层次的问题,都是在浪费时间。
gentoo相关的文档太多了,入门前可以去看看 www.gentoo.org.tw 里面差不多把基础的文档都翻译了。如果可以看懂英文,就直接去gentoo官方网站看文档。
大学里的教科书很多都不实际,看多了也不见得就会懂。还是先从GNU相关的网站去找些入门的资料看看吧,也顺便多理解一下黑客相关的概念。去看Eric S Raymond的论文。
Linux只是一个内核,与其他所有的内核一样。如果你要想真正了解这个内核,也许你要肯花上10年左右的时间去了解它。
在数学基础没有打扎实前,去试图成为一个程序员,或者试图去摸索内核的开发,也是在浪费时间。如果你没有喜欢阅读科幻小说的习惯,那么也请你不要试图去修改操作系统底层程序,因为你修改出来的东西肯定经不起时间考验。
程序员不像大家所说的那样只能做到30岁,如果你见到有人说他做程序员超过30岁就做不下去,那这个人肯定是为windows开发软件的。
至于说系统配置文件的内容和格式,自己随便装一个系统就可以看见了。有很多事情,不要到处问别人,请首先去google搜索,自己动手做一下最容易理解。
我学过汇编、C、python、C++、shell编程、VC、VB……但是我还是什么都不懂。说明光是看书也没什么用,还不如直接去看你的系统里面的一个脚本文件,照着做就可以了。去找些自己敢兴趣的项目,去天天翻一遍项目的代码,尝试在自己的机器上编译一下,等熟练了,再做简单的几个修改。然后去和这个项目的成员交流。这就是参与国际开发的最简单的道路。
回复 支持 反对

使用道具 举报

发表于 2005-6-1 14:45:42 | 显示全部楼层
什么叫做熟练系统
操作几个命令?

说实话,我开始开发都在windows上
后来因为做一个嵌入式系统而开始搞linux
但借着windows底层的东西和以往的开发经验
我一开始接触linux就直入内核
我不认为对内核一无所知而会做些简单操作,
用几个软件,装几个版本,
几个包就叫做熟练系统了


PS:前面我说shell环境变量问题,是有意将内核空间和用户空间的分开,可能表述的不对,请见谅
回复 支持 反对

使用道具 举报

发表于 2005-6-1 15:04:07 | 显示全部楼层
用了才知道.....
回复 支持 反对

使用道具 举报

发表于 2005-6-1 15:19:44 | 显示全部楼层
Post by EricNeon
看了这么多,我想我还是要提醒大家一句:在没有用熟练一个系统前,就去研究什么内核或者试图探讨更深层次的问题,都是在浪费时间。

Learn to how to use Linux and Learn how Linux works
IMHO, these two process are not mutually exclusive
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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