天天看點

Debian 的包管理工具

ref:

https://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.zh-cn.html

The Debian GNU/Linux FAQ 

第 7 章 - Debian 的包管理工具

7.1 提供了哪些管理工具?

7.1.1 dpkg

這個主要的軟體包管理工具, 有很多參數, 常用的有:

  • 參數查找: dpkg --help.
  • 輸出指定軟體包的控制檔案(和其它資訊): dpkg --info foo_VVV-RRR.deb
  • 安裝軟體包(包括解包和配置): dpkg --install foo_VVV-RRR.deb.
  • 解包(但不配置): dpkg --unpack foo_VVV-RRR.deb. 注意, 此操作解開的包處于不可用狀态, 要正常運作, 一些檔案還需要進一步配置. 這個指令會删除這個程式的已安裝版本. 并運作相關聯的 preinst 腳本(詳見Debian 的 preinst, postinst, prerm, 和 postrm 腳本?, 第 6.6 節).
  • 配置一個解開的包: dpkg --configure foo. 這個操作會運作相關聯的 postinst(詳見Debian 的 preinst, postinst, prerm, 和 postrm 腳本?, 第 6.6 節)腳本, 并更新 conffiles 中列舉的檔案. 注意,'配置'(configure)操作使用軟體包名(如 foo), 而不是Debian文檔檔案名(如, foo_VVV-RRR.deb).
  • 從 Debian 包中釋放一個名為 "blurf" 檔案(或一組名為 "blurf" 的檔案): dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - blurf*
  • 删除軟體包(不包括它的配置檔案): dpkg --remove foo.
  • 删除軟體包(包括它的配置檔案): dpkg --purge foo.
  • 列出包含 "foo*" 字元串的軟體包的狀态: dpkg --list 'foo*'.

7.1.2 dselect

Debian 包管理系統的菜單界面. 對第一次安裝和大範圍更新特别有用.

dselect

 可以:

  • 引導使用者選擇安裝或删除軟體包時, 確定要安裝的包不與其它包沖突, 使得每個(要安裝的軟體)包正常運作的所需的所有軟體包都被安裝.;
  • 對使用者所作選擇的不一緻和不相容做出警告;
  • 确定必須安裝的軟體包的安裝順序;
  • 自動完成安裝或删除; 并
  • 引導使用者完成每個軟體包的配置\.

進入 

dselect

 時, 有七個菜單項, 每項完成特定的功能, 使用者可以用上下鍵移動亮度條, 然後按 <回車> (<enter>) 鍵選擇加亮顯示的項.

接下來的顯示和使用者的選擇有關. 如果選的不是 Access 或 Select, 

dselect

 就會繼續執行指定的動作: 如, 選 Remove, dselect就會删除使用者在 Select 中的最後選擇的所有軟體包.

Access 和 Select 菜單項下有更多的菜單選項, 兩種選擇都會出現分屏, 上部給出選項的滾動清單, 部是對應選項的簡要解釋("info").

任何時候都可按下 "?" 鍵, 都可呼出幫助資訊, 使用線上幫助.

