軟件包管理(Linux運維)

1、tar
壓縮工具的介紹
說到軟件管理,就不得不說到tar,由於製做rpm包須要tar,yum須要rpm。而說的到tar又不得不說到壓縮和解壓縮,因此要先了解一下壓縮和解壓縮。node

因爲之前的計算機磁盤容量比較小,業內人士絞盡腦汁,終於開發出了一個能幫助用戶節省磁盤的工具,就是壓縮工具,咱們知道計算機在存儲數據的時候都是使用bytes來計算的,可是實際上1byte=8bits,在平常使用中並非全部的數據都能把這個1byte用完,有的可能用了三個bits,有的可能用了四個bits,而他們的實際佔用空間是2bytes=16bits,剩餘的空間就浪費了,壓縮工具就是經過算法,將佔用三個bits的數據和佔用四個bits的數據放在一個byte裏,這樣咱們就能節省出來1byte,這種空間的節省,當你在壓縮一個包含了不少文本文件的目錄時是很是明顯的。其實就像沒有人知道早高峯的公交車裏有多少人同樣,一我的理論上佔用的公交車內的空間,跟實際佔用的空間,每每有很大差異,由於擠擠總能上去的。linux

壓縮工具誕生的初衷和原理咱們說完了,那如今它就沒用了麼?依然有用,只不過如今咱們使用壓縮工具的目的,更多的是便於存儲和傳輸,在linux系統中壓縮工具備不少,不一樣的工具壓縮後的後綴名和大小都有差別,從遠古時代提及,linux都出現瞭如下這些格式的壓縮文件算法

*.Z 使用compress壓縮的文件數據庫

*.zip 使用zip壓縮的文件vim

*.gz 使用gzip壓縮windows

*.bz2 使用bzip2壓縮centos

*.xz 使用xz壓縮緩存

*.tar 使用tar工具打包,沒有壓縮服務器

*.tar.gz 使用tar工具打包,通過gzip壓縮less

*.tar.bz2 使用tar工具打包,通過bzip2壓縮

*.tar.xz 使用tar工具打包,通過xz壓縮

其中,compress已通過時了,由於太老,個別版本的linux已經不支持了,linux下的壓縮工具仍是以gzip和bzip2以及後加入的xz做爲主力,可是因爲這些工具,最先不能壓縮目錄,只能針對單一文件進行壓縮,因此在平常使用中,他們都是配合着tar這個打包工具,由tar把目錄中的不少文件打包成一個文件,再經由對應的工具進行壓縮,因此咱們會看上面的那些tar.*的壓縮包。好了咱們先來學習下這些壓縮工具如何使用

壓縮工具的使用
先看下第一個gzip

[root@localhost ~]# gzip -h
Usage: gzip [OPTION]... [FILE]...
-c 保留源文件
-d 解壓縮
-h 顯示幫助
-t 檢查壓縮文件的數據一致性,用來肯定壓縮文件是否有錯誤
-v 顯示壓縮包的相關信息,包括壓縮比等

-V 顯示版本號
-1 壓縮最快,壓縮比低
-9 壓縮最慢,壓縮比高
例子:
[root@localhost test]# pwd
/root/test
[root@localhost test]# cp /etc/services ./
[root@localhost test]# gzip -v services
services: 79.4% -- replaced with services.gz
[root@localhost test]# ll /etc/services services.gz
-rw-r--r--. 1 root root 692241 Sep 10 2018 /etc/services
-rw-r--r-- 1 root root 142549 Oct 20 23:32 services.gz
[root@localhost test]# zcat services.gz
因爲service文件原本就是一個文本文檔,因此還可使用zmore,zless去查看內容
[root@localhost test]# ls
services.gz
[root@localhost test]# gzip -d services.gz
[root@localhost test]# ls
services
咱們能夠看到,gzip這個工具壓縮文件和源文件默認只保留一個,因此還能夠
[root@localhost test]# gzip -1 -c services > test.gz
[root@localhost test]# ls
services test.gz
[root@localhost test]# zgrep -n ssh test.gz
44:ssh 22/tcp # The Secure Shell (SSH) Protocol
45:ssh 22/udp # The Secure Shell (SSH) Protocol
你也可使用zgrep找出指定的關鍵字在壓縮文件的那幾行
gzip咱們就看完了,接下來咱們接着看bzip2

