軟件包管理
rpm,yum,源碼編譯安裝
rpm
1、rpm工具的安裝、升級、卸載平時都是很少使用的。對於安裝來說,它經常需要認爲的解決依賴關係。yum經常用於安裝或升級軟件包
2、但是,雖然rpm的安裝功能很少使用,但rpm的查詢功能非常實用。
rpm -qf
rpm -ql
rpm -qRp
...
3、說到查詢,yum-utils包中的repoquery也很強大
rpm -ivhUe --nodeps --test --force --prefix
選項說明:
-i 表示安裝,install的意思
-v 顯示安裝信息,還可以"-vv"、"-vvv",v提供的越多顯示信息越多
-h 顯示安裝進度,以#顯示安裝的進度
-U 升級或升級包
-F 只升級已安裝的包
-e 卸載包,卸載也有依賴性,"--erase"
--nodeps 忽略依賴性強制安裝或卸載(no dependencies)
--test 測試是否能夠成功安裝指定的rpm包
--prefix 新路徑 自行指定安裝路徑而不是使用默認路徑,基本上都不支持該功能,功能極其簡單的軟件估計才支持重定位安裝路徑
--force 強制動作
--replacepkgs 替換安裝,即重新覆蓋安裝。
-q[p] -q查詢已安裝的包,-qp查詢未安裝的包。它們都可接下面的參數
-a 查詢所有已安裝的包,也可以指定通配符名稱進行查詢
-i 查詢指定包的信息(版本、開發商、安裝時間等)。從這裏面可以查看到軟件包屬於哪個包組。
-l 查詢包的文件列表和目錄(包在生產的時候就指定了文件路徑,因此可查未裝包)
-R 查詢包的依賴性(Required)
-c 查詢安裝後包生成的配置文件
-d 查詢安裝後包生成的幫助文檔
-f 查詢系統文件屬於哪個已安裝的包(接的是文件而不是包)
--scripts 查詢包相關的腳本文檔。腳本文檔分四類:安裝前運行、安裝後運行、卸載前運行、卸載後運行
1、rpm -qi查詢包的詳細信息
[root@centos7 tmp]# rpm -qi tree
Name : tree
Version : 1.6.0
Release : 10.el7
...
[root@centos7 tmp]# rpm -qi nginx
Name : nginx
Epoch : 1
Version : 1.16.0
...
2、rpm -qf查詢某個文件來自那個軟件包
[root@centos7 tmp]# rpm -qf /etc/nginx/nginx.conf
nginx-1.16.0-1.el7.ngx.x86_64
[root@centos7 tmp]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.60-1.el7_5.x86_64
3、rpm -ql列出某個包的相關文件(安裝時生成的文件)
repoquery -l nginx也可以
[root@centos7 tmp]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
...
4、rpm -e卸載,有依賴卸載不了
[root@centos7 tmp]# rpm -e rpm
error: Failed dependencies:
rpm = 4.11.3-35.el7 is needed by (installed) rpm-libs-4.11.3-35.el7.x86_64
rpm is needed by (installed) color-filesystem-1-13.el7.noarch
rpm = 4.11.3-35.el7 is needed by (installed) rpm-python-4.11.3-35.el7.x86_64
rpm >= 0:4.11.3-22 is needed by (installed) yum-3.4.3-161.el7.centos.noarch
rpm >= 4.1.1 is needed by (installed) createrepo-0.9.9-28.el7.noarch
rpm is needed by (installed) policycoreutils-2.5-29.el7.x86_64
5、rpm -e --nodeps 忽略依賴性,強制卸載
[root@centos7 tmp]# rpm -e rpm --nodeps
# 救援請參考:https://blog.51cto.com/14012942/2426136
# 救援模式注意事項:要指定系統的根安裝,如下所示
# [root@centos7 tmp]# rpm -ivh /run/initall/repo/rpm-4.11.3-35.el7.x86_64.rpm --root=/mnt/sysimage
[root@centos7 cd]# rpm --help
-r, --root=ROOT use ROOT as top level directory (default: "/")
6、rpm --import導入密鑰
7、查詢某個未安裝包的依賴性
rpm -qRp packagename
[root@centos7 ~]# repoquery -R nginx
8、提取包中的文件rpm2cpio
rpm2pcio 結合cpio -idv
rpm2cpio是將rpm轉換爲cpio格式歸檔文件的命令,有了cpio文件,就可以使用cpio命令對其進行相關的操作。
rpm2cpio package_full_name|cpio -idv dir_name
該命令可以修復誤刪的命令:刪除/bin/ls並修復
[root@xuexi cdrom]# which ls # 查找需要刪除的ls文件位置
alias ls='ls --color=auto'
/bin/ls
[root@xuexi cdrom]# rpm -qf /bin/ls # 查找ls命令屬於哪個包
coreutils-8.4-37.el6.x86_64
[root@xuexi cdrom]# rm -f /bin/ls # 刪除ls命令
[root@xuexi cdrom]# ls # ls命令已不可用
-bash: /bin/ls: No such file or directory
[root@xuexi ~]# yumdownloader coreutils # 下載所需的rpm包
[root@xuexi ~]# rpm2cpio coreutils-8.4-37.el6.x86_64.rpm | cpio -id ./bin/ls # 提取bin/ls到當前目錄下
[root@xuexi ~]# dir ~/bin # 使用dir命令查看已經提取成功,dir命令功能等價於ls
ls
[root@xuexi tmp]# cp bin/ls /bin/ # 複製ls命令到/bin下
[root@xuexi tmp]# ls # 測試,ls已經可用
實戰:tree命令刪除後如何恢復:
https://blog.51cto.com/14012942/2426136
實戰:刪除linux依賴庫後如何恢復:
https://blog.51cto.com/14012942/2426097
yum
1、/etc/yum.conf是yum的默認文件,裏面配置的也是全局默認項
7、yum group list 列出包組
[root@centos7 ~]# yum group list
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirror.jdcloud.com
* updates: mirror.lzu.edu.cn
Available Environment Groups:
Minimal Install
Compute Node
...
8、yum group info "包組名" 查看包組信息
[root@centos7 ~]# yum group info "Minimal Install"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirror.jdcloud.com
* updates: mirror.lzu.edu.cn
Environment Group: Minimal Install
Environment-Id: minimal
Description: Basic functionality.
Mandatory Groups:
+core
Optional Groups:
+debugging
9、yum group install "Development Tools安裝開發工具包
[root@centos7 ~]# yum group install "Development Tools"
10、卸載包組:yum group remove
11、createrepo創建倉庫
12、yum安裝mariadb-server,測時間
[root@centos7 dnf]# time yum install mariadb-server.x86_64 -y
Complete!
real 0m17.482s
user 0m6.337s
sys 0m3.311s
13、使用yum history undo卸載
[root@centos7 dnf]# yum history
Loaded plugins: fastestmirror, langpacks
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
9 | root <root> | 2019-08-03 20:19 | Install | 10
8 | root <root> | 2019-08-03 20:15 | Install | 11
7 | root <root> | 2019-08-03 20:07 | Install | 1
6 | root <root> | 2019-08-03 19:02 | Install | 5
5 | root <root> | 2019-08-03 09:15 | Reinstall | 1
4 | root <root> | 2019-08-02 16:30 | Install | 1
3 | root <root> | 2019-07-29 19:21 | Install | 4
2 | root <root> | 2019-07-29 14:14 | Install | 1 E<
1 | System <unset> | 2019-07-17 16:27 | Install | 1382 >
history list
[root@centos7 dnf]# yum history undo 9
14、dnf安裝mariadb,time側時間
[root@centos7 dnf]# time dnf install mariadb-server.x86_64 -y
Complete!
real 0m23.413s
user 0m9.023s
sys 0m4.995s
15、程序包編譯
- 源代碼->預處理->編譯->彙編->鏈接->執行
- c、C++ make項目管理器
- java:maven
16、yum源配置
1、mirrors.aliyun.com去下載
2、手動配
[base] # 倉庫ID,ID必須保證唯一性
name # 倉庫名稱,可隨意命名
mirrorlist # 該地址下包含了倉庫地址列表,包含一個或多個鏡像站點,和baseurl使用一個就可以了
#baseurl # 倉庫地址。網絡上的地址則寫網絡地址,本地地址則寫本地地址,格式爲“file://”後接路徑,如file:///mnt/cdrom
gpgcheck=1 # 指定是否需要簽名,1表示需要,0表示不需要
gpgkey= # 簽名文件的路徑
enable # 該倉庫是否生效,enable=1表示生效,enable=0表示不生效
cost= # 開銷越高,優先級越低
【repo配置文件中可用的宏:】
$releasever:程序的版本,對Yum而言指的是redhat-relrase版本。只替換爲主版本號,如Redhat6.5 則替換爲6
$arch:系統架構
$basharch:系統基本架構,如i686,i586等的基本架構爲i386
$YUM0-9:在系統定義的環境變量,可以在yum中使用3、切記,repodata這一級的目錄就是需要配置的baseurl
示例、手動配置阿里雲的epel源(最好備份原有的源文件)
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basharch
enabled=1
gpgcheck=0
實戰:配置基於httpd的yum源:
https://blog.51cto.com/14012942/2426285
17、yum常用命令
<font color=red>很多時候,yum 操作失敗的原因是repo配置錯誤,或者緩存未更新</font>
Usage: yum [options] COMMAND
List of Commands:
clean 清除緩存數據,如yum clean all
makecache 生成元數據緩存數據,如yum makecache
history 查看yum事務信息,yum是獨佔模式的進程,yum undo 可以撤銷某個操作
insall 安裝包
list 列出包,一般結合grep,如yum list all | grep nginx
provides 搜索給定的內容是誰提供的。如yum provides lsof,查lsof來自哪個包
resinstall 重新安裝,某個文件命令誤刪修復
search 搜索給定關鍵字的包
update 更新包
options:
-q, --quiet 安靜模式
-y, --assumeyes 對所有問題回答yes
--enablerepo=[repo] 啓用一個或多個倉庫,可用通配符通配倉庫ID
--disablerepo=[repo] 禁用一個或多個倉庫,可用通配符通配倉庫ID
--downloadonly 僅下載包,不安裝或升級。默認下載在yum的緩存目錄中,默認爲/var/cache/yum/$basearch/$releasever
源碼編譯
一、源碼編譯的步驟
首先拿到包要解壓
1.1、閱讀INSTALL/README,看看要怎麼安裝
1.2、解壓後目錄一般有configure文件,用於檢查環境,生成makefile
configure一般的參數
--prefix= :指定安裝的路徑
--sysconfdir= :指定配置文件目錄
--enable-feature :啓用某個特性
--disable-fecture :禁用特性
--with-function :啓用某功能
--without-function :禁用某功能
1.3、執行make進行編譯,主要是調用編譯器(gcc等)將源碼編譯爲可執行文件,通常會調用一些函數庫
1.4、make install 將上一步的編譯好的數據複製到指定目錄下面
二、源碼編譯實戰實戰
2.1、實戰
實戰:CentOS7編譯httpd-2.4.25:
https://blog.51cto.com/14012942/2427580
實戰:CentOS7腳本一鍵編譯和卸載httpd-2.4.25
https://blog.51cto.com/14012942/2427694
**實戰:源碼編譯cmatrix,實現*帝國的桌面