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