馬哥博客作業第四周 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