亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux 入門學習之rpm軟件包管理

發布時間:2020-07-08 14:40:09 來源:網絡 閱讀:1311 作者:mzfiiooooii4455 欄目:數據庫

Linux入門之軟件包管理

linux有很多類的軟件包管理機制,但是在redhatcentos這類版本的系統中,都會使用一種相同的機制,就是rpm軟件包管理機制,當然,還有其它版本的linux使用的不同機制:

debian:使.deb文件,dpkg包管理器

redhat:使用.rpm文件,rpm包管理器

 

軟件包在使用中又分類兩種(源碼包和二進制包):

源碼包:一般是提供了一些源碼模塊和編譯腳步組合起來的壓縮文件,命令格式如:

name-version.tar.{gz|bz2|xz} 等,這里列舉出來一個源碼包:

[root@localhost ~]# ls -l tengine-1.4.2.tar.gz

-rw-r--r-- 1 root root 1185902 Aug 15 18:57 tengine-1.4.2.tar.gz

 

二進制rpm包:實現被編譯包的,功能模塊事先已經被設置好的軟件,命令格式如:

rpm包的組成:

主包:

name-version-release.arch.rpm  例如:

bind-9.7.1-1.e15.i586.rpm

    子包:

name-toolname-9.7.1-1.e15.i586.rpm 例如:

bind-libs-9.7.1-1.e15.i586.rpm

bind-utils-9.7.1-1.e15.i586.rpm

包名格式:

name-version-release.arch.rpm

bind-major.minor.release-release.arch.rpm  

版本號說明:

主版本號:軟件包有重大改進

此版本號:某個子功能發生重大變化

發行號:修正了部分bug,調整了一點功能

 

 

軟件管理器的核心功能:

1、制作軟件包;

2、安裝、卸載、升級、查詢、校驗;

 

注意:rpm包自身有依賴關系,及安裝軟件包時需要先安裝其依賴的軟件包

 

軟件包工具分類:

前段工具:yumapt-get

后端工具:rpmdpt

 

 

rpm命令:

rpm  rpmduild

rpm數據庫:/var/lib/rpm

注意:/var/lib/rpm中的某些文件如果只是被破壞,可以通過命令來創建或初始化數據庫,但是文件如果都被刪除,其數據庫信息將無法恢復,因此,要時常對此做備份

 

rpm命令使用方法:

1、安裝:

rpm -i /PATH/TO/PACKAGE_FILE     注意:這里是軟件包文件的路徑

-h:以#符號顯示進度,每個#符號表示2%進度

-v:顯示詳細過程

-vv:顯示更為詳細的過程

 

rpm  -ivh /PATH/TO/PACHAGE_FILE  提示:這里一般組合使用顯示其安裝狀態

 --nodeps:忽略依賴關系;

 --replacepkgs:重新安裝,替換原有安裝;

 --replacefiles:會替換原有文件;

 --force:強行安裝,可以實現重裝或降級;

 --nosgnature:不檢查來源的合法性

 --nodigest:不檢查完整性

 --noscripts:不執行程序包腳步

%pre:安裝前腳步;--nopre

%post:安裝后腳本;--nopost

%preun:卸載前腳步;--nopre

%postun:卸載后腳步;--nopost

注意:有時對于來源不明的軟件包,可以使用以上選項來防止軟件包里的危險程序

 

2、升級:

rpm  -Uvh  /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級,否則重裝

rpm  -Fvh  /PATH/TO/NEW_PACKAGE_FILE:如果有老版本的,則升級,否則退出

--oldpackage:降級

 

注意事項:

1、不要對系統內核進行升級或降級安裝,Linux執行多內核并存,因此直接安裝新內核即可

2、如果對kernel升級,升級前如果改變了原內核中配置文件,那么升級后,原內核的配置文件將被重命名為filename.rpmnew的文件,而使用新內核的文件

 

3、查詢

rpm  -q  PACKAGE_NAME:查詢指定包是否已經安裝

rpm  -qa:查看已經安裝的所有軟件包

 

rpm  -qi  PACKAGE_NAME:查詢指定包的安裝包的說明信息;

rpm  -ql  PACKAGE_NAME:查詢指定包安裝后生成的文件列表;

rpm  -qc  PACKAGE_NAME:查詢指定包安裝后生成配置文件;

rpm  -qd  PACKAGE_NAME:查詢指定包安裝的幫助文件;

 

rpm  --scripts PACKAGE_NAME:查詢指明包中包含的腳步

rpm  -qf  /PATH/TO/SOMEFILE:查詢指定的文件是由哪個rpm包安裝以后生成的;

rpm  --whatprovides  CAPABILTTY :查詢關鍵字或命令是由哪個包替換

rpm  --whatrequires  CAPABILTTY:查詢指定包或命令是被哪個包所依賴

 

如果包尚未安裝,我們需要查詢其說明信息、安裝以后會生成的文件:

rpm  -qpi  /PATH/TO/PACKAGE_FILES   查看軟件包文件信息

rpm  -qpl  /PATH/TO/PACKAGE_FILES   查看軟件包安裝后生成哪些文件

 