[root@localhost test]# bzip2 -h
-h 幫助
-d 解壓
-z 壓縮 默認值
-k 保留源文件
-v 查看版本信息
-1 ..-9 同gzip相同
bzip2的使用與gzip相同,兩種工具的區別就是壓縮算法不一樣,bzip2的壓縮比更好一些,bzip的包查看的時候使用的是bzcat,bzmore,bzless,bzgrep同gzip用法相同
[root@localhost test]# gzip -c services > services.gz
[root@localhost test]# bzip2 -k services
[root@localhost test]# ll
總用量 948
-rw-r--r-- 1 root root 692241 10月 21 01:31 services
-rw-r--r-- 1 root root 129788 10月 21 01:31 services.bz2
-rw-r--r-- 1 root root 142549 10月 21 01:32 services.gz
咱們來看一下xz,雖然bzip2的壓縮效果相對比gzip已經提高不少,可是技術是永無止境的,因而出現了xz,它的用法跟gzip和bzip2同樣

[root@localhost test]# xz -h
-d 解壓縮
-t 檢查壓縮文件的完整性
-l 查看壓縮文件的相關信息
-k 保留源文件
-c 將信息輸出到顯示器上
-0 ... -9 指定壓縮級別
-h 顯示幫助
[root@localhost test]# xz -k services
[root@localhost test]# ll
總用量 1052
-rw-r--r-- 1 root root 692241 10月 21 01:31 services
-rw-r--r-- 1 root root 129788 10月 21 01:31 services.bz2
-rw-r--r-- 1 root root 142549 10月 21 01:32 services.gz
-rw-r--r-- 1 root root 105872 10月 21 01:31 services.xz
能夠看到,在使用默認壓縮比壓縮的狀況下,xz壓縮完的文件體積更小
[root@localhost test]# xz -l services.xz 查看相關信息
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 103.4 KiB 676.0 KiB 0.153 CRC64 services.xz
[root@localhost test]# xzcat services.xz 查看文件內容
[root@localhost test]# xz -d services.xz 解壓縮

雖然xz的壓縮算法更好,可是相對來講時間也比較長
[root@localhost test]# time gzip -c services > services.gz
real 0m0.023s
user 0m0.020s
sys 0m0.003s
[root@localhost test]# time bzip2 -k services
real 0m0.047s
user 0m0.043s
sys 0m0.003s
[root@localhost test]# time xz -k services
real 0m0.264s
user 0m0.258s
sys 0m0.003s
咱們可使用time這個命令去對比一下時間gzip,bzip2,xz的時間分別是0.023,0.047,0.264,能夠看到xz所使用的時間是比較長的,而這個時間會跟文件體積成正比,因此這三種壓縮方式你們在使用的時候也要把時間成本考慮在內,除非你很富有。
這三種常見的壓縮方式介紹完了,咱們來看下tar這個工具,前面咱們提到了,大多數壓縮工具只能針對單一文件進行操做,若是你要壓縮目錄的話就會很麻煩,這時候咱們可使用tar這個打包工具,將目錄內的多個文件打包成一個文件,再進行壓縮。

[root@localhost test]# tar --help
用法: tar [選項...] [FILE]...
-C 解壓到指定目錄
-c 創建tar包
-t 查看tar包內的文件
-x 解壓tar包
-p 不修改文件屬性
-f 指定文件名稱
-j 使用bzip2算法
-J 使用xz算法
-z 使用gzip算法
-P 容許壓縮路徑中包含有"/"
-v 顯示詳細信息
-?, --help 查看幫助
--exclude 壓縮過程當中排除指定的文件
例:
壓縮
[root@localhost test]# tar -czf etc.tar.gz etc
[root@localhost test]# ls
etc etc.tar.gz
解壓縮
[root@localhost test]# ls
etc.tar.gz
[root@localhost test]# tar -xf etc.tar.gz
[root@localhost test]# ls
etc etc.tar.gz
查看壓縮包內容
[root@localhost test]# tar -tf etc.tar.gz
etc/
etc/libreport/
etc/libreport/workflows.d/
etc/libreport/workflows.d/report_uploader.conf
etc/libreport/workflows.d/anaconda_event.conf
.
.
.
查詢壓縮包裏面的文件信息
[root@localhost test]# tar -tvf etc.tar.gz |more
drwxr-xr-x root/root 0 2019-10-21 04:35 etc/
drwxr-xr-x root/root 0 2019-10-21 04:35 etc/libreport/
drwxr-xr-x root/root 0 2019-10-21 04:35 etc/libreport/workflows.d/
.
.
.
解壓壓縮包指定的文件
[root@localhost test]# tar -tvf etc.tar.gz | grep shadow
---------- root/root 792 2019-10-21 04:35 etc/gshadow
---------- root/root 1506 2019-10-21 04:35 etc/shadow
---------- root/root 781 2019-10-21 04:35 etc/gshadow-
---------- root/root 1374 2019-10-21 04:35 etc/shadow-
-rw-r--r-- root/root 214 2019-10-21 04:35 etc/pam.d/sssd-shadowutils
[root@localhost test]# tar -xf etc.tar.gz etc/shadow
[root@localhost test]# ls
etc etc.tar.gz
[root@localhost test]# ls etc
shadow
tar工具的基本使用咱們就介紹到這裏,那麼若是你得到了一個tar包形式的軟件該如何安裝呢?

