apt-get 原理:
參考:https://blog.csdn.net/a13526758473/article/details/79247478
apt對它所管理的每一個程序包都有一對公鑰和私鑰,私鑰在存儲包的遠程服務器上,而公鑰在本地。 本地的包的公鑰可以通過 apt-key list命令查看,通過 apt-key [ add | del | update ] 等命令管理。
apt-get命令是Debian Linux發行版中的APT軟件包管理工具。所有基於Debian的發行都使用這個包管理系統。deb包可以把一個應用的文件包在一起,大體就如同Windows上的安裝文件。
Advanced Packaging Tool(apt)是Linux下的一款安裝包管理工具。最初只有.tar.gz的打包文件,用戶必須編譯每個他想在GNU/Linux上運行的軟件。用戶們普遍認為系統很有必要提供一種方法來管理這些安裝在機器上的軟件包,當Debian誕生時,這樣一個管理工具也就應運而生,它被命名為dpkg。從而著名的“package”概念第一次出現在GNU/Linux系統中,稍后Red Hat才決定開發自己的“rpm”包管理系統。很快一個新的問題難倒了GNU/Linux制作者,他們需要一個快速、實用、高效的方法來安裝軟件包,當軟件包更新時,這個工具應該能自動管理關聯文件和維護已有配置文件。Debian再次率先解決了這個問題,APT(Advanced Packaging Tool)作為dpkg的前端誕生了。APT后來還被Conectiva改造用來管理rpm,並被其它Linux發行版本采用為它們的軟件包管理工具。APT由幾個名字以“apt-”打頭的程序組成。apt-get、apt-cache 和apt-cdrom是處理軟件包的命令行工具。作為操作的一部分,APT使用一個文件列出可獲得軟件包的鏡像站點地址,這個文件就是/etc/apt/sources.list。
APT是一個客戶/服務器系統。在服務器上先復制所有DEB包(DEB是Debian軟件包格式的文件擴展名),然后用APT的分析工具(genbasedir)根據每個DEB 包的包頭(Header)信息對所有的DEB包進行分析,並將該分析結果記錄在一個文件中,這個文件稱為DEB 索引清單,APT服務器的DEB索引清單置於base文件夾內。一旦APT 服務器內的DEB有所變動,一定要使用genbasedir產生新的DEB索引清單。客戶端在進行安裝或升級時先要查詢DEB索引清單,從而可以獲知所有具有依賴關系的軟件包,並一同下載到客戶端以便安裝。當客戶端需要安裝、升級或刪除某個軟件包時,客戶端計算機取得DEB索引清單壓縮文件后,會將其解壓置放於/var/state/apt/lists/,而客戶端使用apt-get install或apt-get upgrade命令的時候,就會將這個文件夾內的數據和客戶端計算機內的DEB數據庫比對,知道哪些DEB已安裝、未安裝或是可以升級的。
語法
apt-get(選項)(參數)
選項
-c:指定配置文件。
參數
管理指令:對APT軟件包的管理操作;
軟件包:指定要操縱的軟件包。
使用apt-get命令的第一步就是引入必需的軟件庫,Debian的軟件庫也就是所有Debian軟件包的集合,它們存在互聯網上的一些公共站點上。把它們的地址加入,apt-get就能搜索到我們想要的軟件。/etc/apt/sources.list是存放這些地址列表的配置文件,其格式如下:
deb [web或ftp地址] [發行版名字] [main/contrib/non-free]
我們常用的Ubuntu就是一個基於Debian的發行,我們使用apt-get命令獲取這個列表,以下是我整理的常用命令:
在修改/etc/apt/sources.list或者/etc/apt/preferences之后運行該命令。此外您需要定期運行這一命令以確保您的軟件包列表是最新的:apt-get update
安裝一個新軟件包:apt-get install packagename
卸載一個已安裝的軟件包(保留配置文件):apt-get remove packagename
卸載一個已安裝的軟件包(刪除配置文件):apt-get –purge remove packagename
已裝或已卸的軟件都備份在硬盤上,所以如果需要空間的話,可以讓這個命令來刪除你已經刪掉的軟件:apt-get autoclean apt
這個命令會把安裝的軟件的備份也刪除,不過這樣不會影響軟件的使用的:apt-get clean
更新所有已安裝的軟件包:apt-get upgrade
將系統升級到新版本:apt-get dist-upgrade
定期運行這個命令來清除那些已經卸載的軟件包的.deb文件。通過這種方式,您可以釋放大量的磁盤空間。如果您的需求十分迫切,可以使用apt-get clean以釋放更多空間。這個命令會將已安裝軟件包裹的.deb文件一並刪除。大多數情況下您不會再用到這些.debs文件,因此如果您為磁盤空間不足 而感到焦頭爛額,這個辦法也許值得一試:
apt-get autoclean
下載的軟件存放位置: /var/cache/apt/archives
apt-key命令用於管理Debian Linux系統中的軟件包密鑰。每個發布的deb包,都是通過密鑰認證的,apt-key用來管理密鑰。
語法
apt-key(參數)
參數
操作指令:APT密鑰操作指令。
實例
apt-key list #列出已保存在系統中key。
apt-key add keyname #把下載的key添加到本地trusted數據庫中。
apt-key del keyname #從本地trusted數據庫刪除key。
apt-key update #更新本地trusted數據庫,刪除過期沒用的key。
apt-get key expired 錯誤:
之前安裝ubuntu 中文輸入法 fcitx的時候執行了這樣一條命令,
sudo add-apt-repository ppa:fcitx-team/nightly
后來執行apt-get update命令的時候發現,有一個跟fcitx相關的包update時卡住,導致apt-get update卡住。所以需要卸載掉facitx的ppa源(注意不是卸載掉facitx包)。
一開始不懂,按照網上的方法卸載了fcitx-team/nightly 這個ppa源:在/etc/apt/sources.list.d/文件夾中刪除了fcitx-team/nightly有關的list
然后再次apt-get update就會出現如下的錯誤:

后來發現,是因為刪除ppa源需要兩步:刪除list和刪除key,執行一下命令 apt-key list 查看一下list,然后根據key的id刪除掉public key,然后就好了
補充一下,ppa源的添加與卸載:
添加ppa源:
sudo add-apt-repository ppa:ppa_name
這兩種說法都對
刪除ppa源(刪除list+刪除key):
sudo rm /etc/apt/sources.list.d/app_name.list
sudo apt-key del key
關於apt-get特別慢的問題:
1、更新key
2、換源