apt
創(chuàng)新互聯(lián)擁有十年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),對(duì)于網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、app軟件開(kāi)發(fā)、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名申請(qǐng)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項(xiàng)目的能力。
先介紹下apt,apt(Advanced Package Tool)高級(jí)軟件包工具,是一組用來(lái)下載、安裝、刪除和升級(jí)軟件包以及報(bào)告軟件包狀態(tài)的工具,apt不是一個(gè)具體的命令,是由一組命令組成的包管理工具集,較常用的有apt-get,apt-cache。apt主要負(fù)責(zé)下載軟件包,而下載到本地之后,就會(huì)的調(diào)用dpkg來(lái)處理軟件包。
/etc/apt/sources.list
/etc/apt/sources.list這個(gè)文件指定apt查找或安裝某個(gè)軟件包時(shí)要搜索的倉(cāng)庫(kù),里面每一行定義一個(gè)倉(cāng)庫(kù)。倉(cāng)庫(kù)就是存放著一組軟件包及其相關(guān)信息,包括用來(lái)描述每個(gè)軟件包的頭部信息、包之間的依賴關(guān)系。Ubuntu倉(cāng)庫(kù)里面的軟件包可以劃分為以下幾個(gè)類別:
1)main #Ubuntu支持的開(kāi)源軟件
2)universe #由社區(qū)維護(hù)的開(kāi)源軟件
3)multiverse #存在版權(quán)限制或法律問(wèn)題的軟件
4)restricted #專有設(shè)備驅(qū)動(dòng)程序
5)backports #較新的Ubuntu發(fā)行中有的但較早發(fā)行中不存在的軟件包
apt在選擇軟件包時(shí),根據(jù)sources.list文件中指定的類別來(lái)搜索各個(gè)倉(cāng)庫(kù)。當(dāng)試圖安裝某個(gè)軟件包時(shí),可能會(huì)出現(xiàn)以下錯(cuò)誤信息:
root@baby-Inspiron-N5110:~# apt-get install xxx Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package xxx
這意味著sources.list文件中定義的任何一個(gè)倉(cāng)庫(kù)都不包含該軟件包,如果沒(méi)有使用最新版本的ubuntu,也有可能該軟件包只能在最新版本中才能使用。嘗試在sources.list文件中啟動(dòng)backports倉(cāng)庫(kù)。
sources.list文件定義倉(cāng)庫(kù)的格式如下:
type URL repository category-list
type=deb #可執(zhí)行文件的軟件包
type=deb-src #源碼文件包
URL #指定倉(cāng)庫(kù)的位置,通常是一個(gè)網(wǎng)址
repository #apt要搜索的倉(cāng)庫(kù)的名稱
category-list #軟件包類別(main,universe,multiverse,restricted,backports多個(gè)的話用空格符隔開(kāi))
deb http://security.ubuntu.com/ubuntu precise-security main restricted
上面這一行內(nèi)容來(lái)自sources.list文件,他的含義是讓apt搜索位于http://security.ubuntu.com/ubuntu的precise-security倉(cāng)庫(kù),查找包含可執(zhí)行文件的deb軟件包。可接受的軟件包類別為main,restricted。若把deb替換為deb-src,apt會(huì)以同樣的方式搜索源文件包,通過(guò)命令apt-get source下載源碼包。
apt本地軟件包索引和apt緩存
/var/lib/apt/lists目錄下存放著本地軟件包索引及其相關(guān)文件。對(duì)于/etc/apt/sources.list文件中列出的每一個(gè)倉(cāng)庫(kù),這個(gè)目錄都有一個(gè)文件列出這個(gè)倉(cāng)庫(kù)中的每個(gè)軟件包的最新版本信息。apt使用這些文件來(lái)判斷系統(tǒng)中的軟件包以及它的緩存中的軟件包是否是最新版本。當(dāng)sources.list文件添加新的倉(cāng)庫(kù)時(shí),可使用apt-get update或aptitude update命令來(lái)同步/var/lib/apt/lists目錄下的索引和倉(cāng)庫(kù)中的相關(guān)信息,好讓apt能夠下載新添加的倉(cāng)庫(kù)中的軟件包。
apt的緩存存放在/var/cache/apt/archives目錄中,里面是最近下載的deb文件。默認(rèn)情況下,apt的cron腳本對(duì)這個(gè)目錄的大小以及這個(gè)目錄中文件的有效期有一定的限制。
在Ubuntu Linux中,需要說(shuō)明一個(gè)概念--虛擬軟件包。
將系統(tǒng)中具有相同或相近功能的多個(gè)軟件包作為一個(gè)軟件包集合,稱為虛擬軟件包,并指定其中一個(gè)軟件包作為虛擬軟件包的默認(rèn)首選項(xiàng)。提出虛擬軟件的意圖就是為了防止軟件安裝過(guò)程中發(fā)生沖突。例如,exim、sendmail和postfix軟件包都是用于郵件傳輸代理,將"mail-transport-agent"指定為它們的虛擬軟件包。當(dāng)用戶安裝"mail-transport-agent"時(shí),將選擇安裝exim、sendmail和postfix其中的首選項(xiàng)。
apt配置文件
apt的配置文件存放在/etc/apt/apt.conf.d目錄下。apt cron腳本存放在/etc/cron.daily目錄中,這樣每天都能運(yùn)行該腳本,它讀取apt.conf.d目錄中的配置文件,并根據(jù)這些配置文件中的指令來(lái)維護(hù)apt本地軟件包索引以及緩存。
下面的這兩個(gè)文件控制著apt cron腳本如何維護(hù)apt本地軟件包索引和apt緩存:
root@baby-Inspiron-N5110:/etc/apt/apt.conf.d# cat 10periodic APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Download-Upgradeable-Packages "0"; APT::Periodic::AutocleanInterval "0"; root@baby-Inspiron-N5110:/etc/apt/apt.conf.d# cat 20archive APT::Archives::MaxAge "30"; APT::Archives::MinAge "2"; APT::Archives::MaxSize "500";
APT::Periodic::Update-Package-Lists "days";
#每days天將本地軟件包索引與它們對(duì)應(yīng)的倉(cāng)庫(kù)同步。days為0,禁用這個(gè)命令。
APT::Periodic::Download-Upgradeable-Packages "days";
#每days天下載升級(jí)系統(tǒng)中所有軟件包所需的軟件包(不安裝)。days為0,禁用這個(gè)命令。
APT::Periodic::AutocleanInterval "days";
#每days天清除不再能下載的那些軟件包的apt緩存。days為0,禁用這個(gè)命令。
APT::Archives::MaxAge "days";
#將days天之前的文件從apt緩存中刪除。days為0,禁用這個(gè)命令。
APT::Archives::MinAge "days";
#不要將days天之內(nèi)的文件從apt緩存中刪除。days為0,禁用這個(gè)命令。
APT::Archives::MaxSize "MB";
#設(shè)置apt緩存的最大尺寸。當(dāng)緩存增加超過(guò)MB兆字節(jié)的時(shí)候,apt cron腳本會(huì)刪除文件知道緩存的尺寸小于這個(gè)尺寸。它首先刪除那些尺寸最大的文件。MB為0,禁用這個(gè)命令。
aptitude的使用
aptitude是一款基于apt的包掛管理工具,功能類似于apt-get,這要用于軟件包的管理。aptitude有兩個(gè)界面:偽圖形界面和文本界面。這里僅介紹文本界面。aptitude工具的日志記錄在/var/log/aptitude中,日志的可讀性非常好。
aptitude autoclean #清除不再能夠下載的那些軟件包的apt緩存。
aptitude clean #將所有軟件包從apt緩存中刪除
aptitude download #下載某個(gè)軟件包的deb文件
aptitude upgrade #升級(jí)指定的軟件包
aptitude full-upgrade #升級(jí)系統(tǒng)中所有軟件包,并按需安裝新的軟件包
aptitude safe-upgrade #升級(jí)系統(tǒng)中所有軟件包,不安裝新的軟件包
aptitude install #安裝指定的軟件包以及軟件包依賴的所有軟件包
aptitude reinstall #重新安裝指定的軟件包
aptitude purge #刪除指定的軟件包包括配置文件
aptitude remove #刪除指定的軟件包,包括它依賴的軟件包,不刪除配置文件
aptitude search #查找軟件包,在sources.list指定的倉(cāng)庫(kù)尋找
aptitude show #顯示軟件包的詳細(xì)信息,包括依賴信息
aptitude update #將本地apt軟件包索引文件與倉(cāng)庫(kù)中的文件同步
當(dāng)aptitude刪除刪除某軟件包的時(shí)候,也會(huì)刪除在安裝該軟件包時(shí)自動(dòng)安裝的依賴軟件包。
要注意這么幾項(xiàng):
1)aptitude update:apt corn腳本會(huì)在夜間自動(dòng)執(zhí)行軟件包索引文件的同步,但是若在/etc/apt/sources.list中添加了新的倉(cāng)庫(kù)后,想要立即使用,必須運(yùn)行這個(gè)命令。
2)aptitude safe-upgrade與full-upgrade的區(qū)別在于aptitude full-upgrade在升級(jí)所有軟件包時(shí),為了滿足依賴關(guān)系會(huì)安裝一些尚未安裝的軟件包,而aptitude safe-upgrade只升級(jí)系統(tǒng)中所有只依賴于已安裝到系統(tǒng)中的軟件包的那些軟件包,這條命令不會(huì)安裝新的軟件包。
3)aptitude search package-list通過(guò)此命令在搜索時(shí),倉(cāng)庫(kù)中的每個(gè)軟件包名與package-list中的某個(gè)元素匹配的軟件包都會(huì)顯示一行信息:
root@baby-Inspiron-N5110:/tmp# aptitude search apache p apache2 - Apache HTTP Server metapackage p apache2:i386 - Apache HTTP Server metapackage v apache2-dev - v apache2-dev:i386 - p apache2-doc - Apache HTTP Server documentation v apache2-mpm - v apache2-mpm:i386 - p apache2-mpm-event - Apache HTTP Server - event driven model ......
每行的第一列中的字母給出了對(duì)應(yīng)軟件包在系統(tǒng)中的狀態(tài):i說(shuō)明已經(jīng)安裝,c表示出了配置文件之外其余已刪除,p表示已清除(包括配置文件),v表示虛擬軟件包。第一列第二個(gè)字母給出了將要對(duì)相應(yīng)軟件包執(zhí)行的存儲(chǔ)動(dòng)作。如果第3個(gè)字母為A,就意味著對(duì)應(yīng)軟件包曾經(jīng)自動(dòng)安裝過(guò)。
apt-cache
apt-cache是linux下的一個(gè)apt軟件包管理工具,它可查詢apt的二進(jìn)制軟件包緩存文件。APT包管理的大多數(shù)信息查詢功能都可以由apt-cache命令實(shí)現(xiàn)。apt-cache使用的緩存信息由apt-cache gencaches命令生成,這些緩存信息來(lái)自于/etc/apt/sources.list文件中指定的源(倉(cāng)庫(kù)),這些緩存信息包括每個(gè)倉(cāng)庫(kù)包含的所有軟件包的詳細(xì)信息及其依賴關(guān)系等。緩存信息存放于/var/lib/dpkg/status。
若將/var/lib/dpkg/status刪除或改成其他文件名,apt-cache這個(gè)命令也就會(huì)失去作用:
root@baby-Inspiron-N5110:/var/lib/dpkg# apt-cache show bind9 E: Could not open file /var/lib/dpkg/status - open (2: No such file or directory) E: The package lists or status file could not be parsed or opened. E: No packages found
錯(cuò)誤信息顯示,無(wú)法打開(kāi)/var/lib/dpkg/status文件!?。?/strong>
apt-cache主要用法:
Commands:
gencaches #重新構(gòu)建源碼包和代碼包的緩存
showpkg #顯示單個(gè)軟件包信息(包括包的信息,正向依賴包和反向依賴包等)
showsrc #顯示源文件的各項(xiàng)記錄(包括版本號(hào)、安裝狀態(tài)及包依賴關(guān)系等)
stats #顯示一些基本的統(tǒng)計(jì)信息
dump #簡(jiǎn)要顯示整個(gè)緩存文件的內(nèi)容
dumpavail #把所有有效的包文件列表打印到標(biāo)準(zhǔn)輸出
unmet #顯示所有未滿足的依賴關(guān)系
search #搜索軟件包,可用正則表達(dá)式
show #以便于閱讀的格式介紹該軟件包
depends #顯示指定軟件包所依賴的軟件包(正向依賴包)
rdepends #顯示軟件包的反向依賴關(guān)系,即有什么軟件包需依賴你所指定的軟件包
pkgnames #列出所有軟件包的名字(通過(guò)管道過(guò)濾查看軟件倉(cāng)庫(kù)是否包含該軟件包)
dotty #生成可用 GraphVis處理的軟件包關(guān)系圖
xvcg #生成可用 xvcg處理的軟件包的關(guān)系圖
policy #顯示軟件包的安裝設(shè)置狀態(tài)
Options:
-h #顯示幫助文檔
-p=? #軟件包緩存.
-s=? #源碼包緩存.
-q #讓輸出可作為日志 -不顯示進(jìn)度
-i #只顯示未滿足依賴關(guān)系的重要信息.
-c=? #讀取指定配置文件
-o=? #設(shè)置任意指定的配置選項(xiàng),例如 -odir::cache=/tmp
apt-file
apt-file是一款專門(mén)用于軟件包搜索的工具,它的用法與apt-cache類似,先通過(guò)apt-file update命令依照/etc/apt/sources.list文件中指定的源生成緩存信息,存放于/var/cache/apt/apt-file目錄下,查詢時(shí)直接訪問(wèn)這些緩存信息。
apt-file的主要用法:
apt-file update #根據(jù)/etc/apt/sources.list文件中指定的源更新緩存
apt-file search #查詢某個(gè)文件來(lái)自于哪個(gè)軟件包(類似于dpkg -S filename,但是apt-file查詢時(shí)這個(gè)軟件包可以不安裝)
apt-file find #同search
apt-file list #查詢某個(gè)軟件包會(huì)生成哪些文件(類似dpkg -L,但apt-file查詢時(shí)這個(gè)軟件包可以不安裝)
apt-file show #同list
apt-file purge #清空緩存
option:
--cache | -c cache-directory #指定緩存放置的目錄,默認(rèn)是/var/cache/apt/apt-file
--ignore-case | -i #查詢時(shí)忽略大小寫(xiě)
--sources-list | -s sources.list #指定配置軟件包倉(cāng)庫(kù)的文件,默認(rèn)/etc/apt/sources.list。
其他的選項(xiàng)可以通過(guò)man查詢。
apt-get
apt-get是apt眾多的工具中最常用的一個(gè),這也是一個(gè)包管理工具。兩個(gè)相關(guān)目錄:本地軟件包索引位于/var/lib/apt/lists目錄下,最近下載的軟件包緩存于/var/cache/apt/archives目錄下,這兩個(gè)上面已經(jīng)介紹。
apt-get用法:
Commands:
apt-get update #更新本地軟件包索引/var/lib/apt/lists
apt-get upgrade #更新所有已安裝的軟件包
apt-get install #安裝軟件包
apt-get remove #刪除軟件包(不刪除配置文件,也不刪除依賴的軟件包)
apt-get remove --purge #刪除軟件包(刪除配置文件,不刪除依賴的軟件包)
apt-get autoremove --purge #刪除軟件包(刪除配置文件,刪除依賴的軟件包)
apt-get source #下載該包的源代碼
apt-get build-dep #安裝package編譯需要的相關(guān)的編譯環(huán)境
apt-get dist-upgrade #更新所有已安裝的軟件包
apt-get clean #清理緩存(清空/var/cache/apt/archives/和/var/cache/apt/archives/partial/這兩個(gè)目錄)
apt-get autoclean #清理緩存(只清理/var/cache/apt/archives/目錄下無(wú)法在下載的軟件包)
apt-get check #更新apt緩存,檢查是否有損壞的依賴關(guān)系
apt-get download #下載軟件包至當(dāng)前目錄下
dpkg:debian軟件包管理系統(tǒng)
debian軟件包管理系統(tǒng)(dpkg)數(shù)據(jù)庫(kù)記錄了哪些軟件包安裝到系統(tǒng)中、每個(gè)軟件包安裝到什么位置、安裝的版本以及依賴于哪些軟件包。debian軟件包管理系統(tǒng)有很多管理工具,這些工具用于安裝、卸載、升級(jí)、查詢和驗(yàn)證軟件包。最初也是最主要的管理工具就是dpkg。雖然dpkg可以完成軟件包管理的大部分任務(wù),但是其他工具可以讓你更容易地完成任務(wù)。這些工具有:apt-cache,apt-file,aptitude,apt-get。這些工具上面都已經(jīng)介紹,下面來(lái)介紹下dpkg。
dpkg管理系統(tǒng)處理.deb格式的文件,這些文件通常被稱為deb文件。因?yàn)閐pkg不能從倉(cāng)庫(kù)中下載deb文件,所以由aptitude,apt-get這些工具來(lái)執(zhí)行這項(xiàng)任務(wù)。默認(rèn)情況下,下載的deb文件存放在/var/cache/apt/archives目錄下。然后由dpkg完成后續(xù)的安裝,它會(huì)將可用軟件包信息存放到/var/lib/dpkg/available,并將軟件包安裝信息存放到/var/lib/dpkg/status中。
另外,再?gòu)?qiáng)調(diào)一下,這個(gè)/var/lib/dpkg/status文件非常重要,這相當(dāng)于一個(gè)緩存文件,dpkg軟件包管理系統(tǒng)在包的狀態(tài)發(fā)生改變后,例如刪除了某包,安裝了某包,本地軟件包索引發(fā)生了改變,都會(huì)去更新這個(gè)文件,很多工具的查詢信息都來(lái)自于這個(gè)文件,例如aptitude show,aptitude search,dpkg -l|--list,apt-cache的幾乎所有的命令等。
dpkg涉及到的幾個(gè)文件:
/etc/dpkg/dpkg.cfg #dpkg的配置文件
/var/log/dpkg.log #dpkg的默認(rèn)日志文件(在配置文件中定義)
/var/lib/dpkg/available #可獲取的軟件包列表
/var/lib/dpkg/status #可獲取的軟件包的狀態(tài)信息描述文件(apt-cache的相關(guān)查詢就是基于這個(gè)文件的內(nèi)容)
dpkg用法:
dpkg -i|--install packageName.deb #安裝指定軟件包
dpkg -r, --remove, -P, --purge #刪除軟件包(--remove,-r,保留配置文件。-P, --purge連同配置文件一起刪除)
dpkg --update-avail #更新可用軟件包列表
dpkg -l|--list #顯示軟件包的相關(guān)信息,若后面不加包名,則顯示所有軟件包的相關(guān)信息(包括安裝和沒(méi)有安裝的)
dpkg --info|-I packageName.deb #顯示指定軟件包的信息,后面要指定包名,例:dpkg --info
dpkg --status|-s #顯示軟件包的相關(guān)信息(僅限于安裝的軟件包)
dpkg -L #查詢系統(tǒng)中已安裝的軟件包所安裝的位置(僅限于已安裝的軟件包,不同于apt-file list)
dpkg --search|-S filename #查詢某個(gè)文件來(lái)自于哪個(gè)軟件包(僅限于已安裝的軟件包,不同于apt-file search)
當(dāng)用dpkg -l|--list列出軟件包的相關(guān)信息時(shí),有一定的格式簡(jiǎn)單介紹下
root@baby-Inspiron-N5110:/tmp# dpkg --list "bind*" Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Description +++-===========================-===========================-====================================================================== un bind(no description available) un bind9 (no description available) un bind9-doc (no description available) ii bind9-host 1:9.8.1.dfsg.P1-4ubuntu0.10 Version of 'host' bundled with BIND 9.X ii bind9utils 1:9.8.1.dfsg.P1-4ubuntu0.10 Utilities for BIND
上面的命令是列出所有以bind開(kāi)頭的軟件包,頭部的第1行列出了可能的軟件包期望狀態(tài),第2行列出了可能的軟件包狀態(tài)。每條信息的第一列為desire,第二列為status。上面第一列的u表示dpkg未識(shí)別的包,狀態(tài)列的n表示尚未安裝該包。第1列和第2列意思差不多表示該包已安裝。
Desire(選擇狀態(tài)) u(unknown dpkg不知道的包 i(install) 已安裝 r(remove) 已刪除,但是保留配置文件 p(purge) 已刪除,未保留配置文件 h(hold) 不由dpkg處理 Status(軟件包狀態(tài)) n(not install) 尚未安裝 i(installed) 已安裝 c(config-files) 沒(méi)有安裝,系統(tǒng)中只有配置文件 u(unpacked) 解包,但沒(méi)有配置 f(failed-config) 解包,沒(méi)有配置,配置失敗 h(half-installed) 部分安裝,安裝尚未完成
常用的就這些,需要更詳細(xì)的信息可以man dpkg~~~