源碼包的安裝

在linux系統中,不少新版本的軟件包的更新都會優先提供tar包版本的,而後各linux廠商拿到這個tar包以後再給本身的操做系統提供官方的rpm或者dpkg類型的軟件包,而這種tar工具打包的軟件包咱們通常稱之爲源碼包,在這些源碼包中通常包含有,程序源代碼文件,配置文件(configure),安裝使用說明(INSTALL,HOWTO,README)

那這種tar包源碼包如何安裝呢?簡單的流程就是

獲取軟件包

解壓文件

檢查當前系統是否知足軟件包安裝需求

使用gcc進行編譯,生成主要的二進制文件

將二進制文件安裝到主機

這些步驟看起來很簡單,可是在使用過程當中有不少問題須要解決,好比說須要解決系統環境,權限問題等等,不一樣類型的軟件在安裝方法上會有差別,可是總體步驟就是咱們上面所提到的。

2、rpm
rpm的介紹
前面的課程咱們提到過源碼包安裝須要解決系統環境、權限等等,這些對於初學者而言都是噩夢通常的存在,因此linux廠商推出了一種相似windows系統中的安裝方式,有開發者直接在已知的系統中編譯好,使用者能夠直接下載並進行安裝,升級,卸載等操做。在linux中可以提供這些功能的軟件有兩種,rpm和dpkg,而在CentOS中使用的是RPM

rpm最先是由redhat開發出來,因爲很好用,因此不少發行版也利用rpm來進行軟件包的管理。RPM全名RedHat Package Manager,最大的特色就是把須要安裝的軟件提早編譯,打包,而後在rpm包裏面存放了用以記錄軟件依賴關係的相關數據,當用戶安裝時,優先查看這些數據,若是系統知足數據要求就安裝軟件包,不然不能安裝,安裝完成後,將軟件包相關信息記錄到rpm本身的數據庫中,便於查詢和卸載等。因此說rpm的優勢是方便安裝,卸載,查詢,缺點就是隻能在指定的操做系統上使用,因此不一樣廠商的rpm包,甚至同一廠商不一樣版本操做系統的rpm包都不通用。

rpm包的命名

dhcp-server- 4.3.6 -30 .el8 .x86_64 .rpm
軟件名稱 版本 編譯次數 適用的系統 適用的平臺 後綴名

軟件名 就是軟件包的名稱
版本 每次更新版本號都會改變,用來幫助用戶判斷軟件包新舊的
編譯次數 也是幫助用戶判斷軟件包新舊的
適用的系統 在哪一個系統上能夠安裝,CentOS和rhel的多數軟件包都是通用的
適用的平臺 指的是硬件平臺,好比若是你是32位的CPU就沒法安裝這個軟件包
rpm的使用
rpm包的相關文件通常都會放在對應的目錄中,好比rpm包安裝後,配置文件會放在/etc下,執行文件會放在/usr/bin下,連接庫文件會放在/usr/lib下,幫助與說明文檔會放在/usr/share/man和/usr/share/doc目錄下

安裝

[root@localhost Packages]# rpm -ivh dhcp-server-4.3.6-30.el8.x86_64.rpm
-i 安裝
-v 顯示詳細信息
-h 顯示安裝進度
-e 卸載
-U 升級,若是系統中有低版本的就會升級,若是系統沒有安裝相應的包,則安裝
-F 有條件的升級,會檢測用戶指定的軟件包是否已安裝到linux中
--nodeps 忽略軟件包之間的依賴關係
--replacefiles 覆蓋文件
--replacepkgs 修復
--force 強制
--test 測試
-q 查詢指定的軟件包是否安裝
-qi 查看指定的軟件包的信息,包括開發商,版本,說明
-ql 查看指定軟件包中所包含的文件列表
-qc 查看指定軟件包的配置文件
-qa 查看本機安裝的全部包
-qf 查看一個文件歸屬於哪一個已安裝的軟件包

