「apt-get是什麼?」Ubuntu小知識#03——軟體套件管理系統 .deb dpkg apt 相關知識 指令列表 筆記

Standard

什麼是apt-get?

1.什麼是軟體套件管理系統?
軟體套件管理系統(Package management system)
主要的功用在於提供電腦中安裝、配製、解除安裝和升級軟體套件的方法,
並提供對系統中所有軟體狀態資料的查詢,大大簡化在Linux發行版中安裝軟體的過程。
在Linux發行版中,幾乎每一個發行版都有自己的軟體套件管理系統。常見的有:
a.基於
DEB軟體包的Linux發行版本
使用dpkg套件管理員
管理.deb格式軟體包
它的前端apt(使用於Debian、Ubuntu)。
b.基於RPM軟體包的Linux發行版本
使用rpm套件管理員
管理.rpm格式軟體包
它的前端dnf(使用於Fedora)
前端yum(使用於Red Hat Enterprise Linux)
前端ZYpp(使用於openSUSE)
前端urpmi(使用於Mandriva Linux、Mageia)


2.什麼是「.deb」檔?
Linux系統中,軟體通常以軟體源代碼或者預編譯軟體包的形式提供。
軟體源代碼需要您親自編譯為二進位的機器代碼才能夠使用,安裝比較耗時,
不過您可以自行調節編譯選項,決定您需要的功能或組件,或者針對您的硬體平台作出優化。
通常會裝在「/usr/local/src/」裡,然後執行「sudo ./configure」生成Makefile文件
執行「make」命令,將source code文件編譯成目標文件,執行「make install」命令,編譯安裝已經完成
詳細可看http://www.coctec.com/docs/linux/show-post-133178.html
預編譯的軟體包,通常是由軟體的發布者進行編譯,您只要將軟體拷貝到系統中就可以了。
考慮到預編譯軟體包的適用性,預編譯軟體包通常不會針對某種硬體平台優化。
它所包含的功能和組件也是通用的組合。
Ubuntu系統中,軟體通常以「deb」格式的包文件發布,
副檔名為.deb,跟Debian的命名一樣,它是一種預編譯軟體包。
deb也是因Debra Murdock(Debian創始人Ian Murdock的前妻)而得名。
deb包中除了包含已編譯的軟體,通常還包括軟體的拷貝路徑、對其它軟體包的依賴關係紀錄、
一個比較通用的配置文件以及軟體的描述、版本、作者、類別、佔用空間等信息。
處理這些包的經典程式是dpkg,經常是通過apt來運作。
通過Alien工具,可以將deb包轉換成其他形式的軟體包。


3.什麼是dpkg?
「dpkg」是「Debian Package」的簡寫。
是系統層面處理 Debian 套件的基礎指令,它被伊恩·默多克建立於1993年。
dpkg與RPM十分相似,同樣被用於安裝、解除安裝和供給和.deb軟體包相關的資訊。
dpkg本身是一個底層的工具,
若有 .deb 套件,可以用 dpkg 安裝及分析其內容,就像使用apt-get一樣
指令如此連結:http://maxubuntu.blogspot.tw/2010/04/dpkg.html
但此指令祗能看到 Debian 世界的部份內容:它知道系統安裝那些套件、指令列給了那些參數,
但不知道還有那些可用的套件。因此,沒有相依性就完了。
APT,上層的工具,
被用於從遠端取得軟體包以及處理複雜的軟體包關係。可產生相依性清單,儘量自動安裝套件。
所以dpkg 應視為系統工具 (背景) 之一,而 apt 則是較傾向使用者的工具,
可克服前者的限制。這些工具各有其限制,共同解決特定的作業。


4.什麼是apt?
高階包裝工具(Advanced Packaging Tools,縮寫為APT),
APT可以自動下載,配置,安裝二進位或者原始碼格式的軟體包,
因此簡化了Unix系統上管理軟體的過程。
APT最早被設計成dpkg的前端,用來處理deb格式的軟體包。
現在經過APT-RPM組織修改,APT已經可以安裝在支援RPM的系統管理RPM套件。
如果一個軟體依賴關係過於複雜,使用「dpkg」來安裝它,並不是一個明智的選擇,
這個時候您就需要用到APT軟體包管理系統。APT可以自動的檢查依賴關係,
通過您預設的方式來獲得相關軟體包,並自動安裝配置它。


