Linux軟件安裝命令詳解


作為后端開發,平時在看博客以及學習時,經常遇到需要在Linux系統上進行部署、軟件安裝等操作,也遇到過很多安裝命令,比如yumapt-getdpkg等等,這些命令有什么區別?又有什么聯系?獨立開發時,如何確定使用哪一個?下面來詳細說一說。下述內容出自《Linux命令行大全》William E.Shotts,jr著。

軟件包系統

不同的Linux發行版使用的時不同的軟件包系統,並且原則上適用於一種的發行版的軟件包和其他版本是不兼容的。大多數的Linux系統不外乎兩種軟件包:

  • Debian
    • .deb技術
  • Red Hat
    • .rpm技術

此處忽略Gentoo、Slackware和Foresight等

下面是兩個軟件包系統和其對應的軟件包系統:

軟件包系統 發行版本(部分)
Debian類 Debian、Ubuntu、Xandros、Linspire
Red Hat Fedora、CentOS、Red Hat Enterprise Linux、openSUSE、Mandriva、PCLinuxOS

可見,我們常用的CentOS、Ubuntu正好屬於兩個不同的軟件包系統,正因為如此,后面我們會看到一些很眼熟的軟件安裝命令。

軟件

首先是軟件包,包文件是組成軟件包系統的基本軟件單元,它是由組成軟件包的文件壓縮成的文件集。這里面可能包含大量的程序以及相關的數據,或者安裝腳本等等。包文件一般由開發者維護。成千上萬的軟件包集中起來就形成了。最后是最重要的依賴關系,幾乎沒有哪個程序是獨立的,程序之間相互依賴彼此,以完成既定工作。比如輸入輸出的工作就是由多個程序共享的例程執行。這些例程存儲在共享庫里面,共享庫里面的文件為多個程序提供必須的服務。如果一個軟件包需要共享庫之類的共享資源,說明對其有依賴性。顯然共享庫的存在就是為了解決多個程序都需要使用某個例程,如果安裝時每個都帶着這個必須的例程安裝,那一定會出現安裝包過大的問題。因此解決依賴性是一個很重要的能力,而現代軟件包管理系統都提供依賴性解決策略。

高級和低級軟件包工具

軟件包管理系統通常包含兩類工具:

  1. 執行安裝、刪除軟件包文件等任務的低級工具;
  2. 進行元數據搜索及依賴性解決的高級工具。

下面是不同發行版本使用的高級、低級軟件包系統工具

發行版本 低級工具 高級工具
Debian 類(Ubuntu等) dpkg apt-get、aptitude
Fedora、CentOS、Red Hat Enterprise Linux rpm yum

常見軟件包管理任務

下面介紹一些常見的軟件包管理操作,另外低級工具也支持軟件包的創建(但我不會(是指我,不是指作者))。下述內容中package_name指軟件包的名稱,package_file則是指包含在該軟件包中的文件名。

在庫里查找軟件包

使用高級工具來搜索庫元數據時,可以根據包文件名或其描述來查找該包:

系統類型 命令行
Debian 系統 apt-get
apt-cache search search_string
Red Hat 系統 yum search search_string

舉例來說,在Red Hat系統的yum 庫中搜索emac文本編輯器的代碼如下:

yum search emacs

查找展示:

[asuka@localhost ~]$ yum search emacs
CentOS-8 - AppStream                                                  3.4 MB/s | 8.9 MB     00:02    
CentOS-8 - Base                                                       1.6 MB/s | 7.4 MB     00:04    
CentOS-8 - Extras                                                     2.9 kB/s |  10 kB     00:03    
=================================== Name & Summary Matched: emacs ====================================
emacs.x86_64 : GNU Emacs text editor
emacs-common.x86_64 : Emacs common files
emacs-filesystem.noarch : Emacs filesystem layout
emacs-filesystem.noarch : Emacs filesystem layout
emacs-nox.x86_64 : GNU Emacs text editor without X support
pinentry-emacs.x86_64 : Passphrase/PIN entry dialog based on emacs
emacs-terminal.noarch : A desktop menu item for GNU Emacs terminal.
emacs-lucid.x86_64 : GNU Emacs text editor with LUCID toolkit X support

安裝庫中的軟件包

