Linux笔记——软件包管理
软件包管理,就是对Linux操作系统的软件及安装包进行管理,比如下载、安装、卸载、删除等,等同于Windows控制面板->软件管理。
一、软件包分类
- 二进制包——已经编译好的,如rpm包
- 源代码包——需要先编译,才能进行安装和运行的,如.tar.gz包
- 脚本——shell脚本或Java脚本
二、Linux软件包管理工具
- RedHat系列(RedHat,Fedora,Centos,红旗Linux等):rpm , yum
- Debian系列(Debian,Ubuntu): apt
三、RPM包管理
使用rpm安装软件包之前,首先要获取二进制安装包。获取方式有以下两种:
- 从安装光盘获取,如果该安装包是安装光盘所涵盖的
- 从网络上获取二进制软件安装包
光盘以文件的方式存储在/dev目录下(/dev/cdrom),但是这类文件不能直接访问和调用,需要先挂载到某个挂载点(简言之,就是一个空目录)。
1. 在Linux里面,所有东西都是文件。
2. 习惯上,把临时挂载的一些文件系统都放在/mnt下面。比如说光盘、软盘、U盘等挂载点,习惯性放在/mnt目录下。当然也可以自己决定放在哪个目录下,放在哪个目录下就要在哪个目录自己创建一个空目录。建议使用/mnt目录,/mnt是系统已经存在的缺省的目录,在该目录下创建一个空目录。
3. 有了挂载点之后,通过挂载指令mount,可以将/dev里面的文件指向到这个挂载点,接下来可以访问挂载点里的内容,就等同于访问光盘里的内容了。
3.1 挂载光盘
参考我的上一篇笔记:Linux笔记——挂载光盘
3.2 安装命令
rpm -ivh [选项] /mnt/cdrom/Packages/[软件包全名]
选项有:
- --excludedocs :不安装软件包中的文档文件
- --prefix <PATH>:将软件包安装到由PATH指定的路径下
- --test:只对安装进行测试,并不实际安装
- --replacepkgs:覆盖软件包(在软件包已安装的时候)
- --replacefiles:覆盖文件(在出现文件冲突的时候)
- --nodeps:忽略依赖关系安装(忽略后安装,十有八九运行不了)
选项说明:
--prefix 指定软件包安装路径其实意义不大,因为大多数rpm包都不允许改变它的安装目录,很多rpm制作者在生成该rpm包的时候都已经规定了这个软件包的文件存放的Linux相对应的目录了,我们是改变不了的。
很多rpm包的制作者已经规定了软件包的安装目录,并不会让用户管理起来很麻烦,因为Linux没有Windows中注册表的概念,也不会把软件包放的到处都是,Linux对这方面的管理非常的规整,在安装的时候指定相应的目录,在卸载的时候都会相应地把它卸载掉。
软件包的默认安装路径可以查询到,命令:rpm -ql [已安装软件名],rpm -qlp [未安装软件全名]
--test 在安装前测试一下,主要测试的是这个软件包和哪些软件包有依赖关系、软件包安装的时候会出现哪些问题(文件包是否已经安装,安装的时候是否会发生冲突)等。在安装大型服务的时候要先用这个测试一下,把反应的问题先解决。
安装的三种情况:
软件包已被安装: 解决办法:a.已经安装,不用再安装;b.虽然已经安装,但是在使用的过程中不小心删掉了一些文件,通过覆盖安装修复。此时需要加上选项“--replacepkgs”。
文件冲突:
如果要安装的软件包中有一个文件已经在安装其他软件包时已经安装了,会出现一下错误信息:
出现文件冲突,就会停止安装。
解决办法:
文件覆盖,使用选项“--replacefiles”,一般文件覆盖就可以解决该类问题。
如果该软件包已安装,还要再加上覆盖安装选项“--replacepkgs"。
未解决依赖关系:
RPM软件包可能依赖于其他软件包,在安装了那些依赖软件包之后才能安装该软件包。
解决办法: a.最好的办法还是先安装那些依赖包,然后再安装我们想安装的软件包。 b.使用强制安装选项“--nodeps",但是强制安装忽略了那些依赖包,可以安装成功,但是一般运行不了。
安装产生的文件的路径:
- Linux系统中,配置文件一般会放在/etc目录下;
- /usr/bin,/usr/sbin,/bin,/sbin下一般放的都是命令;
- /usr/share/doc下放文档;
- /usr/libexec下放库文件;
- /usr/share/man下放帮助;
- /var下放临时文件。
Linux安装软件包的时候,相同类型的文件会放在相同目录下。
软件安装的时候,如果与其他软件包有依赖关系,需要先安装有依赖关系的软件包,再安装该软件包。
1. 在使用rpm工具时,有时需要使用到软件全名,有时只需要知道软件名就可以了,一般在安装和更新升级的时候使用全名,对已经安装过的软件包进行操作时,比如查询某个已经安装的软件包,或者卸载某个已安装的软件包用软件名即可。
2. /mnt/cdrom:挂载光盘点
3. /mnt/cdrom/Packages:该目录下存放光盘文件中所涵盖的各种二进制安装包
什么是软件包全名?
例如:软件包全名:sudo-1.7.2p1-5.el5.i386.rpm
名称 sudo 1.7.2p1 5 el5 i386 含义 软件名 版本号 第n次发布 操作系统版本 硬件平台
3.3 卸载命令
rpm -e [软件名] #卸载软件
rpm -e --nodeps [软件名] #忽略依赖关系强行卸载
3.4 查询命令
格式:rpm -q [选项]
查询选项有两种子设置:包选择和信息选择。
设置 | 选项 | 含义 |
---|---|---|
包选择 | -a | 查询所有已安装的软件包 |
-f | 查询文件所属软件包 | |
-p | 查询一个没有安装的软件包 | |
信息选择 | -i | 显示软件包信息 |
-l | 显示软件包中的文件列表 | |
-d | 显示被标注为文档的文件列表 | |
-c |
显示被标注为配置文件的文件列表 |
rpm -q sudo #查询sudo有没有安装
rpm -qa | grep samba #在所有的已安装的软件中查询samba安装了哪些rpm -qf <file> #查询文件所属软件包rpm -qi [软件名] #查询已安装软件包信息
rpm -qip [软件包全名] #查询未安装软件包信息rpm -ql [软件名] #查询已安装软件包含的文件列表
rpm -qlp [软件包全名] #查询未安装软件包含的文件列表rpm -qd [软件名] #查询已安装软件包帮助文档
rpm -qdp [软件包全名] #查询未安装软件包帮助文档rpm -qc [软件名] #查询已安装软件包配置文档
rpm -qcp [软件包全名] #查询未安装软件包配置文档
rpm -qf [文件] 常见使用情形:
情形1:我们在安装完系统之后,系统或者系统安装的某一个软件包中的文件丢失了,而我们又没有备份,如果想恢复,就需要知道这个文件隶属于哪一个软件包,然后我们可以通过覆盖安装这个软件包来恢复该软件。
情形2:我们在清理Linux服务器的时候,不知道这个文件属于哪个文件包,是干什么用的,使用这个选项可以获取这些信息
情形3:如果一些配置文件丢失了,也没有备份,那么通用的配置文件可以从其他人的Linux系统上复制过来;还可以从安装光盘上通过二进制包把配置文件恢复,那么我们就要知道配置文件所属的rpm包是哪个。
情形4:rpm -qf可以查找任何一个文件属于哪一个软件包,不管是配置文件还是命令,如rpm -qf /bin/systemctl
3.5 升级命令
rpm -Uvh [软件包全名]
3.6 校验命令
rpm -V [软件名]
校验后,下面的字符代表特定检查的失败:
5:文件的md5校验值
S:文件大小
L:链接文件
T:文件的修改时间
D:设备文件
U:文件的用户
G:文件的用户组
M:文件的权限
其实这些参照是rpm在安装这些软件包到系统的时候,会自动生成一个rpm库,通过与库的比较,得到这些值。
常见使用情形:
1. 一个软件包包含若干文件,如果某个文件因黑客入侵、用户误操作被修改,那么我们如何知道哪个文件被修改了呢?——通过rpm -V 校验,查看软件包中的哪些文件发生了哪些变化。
2. 当我们缺失了某个软件包的文件时,我们通过各种途径获取到该文件,并将其放到指定位置后,可以使用rpm -V 检验,如果改文件只是时间有所改变的话,说明找的文件没有问题,如果还有其他属性被更改的话,那么找到的这个文件还是有问题的。
3.7 软件包文件提取命令
最好先新建一个临时目录,存放解压后的文件。
#解压所有文件到当前目录
rpm2cpio /mnt/cdrom/Packages/initscripts-9.49.53-1.el7.x86_64.rpm | cpio -idv
#解压指定文件到当前目录
rpm2cpio /mnt/cdrom/Packages/initscripts-9.49.53-1.el7.x86_64.rpm | cpio -idv ./etc/inittab
使用情形举例:假设/etc/initab文件丢失且没有备份,如何恢复?
解:先查询该文件所属软件包,然后新建一个目录存放解压后的文件,使用上面命令将光盘中的软件包中指定文件解压到该目录,再将该目录复制到文件对应的地方,最后可以用校验查看该文件信息是否有问题,若没有问题,可直接使用。
3.8 应用举例
1.在编辑~/.vimrc文件时,想注释掉其中一行,用#注释后保存退出,之后用vi 打开其他文件,都会报错,这个问题如何解?
解决思路:一是可以man查看帮助,二是每个软件安装之后,会有很多文档也一并安装了,有一些会提供软件使用示例文档供使用者参考,可以尝试去找这些文档,看官方的例子,可解决这类问题。
解决方法:
首先,查看系统中安装了哪些vim的软件,因为有一些软件包的名字可能不是vim,而且也可能不止对应一个安装包,可使用rpm -qa | grep vim查看;
[root@centos01 Packages]# rpm -qa | grep vim
vim-minimal-7.4.629-7.el7.x86_64
vim-filesystem-7.4.629-7.el7.x86_64
vim-common-7.4.629-7.el7.x86_64
vim-enhanced-7.4.629-7.el7.x86_64
然后,查看这些软件包分别有哪些文档,常见的示例文档会伴有example字样,可查看有没有这类文档;
[root@centos01 Packages]# rpm -ql vim-minimal vim-filesystem vim-common vim-enhanced | grep example
/usr/share/vim/vim74/gvimrc_example.vim
/usr/share/vim/vim74/macros/urm/examples
/usr/share/vim/vim74/vimrc_example.vim
进入vimrc_example.vim查看;
发现注释使用”,所以之前用#会报错。重新修改~/.vimrc文件即可解决问题。
1 set nu2 "map ^P I#<Esc>
2. 在操作时不小心将/etc/inittab文件删除了,且没有备份,如何恢复?
解决思路:去找对应的软件包,并解压里面的文件,最后将这个文件复制到系统原来的地方。
解决方法:
首先,查看/etc/inittab文件隶属于哪个软件包;
[root@centos01 Packages]# rpm -qf /etc/inittab
initscripts-9.49.53-1.el7.x86_64
然后,新建一个临时目录,去挂载光盘文件的地方解压该软件包中的/etc/inittab文件到临时目录;
[root@centos01 /]# mkdir /backup
[root@centos01 /]# cd /backup/
#cpio -idv中选项d的意思是保留原文件结构,原来的inittab文件在/etc下面,提取的时候还要是这个文件结构
[root@centos01 backup]# rpm2cpio /mnt/cdrom//Packages/initscripts-9.49.53-1.el7.x86_64.rpm | cpio -idv ./etc/inittab
./etc/inittab
3046 块
[root@centos01 backup]# ls
etc
[root@centos01 backup]# ls etc
inittab
四、YUM管理
4.1 应用yum的好处
- 自动解决软件包依赖关系
- 方便的软件包升级
4.2 yum使用
功能 | 使用 | 备注 |
---|---|---|
安装 | yum install sudo | yum install sudo -y |
检测升级 | yum check-update sudo | |
升级 | yum update sudo | |
软件包查询 | yum list | more | 在yum源里查找,若没安装的,状态显示updates;若已安装,显示@anaconda. |
yum list updates | 列出所有可更新的软件包 | |
yum list installed | 列出所有已安装的软件包 | |
软件包信息 | yum info sudo | |
卸载 | yum remove sudo | yum remove sudo -y |
帮助 | yum -help、man yum |
4.3 yum与rpm比较
- 查询本地系统上有没有安装某个软件,用rpm比yum快速,因为rpm是在本地找,而yum是在yum库里找,yum库大耗时久。
- yum更新的时候,在yum库里查找新版本更新,且yum库是官方可信任的;而rpm更新的时候,如果光盘上没有可更新的软件包,需要去网络上下载安装包,然后用rpm命令更新。
五、源代码包管理
5.1 源代码包安装优点:
- 给用户提供更多的使用空间:二进制包没有给使用者提供空间去配置;而源代码包安装的时候用户可以指定很多的配置。几乎所有的知名软件发布的安装包都是以源代码包的形式,一堆源代码打包成一个文件,好处在于如果充分理解这个源代码,可以自己修改代码,灵活度很高,定制度很高,所以很多企业对性能、配置、应用要求很高的话,会倾向于选择源代码包。
- 有广泛的适用性:二进制包指定平台,而源代码包不指定平台。在不同的平台上配置的过程中会获取平台的信息,然后安装。
5.2 源代码包常用格式:
- .tar.gz
- .tar.bz2
5.3 源代码包安装过程:
- 先去网络上下载源代码包
- 解压解包
- 进入解包目录
- 配置
- 编译
- 安装
5.4 源代码包安装举例:proftpd安装
软件下载地址:The ProFTPD Project: Home (下载stable下的,稳定版本)
解压解包: tar -xzvf proftpd-1.3.8.tar.gz (这个源代码包名中不含平台信息,因为不同的平台都可以用)
[root@centos01 test]# ls | grep proftpdproftpd-1.3.8.tar.gz[root@centos01 test]# tar -xzvf proftpd-1.3.8.tar.gz
解压后进入目录:cd proftpd-1.3.8
[root@centos01 test]# cd proftpd-1.3.8/[root@centos01 proftpd-1.3.8]# lsacconfig.h contrib locale README.cygwin RELEASE_NOTESaclocal.m4 COPYING ltmain.sh README.FreeBSD sample-configurationsChangeLog CREDITS m4 README.LDAP srcconfig.guess doc Makefile.in README.md stamp-h.inconfig.h.in include Make.rules.in README.modules testsconfig.sub INSTALL modules README.ports utilsconfigure install-sh NEWS README.Solaris2.5xconfigure.in lib README.AIX README.Unixware
这是一个标准的源代码包,解压完之后发现有一堆源代码文件和说明文件,源代码包有一个典型的特征:在源代码解包目录下里有一个可执行脚本configure,用户使用该脚本进行配置。
配置:./configure --prefix=/usr/local/proftpd
1. 配置的过程就是收集系统信息的过程,源代码包没有指定硬件平台和操作系统,是因为这些信息是在配置的过程中从当前系统获取的,所以源代码包可以支持各种平台的安装。
2. 配置之后会生成许多makefile文件,这些makefile文件通俗的讲就是搜集系统信息,为后续的编译做准备。
3. prefix选项是指定软件安装的路径。
4. 源代码包没有专门的卸载工具,所以指定安装路径是为了之后卸载方便。Linux通常将源代码包安装路径选择/usr/local目录下对应软件包目录。
编译:make
编译就是把之前搜集到的信息和源代码包里的源代码编译成可执行文件,需要编译C的工具,比如gcc.
安装:make install
把编译生成的文件拷贝到指定的目录,并生成一些相应的文件。
若需要卸载使用源代码包安装的软件,可通过命令:kill 'proftpd' |
六、脚本安装管理
6.1 脚本安装特点
源代码包安装复杂,对新用户不友好,所以有一些软件会采用脚本安装的方式。脚本安装和Windows平台上的安装非常类似。
应用比较多的脚本安装有两种:Shell脚本、Java脚本。
6.2 应用举例
常见用脚本安装的软件有webmin(shell脚本)、OpenOffice(Java脚本)。
以webmin安装为例,脚本安装其实没有特定的步骤,但是大概规律都是,查看安装参考信息,根据信息安装。
- 软件包下载网址:Webmin
- 解压解包:tar -xzvf webmin-2.010.tar.gz
- 进入目录:cd webmin-2.010/
- 阅读参考文档:vi README.md
1. 在Linux中有一个习惯,如果不是标准的源代码包,一般表现为没有configure可执行文件,那么就会有一个说明文档,说明文档一般命名为README 或者 INSTALL ,我们可以查看这类文件,里面会有安装说明.
2. README.md里说直接运行setup.sh脚本即可。
根据文档提示安装: ./setup.sh
1. 第一幅图是安装webmin过程中需要填写的一些信息。
2. webmin安装过程中,提供了卸载webmin的方式:运行/etc/webmin/uninstall.sh脚本。
3. webmin安装成功后,可通过网页管理,登录网页的方式如上图。但是我使用这种方式一直打不开网页,不知道为什么——遗留问题。
七、APT包管理
Debian系列用apt包。
搜索软件包:apt-cache search
软件包信息:apt-cache show
安装:apt-get install (reinstall(覆盖安装)、-f(修复安装))
删除:apt-get remove(autoremove(自动检测依赖关系)、--purge(删除配置文件))
更新软件源:apt-get update
更新已安装包:apt-get upgrade
Linux笔记——软件包管理相关推荐
- RHEL8.0快速入门系列笔记--软件包管理(十一)
RHEL8.0快速入门系列笔记–软件包管理(十一) 一.软件包管理 1.Linux系统中软件包管理 (一)软件包类型 [1] 二进制包 什么是二进制包?有什么特点? 1.二进制包,指的是已经编译好的软 ...
- linux软件包管理 pdf,中标麒麟Linux系统软件包管理介绍(22页)-原创力文档
中标麒麟Linux服务器操作系统培训系列 中标麒麟Linux系统软件包管理介绍 技术创新,变革未来 本章目标 •了解中标麒麟Linux服务器操作系统中应用程序的 组成: •了解中标麒麟Linux服务器 ...
- 【Java从0到架构师】Linux 应用 - 软件包管理、软件安装
Linux 应用 - 软件包管理.软件安装 软件包管理器 rpm yum 软件的安装 jdk 1.8 mysql 5.7 tomcat8 Java 从 0 到架构师目录:[Java从0到架构师]学习记 ...
- linux相对路径查看文件是否存在,2 linux笔记 文件目录管理
2 linux笔记 文件目录管理 2.1 Linux 文件与目录管理 2.1.1 绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录. 2.1.2 相对路径: ...
- <Linux> 软件包管理器yum及编辑器vim的使用
文章目录 一.yum的背景知识 1. 商业生态 2. 开源生态 3. 软件生态本土化 二.yum 的基本使用 1. 查看软件包 2. 安装.卸载.搜索软件 实现Windows下和Linux下文件互传 ...
- linux软件包怎么管理,Linux之软件包管理
Linux之软件包管理 软件包管理有一般有3种机制:源代码方式.RPM.YUM 软件包的组成格式与存放路径: 1.二进制程序 主要存放的路径:/bin, /sbin, /usr/bin, /usr/s ...
- 【Linux】软件包管理超详细笔记
往期内容: Linux常用指令合集 Linux文本编辑器 Linux软件包管理 Linux用户管理 Linux权限管理 文章目录 软件包管理简介 软件包分类 两种软件包的比较 源码包 RPM包 RPM ...
- Linux平台软件包管理rpm、yum---马哥运维笔记
文章目录 一.预先知识: (一). 软件开发语言有哪些类? 1. 系统级开发 2. 应用级开发 (二). 应用程序的组成部分: 1.程序的组成组成清单 (每个包独有) 2.数据库(公共) (三). 程 ...
- Linux笔记 软件管理
一.软件包分类 1.软件包分类:源码包.二进制包 源码包:源代码 1)优点:开源,有能力可修改源代码 可以自由选择所需的功能 软件是编译安装,更适合Linux系统,更稳定效率更高 卸载方便. 2)缺点 ...
最新文章
- 杀死进程和apk的安装
- 并查集杭电1272小希的迷宫
- 我用 PyTorch 复现了 LeNet-5 神经网络(CIFAR10 数据集篇)!
- CTR模型越来越深,如何让它变轻?
- Android自动测试之MonkeyRunner之monkeyrunner
- 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
- Python知识点之Python面向对象
- Eclipse关闭XML文件验证的方法
- 2017.3.16 聪聪可可 思考记录(非常不容易)
- Mysql优化之Order By/Group By
- mysql client version_下载mysqlclient问题报错
- Linux性能测试分析命令_sar
- c++ 类的定义和使用
- 异常处理·psftp·local unable to open
- 手机拍的图片资料打印很黑怎么解决?
- python 获取图像亮度和锐度,pytesseract 获取图片上字符串,及增加亮度,色感,对比度,锐度...
- 广义相对论与量子力学的根本矛盾是什么?
- 用计算机打字用英语怎么说,打字用英语怎么说
- 【HNOI2017】大佬-dalao
- [生存志] 第50节 七穆掌郑国