linux命令源代码 linux10源代码解析

如何查看linux命令源代码用linux一段时间了,有时候想看看ls、cat、more等命令的源代码,在下载的内核源码中用cscope没能找到 , 在网上搜索了一下,将方 法总结如下:以搜索ls命令源码为例,先搜索命令所在包,命令如下:
lpj@lpj-linux:~$ which ls /bin/ls用命令搜索该软件所在包,代码如下:
lpj@lpj-linux:~$ dpkg -S /bin/ls coreutils: /bin/ls从上一步中可以知道ls命令的实现在包coreutils中,用apt安装(说安装有些歧义,主要是区分apt-get -d)该包的源代码然后解压,代码如下:
sudo apt-get source coreutils cd /usr/src/coreutils-XXX #XXX表示版本号 sudo tar zxvf coreutils-XXX.tar.gz 或者只下载源码,然后手动打补丁再解压 , 代码如下:
sudo apt-get -d source coreutils cd /usr/src tar zxvf coreutils-XXX.tar.gz gzip -d coreutils-XXX.diff.gz #这一步会生成coreutils-XXX.diff文件 patch -p0coreutils-XXX.diff cd coreutils-XXX tar zxvf coreutils-XXX.tar.gzOK , 这几步执行完后 , 就可以进入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令对应的源代码了 。
关于更多Linux的学习,请查阅书籍《linux就该这么学》 。
求Linux下命令的源代码,1.ash
(1)简介
ash --a shell
这是由Kenneth Almquist在1989年编写的,ash是Linux下的许多命令解释器中的一个,它的许多特性接近于SYSTEM V的shell 。
(2)部分参数说明
ash [ -efIijnsxz ] [ +efIijnsxz ] [ -c命令] [ 参数 ]
-c 命令:若用-c参数,则ash从标准输入中读入命令(在执行完-c带的命令之后) 。
-s:若用-s参数,则ash从标准输入中读入命令(在执行完-c带的命令之后) 。
如果不跟-c -s参数则ash以所跟的第一个参数为文件名 , 从此文件中读入命令 。如无参数则ash缺省设定-s参数,从标准输入中读入命令 , 直到输入exit 。
如果参数0的第一个字母是"-"则ash确定为login shell , ash将从/etc/profile或用户的根目录中的.profile读入相应的设置和环境变量 。
-e:若用-e参数 , 则ash执行命令后返回值为非零值时则退出ash 。
-f:若用-f参数,则ash关闭自动产生文件名功能 。
-j:打开伯克利UNIX风格的工作控制 。
-n:读入命令但是并不执行 。
(3)范例
ash -c ls
ash执行ls这个命令后退回原先的目录和shell 。
ash -s
ash执行一个新的shell , 现在可以在这个shell中工作,按(Ctrl-D)或输入exit后,则退回原先的目录和shell , 所设定的环境变量返回原先的值 。
2.at
(1)简介
at , batch,atq,atrm:安排、检查、删除队列中的工作 。
由Thomas Koenig编写 。
(2)部分参数说明
【linux命令源代码 linux10源代码解析】at [-V] [-q队列] [-f文件名] [-mldbv] 时间
at -c 作业 [作业…]
atq [-V] [-q队列] [-v]
atrm [-V] 作业 [作业…]
batch [-V] [-q队列] [-f文件名] [-mv] [时间]
at在设定的时间执行作业 。
atq列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作 。
atrm删除队列中的作业 。
batch用低优先级运行作业 , 只要系统的loadavg(系统平均负载)1.5(或者在atrun中设定的值)它就开始执行作业 。
-V:若用-V参数,则显示版本号到标准错误输出 。
-q队列:若用-q参数,则指定可选队列名称,队列名称可以是a到z或A到Z之间的任意字母 。at的缺省队列名是c,batch的缺省队列名是E,队列的字母顺序越高,则队列的优先级越低 。如果是大写字母的话则提交给batch , 如果atq使用-q参数,则只显示这个队列中的作业 。

推荐阅读