rpm的內容咱們就介紹到這裏,接下來咱們看下一個yum
3、yum
yum的介紹
YUM(Yellow dog Updater, Modified)是一個基於rpm卻更勝於rpm的管理工具,讓你能夠更輕鬆的管理Red Hat Enterprise Linux系統中的軟件。你可使用YUM來安裝或卸載軟件、也能夠利用YUM來更新你的系統,更能夠利用YUM來搜索一個還沒有安裝的軟件。無論是安裝、更新或者刪除,YUM都會自動的幫你解決軟件間的依賴性問題。經過YUM會比單純使用rpm來得更加方便。

YUM包含下列幾項組件:

YUM下載源:若是把全部RPM文件放在某一個目錄中,這個目錄就可稱爲「YUM下載源(YUM Repository)」。你也能夠把YUM下載源,經過HTTP、FTP等方式分享給其餘計算機使用;固然,你也能夠直接使用別人建好的YUM下載源來取得需安裝的軟件。

YUM工具:YUM提供了一個名爲yum的命令,你可使用yum來使用YUM提供的衆多功能。

YUM插件:YUM還容許第三方廠商(3rd Party)開發YUM的插件(Plug-in),讓用戶能夠任意的擴充YUM的功能,好比說有的插件能夠幫助選擇最快的yum源

YUM緩存:YUM運行時,會從YUM下載源得到軟件信息與文件,而且暫存於本機的硬盤上。這個暫存的目錄,稱爲「YUM緩存(YUM cache)」。緩存目錄爲/var/cache/yum

yum的使用
yum源的配置

因爲yum有下載源這個東西,因此咱們在使用yum以前須要告訴它去什麼地方獲取這些軟件包,也就是說須要先配置一個yum源

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-AppStream.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-centosplus.repo CentOS-Extras.repo CentOS-PowerTools.repo
在CentOS8中yum的下載源配置文件統一都放到/etc/yum.repos.d/目錄下,在這個目錄中有些默認的下載源
我不使用這些自帶的下載源,我想配置一個本身的下載源,讓yum使用光盤鏡像裏的軟件包,爲了不干擾,咱們把這些自帶的下載源都放到一個目錄裏
[root@localhost yum.repos.d]# mkdir repos
[root@localhost yum.repos.d]# ls
CentOS-AppStream.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-centosplus.repo CentOS-Extras.repo CentOS-PowerTools.repo repos
[root@localhost yum.repos.d]# mv *.repo repos
[root@localhost yum.repos.d]# clear
[root@localhost yum.repos.d]# ls
repos
而後使用vim命令創建本身的下載源配置文件
[root@localhost repos]# vim server.repo
[server-BaseOS] yum源的名稱
name=server-BaseOS 完整名稱
enabled=1 是否啓用
gpgcheck=0 是否檢查rpm包的數字簽名
baseurl=file:///mnt/BaseOS 下載源地址
[server-AppStream]
name=server-AppStream
enabled=1
gpgcheck=0
baseurl=file:///mnt/AppStream
[root@localhost ~]# mount /dev/cdrom /mnt/ 將光盤掛載到指定位置
因爲CentOS8的軟件包存放在光盤根目錄的BaseOS和AppStream目錄中,因此這裏面爲了保證須要的軟件包能正確安裝咱們配置了兩個yum源,這兩部份內容你能夠放到一個文件裏,也能夠分別放在兩個文件中
以上就是yum源配置文件,咱們接下來看下如何創建下載源目錄

將下載好的rpm軟件包存放到一個指定的目錄中
[root@localhost ~]# cp /mnt/AppStream/Packages/* myrepo/

從光盤鏡像中安裝createrepo工具
[root@localhost ~]# yum install createrepo

利用createrepo工具生成軟件包之間的依賴關係數據文件
[root@localhost ~]# createrepo myself/

創建針對此目錄的下載源配置文件
[root@localhost ~]# vim /etc/yum.repos.d/myrepo.repo
[myself]
name=packages
enabled=1
gpgcheck=0
baseurl=file:///root/myself

重新的下載源安裝軟件包
[root@localhost ~]# yum install httpd
yum插件安裝

[root@localhost ~]# yum install 插件名稱
插件配置文件存放位置/etc/yum/pluginconf.d/xxx.conf

插件的啓用和停用
修改/etc/yum/pluginconf.d/xxx.conf文件中的enabled字段 1=啓用 0=停用

[root@localhost ~]# yum [OPTIONS...] COMMAND [ARGVS...]
-y 若是遇到問題,代替回答yes
--installroot=/path 指定軟件包安裝的根目錄
清除yum緩存