如果安裝后的文件有所丟失,而又有配置而不像重裝去覆蓋文件,可以通過工具處理:

rpm2cpio 包文件|cpio  -itv 預覽包文件

rpm2cpio  包文件|cpio  -idv *.conf 展開包文件

注意:里面可以是特定路徑或者文件通配符

 

rpm  --scripts  /PACKAGE_NAME:查詢包生成的腳步文件

 -R:查詢指定的程序包所依賴庫及軟件

 --provides:列出指定程序包提供的工具、命令

 --changelog:查詢rpm包的更改信息

 

4、卸載

rpm  -e  PACKAGENAME

rpm  --erase  PACKAGENME

           --nodeps:忽略依賴關系任然卸載

           --test:只是測試卸載過程,并不真正卸載  

           --noscripts:卸載時不運行過程腳步

           --notriggers:不啟動觸發器

           --allmatches:卸載全部與其相配的文件

 

5、校驗

rpm  -V  PACKNAME  PACKAGE_NAME

信息說明:

S  表示軟件更改信息

M 顯示權限信息

5  顯示加密信息

D  顯示主次設備號

L  顯示鏈接路徑數

U  顯示包用戶

G  顯示包用戶組

T  顯示更改時間

p  顯示更新對比屬性

 

6、校驗軟件包來源合法性,及軟件包完整性:

密鑰文件:

          /etc/pki/rpm-gpg/目錄下:

          RPM-GPG-KEY-readhat-release

          RPM-GPG-KEY-centos-release

檢查軟件包的完整性:

rpm  -K  /path/to/rpmfile

信息說明:

dsp, gpg:驗證來源合法性,也即驗證前面字段,可以使用--nosignature略過此項

sha1, md5:驗證軟件包完整性,可以使用--nodigest,略過此項

 

在此之前需要有公鑰的存在,可以使用命令導入公鑰:

rpm  --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

卸載公鑰:

rpm  -qa  gpg-pubkey*  找出公鑰名稱

rpm  -e   gpg-pubkey......  卸載公鑰

 

7、重建數據庫

數據庫文件路徑:/var/lib/rpm/

使用命令重建:

rpm

--rebuilddb:重建數據庫,一定會重新建立;

--initdb:初始化數據庫,沒有才建立,有就不建立;

 

案例:

#掛載CentOS鏡像到/mnt/iso文件夾

[root@mzf ~]# mount /dev/cdrom  /mnt/iso/
mount: block device /dev/sr0 is write-protected, mounting read-only

#cd進入/mnt/iso目錄

[root@mzf ~]# cd /mnt/iso/
[root@mzf iso]# pwd
/mnt/iso

#查看軟件包存放在Packages

[root@mzf iso]# ls
CentOS_BuildTag  EULA  p_w_picpaths    Packages   repodata RPM-GPG-KEY-CentOS-Debug-6     
RPM-GPG-KEY-CentOS-Testing-6  EFI   GPL   isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL

#cd到此Packages目錄中

[root@mzf iso]# cd Packages/

#找出tree軟件

[root@mzf Packages]# find ./ -name "tree-1.5.3-3.el6.x86_64.rpm" 
./tree-1.5.3-3.el6.x86_64.rpm

#發現已經安裝

[root@mzf Packages]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
package tree-1.5.3-3.el6.x86_64 is already installed

#那就先卸載此文件

[root@mzf Packages]# rpm -e tree

#再次安裝,顯示進度安裝成功

[root@mzf Packages]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                 ########################################### [100%]
   1:tree             ########################################### [100%]

#安裝zsh發現已經被安裝過

[root@mzf Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
Preparing...                 ########################################### [100%]
package zsh-4.3.11-4.el6.centos.2.x86_64 is already installed

#使用--force強制安裝并覆蓋之前的安裝

[root@mzf Packages]# rpm -ivh --force zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
Preparing...         ########################################### [100%]
   1:zsh          ########################################### [100%]


#查詢bind是否已經安裝,發現只是一些庫和工具

[root@mzf Packages]# rpm -qa | grep '^bind'
bind-libs-9.8.2-0.47.rc1.el6.x86_64
bind-utils-9.8.2-0.47.rc1.el6.x86_64

#安裝一個服務器配置,顯示此包依賴于bind-9.8.2-0.47.rc1.el6

[root@mzf Packages]# rpm -ivh bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm 
error: Failed dependencies:
bind = 32:9.8.2-0.47.rc1.el6 is needed by bind-chroot-32:9.8.2-0.47.rc1.el6.x86_64

#那么可以選擇一起安裝,也可以忽略、強制安裝

[root@mzf Packages]# rpm -ivh --nodeps --force bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm 
Preparing...           ########################################### [100%]
   1:bind-chroot        warning: group named does not exist - using root
warning: group named does not exist - using root%)
warning: group named does not exist - using root%)
warning: group named does not exist - using root%)

說明:雖然裝上了,但是顯示一些錯誤信息,因為沒有主配置文件,這里我們還是一起安裝

[root@mzf Packages]# rpm -ivh bind-9.8.2-0.47.rc1.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:bind         warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew
########################################### [100%]

 

#卸載剛才安裝的軟件

[root@mzf Packages]# rpm -e bind-chroot
#沒有信息就說明已經安裝成功

#檢驗軟件包來源合法性,這里顯示正常

[root@mzf Packages]# rpm -K bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm 
bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

#而檢驗是通過公鑰文件來處理的,如果沒有這些文件,將會檢查失效

[root@mzf Packages]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Security-6  RPM-GPG-KEY-CentOS-Testing-6

#通過命令導入密鑰:

[root@mzf Packages]# rpm --import /mnt/iso/RPM-GPG-KEY-CentOS-6

#查看剛才安裝的密鑰

[root@mzf Packages]# rpm -qa | grep 'gpg.*key'
gpg-pubkey-c105b9de-4e0fd3a3

#卸載此密鑰

[root@mzf Packages]# rpm -e gpg-pubkey


 

如果安裝過的軟件的某些文件被刪除或者破壞,如何只恢復指定文件而不重裝?

#查看tree執行文件的路徑

[root@mzf Packages]# which tree
/usr/bin/tree

#刪除出tree執行文件

[root@mzf Packages]# rm -f /usr/bin/tree

#再次執行已經找不到此命令

[root@mzf Packages]# tree
-bash: tree: command not found

#通過rpm2cpiorpm包生成的文件列表寫成數據流傳給cpio查看

[root@mzf Packages]# rpm2cpio ./tree-1.5.3-3.el6.x86_64.rpm | cpio -tv
-rwxr-xr-x   1 root   root   41136 Jan 14  2015 ./usr/bin/tree
drwxr-xr-x   2 root   root   0 Jan 14  2015 ./usr/share/doc/tree-1.5.3
-rw-r--r--   1 root   root   18009 Aug 13  2004 ./usr/share/doc/tree-1.5.3/LICENSE
-rw-r--r--   1 root   root   4167 Oct 20  2009 ./usr/share/doc/tree-1.5.3/README
-rw-r--r--   1 root   root   3375 Jan 14  2015 ./usr/share/man/man1/tree.1.gz

#根據上面顯示時說明展開默認在當前當文件夾

#那么我們切換到家目錄

[root@mzf Packages]# cd

#只展開出tree命令

[root@mzf~]#rpm2cpio /mnt/iso/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -idv ./usr/bin/tree
./usr/bin/tree
132 blocks

#拷貝這個命令到原來tree命令所在的目錄

[root@mzf ~]# cp usr/bin/tree /usr/bin/tree

#發現tree命令又可以使用了

[root@mzf ~]# tree
.
├── anaconda-ks.cfg
├── checkdisk.sh


重建庫文件

#查詢庫文件

[root@mzf ~]# ls /var/lib/rpm/
Basenames     __db.001  __db.003  Dirnames     Group       Name          Packages     Provideversion  Requirename     Sha1header  Triggername
Conflictname  __db.002  __db.004  Filedigests  Installtid  Obsoletename  Providename  Pubkeys         Requireversion  Sigmd5

#備份移動庫文件

[root@mzf ~]# mkdir backup
[root@mzf ~]# mv /var/lib/rpm/* backup/

#已經沒有任何庫文件

[root@mzf ~]# ls /var/lib/rpm/

#初始化庫文件

[root@mzf ~]# rpm --initdb
[root@mzf ~]# ls /var/lib/rpm/
__db.001  __db.002  __db.003  __db.004  Packages

#重建庫文件

[root@mzf ~]# rpm --rebuilddb
[root@mzf ~]# ls /var/lib/rpm/
Packages

#查詢已經失效

[root@mzf ~]# rpm -qa
說明:這里的重建只是重新生成庫文件,但以前的記錄已經沒有了,這時我們還原

#將剛才的文件再次移動到/var/lib/rpm

[root@mzf ~]# mv -f backup/* /var/lib/rpm/

#查詢之前安裝的軟件,發現可以查看了

[root@mzf ~]# rpm -qa | grep '^bind.*'
bind-libs-9.8.2-0.47.rc1.el6.x86_64
bind-9.8.2-0.47.rc1.el6.x86_64

bind-utils-9.8.2-0.47.rc1.el6.x86_64

注意:這里如果只是一點文件或者鎖文件破壞,還可以使用重建數據庫拯救,但是如果/var/lib/rpm里的文件都被刪除了,就算重建了,記錄是找不回來的,這時就需要對庫文件進行備份了

 

 

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

日土县| 临安市| 吐鲁番市| 揭阳市| 平江县| 云霄县| 平遥县| 密云县| 资中县| 怀仁县| 吉首市| 晋宁县| 慈溪市| 唐河县| 格尔木市| 缙云县| 城口县| 福海县| 大同县| 武汉市| 巴林左旗| 海宁市| 阜宁县| 石狮市| 上虞市| 博湖县| 志丹县| 永福县| 嘉荫县| 都兰县| 德安县| 巴里| 壶关县| 甘泉县| 江阴市| 澎湖县| 新建县| 都安| 双鸭山市| 田林县| 噶尔县|