您好,登錄后才能下訂單哦!
apt
先介紹下apt,apt(Advanced Package Tool)高級軟件包工具,是一組用來下載、安裝、刪除和升級軟件包以及報告軟件包狀態的工具,apt不是一個具體的命令,是由一組命令組成的包管理工具集,較常用的有apt-get,apt-cache。apt主要負責下載軟件包,而下載到本地之后,就會的調用dpkg來處理軟件包。
/etc/apt/sources.list
/etc/apt/sources.list這個文件指定apt查找或安裝某個軟件包時要搜索的倉庫,里面每一行定義一個倉庫。倉庫就是存放著一組軟件包及其相關信息,包括用來描述每個軟件包的頭部信息、包之間的依賴關系。Ubuntu倉庫里面的軟件包可以劃分為以下幾個類別:
1)main #Ubuntu支持的開源軟件
2)universe #由社區維護的開源軟件
3)multiverse #存在版權限制或法律問題的軟件
4)restricted #專有設備驅動程序
5)backports #較新的Ubuntu發行中有的但較早發行中不存在的軟件包
apt在選擇軟件包時,根據sources.list文件中指定的類別來搜索各個倉庫。當試圖安裝某個軟件包時,可能會出現以下錯誤信息:
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文件中定義的任何一個倉庫都不包含該軟件包,如果沒有使用最新版本的ubuntu,也有可能該軟件包只能在最新版本中才能使用。嘗試在sources.list文件中啟動backports倉庫。
sources.list文件定義倉庫的格式如下:
type URL repository category-list
type=deb #可執行文件的軟件包
type=deb-src #源碼文件包
URL #指定倉庫的位置,通常是一個網址
repository #apt要搜索的倉庫的名稱
category-list #軟件包類別(main,universe,multiverse,restricted,backports多個的話用空格符隔開)
deb http://security.ubuntu.com/ubuntu precise-security main restricted
上面這一行內容來自sources.list文件,他的含義是讓apt搜索位于http://security.ubuntu.com/ubuntu的precise-security倉庫,查找包含可執行文件的deb軟件包。可接受的軟件包類別為main,restricted。若把deb替換為deb-src,apt會以同樣的方式搜索源文件包,通過命令apt-get source下載源碼包。
apt本地軟件包索引和apt緩存
/var/lib/apt/lists目錄下存放著本地軟件包索引及其相關文件。對于/etc/apt/sources.list文件中列出的每一個倉庫,這個目錄都有一個文件列出這個倉庫中的每個軟件包的最新版本信息。apt使用這些文件來判斷系統中的軟件包以及它的緩存中的軟件包是否是最新版本。當sources.list文件添加新的倉庫時,可使用apt-get update或aptitude update命令來同步/var/lib/apt/lists目錄下的索引和倉庫中的相關信息,好讓apt能夠下載新添加的倉庫中的軟件包。
apt的緩存存放在/var/cache/apt/archives目錄中,里面是最近下載的deb文件。默認情況下,apt的cron腳本對這個目錄的大小以及這個目錄中文件的有效期有一定的限制。
在Ubuntu Linux中,需要說明一個概念--虛擬軟件包。
將系統中具有相同或相近功能的多個軟件包作為一個軟件包集合,稱為虛擬軟件包,并指定其中一個軟件包作為虛擬軟件包的默認首選項。提出虛擬軟件的意圖就是為了防止軟件安裝過程中發生沖突。例如,exim、sendmail和postfix軟件包都是用于郵件傳輸代理,將"mail-transport-agent"指定為它們的虛擬軟件包。當用戶安裝"mail-transport-agent"時,將選擇安裝exim、sendmail和postfix其中的首選項。
apt配置文件
apt的配置文件存放在/etc/apt/apt.conf.d目錄下。apt cron腳本存放在/etc/cron.daily目錄中,這樣每天都能運行該腳本,它讀取apt.conf.d目錄中的配置文件,并根據這些配置文件中的指令來維護apt本地軟件包索引以及緩存。
下面的這兩個文件控制著apt cron腳本如何維護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天將本地軟件包索引與它們對應的倉庫同步。days為0,禁用這個命令。
APT::Periodic::Download-Upgradeable-Packages "days";
#每days天下載升級系統中所有軟件包所需的軟件包(不安裝)。days為0,禁用這個命令。
APT::Periodic::AutocleanInterval "days";
#每days天清除不再能下載的那些軟件包的apt緩存。days為0,禁用這個命令。
APT::Archives::MaxAge "days";
#將days天之前的文件從apt緩存中刪除。days為0,禁用這個命令。
APT::Archives::MinAge "days";
#不要將days天之內的文件從apt緩存中刪除。days為0,禁用這個命令。
APT::Archives::MaxSize "MB";
#設置apt緩存的最大尺寸。當緩存增加超過MB兆字節的時候,apt cron腳本會刪除文件知道緩存的尺寸小于這個尺寸。它首先刪除那些尺寸最大的文件。MB為0,禁用這個命令。
aptitude的使用
aptitude是一款基于apt的包掛管理工具,功能類似于apt-get,這要用于軟件包的管理。aptitude有兩個界面:偽圖形界面和文本界面。這里僅介紹文本界面。aptitude工具的日志記錄在/var/log/aptitude中,日志的可讀性非常好。
aptitude autoclean #清除不再能夠下載的那些軟件包的apt緩存。
aptitude clean #將所有軟件包從apt緩存中刪除
aptitude download #下載某個軟件包的deb文件
aptitude upgrade #升級指定的軟件包
aptitude full-upgrade #升級系統中所有軟件包,并按需安裝新的軟件包
aptitude safe-upgrade #升級系統中所有軟件包,不安裝新的軟件包
aptitude install #安裝指定的軟件包以及軟件包依賴的所有軟件包
aptitude reinstall #重新安裝指定的軟件包
aptitude purge #刪除指定的軟件包包括配置文件
aptitude remove #刪除指定的軟件包,包括它依賴的軟件包,不刪除配置文件
aptitude search #查找軟件包,在sources.list指定的倉庫尋找
aptitude show #顯示軟件包的詳細信息,包括依賴信息
aptitude update #將本地apt軟件包索引文件與倉庫中的文件同步
當aptitude刪除刪除某軟件包的時候,也會刪除在安裝該軟件包時自動安裝的依賴軟件包。
要注意這么幾項:
1)aptitude update:apt corn腳本會在夜間自動執行軟件包索引文件的同步,但是若在/etc/apt/sources.list中添加了新的倉庫后,想要立即使用,必須運行這個命令。
2)aptitude safe-upgrade與full-upgrade的區別在于aptitude full-upgrade在升級所有軟件包時,為了滿足依賴關系會安裝一些尚未安裝的軟件包,而aptitude safe-upgrade只升級系統中所有只依賴于已安裝到系統中的軟件包的那些軟件包,這條命令不會安裝新的軟件包。
3)aptitude search package-list通過此命令在搜索時,倉庫中的每個軟件包名與package-list中的某個元素匹配的軟件包都會顯示一行信息:
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 ......
每行的第一列中的字母給出了對應軟件包在系統中的狀態:i說明已經安裝,c表示出了配置文件之外其余已刪除,p表示已清除(包括配置文件),v表示虛擬軟件包。第一列第二個字母給出了將要對相應軟件包執行的存儲動作。如果第3個字母為A,就意味著對應軟件包曾經自動安裝過。
apt-cache
apt-cache是linux下的一個apt軟件包管理工具,它可查詢apt的二進制軟件包緩存文件。APT包管理的大多數信息查詢功能都可以由apt-cache命令實現。apt-cache使用的緩存信息由apt-cache gencaches命令生成,這些緩存信息來自于/etc/apt/sources.list文件中指定的源(倉庫),這些緩存信息包括每個倉庫包含的所有軟件包的詳細信息及其依賴關系等。緩存信息存放于/var/lib/dpkg/status。
若將/var/lib/dpkg/status刪除或改成其他文件名,apt-cache這個命令也就會失去作用:
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
錯誤信息顯示,無法打開/var/lib/dpkg/status文件!!!
apt-cache主要用法:
Commands:
gencaches #重新構建源碼包和代碼包的緩存
showpkg #顯示單個軟件包信息(包括包的信息,正向依賴包和反向依賴包等)
showsrc #顯示源文件的各項記錄(包括版本號、安裝狀態及包依賴關系等)
stats #顯示一些基本的統計信息
dump #簡要顯示整個緩存文件的內容
dumpavail #把所有有效的包文件列表打印到標準輸出
unmet #顯示所有未滿足的依賴關系
search #搜索軟件包,可用正則表達式
show #以便于閱讀的格式介紹該軟件包
depends #顯示指定軟件包所依賴的軟件包(正向依賴包)
rdepends #顯示軟件包的反向依賴關系,即有什么軟件包需依賴你所指定的軟件包
pkgnames #列出所有軟件包的名字(通過管道過濾查看軟件倉庫是否包含該軟件包)
dotty #生成可用 GraphVis 處理的軟件包關系圖
xvcg #生成可用 xvcg 處理的軟件包的關系圖
policy #顯示軟件包的安裝設置狀態
Options:
-h #顯示幫助文檔
-p=? #軟件包緩存.
-s=? #源碼包緩存.
-q #讓輸出可作為日志 - 不顯示進度
-i #只顯示未滿足依賴關系的重要信息.
-c=? #讀取指定配置文件
-o=? #設置任意指定的配置選項,例如 -o dir::cache=/tmp
apt-file
apt-file是一款專門用于軟件包搜索的工具,它的用法與apt-cache類似,先通過apt-file update命令依照/etc/apt/sources.list文件中指定的源生成緩存信息,存放于/var/cache/apt/apt-file目錄下,查詢時直接訪問這些緩存信息。
apt-file的主要用法:
apt-file update #根據/etc/apt/sources.list文件中指定的源更新緩存
apt-file search #查詢某個文件來自于哪個軟件包(類似于dpkg -S filename,但是apt-file查詢時這個軟件包可以不安裝)
apt-file find #同search
apt-file list #查詢某個軟件包會生成哪些文件(類似dpkg -L,但apt-file查詢時這個軟件包可以不安裝)
apt-file show #同list
apt-file purge #清空緩存
option:
--cache | -c cache-directory #指定緩存放置的目錄,默認是/var/cache/apt/apt-file
--ignore-case | -i #查詢時忽略大小寫
--sources-list | -s sources.list #指定配置軟件包倉庫的文件,默認/etc/apt/sources.list。
其他的選項可以通過man查詢。
apt-get
apt-get是apt眾多的工具中最常用的一個,這也是一個包管理工具。兩個相關目錄:本地軟件包索引位于/var/lib/apt/lists目錄下,最近下載的軟件包緩存于/var/cache/apt/archives目錄下,這兩個上面已經介紹。
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編譯需要的相關的編譯環境
apt-get dist-upgrade #更新所有已安裝的軟件包
apt-get clean #清理緩存(清空/var/cache/apt/archives/和/var/cache/apt/archives/partial/這兩個目錄)
apt-get autoclean #清理緩存(只清理/var/cache/apt/archives/目錄下無法在下載的軟件包)
apt-get check #更新apt緩存,檢查是否有損壞的依賴關系
apt-get download #下載軟件包至當前目錄下
dpkg:debian軟件包管理系統
debian軟件包管理系統(dpkg)數據庫記錄了哪些軟件包安裝到系統中、每個軟件包安裝到什么位置、安裝的版本以及依賴于哪些軟件包。debian軟件包管理系統有很多管理工具,這些工具用于安裝、卸載、升級、查詢和驗證軟件包。最初也是最主要的管理工具就是dpkg。雖然dpkg可以完成軟件包管理的大部分任務,但是其他工具可以讓你更容易地完成任務。這些工具有:apt-cache,apt-file,aptitude,apt-get。這些工具上面都已經介紹,下面來介紹下dpkg。
dpkg管理系統處理.deb格式的文件,這些文件通常被稱為deb文件。因為dpkg不能從倉庫中下載deb文件,所以由aptitude,apt-get這些工具來執行這項任務。默認情況下,下載的deb文件存放在/var/cache/apt/archives目錄下。然后由dpkg完成后續的安裝,它會將可用軟件包信息存放到/var/lib/dpkg/available,并將軟件包安裝信息存放到/var/lib/dpkg/status中。
另外,再強調一下,這個/var/lib/dpkg/status文件非常重要,這相當于一個緩存文件,dpkg軟件包管理系統在包的狀態發生改變后,例如刪除了某包,安裝了某包,本地軟件包索引發生了改變,都會去更新這個文件,很多工具的查詢信息都來自于這個文件,例如aptitude show,aptitude search,dpkg -l|--list,apt-cache的幾乎所有的命令等。
dpkg涉及到的幾個文件:
/etc/dpkg/dpkg.cfg #dpkg的配置文件
/var/log/dpkg.log #dpkg的默認日志文件(在配置文件中定義)
/var/lib/dpkg/available #可獲取的軟件包列表
/var/lib/dpkg/status #可獲取的軟件包的狀態信息描述文件(apt-cache的相關查詢就是基于這個文件的內容)
dpkg用法:
dpkg -i|--install packageName.deb #安裝指定軟件包
dpkg -r, --remove, -P, --purge #刪除軟件包(--remove,-r,保留配置文件。-P, --purge連同配置文件一起刪除)
dpkg --update-avail #更新可用軟件包列表
dpkg -l|--list #顯示軟件包的相關信息,若后面不加包名,則顯示所有軟件包的相關信息(包括安裝和沒有安裝的)
dpkg --info|-I packageName.deb #顯示指定軟件包的信息,后面要指定包名,例:dpkg --info
dpkg --status|-s #顯示軟件包的相關信息(僅限于安裝的軟件包)
dpkg -L #查詢系統中已安裝的軟件包所安裝的位置(僅限于已安裝的軟件包,不同于apt-file list)
dpkg --search|-S filename #查詢某個文件來自于哪個軟件包(僅限于已安裝的軟件包,不同于apt-file search)
當用dpkg -l|--list列出軟件包的相關信息時,有一定的格式簡單介紹下
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 <none> (no description available) un bind9 <none> (no description available) un bind9-doc <none> (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開頭的軟件包,頭部的第1行列出了可能的軟件包期望狀態,第2行列出了可能的軟件包狀態。每條信息的第一列為desire,第二列為status。上面第一列的u表示dpkg未識別的包,狀態列的n表示尚未安裝該包。第1列和第2列意思差不多表示該包已安裝。
Desire(選擇狀態) u(unknown dpkg不知道的包 i(install) 已安裝 r(remove) 已刪除,但是保留配置文件 p(purge) 已刪除,未保留配置文件 h(hold) 不由dpkg處理 Status(軟件包狀態) n(not install) 尚未安裝 i(installed) 已安裝 c(config-files) 沒有安裝,系統中只有配置文件 u(unpacked) 解包,但沒有配置 f(failed-config) 解包,沒有配置,配置失敗 h(half-installed) 部分安裝,安裝尚未完成
常用的就這些,需要更詳細的信息可以man dpkg~~~
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。