马哥博客作业第四周 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