在平常的作業中,有時候老師讓自己實現諸如cat等類的程式,有時候叫用shell實現,有時候用c實現,但是我經常一點頭緒都沒有,不過我想到linux開源的,命令代碼可以拿來參考下阿,所以我就想看看linux命令的原始碼,於是就開始了擺渡狗狗的搜尋過程。從結果來看,有兩種情況,一種是給予rpm的包的形式;另一種是基於deb包的形式。具體我也不知道該怎麼描述,總之就是一種redhat的源碼查看,一種是debian的源碼查看。我是用的ubuntu,基於debian的,所以先前按照rpm的方式怎麼也不奏效。
下面我就總結了下:大概就是源碼都存放在相應的包裡面。
新利得裡我搜了下coreutils,顯示已經安裝,不過這裡安裝的應該是軟體,也就是命令的執行檔案吧應該。但是我沒有找到它是否安裝了src,也就是原始碼。
PS:
Coreutils軟體包含有用於展示和設定基本系統特性的工具。
具體過程一(Linux rwind-ubuntu 2.6.22-14-generic):
1.首先找到你想查看的命令屬於哪個包
rwind@rwind-ubuntu:~$ dpkg -S `which ls`
coreutils: /bin/ls
coreutils就是源碼所在的包,下面就是要下載了。
同樣:
rwind@rwind-ubuntu:~/source$ dpkg -S `which which`
debianutils: /usr/bin/which
debianutils就是which所在的包。
我第一次犯的錯誤:把``用成‘’了,這兩種不一樣阿,前一個是數字鍵1左邊的引號,作用是在shell重組命令列時把``裡面的內容當作命令來執行並替換為結果。
2.下載相應的源碼包
rwind@rwind-ubuntu:~/source$ apt-get -d source "debianutils"正在讀取軟體包列表... 完成正在分析軟體包的相依樹狀結構 讀取狀態資訊... 完成 需要下載 134kB 的原始碼包。擷取:1 http://ubuntu.cn99.com feisty/main debianutils 2.17.4build1 (dsc) [479B]擷取:2 http://ubuntu.cn99.com feisty/main debianutils 2.17.4build1 (tar) [133kB]下載 134kB,耗時 1s (90.7kB/s) 下載完畢,目前是“僅下載”模式
d選項是僅僅下載的選項。下載到你目前的工作目錄當中。
3.把你下載的包解壓縮,自己去裡面找吧,檔案挺多的,都什麼作用我不清楚,留待以後慢慢研究慢慢發現。
另外:在網上還發現一些資料,但我都沒驗證,
原文如下:
apt-get install apt-file
apt-file update
apt-file search /bin/ls
這樣可以知道ls是coreutils提供的
然後apt-get source coreutils就得到源碼了
當然對於ls,還可以用dpkg -S /usr/ls 來查詢它屬於哪一個包,不過dpkg -S只對已安裝的包有效
二:這是我在網上搜的rpm包格式的。
以find命令為例:
第一步,確定命令屬於哪個rpm包:
#rpm -qf /usr/bin/find
findutils-4.1-34
第二步,尋找findutils的源碼包findutils-4.1-34.src.rpm,這個一般在發行版的網站上可以找到
第三步,安裝源碼包:
rpm -ivh findutils-4.1-34.src.rpm
安裝好之後可以到/usr/src/RedHat/SOURCE下找到相關的源碼包
大概就是這樣了,以後發現有不足的地方還會補充,如果您有什麼建議或發現錯誤,希望可以指點指點。謝謝。
本文來自ChinaUnix部落格,如果查看原文請點:http://blog.chinaunix.net/u1/54537/showart_431031.html