LIUNX中程序包管理
LIUNX 中程序包管理
此内容仅为笔记,这一两天给会重新整理补充上操作示例。
一、基础
1、程序描述:
第一种描述: 程序 + 数据
第二种描述: 算法 + 数据结构
2、程序的组成部分:
1、二进制程序
2、配置文件,可以被查看其内容的文件
3、库文件,库文件不能独立执行,只能被调用执行
4、帮助文件,可以被查看其内容的文件。
解压 rpm 软件包
rpm2cpio 包文件 | cpio -id
3、程序包管理器描述:
最早的包管理器应用于 Debian 上,dpkg 为第一个包管理工具。
程序的组成文件打包 成一个或者有限几个文件
安装
卸载
查询
升级
校验
1> 包组成(每个包都有)
包内的文件
元数据,如:包的名称 版本 依赖性 描述等
可能会有包安装或卸载时运行的脚本
2> 数据库(公共) /var/lib/rpm 自动更新
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
4、各个发行版本的程序包管理器和前端管理工具
发行版 包管理器 包前端管理工具
Debian: deb apt-get/apt
ubuntu: deb apt-get/apt
RedHat: rpm yum/dnf
centos: rpm yum/dnf
5、程序编译方式:
动态编译:编译时不会把库文件编译进程序,编译好的程序不能独立运行,需要调运库文件,体积小。
静态编译:编译时会把需要用到的库文件都编译进程序,编译后程序没有库也可以独立运行,体积大。
6、命令存放路径:
普通命令:/bin /usr/bin /usr/local/bin
管理命令:/sbin /usr/sbin /usr/local/sbin
库文件: /lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
7、命令行展开
命令行展开优先级
1、把命令行分成单个命令词
2、展开别名
3、展开大括号的声明 {}
4、展开波浪线声明 ~
5、命令替换 $() 或··
6、再次把命令行分成命令词
7、展开文件通配符
8、准备 I/O 重定向
9、运行命令
8、ABI 二进制编程接口
windows: PE
LINUX: ELF
虚拟化技术
LINUX: WINE
windows: Cygwin
9、LINUX 中源文件生成执行文件的过程
预处理:gcc -E hello.c -o hello.i 对 hello.c 文件进行预处理,生成 hello.i 文件
编译:gcc -S hello.i -o hello.s 对预处理文件 hello.i 进行编译,生成汇编文件 hello.s
汇编:gcc -C hello.s -o hello.o 对汇编文件 hello.s 进行编译,生成目标文件 hello.o
链接:hello.o -o hello 对目标文件 hello.o 文件进行链接,生成可执行文件
gcc hello.c -o hello2 一步到位,直接生成执行文件
选项:
-c 源文件 把源文件编译成目标文件
-o 新名称 目标文件 1 目标文件 2 把多个目标文件链接成可执行文件,并以新名称命名
-O 此选项主要用于优化编译
-l 库文件名 指定编译时需要的库文件,此库文件名不用写开头字母 lib 和结尾字母 so
-L 库文件路径 路径为目录,指定库文件在什么位置搜索。省略的话默认在 /lib /lib64 /usr/lib /usrlib64 等位置搜索
-I 头文件 指定编译时需要用到的头文件
10、软件包名
软件名 - 软件版本号 - 编译版本号 - 适用平台 - 后缀
适用平台
noarch 无论任何机型都行
i386 只要是 x86 平台的架构都支持
i686 32 位平台
x86_64 64 位平台
示例: 查看目录内各个平台架构的数量
ls *.rpm | rev | cut -d . -f2 |rev | sort | uniq -c
练习题:在出现进度条出现的时候按 esc 键,进入光盘,然后进入救援模式 进行恢复 被删除的基础库文件 /lib64/libc.so.6
11、杂项
ldconfig 命令
此命令会更具 /etc/ldconfig 配置文件中记载目录中的库文件加载入缓存中,以提高调用程序的执行速度
-p 显示已经加载到内存中的库文件
autofs 工具可以自动挂在 /misc/cd 目录下
yum -y install autofs
systemctl enable --now autofs
二、软件包和包管理器
rpm 命
此命令主要是通过数据库记录的方式来管理软件的安装、卸载、升级、查询、校验等等。
rpm 软件的数据包保存在 /var/lib/rpm 目录中,如果此目录中的数据损坏可以通过 rpm --rebuilddb 重建数据库
选项:
-i --install 安装
-v 显示详细进度
-h 显示百分比,一个 #表示 2%
-q 查询
-qa 列出所有已安装的包的,依赖于 /var/lib/rpm 内的数据库
rpm -qa "*http*" 最好加上双引号,怕出问题。可以直接模糊搜索
-qi 查询某个已安装过的安装包的信息
-qpi 查询指定未安装的安装包的信息
-ql 查询指定已安装的安装包的安装文件列表
-qpl 查询指定未安装的安装包的要安装文件列表
-qf 查询某个命令或文件来自于哪个安装包。很有用
-q --whatprovides /PATH/TO/COMMAND 查询某个命令由哪个安装包所提供
-q --whatrequires 查询指定的安装包被哪个包所依赖
-qc 查询指定安装包的配置文件
-qd 查询指定安装包的帮助文档
-q --changelog 查询指定安装包的变更历史
-q --scripts 查询指定安装包的脚本
-q --provides 查询指定安装包的提供了哪些依赖性
安装脚本分为:
安装前 preinstall
安装后 postinstall
卸载前 preuninstalll
卸载后 postuninstalll
-U 或 --Update 升级或安装软件包
-F 或 --Freshen 只升级,如果没有不安装
-e --erase 卸载,如果卸载的时候别的包,依赖于要下载的包,就卸载不了
--root= 指定根目录
--nodeps 忽略依赖性,强行安装卸载
--force 强制安装
--replacepkgs 重装 和 force 差不多,多用于重新安装老版本软件
包校验
--import 导入密钥
-K 或 --checksig 检查签名
-V 查询文件是否有修改
-Va 检查所有安装包,看看哪些包被修改过
S file size differs 文件大小是否被改变
M modediffers 文件的类型或文件属性是否被改变
5 MD5
D device major/minor number 设备的主次代码号是否被修改
L readlink path 软连接指向路径是否被修改
U user ownership 属主是否被修改
G group ownership 属组是否被修改
T mtime differ 文件的 mtime 是否被修改
P
c 配置文件 config file
d 文件 documentation
g 鬼文件,通常时该文件不被某个软件所包含,较少发生 ghost file
l 授权文件 license file
r 自述文件 read me
yum 命令
同一台电脑上,只能运行一个 yum。yum 的日志文件是 /var/log/yum.log centos8:/var/log/dnf.log
命令的选项优先级高于配置文件
-y 不询问,自动安装
-q 或 --quiet 静默安装
install 安装
reinsatll 重新安装
remove 卸载
update 升级
history 安装历史
history info # 具体查看安装的几个文件
history undo # 卸载指定第几次操作
history redo # 重新安装指定的第几次操作
list 列表
repolist 仓库列表
search 搜索
deplist 查询依赖关系
info 查看软件信息
repolist [all] 显示 yum 源列表
--enablerepo=* 临时启用指定某个源
--disablerepo=* 临时禁用指定某个源
--showduplicates 显示重复的源
--noplugins 禁用所有插件
clean all 清理缓存
provides /PATH/TO/COMMAND 查询某个命令是由哪个安装包提供
--nogpgcheck 禁止检查 gpgcheck,即使配置文件中指定了需要检查,命令行的优先级高于配置文件
包组
安装卸载包组在引用包组名的时候需要加上引号
groupinstall 安装包组
groupupdate 包组升级
grouplist 查询包组列表
groupremove 包组卸载
groupinfo 查询包组的信息
yum 的 repo 配置文件中的变量
$releasever 当前 OS 的发行版的主版本号 如 6 7 8
$arch 平台 如:i386 x86_64
$basearch 基础平台 如:1386 ppc arm
createrepo 命令
createrepo [options] <directory>
--basedir path 用户一定输出 repodata 的位置。常用于指向软件包的父目录
dpkg 包管理器
-i 安装
dpkg -i package.deb
-r 不完全卸载
dpkg -r package.deb
-l 已安装包的列表
dpkg -l
-L PACKAGE 列出软件包所包含的文件, 相当于 rpm -ql
-S FILE 查询某个文件属于哪个包, 相当于 rpm -qf
-a 配置所偶没有配置的软件包
-c
apt 命令
包前端管理工具,类似 yum 命令。debian 系统的软件包前端管理工具。之前的叫 apt-get
apt install
apt remove
apt purge
apt update
apt upgrade
apt search
apt show
三、仓库
仓库一般由包文件、包文件元数据组成。客户端会先下载元数据下载到本地缓存中。
然后校验元数据,看看元数据是否下载有无问题。
根据元数据内信息再到仓库中下载对应的各种包文件和依赖包文件。
最后安装。
企业中可以单独新建一个软件仓库服务器。通过网络服务(http https ftp) 共享给局域网内计算机远程安装。
本地计算机需要配置仓库客户端
centos 8 中由两个软件仓库 Base 仓库和 AppStream 仓库
repodata 元数据存放目录
Packages 软件包存放目录
关于仓库路径就是 repodata 所在的父目录的绝对路径就是仓库路径
仓库配置文件必须放在 yum.repo.d 目录下。后缀必须是.repo
仓库元数据存放路径 /var/cache/yum
yum.conf(centos7) 配置文件 {
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
}
dnf.conf(centso8)配置文件 {
gpgcheck=1 是否安装前检测签名
installonly_limit=3 并发安装
clean_requirements_on_remove=True 安装后清空软件
best=True 如果多个仓库中某个软件由多个版本,默认指定安装最新版本
}
repo 配置仓库 {}
[] 中括号内的是仓库 ID,必须项
name=Base 仓库名
mirrorlist= 仓库路径,
baseurl= 仓库路径,建议使用国内
gpgcheck=1 校验包签名
enabled=1 是否启用仓库,如果不写,默认是启用的
gpgkey= 签名保存路径
创建私有仓库
yum -y install httpd
systemctl enable --now httpd
mkdir /var/www/html/centos/8
mount /dev/sr0 /var/www/html/centos/8
用于同步仓库中的软件和元数据
dnf reposync --repoid=REPOID --download-metadata -p /path centos8
reposync --repoid=REPOID --download-metadata -p /path centos7
creatrepo /var/www/heml/epel/ 手工创建元数据
--basedir 指定 repodata 存放位置
四、源码编译安装
./configure 最终目的是生成 Makefile 文件
1、通过选型传递参数,指定安装路径、启用特性等,执行时会参考用户的指定的选项以及模板文件 Makefile.in 生成 Makefile
2、检查依赖到的外部环境,如依赖的软件包
选项:
--prefix=PATH/TO/SOMEDIR 指定总安装目录
--sysconfdir=DIR 指定配置文件安装目录
备注:
autoconf 命令,用来生成 configure 脚本。部分软件没有 configure 脚本,需要事先自己手工生成,然后再去执行./configure 等后续编译安装步骤,也可能已经实现提供号了 Makefile 文件
automake 命令,用于生成 Makfiel.in 模板文件
make
根据上一步生成的 Makefile 文件,检测依赖环境,进行构建应用程序
执行 make 命令之前一定要进入到解压目录,只有在解压目录才能执行成功 make
make 命令
选项:
-j # 如果软件较大,可以指定多个 CPU 同时工作
备注:
make 命令这一步也会检查环境依赖配置,一般情况下是很顺利,如果这一步检测依赖环境报错,
可能说明上一步 configure 配置处的 Makefile 文件有问题,需要删掉整个文件夹,重新来。要不会出现莫名其妙的问题。
make install
复制文件到相应路径
make install 命令会自动创建目录。不用手工创建
可以通过 README INSTALL 文件获取安装帮助
开法工具:make gcc
开发环境:开发库(gblic: 标准库) 头文件
系统通过修改 /etc/man_db.conf 文件指定新软件帮助文件的路径。以后就能直接使用 man 帮助了
五、备注
生产环境一般是最小安装,推荐安装软件明细。
gcc
make
gcc-c++
glibc glibc-devel
pcre pcre-devel 与正则表达式相关的包
openssl openssl-devel 与 openssl 加密相关的包
systemd-devel
zlib-devel 与压缩相关的包
vim
lrzsz 传输文件工具,xshell 给主机传送文件需要依赖此包,它提供了 rz 命令
tree
tmux screen 窗口工具。在断开链接后不会终止
lsof
tcpdump 抓包工具
wget 下载工具
net-tools 网络工具
iotop io 的检测工具
bc bzip2 zip unzip
nfs-utils
man-pages