起因
通常,我们都是apt install来安装某个包,直接命令行使用,比如tree,那么如果我们想学习这些命令的源码,该如何操作?
如何获得命令属于的包
有时候,一个包里面包含非常多的命令,比如coreutils,包含很多有用的命令工具,如果我们看到一个命令,比如ls,应该如果知道他属于哪个包呢?
/bin$ which ls -l
/bin/ls
/bin$ dpkg-query -S /bin/ls
coreutils: /bin/ls
通过上面的命令,可以知道ls属于coreutils这个包,那如何获得这个包的源代码呢?
如何获得包源码
最直接的做法,搜索引擎找这个包,可以找到
www.gnu.org/software/coreutils
再进到网站去下载对应的源码,但是其实apt命令已经帮我们实现了这个路径。
$ apt source coreutils
Reading package lists... Done
E: You must put some 'source' URIs in your sources.list
可以通过source命令来下载,但是第一次执行会报这个错误,表示
/etc/apt/sources.list当中没有对应的sourcelist
百度找到163对应的sources.list,例如
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
填入到sources.list当中
sudo vi /etc/apt/sources.list
更新数据源
sudo apt update
重新下载coreutils的源码
sudo apt source coreutils
就可以在当前目录获取到coreutils的源代码了
$ ls -l coreutils
coreutils-8.13/ coreutils_8.13-3ubuntu3.3.diff.gz coreutils_8.13-3ubuntu3.3.dsc coreutils_8.13.orig.tar.gz