以find命令為例:
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)舟曲免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
第一步,確定命令屬于哪個(gè)rpm包:
#rpm -qf /usr/bin/find
findutils-4.1-34
第二步,查找findutils的源碼包findutils-4.1-34.src.rpm,這個(gè)一般在發(fā)行版的網(wǎng)站上可以找到(比如FC6的源碼在這里可以找到:)。
也可以到rpmfind點(diǎn)虐 上查找,輸入rpm包的名字就可以找到相關(guān)的源碼包,有的也可以得到軟件對(duì)應(yīng)的網(wǎng)站。
第三步,安裝源碼包:
rpm -ivh findutils-4.1-34.src.rpm
安裝好之后可以到/usr/src/RedHat/SOURCE下找到相關(guān)的源碼包
或者直接編譯源碼包:
rpmbuild -bb findutils-4.1-34.src.rpm
用linux一段時(shí)間了,有時(shí)候想看看ls、cat、more等命令的源代碼,在下載的內(nèi)核源碼中用cscope沒(méi)能找到,在網(wǎng)上搜索了一下,將方 法總結(jié)如下:以搜索ls命令源碼為例,先搜索命令所在包,命令如下:
lpj@lpj-linux:~$ which ls /bin/ls用命令搜索該軟件所在包,代碼如下:
lpj@lpj-linux:~$ dpkg -S /bin/ls coreutils: /bin/ls從上一步中可以知道ls命令的實(shí)現(xiàn)在包c(diǎn)oreutils中,用apt安裝(說(shuō)安裝有些歧義,主要是區(qū)分apt-get -d)該包的源代碼然后解壓,代碼如下:
sudo apt-get source coreutils cd /usr/src/coreutils-XXX #XXX表示版本號(hào) sudo tar zxvf coreutils-XXX.tar.gz 或者只下載源碼,然后手動(dòng)打補(bǔ)丁再解壓,代碼如下:
sudo apt-get -d source coreutils cd /usr/src tar zxvf coreutils-XXX.tar.gz gzip -d coreutils-XXX.diff.gz #這一步會(huì)生成coreutils-XXX.diff文件 patch -p0 coreutils-XXX.diff cd coreutils-XXX tar zxvf coreutils-XXX.tar.gzOK,這幾步執(zhí)行完后,就可以進(jìn)入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令對(duì)應(yīng)的源代碼了。
關(guān)于更多Linux的學(xué)習(xí),請(qǐng)查閱書(shū)籍《linux就該這么學(xué)》。
用linux一段時(shí)間了,有時(shí)候想看看ls、cat、more等命令的源代碼,在下載的內(nèi)核源碼中用cscope沒(méi)能找到,在網(wǎng)上搜索了一下,將方 法總結(jié)如下:以搜索ls命令源碼為例,先搜索命令所在包,命令如下: lpj@lpj-linux:~$ which ls /bin/ls用命令搜索該軟件所在包,代碼如下: lpj@lpj-linux:~$ dpkg -S /bin/ls coreutils: /bin/ls從上一步中可以知道ls命令的實(shí)現(xiàn)在包c(diǎn)oreutils中,用apt安裝(說(shuō)安裝有些歧義,主要是區(qū)分apt-get -d)該包的源代碼然后解壓,代碼如下: sudo apt-get source coreutils cd /usr/src/coreutils-XXX #XXX表示版本號(hào) sudo tar zxvf coreutils-XXX.tar.gz 或者只下載源碼,然后手動(dòng)打補(bǔ)丁再解壓,代碼如下: sudo apt-get -d source coreutils cd /usr/src tar zxvf coreutils-XXX.tar.gz gzip -d coreutils-XXX.diff.gz #這一步會(huì)生成coreutils-XXX.diff文件 patch -p0 coreutils-XXX.diff cd coreutils-XXX tar zxvf coreutils-XXX.tar.gzOK,這幾步執(zhí)行完后,就可以進(jìn)入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令對(duì)應(yīng)的源代碼了
1.ash
(1)簡(jiǎn)介
ash --a shell
這是由Kenneth Almquist在1989年編寫(xiě)的,ash是Linux下的許多命令解釋器中的一個(gè),它的許多特性接近于SYSTEM V的shell。
(2)部分參數(shù)說(shuō)明
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以所跟的第一個(gè)參數(shù)為文件名,從此文件中讀入命令。如無(wú)參數(shù)則ash缺省設(shè)定-s參數(shù),從標(biāo)準(zhǔn)輸入中讀入命令,直到輸入exit。
如果參數(shù)0的第一個(gè)字母是"-"則ash確定為login shell,ash將從/etc/profile或用戶的根目錄中的.profile讀入相應(yīng)的設(shè)置和環(huán)境變量。
-e:若用-e參數(shù),則ash執(zhí)行命令后返回值為非零值時(shí)則退出ash。
-f:若用-f參數(shù),則ash關(guān)閉自動(dòng)產(chǎn)生文件名功能。
-j:打開(kāi)伯克利UNIX風(fēng)格的工作控制。
-n:讀入命令但是并不執(zhí)行。
(3)范例
ash -c ls
ash執(zhí)行l(wèi)s這個(gè)命令后退回原先的目錄和shell。
ash -s
ash執(zhí)行一個(gè)新的shell,現(xiàn)在可以在這個(gè)shell中工作,按(Ctrl-D)或輸入exit后,則退回原先的目錄和shell,所設(shè)定的環(huán)境變量返回原先的值。
2.at
(1)簡(jiǎn)介
at,batch,atq,atrm:安排、檢查、刪除隊(duì)列中的工作。
由Thomas Koenig編寫(xiě)。
(2)部分參數(shù)說(shuō)明
at [-V] [-q隊(duì)列] [-f文件名] [-mldbv] 時(shí)間
at -c 作業(yè) [作業(yè)…]
atq [-V] [-q隊(duì)列] [-v]
atrm [-V] 作業(yè) [作業(yè)…]
batch [-V] [-q隊(duì)列] [-f文件名] [-mv] [時(shí)間]
at在設(shè)定的時(shí)間執(zhí)行作業(yè)。
atq列出用戶排在隊(duì)列中的作業(yè),如果是超級(jí)用戶,則列出隊(duì)列中的所有工作。
atrm刪除隊(duì)列中的作業(yè)。
batch用低優(yōu)先級(jí)運(yùn)行作業(yè),只要系統(tǒng)的loadavg(系統(tǒng)平均負(fù)載)1.5(或者在atrun中設(shè)定的值)它就開(kāi)始執(zhí)行作業(yè)。
-V:若用-V參數(shù),則顯示版本號(hào)到標(biāo)準(zhǔn)錯(cuò)誤輸出。
-q隊(duì)列:若用-q參數(shù),則指定可選隊(duì)列名稱,隊(duì)列名稱可以是a到z或A到Z之間的任意字母。at的缺省隊(duì)列名是c,batch的缺省隊(duì)列名是E,隊(duì)列的字母順序越高,則隊(duì)列的優(yōu)先級(jí)越低。如果是大寫(xiě)字母的話則提交給batch,如果atq使用-q參數(shù),則只顯示這個(gè)隊(duì)列中的作業(yè)。
-m:執(zhí)行完作業(yè)后即使此作業(yè)并沒(méi)有輸也給提交作業(yè)的用戶發(fā)送提示mail。
-f文件名:從文件中讀取作業(yè)。
-l:等于atq。
-d:等于atrm。
-b:等于batch。
時(shí)間:這是用戶設(shè)定的作業(yè)開(kāi)始執(zhí)行的時(shí)間。時(shí)間的格式分成三個(gè)部分:時(shí)間、日期、偏移量??山邮艿臅r(shí)間形式是HHMM或HH:MM,在一天中指定的時(shí)間運(yùn)行,如果時(shí)間過(guò)去了就在第二天執(zhí)行??梢栽跁r(shí)間后加入AM或PM使其在上午或下午運(yùn)行,也可以指定在哪一天執(zhí)行,給出日期的格式應(yīng)為MMDDYY或MM/DD/YY或MM.DD.YY,也可以給出偏移量:
時(shí)間+計(jì)數(shù)時(shí)間間隔
時(shí)間間隔可以是minutes,hours,days,weeks。
也可以指定today讓作業(yè)在今天執(zhí)行,指定tommorow讓作業(yè)在明天執(zhí)行。
(3)注意事項(xiàng)
如果沒(méi)有指定-f選項(xiàng),是at從標(biāo)準(zhǔn)輸入讀入所有的命令,所以可以通過(guò)管道、重定向或交互輸入來(lái)輸入命令。
超級(jí)用戶可以在任何情況下使用at系列的命令。一般用戶使用at系列命令的權(quán)利由文件/etc/at.allow,/etc/at.deny控制。如果/etc/at.allow存在,則只有列在這個(gè)文件中的用戶才能使用at系列的命令。如果/etc/at.allow文件不存在,則檢查/etc/at.deny這個(gè)文件。只要不列在這個(gè)文件中的用戶都可以使用at系列的命令。缺省的配置是/etc/at.deny,是一個(gè)空文件,這表明所有的用戶都可以使用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)題,如果沒(méi)有輸入要打印的文字,則其等待從標(biāo)準(zhǔn)輸入輸入一行文字。其標(biāo)題由"*"組成。由Mark Horton編寫(xiě)。
(2)部分參數(shù)說(shuō)明
/usr/bin/banner [ -wn ]信息
-w寬度 輸出寬度從131到n,n缺省為80列。
(3)注意事項(xiàng)
不能打印字符: ,,[,],\,^,_,{,},|,-。信息長(zhǎng)度為10個(gè)英文字符,如果用空格分開(kāi)字符串,還是連續(xù)打印字符串,兩個(gè)字符串可以被括在引號(hào)(")中。這命名banner把這些字任串置于同一行中。
4.bash
(1)簡(jiǎn)介
bash:GNU Bourne-Again Shell
自由軟件基金會(huì)(Free Software Foundation Inc)擁有bash版權(quán)。
bash是Linux下的許多命令解釋器中的一個(gè),同sh兼容,并且包含了ksh和csh中一些有用的特性。遵從IEEE Posix Shell and Tools specification(IEEE Working Group 1003.2)。