apt-get指令列表

這個網站整理的很好
https://b9532026.wordpress.com/2010/03/30/apt-get-%E6%8C%87%E4%BB%A4%E4%B8%80%E8%A6%BD-2/
直接看裡面即可
下方列出幾個常見的,至於詳細解釋就看上方連結前輩的解說
$ apt-get update                                                     //從軟體源更新資料庫
$ apt-get upgrade                                                   //更新已下載的套件
$ apt-get install PACKAGE_NAME                             //下載pkg
$ apt-get remove PACKAGE_NAME                           //刪掉pkg,連相依的一起刪
$ apt-cache pkgnames PARTIAL_PACKAGE_NAME     //找有這個字在內的pkg
$ apt-cache show PACKAGE_NAME                          //列出pkg內容明細



apt-get小知識

1.下載下來的package跑哪裡去?
透過apt-get下載的pkg都會先下載到
/var/cache/apt/archives/ 」或「/var/cache/apt/archive/partial/ 」目錄底下,
但 apt-get 在安裝完軟體後真的去上面路徑找是不一定會找到「.deb 」檔的,可能會被系統自動刪掉,
也可以用「apt-get clean」讓系統手動清除.deb檔,但是我的Ubuntu預設好像都把它們刪掉了,
查詢所有的.deb檔放在哪裡:
$ locate *.deb
另外,可以用以下兩種指令查詢pkg在最後安裝至哪個目錄底下:
$ whereis PACKAGE_NAME
$ dpkg -L PACKAGE_NAME

備註:查詢前先更新系統,用
$ sudo updatedb
This will update locate's database to search for newly created/removed files.


2.package來源/軟體源?
APT系統需要一個軟體信息資料庫和至少一個存放著大量deb包的軟體倉庫,我們稱之為「source」
「source」可以是網路伺服器,安裝CD或者本地軟體倉庫,
APT使用一個檔案列出可獲得套裝軟體的鏡像站台位址,
就是 /etc/apt/sources.list 下的sources.list,
使APT系統能夠連接到 APT Server 去更新軟體資料庫。

檔案中的各項資訊通常按如下格式列出:
deb http://host/debian distribution section1 section2 section3
deb-src http://host/debian distribution section1 section2 section3
每行的第一個單字deb或deb-src描述了檔案類型:
二進位套裝軟體(deb), 即我們通常使用的已編譯好的套裝軟體,
來源碼包(deb-src),來源碼包含來源程序編碼、Debian控制檔案(.dsc)和“Debian化”這個程式所做變更的記錄檔案diff.gz。

別忘了在修改完/etc/apt/sources.list檔案後執行apt-get使 變更生效,
必須完成這個步驟,以便讓APT從你指定的地方獲得新的套裝軟體列表。

關於換source到台灣
https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=47302
$ apt-get install netselect //直接用ping的原理來尋找最快的source
https://www.debian.org/doc/manuals/apt-howto/ch-basico.zh-tw.html



延伸閱讀
1.Difference Between apt and apt-get Explained
https://itsfoss.com/apt-vs-apt-get-difference/


謎之聲:好想apt-get install一個女朋友QQ
於是我真的照做,然後terminal表示:
E : Unable to locate package girlfriend

另外,由於本篇的知識來源均源自網路,如有錯誤的地方歡迎底下留言更正我,如有侵犯到著作權也請信箱或留言讓我知道,我會立即處理,感謝。

2 則留言:

  1. 我有很努力ㄉ想要看懂這一切
    但4我真ㄉ沒有辦法 ........
    請尼原諒我><

    回覆刪除
    回覆
    1. XDDDD沒關係拉,這篇沒有朝科普的角度去寫

      刪除

留言