通常按照第一個界面裡菜單排列順序操作來完成軟體包安裝, 但, 使用者也可以根據自己的需要來做出選擇(但這和使用者的具體選擇有關)..

  • 通過選擇一個 Access Method 開始. 這是指使用者通路 Debian 軟體包的方法; 如有些使用者從 CD-ROM 上擷取 Debian 軟體包, 有些打算通過匿名 FTP 擷取. 

    dselect

     退出後所選的 "Access Method" 會被存儲下來, 是以如不再調用這個選項, 通路方式不會改變.
  • 接着 Update 可用軟體清單. 

    dselect

     讀取位于 Debian 軟體包存儲目錄的頂層的 "Packages.gz" 檔案(如果不存在, 

    dselect

     會試圖生成一個).
  • Select 欲安裝的軟體包, 選取此菜單項後, 首先顯示的是滿屏的幫助資訊(除非使用了 `--expert' 指令行參數), 退出幫助, 就會出現選擇軟體包的分屏菜單..

    相對較窄的上半屏是 37400 個 Debian 軟體包的滾動清單; 下半屏是對應軟體包或包組的描述T.

    用高亮條來標明軟體包名或者包組, 然後選擇操作:

    可以使用不同的排序方式顯示軟體包清單, 使用 `o' 鍵在不同的排序方式間切換. 預設的排序方式是優先級排序, 同一優先級内, 按存儲目錄排序, 這種排序方式, 可能先顯示 A 目錄的軟體包, 然後是B, 接着是低一個優先級的 A.

    你也可以使用 `v' (verbose) 鍵來展開螢幕頂部标簽的解釋. 這樣就可以在右邊顯示更多的内容, 通過左右箭頭來進行左右移動.

    如果選了安裝或删除一個軟體包, 如

    foo.deb

    , 這個軟體包又依賴于(需要)另一個(軟體)包, 如 

    blurf.deb

    dselect

     就會在下一屏顯示出來, 可以對系統建議(安裝或不安裝)做出選擇, 接受或拒絕. 按 Shift-D 鍵稍後操作, Shift-U 傳回上一菜單. 任何時候都可以按 Shift-Q 儲存選擇,傳回主菜單.
    • 鎖定
    • 使用 '=' 鍵, 告訴 

      dselect

       即使這個包即使不是最新版本也不要更新.

      可以通過 `:' 鍵來取消鎖定, 這是預設設定.

    • 清除: 删除軟體包的所有檔案, 使用 '_' 鍵.
    • 删除: 删除軟體包的大部分相關檔案, 但是不包括配置檔案(參閱 Debian 的配置檔案, 第 6.5 節)内列舉的需要保護的檔案和軟體包的配置資訊, 使用 '-' 鍵..
    • 删除:
    • 有兩種辦法删除:

      注意,不可能删除 "所有" 的軟體包. 如果試圖這樣做, 系統就會回到最初的基本系統狀态.

    • 安裝:
    • 按下"+"鍵.
  • 傳回主菜單, 選擇 "Install" 菜單進行對選擇的軟體包解包和配置. 或者選擇 "Remove" 菜單來删除. 選擇 "Quit" 退出 

    dselect

    , 所作選擇會被 

    dselect

    儲存下來.

7.1.3 dpkg-deb

用于 Debian 格式 (.deb) 檔案的操作. 常見操作:

  • 檢視全部選項: dpkg-deb --help.
  • 檢視 Debian 格式軟體包内的檔案: dpkg-deb --contents foo_VVV-RRR.deb)
  • 釋放 Debian 格式軟體包内的檔案到指定目錄: dpkg-deb --extract foo_VVV-RRR.deb tmp 釋放 foo_VVV-RRR.deb 内的全部檔案到 tmp/ 目錄. 這是不需要安裝, 在本地目錄測試(軟體)包内容的簡單方法.

注意, 僅僅執行 dpkg-deb --extract 并不能正确的安裝軟體包, 應該執行 dpkg --install.

詳細參見手冊 

dpkg-deb(1)

.

7.1.4 apt-get

apt-get

 提供一個簡單的指令行安裝軟體包的方法. 和 

dpkg

 不同, 

apt-get

 不能識别 .deb 檔案, 它使用軟體包原來的名稱通過 

/etc/apt/sources.list

 指定的安裝源進行安裝.

更多資訊, 安裝 

apt

 軟體包參閱 

apt-get(8)

sources.list(5)

 和 

/usr/share/doc/apt/guide.html/index.html

7.1.5 dpkg-split

這個程式用來将大軟體包分割成小檔案(如, 寫到軟碟上), 和将分割的檔案合并. 這個程式隻能在 Debian 系統上使用(或含 

dpkg

 包的系統), 因為它需要調用 dpkg-deb 程式分析這個 Debian 包的組成.

例如, 把一個大 .deb 分割成 N 部分,

  • 執行指令 dpkg-split --split foo.deb. 就會在目前目錄出現分割出N個大小為 460KB 的檔案.
  • 把這 N 個檔案考到軟碟上.
  • 把軟碟上的内容考到其他機器上.
  • 使用指令 dpkg-split --join "foo*" 合并.

7.2 Debian 可以對一個運作中的程式進行更新, 如何做到的?

Debian GNU/Linux 系統的核心支援運作中替換檔案.

我們另外提供可一個稱作 

start-stop-daemon

 的程式, 用于啟動時驅動程序或核心運作級别發生變化時停掉程序(如, 由多使用者到單使用者模式或到關機模式). 包含某個程序的軟體包安裝時, 安裝腳本停止和重起程序調用用的也是這個程式.

7.3 我的 Debian 系統上裝了哪些軟體包?

要檢視 Debian 系統上安裝的所有軟體包的狀态, 運作

     dpkg --list      

輸出每個軟體包的一行簡單介紹, 2字元的狀态标志, 包名, 所安裝版本, 和簡要描述.

檢視以 "foo" 開頭的軟體包的狀态, 執行:

     dpkg --list 'foo*'      

要得到某個軟體包的更詳細資訊, 執行:

     dpkg --status packagename      

7.4 如何找出一個檔案的歸屬包?

要查找出包含檔案 foo 的軟體包, 執行:

  • dpkg --search filename

    在已安裝軟體包中搜尋 filename.(等同于搜尋 /var/lib/dpkg/info/ 目錄下擴充名為 .list 的檔案, 并輸出所有包含此檔案的軟體包名和版本号).

  • zgrep foo Contents-ARCH.gz

繼續閱讀