|
楼主 |
发表于 2003-3-26 15:43:14
|
显示全部楼层
我得到的结果汇总,与大家共享
Linux的命令在内核的那个源文件中?如cp,ls等命令。
cp,ls等都属于应用程序,不属于内核。它们都不在内核里。
在RedHat系统里查找源程序的办法,比如ls:
1. 用 which 找到命令文件:
# which ls
/bin/ls <---- 命令文件
2. 用 rpm 看这个文件是属于哪个软件包:
# rpm -qf /bin/ls
fileutils-4.1-10 <--- 软件包
3. 找到源程序包:
fileutils-4.1-10 的源程序包:fileutils-4.1-10.src.rpm
或者在网上寻找fileutils的tar.gz
4. 安装源程序包。
要增加一个像ls这样的可执行文件,把它放在你的PATH里面的一个目录里就行了(最好放在你自己的~/bin里,不影响别人);你还可以用alias命令做命令缩写。
shell 也是应用程序,不是在系统启动时自动加载的,而是你login后开始执行的,你logout后就停止了。
一般来说,你的shell是/bin/bash,你可以用
# finger 你的用户名
来看你的shell 是什么,也可以去 /etc/passwd看用户每一行的最后一项。
shell和内核没有什么特别直接的接口,就是接受用户打入的命令,分析,然后启动别的应用程序。bash自己还有一些内部命令,你可以用man bash来查看。
------------------------------------------------------------------------------------------------
其实cp,ls是一个个的应用程序,这些程序通过在shell的命令行解释其对应的命令名并
转化为内核的一些操作,然后在通过一些参数调用内核中的函数!
shell对于内核来说是一个程序,一个进程,启动时加载的,它调用内核的方式是,内核提供一
系列的系统调用供它来调用,一般来说shell通过解释输入的操作,然后根据一些参数来调用
内核开放的系统调用来工作的。
shell有bsh、csh、bash……,他们也不会出现在内核的源码中,如果要看系统启动情况可以看看/usr/src/linux/Init/main.c,注意
line 578:execve("/bin/sh",argv_init,envp_init);
在系统初始化完成后提供一个shell
------------------------------------------------------------------------------------------------
ls,cp好象不是shell内置的命令。
cd等命令是shell里面支持的,没有可执行文件,有点象dos command的内部命令。 |
|