1. 以搜索ls命令源碼為例,先搜索命令所在包,命令如下:
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比牧野網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式牧野網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋牧野地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
lpj@lpj-linux:~$ which ls
/bin/ls
2. 用命令搜索該軟件所在包,代碼如下:
lpj@lpj-linux:~$ dpkg -S /bin/ls
coreutils: /bin/ls
3. 從上一步中可以知道ls命令的實(shí)現(xiàn)在包c(diǎn)oreutils中,用apt安裝(說安裝有些歧義,主要是區(qū)分apt-get -d)該包的源代碼然后解壓,代碼如下:
sudo apt-get source coreutils
cd /usr/src/coreutils-XXX #XXX表示版本號
sudo tar zxvf coreutils-XXX.tar.gz
或者只下載源碼,然后手動打補(bǔ)丁再解壓,代碼如下:
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 -p0 coreutils-XXX.diff
cd coreutils-XXX
tar zxvf coreutils-XXX.tar.gz
OK,這幾步執(zhí)行完后,就可以進(jìn)入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令對應(yīng)的源代碼了
首先在linux命令行中新建一個目錄 mkdir github(名字可以按你項目名定義),之后敲git命令,確認(rèn)git工具已經(jīng)安裝好了,我使用的是Ubuntu14.04,git工具默認(rèn)安裝好了。若沒有安裝,可以嘗試自行安裝,安裝方法比較簡單。如下圖所示
2
在github查看你所需要使用下載源碼項目的URL地址,比如我下載的openwrt,在github中搜索該項目,可以查看到相關(guān)的URL地址: 復(fù)制下該地址,后面需要使用。如下圖所示
3
在linux命令行中使用 git clone 命令,對該項目源碼clone到本地,等待clone完成。如下圖所示(該項目較大,網(wǎng)絡(luò)不快,還未clone完成,只做參考)
1.ash
(1)簡介
ash --a shell
這是由Kenneth Almquist在1989年編寫的,ash是Linux下的許多命令解釋器中的一個,它的許多特性接近于SYSTEM V的shell。
(2)部分參數(shù)說明
ash [ -efIijnsxz ] [ +efIijnsxz ] [ -c命令] [ 參數(shù) ]
-c 命令:若用-c參數(shù),則ash從標(biāo)準(zhǔn)輸入中讀入命令(在執(zhí)行完-c帶的命令之后)。
-s:若用-s參數(shù),則ash從標(biāo)準(zhǔn)輸入中讀入命令(在執(zhí)行完-c帶的命令之后)。
如果不跟-c -s參數(shù)則ash以所跟的第一個參數(shù)為文件名,從此文件中讀入命令。如無參數(shù)則ash缺省設(shè)定-s參數(shù),從標(biāo)準(zhǔn)輸入中讀入命令,直到輸入exit。
如果參數(shù)0的第一個字母是"-"則ash確定為login shell,ash將從/etc/profile或用戶的根目錄中的.profile讀入相應(yīng)的設(shè)置和環(huán)境變量。
-e:若用-e參數(shù),則ash執(zhí)行命令后返回值為非零值時則退出ash。
-f:若用-f參數(shù),則ash關(guān)閉自動產(chǎn)生文件名功能。
-j:打開伯克利UNIX風(fēng)格的工作控制。
-n:讀入命令但是并不執(zhí)行。
(3)范例
ash -c ls
ash執(zhí)行l(wèi)s這個命令后退回原先的目錄和shell。
ash -s
ash執(zhí)行一個新的shell,現(xiàn)在可以在這個shell中工作,按(Ctrl-D)或輸入exit后,則退回原先的目錄和shell,所設(shè)定的環(huán)境變量返回原先的值。
2.at
(1)簡介
at,batch,atq,atrm:安排、檢查、刪除隊列中的工作。
由Thomas Koenig編寫。
(2)部分參數(shù)說明
at [-V] [-q隊列] [-f文件名] [-mldbv] 時間
at -c 作業(yè) [作業(yè)…]
atq [-V] [-q隊列] [-v]
atrm [-V] 作業(yè) [作業(yè)…]
batch [-V] [-q隊列] [-f文件名] [-mv] [時間]
at在設(shè)定的時間執(zhí)行作業(yè)。
atq列出用戶排在隊列中的作業(yè),如果是超級用戶,則列出隊列中的所有工作。
atrm刪除隊列中的作業(yè)。
batch用低優(yōu)先級運(yùn)行作業(yè),只要系統(tǒng)的loadavg(系統(tǒng)平均負(fù)載)1.5(或者在atrun中設(shè)定的值)它就開始執(zhí)行作業(yè)。
-V:若用-V參數(shù),則顯示版本號到標(biāo)準(zhǔn)錯誤輸出。
-q隊列:若用-q參數(shù),則指定可選隊列名稱,隊列名稱可以是a到z或A到Z之間的任意字母。at的缺省隊列名是c,batch的缺省隊列名是E,隊列的字母順序越高,則隊列的優(yōu)先級越低。如果是大寫字母的話則提交給batch,如果atq使用-q參數(shù),則只顯示這個隊列中的作業(yè)。
-m:執(zhí)行完作業(yè)后即使此作業(yè)并沒有輸也給提交作業(yè)的用戶發(fā)送提示mail。
-f文件名:從文件中讀取作業(yè)。
-l:等于atq。
-d:等于atrm。
-b:等于batch。
時間:這是用戶設(shè)定的作業(yè)開始執(zhí)行的時間。時間的格式分成三個部分:時間、日期、偏移量。可接受的時間形式是HHMM或HH:MM,在一天中指定的時間運(yùn)行,如果時間過去了就在第二天執(zhí)行??梢栽跁r間后加入AM或PM使其在上午或下午運(yùn)行,也可以指定在哪一天執(zhí)行,給出日期的格式應(yīng)為MMDDYY或MM/DD/YY或MM.DD.YY,也可以給出偏移量:
時間+計數(shù)時間間隔
時間間隔可以是minutes,hours,days,weeks。
也可以指定today讓作業(yè)在今天執(zhí)行,指定tommorow讓作業(yè)在明天執(zhí)行。
(3)注意事項
如果沒有指定-f選項,是at從標(biāo)準(zhǔn)輸入讀入所有的命令,所以可以通過管道、重定向或交互輸入來輸入命令。
超級用戶可以在任何情況下使用at系列的命令。一般用戶使用at系列命令的權(quán)利由文件/etc/at.allow,/etc/at.deny控制。如果/etc/at.allow存在,則只有列在這個文件中的用戶才能使用at系列的命令。如果/etc/at.allow文件不存在,則檢查/etc/at.deny這個文件。只要不列在這個文件中的用戶都可以使用at系列的命令。缺省的配置是/etc/at.deny,是一個空文件,這表明所有的用戶都可以使用at系列的命令。
(4)范例
at -f work 4pm + 3 days
在三天后下午4點(diǎn)執(zhí)行文件work中的作業(yè)。
at -f work 10am Jul 31
在七月31日上午10點(diǎn)執(zhí)行文件work中的作業(yè)。
3.banner
banner:打印大標(biāo)題。
banner在標(biāo)準(zhǔn)輸出上打印高質(zhì)量的標(biāo)題,如果沒有輸入要打印的文字,則其等待從標(biāo)準(zhǔn)輸入輸入一行文字。其標(biāo)題由"*"組成。由Mark Horton編寫。
(2)部分參數(shù)說明
/usr/bin/banner [ -wn ]信息
-w寬度 輸出寬度從131到n,n缺省為80列。
(3)注意事項
不能打印字符: ,,[,],\,^,_,{,},|,-。信息長度為10個英文字符,如果用空格分開字符串,還是連續(xù)打印字符串,兩個字符串可以被括在引號(")中。這命名banner把這些字任串置于同一行中。
4.bash
(1)簡介
bash:GNU Bourne-Again Shell
自由軟件基金會(Free Software Foundation Inc)擁有bash版權(quán)。
bash是Linux下的許多命令解釋器中的一個,同sh兼容,并且包含了ksh和csh中一些有用的特性。遵從IEEE Posix Shell and Tools specification(IEEE Working Group 1003.2)。