高級工具允許從庫中下載、安裝軟件包,同時安裝所有的依賴包

系統類型 命令行
Debian 系統 apt-get update
apt-get install package_name
Red Hat 系統 yum install package_name

例如,在Debian系統下安裝命令為:

  • 先更新:apt-get update

  • 再安裝:apt-get install emacs

jungle@EVANGELION-01:~$ sudo apt-get install emacs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libllvm11
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  emacs-bin-common emacs-common emacs-el emacs-gtk gsfonts imagemagick-6-common libfftw3-double3
  liblqr-1-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6
Suggested packages:
  mailutils emacs-common-non-dfsg libfftw3-bin libfftw3-dev libmagickcore-6.q16-6-extra
The following NEW packages will be installed:
  emacs emacs-bin-common emacs-common emacs-el emacs-gtk gsfonts imagemagick-6-common
  libfftw3-double3 liblqr-1-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6
0 upgraded, 11 newly installed, 0 to remove and 16 not upgraded.
Need to get 38.8 MB of archives.
After this operation, 144 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

可見這里有安裝依賴的說明。為后續講解刪除軟件包,此處就先安裝上。

安裝軟件包文件中的軟件包

如果我們僅有一個軟件包文件,那么可以使用低級工具進行安裝,這樣的安裝顯然並不安裝依賴關系。

系統類型 命令行
Debian 系統 dpkg --install package_file
Red Hat 系統 rpm -i package_file

由於我手頭並沒有現成的軟件包文件,下述例子出自書中:

rpm -i emacs-22.1-7.fc7-i386.rpm

顯然Red Hat 體系下的軟件包后綴為.rpm

注意,由於是采用低級工具安裝,所以並不會解決依賴問題,一旦安裝過程缺少依賴包,rpm就會拋出錯誤后退出。

刪除軟件包

卸載軟件既可以使用高級工具也可以使用低級工具,高級工具的命令如下

系統類型 命令行
Debian 系統 apt-get rmove package_name
Red Hat 系統 rpm erase package_name

下面卸載上文安裝的emacs:

apt-get remove emacs

jungle@EVANGELION-01:~$ sudo apt-get remove emacs
...
dpkg: warning: files list file for package 'libgeocode-glib0:amd64' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'laptop-detect' missing; assuming package has no files currently installed
...
(Reading database ... 1402 files and directories currently installed.)
Removing emacs (1:26.3+1-1ubuntu2) ...

更新庫中的軟件包

系統類型 命令行
Debian 系統 apt-get update ; apt-get upgrade
Red Hat 系統 rpm update

過於直白,此處不再演示。

更新軟件包文件中的軟件包

與上文安裝相對應:

系統類型 命令行
Debian 系統 dpkg --install package_file
Red Hat 系統 rpm -U package_file

當然此處的文件都是新版。

列出已安裝的軟件包列表

系統類型 命令行
Debian 系統 dpkg --list
Red Hat 系統 rpm -qa

由於內容過長,為了方便查看,可以將輸出用管道交由less命令查看,完成后按q退出:

rpm -qa | less
---------------
dpkg --list | less

判斷軟件包是否安裝

系統類型 命令行
Debian 系統 dpkg --status package_name
Red Hat 系統 rpm -q package_name
dpkg --status emacs
dpkg-query: package 'emacs' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files.

顯示已安裝軟件包的相關信息

在已知已安裝軟件包名稱的情況下,可以使用如下命令查看描述信息

系統類型 命令行
Debian 系統 apt-cache show package_name
Red Hat yum info package_name

此處展示vim的安裝信息:

apt-cache show vim | less
----------------------------
Package: vim
Architecture: amd64
Version: 2:8.1.2269-1ubuntu5
Priority: optional
Section: editors
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 3038
Provides: editor
...

(END)

查看某具體文件由哪個安裝包得到

系統類型 命令行
Debian 系統 dpkg --search file_name
Red Hat rpm -qf file_name

同樣的我們來檢查一下vim

[asuka@localhost ~]$ rpm -qf /usr/bin/vim
vim-enhanced-8.0.1763-10.el8.x86_64

結語

僅做學習交流使用,不足之處還請諒解,如有建議還望補充,和平交流,共同進步。

本文發布於B站專欄、博客園。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM