一.關於軟件包
在linux中安裝軟件是需要安裝包的,軟件的安裝包有各種類型:.zip,.rar,.rpm,.tar.gz,.tar。軟件包還可以分為源代碼包和二進制
包,源代碼包是沒有經過編譯的包,需要經過GCC、C++編譯器環境編譯才能運行。二進制包無需編譯,可以直接安裝使用。區分是否為
源代碼包還是二進制包還得基於軟件包里面的文件來判斷,包含.h、.c、.cpp、.cc等結尾的源碼文件,稱之為源代碼包,而軟件包里面存
在bin目錄(bin目錄里有可執行文件),稱之為二進制包。源碼包高度可定制,可以自由選擇自己需要的功能。
二.RPM軟件包
RPM是RPM Package Manager(RPM軟件包管理器)的縮寫,這一文件格式名稱雖然打上了RedHat的標志,但是其原始設計理念是
開放式的,現在包括OpenLinux、SUSE以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標准了。RPM包是二進制包
可以直接使用。
rpm包的獲取方式:Centos系統鏡像光盤;網站http://rpmfind.net/;各種軟件的官網下載。
三.RPM包通用的命名規則
RPM包的一般命名規則為:name-version-arch.rpm或者name-version-arch.src.rpm。
- name就是軟件包的名稱
- version是軟件的版本號,版本號的格式通常為“主版本號.次版本號.修正號”,也有發布版本號,表示這個RPM包是第幾次編譯生成的
- arch表示軟件包適用的硬件平台,目前RPM支持的平台有:i386,i586,i686、sparc,alpha,x86_64等等
- .rpm或.src.rpm,是RPM包類型的后綴,.rpm是編譯好的二進制包,可用rpm命令直接安裝;.src.rpm表示是源代碼包,需要編譯之后才可以使用
- el* 表示這個軟件包的發行商版本,el7表示這個軟件包是在RHEL 7.x/CentOS 7.x下使用
- devel:表示這個RPM包是軟件的開發包
- noarch:說明這樣的軟件包可以在任何平台上安裝,不需要特定的硬件平台。在任何硬件平台上都可以運行
- manual 手冊文檔
httpd-2.2.3-29.el5.i386.rpm
軟件名稱httpd|軟件版本號2.2.3|發布版本號29|el5軟件包是在RHEL 5.x/CentOS 5.x下使用|包適用的硬件平台i386|RPM包的類型
四.RPM工具的使用
RPM工具可以進行安裝、查詢、驗證、更新、刪除等操作。
4.1 rpm安裝軟件的功能
1.RPM的命令格式:rpm [參數] 軟件包,rpm的安裝參數有:
- -i 是install的意思, 安裝軟件包
- -v 顯示附加信息,提供更多詳細信息
- -V 校驗,對已經安裝的軟件進行校驗
- -h --hash 安裝時輸出####標記
2.使用rpm時,什么情況使用軟件包全名,什么時候使用軟件包名?
答:1.在安裝和更新升級時候使用全名;2.對已經安裝過的軟件包進行操作時,比如查找已經安裝的某個包,卸載包等 ,使用包名。
3.當我們使用rpm查找某個rpm安裝包的信息時,默認去目錄/var/lib/rpm下面進行搜索。當一個 rpm 包安裝到系統上之后,安裝信息通常
會保存在本地的 /var/lib/rpm/目錄下。
[root@node5 ~]# ls /var/lib/rpm
Basenames Conflictname __db.001 __db.002 __db.003 Dirnames Group Installtid Name Obsoletename Packages Providename Requirename Sha1header Sigmd5 Triggername
4.從本地安裝rpm安裝包
[root@node5 ~]# rpm -ivh telnet-0.17-64.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:telnet-1:0.17-64.el7 ################################# [100%]
5.從網上下載centos epel擴展源,然后安裝
#注釋:epel源是對centos7系統中自帶的 base源的擴展。
[root@node5 ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Retrieving http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Preparing... ################################# [100%]
Updating / installing...
1:epel-release-7-12 ################################# [100%]
6.安裝rpm包的時候,有時候需要解決依賴關系,這時候根據提示,優先安裝依賴包,再次安裝即可。
[root@node5 ~]# rpm -ivh mariadb-server-5.5.56-2.el7.x86_64.rpm
警告:/mnt/Packages/mariadb-server-5.5.56-2.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
mariadb(x86-64) = 1:5.5.56-2.el7 被 mariadb-server-1:5.5.56-2.el7.x86_64 需要
perl-DBD-MySQL 被 mariadb-server-1:5.5.56-2.el7.x86_64 需要
解決:
[root@node5 ~]# rpm -ivh /mnt/Packages/mariadb-5.5.56-2.el7.x86_64.rpm
[root@node5 ~]# rpm -ivh /mnt/Packages/perl-DBD-MySQL-4.023-5.el7.x86_64.rpm
[root@node5 ~]# rpm -ivh /mnt/Packages/mariadb-server-5.5.56-2.el7.x86_64.rpm
4.2 rpm查詢的功能
1.rpm查詢語法:rpm -q(query),常與下面參數組合使用
- -a(all) 查詢所有已安裝的軟件包
- -f(file)查詢系統文件名(查詢系統文件所屬哪個軟件包),反向查詢
- -i 顯示已經安裝的rpm軟件包信息,后面直接跟包名
- -l(list) 查詢軟件包中文件安裝的位置
- -p 查詢未安裝軟件包的相關信息,后面要跟軟件的全名
- -R 查詢軟件包的依賴性
#查詢zsh包是否安裝
[root@node5 ~]# rpm -q zsh
zsh-5.0.2-34.el7_8.2.x86_64
#查詢所有已安裝的軟件包
[root@node5 ~]# rpm -qa
......
libX11-1.6.7-2.el7.x86_64
kernel-3.10.0-693.el7.x86_64
setup-2.8.71-7.el7.noarch
......
#查詢所有已安裝包中帶rest關鍵字的包
[root@node5 ~]# rpm -qa | grep rest
rest-0.8.1-2.el7.x86_64
#查看find命令的路徑
[root@node5 ~]# which find
/usr/bin/find
#查看find命令的路徑
[root@node5 ~]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz
#查詢文件或命令屬於哪個安裝包
[root@node5 ~]# rpm -qf /usr/bin/find
findutils-4.5.11-5.el7.x86_64
#查詢已經安裝的rpm包的詳細信息或作用
[root@node5 ~]# rpm -qi hardlink
Name : hardlink
Epoch : 1
Version : 1.0
Release : 19.el7
Architecture: x86_64
Install Date: Fri 26 Apr 2019 05:10:21 PM CST
Group : System Environment/Base
Size : 16545
License : GPL+
Signature : RSA/SHA256, Fri 04 Jul 2014 09:53:40 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : hardlink-1.0-19.el7.src.rpm
Build Date : Tue 10 Jun 2014 02:26:04 PM CST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://pkgs.fedoraproject.org/gitweb/?p=hardlink.git
Summary : Create a tree of hardlinks
Description :
hardlink is used to create a tree of hard links.
It's used by kernel installation to dramatically reduce the
amount of diskspace used by each kernel package installed.
#查詢沒有安裝的rpm包的詳細信息或作用
[root@node5 ~]# rpm -qpi telnet-0.17-64.el7.x86_64.rpm
Name : telnet
Epoch : 1
Version : 0.17
Release : 64.el7
Architecture: x86_64
Install Date: (not installed)
Group : Applications/Internet
Size : 115888
License : BSD
Signature : RSA/SHA256, Fri 11 Aug 2017 04:04:43 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : telnet-0.17-64.el7.src.rpm
Build Date : Fri 04 Aug 2017 04:00:38 AM CST
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://web.archive.org/web/20070819111735/www.hcs.harvard.edu/~dholland/computers/old-netkit.html
Summary : The client program for the Telnet remote login protocol
Description :
Telnet is a popular protocol for logging into remote systems over the
Internet. The package provides a command line Telnet client
#查看rpm安裝后,將生成哪些文件
[root@node5 ~]# rpm -qpl telnet-0.17-64.el7.x86_64.rpm
/usr/bin/telnet
/usr/share/doc/telnet-0.17
/usr/share/doc/telnet-0.17/README
/usr/share/man/man1/telnet.1.gz
#查看已安裝的命令,生成了哪些文件
[root@node5 ~]# rpm -ql telnet
/usr/bin/telnet
/usr/share/doc/telnet-0.17
/usr/share/doc/telnet-0.17/README
/usr/share/man/man1/telnet.1.gz
4.3 rpm查看軟件包內容是否被修改
1.語法:rpm -V包名 或者 rpm -Vf 文件路徑
[root@node5 ~]# which telnet
/usr/bin/telnet
[root@node5 ~]# rpm -qf /usr/bin/telnet
telnet-0.17-64.el7.x86_64
#查看telnet命令內容是否被修改,沒有輸出,則沒有被修改
[root@node5 ~]# rpm -Vf /usr/bin/telnet
[root@node5 ~]# echo aaa >> /usr/bin/telnet
[root@node5 ~]# rpm -Vf /usr/bin/telnet
S.5....T. /usr/bin/telnet
[root@node5 ~]# rpm -V telnet
S.5....T. /usr/bin/telnet
#注釋:如果執行rpm -V 包名 出現的全是點,表示測試通過,命令內容沒有被修改
#出現下面的字符代表測試的失敗,即是命令內容被修改
5 — MD5 校驗和是否改變,你也看成文件內容是否改變
S — 文件長度,大小是否改變
L — 符號鏈接,文件路徑是否改變
T — 文件修改日期是否改變
D — 設備
U — 用戶,文件的屬主
G — 用戶組
M — 模式 (包含許可和文件類型)
? — 不可讀文件
#文件類型
c 配置文件
d 普通文件
g 不該出現的文件,意思就是這個文件不該被這個包所包含
l 授權文件(license file)
r 描述文件
2.查看系統中所有的rpm包及安裝的文件有沒有被黑客修改過?
#注釋:檢查時參考了/var/lib/rpm 目錄下的rpm數據庫信息
[root@node5 ~]# rpm -Va > rpm_check.txt
[root@node5 ~]# ll rpm_check.txt -h
-rw-r--r-- 1 root root 629 Oct 19 21:34 rpm_check.txt
[root@node5 ~]# cat rpm_check.txt
.......T. c /etc/httpd/conf/httpd.conf
S.5....T. c /etc/sysconfig/authconfig
....L.... c /etc/pam.d/fingerprint-auth
....L.... c /etc/pam.d/password-auth
....L.... c /etc/pam.d/postlogin
....L.... c /etc/pam.d/smartcard-auth
....L.... c /etc/pam.d/system-auth
S.5....T. c /etc/security/limits.conf
missing /var/run/wpa_supplicant
S.5....T. c /etc/vsftpd/vsftpd.conf
.....UG.. /var/ftp/pub
S.5....T. c /etc/sysconfig/iptables
.......T. /usr/aarch64-linux-gnu/include/rpc/netdb.h
S.5....T. /usr/bin/telnet
S.5....T. c /etc/rc.d/rc.local
.M....... /etc/rc.d/init.d/functions
S.5....T. c /etc/sysctl.conf
4.4 rpm卸載軟件的功能
1.卸載軟件的語法:rpm -e(erase) 包名
[root@node5 ~]# rpm -q telnet
telnet-0.17-64.el7.x86_64
[root@node5 ~]# rpm -e telnet
[root@node5 ~]# rpm -q telnet
package telnet is not installed
#有時候卸載的軟件包有依賴關系,所以加上--nodeps強制卸載軟件
[root@node5 ~]# rpm -e --nodeps lrzsz
4.5 rpm升級軟件的功能
1.語法:rpm -Uvh 包名
[root@node5 ~]# rpm -Uvh telnet-0.17-64.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:telnet-1:0.17-64.el7 ################################# [100%]