馬哥博客作業第四周 02

  • 2020 年 4 月 11 日
  • 筆記

模塊(庫)文件

查看二進制程序所依賴的庫文件

ldd /PATH/TO/BINARY_FILE

管理及查看本機裝載的庫文件

#加載配置文件中指定的庫文件
ldconfig
#顯示本機已經緩存的所有可用庫文件名及文件路徑映射關係
/sbin/ldconfig –p

配置文件:

/etc/ld.so.conf,
/etc/ld.so.conf.d/*.conf

緩存文件:

/etc/ld.so.cache
 

軟件包中的文件分類

二進制文件
庫文件
配置文件
幫助文件

範例:利用 cpio工具查看包文件列表

rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件

主流的程序包管理器

  redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager
  debian:deb文件, dpkg 包管理器

包管理器rpm

CentOS系統上使用rpm命令管理程序包
功能:
安裝、卸載、升級、查詢、校驗、數據庫維護
 
安裝

格式:

rpm {-i|–install} [install-options] PACKAGE_FILE…

選項:

-v: verbose
-vv:
-h: 以#顯示程序包管理執行進度

常用組合:

rpm -ivh PACKAGE_FILE …
 

rpm包安裝[install-options]

–test: 測試安裝,但不真正執行安裝,即dry run模式
–nodeps:忽略依賴關係
–replacepkgs | replacefiles
–nosignature: 不檢查來源合法性
–nodigest:不檢查包完整性
–noscripts:不執行程序包腳本
            %pre: 安裝前腳本 –nopre
            %post: 安裝後腳本 –nopost
            %preun: 卸載前腳本 –nopreun
            %postun: 卸載後腳本 –nopostun

包查詢

rpm {-q|–query} [select-options] [query-options]

[select-options]
-a:所有包
-f:查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作
[query-options]
–changelog:查詢rpm包的changelog
-c:查詢程序的配置文件
-d:查詢程序的文檔
-i:information
-l:查看指定的程序包安裝後生成的所有文件
–scripts:程序包自帶的腳本
 

#和CAPABILITY相關
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
–provides:列出指定程序包所提供的CAPABILITY
-R:查詢指定的程序包所依賴的CAPABILITY
 

常用查詢用法:

-qa
-q PACKAGE
-qi PACKAGE
-qc PACKAGE
-ql PACKAGE
-qd PACKAGE
-q –scripts PACKAGE
-qf FILE
-qpi PACKAGE_FILE
-qpl PACKAGE_FILE, …

包卸載

格式:

rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test]
PACKAGE_NAME …

注意:當包卸載時,對應的配置文件不會刪除, 以FILENAME.rpmsave形式保留

包校驗

在安裝包時,系統也會檢查包的來源是否是合法的
檢查包的完整性和簽名

rpm -K|–checksig rpmfile

在檢查包的來源和完整性前,必須導入所需要公鑰

範例:

rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”

軟件在安裝時,會將包里的每個文件的元數據,如:大小,權限,所有者,時間等記錄至rpm相關的數
據庫中,可以用來檢查包中的文件是否和當初安裝時有所變化

數據庫

rpm包安裝時生成的信息,都放在rpm數據庫中

/var/lib/rpm

可以重建數據庫

rpm {–initdb|–rebuilddb}
initdb: 初始化,如果事先不存在數據庫,則新建之,否則,不執行任何操作
rebuilddb:重建已安裝的包頭的數據庫索引目錄
 

yum和dnf

yum/dnf 是基於C/S 模式
yum 服務器存放rpm包和相關包的元數據庫
yum 客戶端訪問yum服務器進行安裝或查詢等
yum 實現過程
先在yum服務器上創建 yum repository(倉庫),在倉庫中事先存儲了眾多rpm包,以及包的相關的
元數據文件(放置於特定目錄repodata下),當yum客戶端利用yum/dnf工具進行安裝時包時,會自動
下載repodata中的元數據,查詢遠數據是否存在相關的包及依賴關係,自動從倉庫中找到相關包下載並
安裝。
yum服務器的倉庫可以多種形式存在:
fifile:// 本地路徑
http://
https://
ftp://

注意:yum倉庫指向的路徑一定必須是repodata目錄所在目錄

yum客戶端配置

yum客戶端配置文件

/etc/yum.conf #為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo: #為每個倉庫的提供配置文件

幫助參考: man 5 yum.conf

相關變量

yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號,如:8,7,6
$arch: CPU架構,如:aarch64, i586, i686,x86_64等
$basearch:系統基礎平台;i386, x86_64
$contentdir:表示目錄,比如:centos-8,centos-7
$YUM0-$YUM9:自定義變量

repo倉庫配置文件指向的定義:

[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意為隨機挑選,默認值
priority:按順序訪問
cost= 默認為1000

baseurl指向的路徑
阿里雲提供了寫好的CentOS和ubuntu的倉庫文件下載鏈接
http://mirrors.aliyun.com/repo/

CentOS系統的yum源

#阿里雲
https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
#華為雲
https://mirrors.huaweicloud.com/
#清華大學
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
 

EPEL的yum源

#阿里雲
https://mirrors.aliyun.com/epel/$releasever/x86_64

阿里巴巴開源軟件

https://opsx.alibaba.com/
 

注意:與之前的版本不同,CentOS 8 系統有兩個yum 源:BaseOS和AppStream ,需要分別設置兩個
倉庫

yum-confifig-manager命令

可以生成yum倉庫的配置文件及啟用或禁用倉庫,來自於yum-utils包

格式:

#增加倉庫
yum-config-manager –add-repo URL或file
#禁用倉庫
yum-config-manager –disable “倉庫名”
#啟用倉庫
yum-config-manager –enable “倉庫名”
 

yum命令

yum命令的用法:

yum [options] [command] [package …]
 
yum的命令行選項:

-y #自動回答為“yes”
-q #靜默模式
–nogpgcheck #禁止進行gpg check
–enablerepo=repoidglob    #臨時啟用此處指定的repo,支持通配符,如:”*“
–disablerepo=repoidglob #臨時禁用此處指定的repo,和上面語句同時使用,放在後面的生效</

顯示倉庫列表

yum repolist [all|enabled|disabled]
 

安裝程序包

yum install package1 [package2] […]
yum reinstall package1 [package2] […] #重新安裝

卸載程序包

yum remove | erase package1 [package2] […]

升級和降級

yum update [package1] [package2] […]
yum downgrade package1 [package2] […] (降級)

檢查可用升級:

yum check-update
 

查詢

查看程序包information:

yum info […]

查看指定的特性(可以是某文件)是由哪個程序包所提供:

yum provides | whatprovides feature1 [feature2] […]

以指定的關鍵字搜索程序包名及summary信息

yum search string1 [string2] […]

查看指定包所依賴的capabilities:

yum deplist package1 [package2] […]
 

倉庫緩存

清除目錄/var/cache/yum/緩存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

構建緩存:

yum makecache
 

查看yum事務歷史

yum 執行安裝卸載命令會記錄到相關日誌中

日誌 文件:

/var/log/yum.log
/var/log/dnf.log

日誌命令

yum history [info|list|packages-list|packages-info|summary|addon
info|redo|undo|rollback|new|sync|stats]
 

安裝及升級本地程序包

yum localinstall|install rpmfile1 [rpmfile2] […]
yum localupdate|update rpmfile1 [rpmfile2] […]

包組管理的相關命令

yum grouplist [hidden] [groupwildcard] […]
yum groupinstall group1 [group2] […]
yum groupupdate group1 [group2] […]
yum groupremove group1 [group2] […]
yum groupinfo group1 […]
 

實現私用 yum倉庫

下載所有yum倉庫的相關包和meta 數據

#CentOS 8 dnf 工具集成
dnf reposync –help #查看幫助
#默認只下載rpm包,不下載meta數據,需要指定–download-metadata 才能下載meta
dnf reposync  –repoid=REPOID –download-metadata -p /path
#CentOS 7 以前版本,reposync工具來自於yum-utils包
reposync –repoid=REPOID –download-metadata -p /path

創建私有yum倉庫:

createrepo [options] <directory>
 

DNF 介紹

DNF,即DaNdiFied,是新一代的RPM軟件包管理器。DNF 發行日期是2015年5月11日,DNF 包管理
器採用Python 編寫,發行許可為GPL v2,首先出現在Fedora 18 發行版中。在 RHEL 8.0 版本正式取代
了 YUM,DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括用戶體驗,內存佔用,依賴分
析,運行速度等

配置文件:

/etc/dnf/dnf.conf

倉庫文件:

/etc/yum.repos.d/ *.repo

日誌:

/var/log/dnf.rpm.log
/var/log/dnf.log
v>

DNF 使用幫助:man dnf
dnf 用法與yum一致
 

yum Troubleshooting

yum 和 dnf 失敗最主要原因:
yum的配置文件格式或路徑錯誤
解決方法:檢查/etc/yum.repos.d/*.repo文件格式
yum cache
解決方法:yum clean all
網絡不通:
解決方法:網卡配置
 

編譯安裝

#1 安裝相關的依賴包
yum install gcc make
#2 下載源碼並解壓
tar xvf tree-1.8.0.tgz
#3 進入解壓縮的目錄,README和INSTALL
cd tree-1.8.0/
cat README
cat INSTALL
#4 修改源碼的版本號
sed -i ‘s#v1.8.0#v.18.0#’ tree.c
#5 編譯準備
vim Makefile
prefix = /apps/tree
#6 編譯make
#7 安裝
make install
#8 修改PATH變量
echo ‘PATH=/apps/tree/bin:$PATH’ > /etc/profile.d/tree.sh
. /etc/profile.d/tree.sh
#9 驗證結果
tree –version
 

dpkg 包管理器

dpkg 常見用法

#安裝包
dpkg -i package.deb
#刪除包,不建議,不自動卸載依賴於它的包
dpkg -r package
#刪除包(包括配置文件)
dpkg -P package
#列出當前已安裝的包,類似rpm -qa
dpkg -l
#顯示該包的簡要說明,類似rpm –qi
dpkg -l package

#列出該包中所包含的文件,類似rpm –ql
dpkg -L package
#搜索包含pattern的包,類似rpm –qf
dpkg -S <pattern>
#列出該包的狀態,包括詳細信息,類似rpm –qi
dpkg -s package
#配置包,-a 使用,配置所有沒有配置的軟件包
dpkg –configure package
#列出 deb 包的內容,類似rpm –qpl
dpkg -c package.deb
#解開 deb 包的內容
dpkg –unpack package.deb
#列出系統上安裝的所有軟件包
dpkg -l
#列出軟件包安裝的文件
dpkg -L bash
#查看/bin/bash來自於哪個軟件包
dpkg -S /bin/bash
#安裝本地的 .deb 文件
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
#卸載軟件包
dpkg -r zip
 
 

apt

查看幫助:apt help

apt與apt-get命令對比
 

apt 特有的命令

apt list 列出包含條件的包(已安裝,可升級等)
apt edit-sources 編輯源列表

APT包索引配置文件

/etc/apt/sources.list
/etc/apt/sources.list.d

可以修改上面文件為國內的安裝源,提高速度

參考鏈接:https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.53322f70fghx5
6
 
apt命令操作(如安裝和刪除軟件包)日誌文件

/var/log/dpkg.log
 

ubuntu建議安裝的常用包

apt purge ufw lxd lxd-client lxcfs liblxc-common
apt install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs
common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc
openssh-server iotop unzip zip