[root@localhost ~]# yum clean all
若是有些時候你發現yum運行不太正常,這多是yum緩存數據錯誤致使的,因此你須要將yum的緩存清除

查看軟件包
[root@localhost ~]# yum list

查看有哪些可用組
[root@localhost ~]# yum grouplist

查看dhcp-server這個包的信息
[root@localhost ~]# yum info dhcp-server

搜索dhcp-server這個軟件包
[root@localhost ~]# yum search dhcp-server
yum安裝

安裝dhcp-server軟件包
[root@localhost ~]# yum install dhcp-server -y

安裝一組軟件包
[root@localhost ~]# yum groupinstall '系統工具' -y

卸載軟件包

刪除一個軟件包
[root@localhost ~]# yum remove dhcp-server -y

刪除一組軟件包
[root@localhost ~]# yum groupremove '系統工具' -y
使用epel源

EPEL是一個自由開源的附加軟件包倉庫,可用於 CentOS 和 RHEL 服務器。顧名思義,EPEL 倉庫提供了額外的軟件包,這些軟件在 CentOS 8 和 RHEL 8 的默認軟件包倉庫中不可用。

安裝epel源

epel地址:https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

[root@localhost ~]# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

dnf
介紹
DNF是新一代的rpm軟件包管理器。最先出如今 Fedora 18 這個發行版中,在Fedora 22中正式取代了yum

DNF器克服了YUM的一些瓶頸,提高了包括用戶體驗,內存佔用,依賴分析,運行速度等多方面的內容。

安裝
在CentOS7中須要單獨安裝

yum install epel-release -y
yum install dnf
在CentOS8中系統默認使用的是DNF,咱們所看到的yum只是dnf的一個軟鏈接

[root@localhost ~]# which yum
/usr/bin/yum
[root@localhost ~]# ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 5月 14 2019 /usr/bin/yum -> dnf-3
相關目錄和使用
目錄

/etc/dnf/dnf.conf 配置文件

/etc/dnf/aliases.d/ 爲相關命令定義別名的如dnf alias add rm=remove

/etc/dnf/modules.d&/etc/dnf/modules.defaults.d 模塊的設置

/etc/dnf/plugins/ 插件的設置

/etc/dnf/protected.d/ 受保護的軟件包的設置

/etc/dnf/vars/ 變量設置

查看DNF的版本
[root@localhost ~]# dnf --version

查看dnf的可用軟件倉庫
[root@localhost ~]# dnf repolist

查看全部軟件倉庫
[root@localhost ~]# dnf repolist all

查看已安裝的軟件包
[root@localhost ~]# dnf list installed

查看可安裝的軟件包
[root@localhost ~]# dnf list available

搜索dhcp-server
[root@localhost ~]# dnf search dhcp-server

查詢一個文件是由哪一個軟件包提供的
[root@localhost ~]# dnf provides /usr/sbin/dhclient

查詢軟件包詳細信息
[root@localhost ~]# dnf info dhcp-server

安裝軟件包
[root@localhost ~]# dnf install dhcp-server

升級軟件包
[root@localhost ~]# dnf update systemd

檢查軟件包的更新
[root@localhost ~]# dnf check-update

升級全部可升級的軟件包
[root@localhost ~]# dnf update

升級全部可升級的軟件包
[root@localhost ~]# dnf upgrade

卸載軟件包
[root@localhost ~]# dnf remove dhcp-server
[root@localhost ~]# dnf erase dhcp-server

刪除無用孤立的軟件包
[root@localhost ~]# dnf autoremove

清除緩存中的無用數據
[root@localhost ~]# dnf clean all

獲取某一個命令的幫助
[root@localhost ~]# dnf help clean

獲取dnf命令的幫助
[root@localhost ~]# dnf help

查看歷史命令
[root@localhost ~]# dnf history

從新執行歷史命令中的第19條
[root@localhost ~]# dnf history redo 19

查看軟件包組
[root@localhost ~]# dnf grouplist

安裝一組軟件包
[root@localhost ~]# dnf groupinstall '系統工具'

升級一組軟件包
[root@localhost ~]# dnf groupupdate '系統工具'

刪除一組軟件包
[root@localhost ~]# dnf groupremove '系統工具'

從特定的軟件倉庫安裝軟件包
[root@localhost ~]# dnf --enablerepo=epel install zabbix

將軟件包更新到最新的穩定版
[root@localhost ~]# dnf distro-sync

從新安裝指定的軟件包
[root@localhost ~]# dnf reinstall dhcp-server

降級軟件包[root@localhost ~]# dnf downgrade dhcp-server

相關文章
相關標籤/搜索