软件包管理
软件包分类
win的*.exe文件是不能在Linux里面直接使用的,所以win里面大量的病毒和木马到Linux里面就无效了,不可识别,对Linux来说win的软件包对他来说就是一堆文件而已。
-
源码包(源代码直接开放给你的包,开源,绝大部分是C/C++写的)
-
脚本安装包,一般是源码包经过二次开发的,类似于win里面软件安装包内的setup.exe,事先写好了安装引导程序,一步步的跟着点击按钮选择安装选项就ok了,在Linux里面就叫install.sh,其实其就是源码包。
-
脚本安装使用的命令为:
首先,有些脚本没有执行权限,需要添加权限chmod +x agentInstall.sh,再执行脚本程序==./agentInstall.sh install==,这里的./,一般含义中,. 表示当前文件夹,./edge/表示当前文件夹下的edge文件夹,但是 ./ 还有别的功能,就是执行脚本程序,格式为./脚本.sh,安装脚本程序就像上述一样操作即可。
-
-
二进制包(RPM包、系统默认包无法看见源代码)
二进制包和源代码包的区别在于,源代码包是C语言的直接写的,原汁原味,直接用源代码包安装有时会 错,二进制包则是经过编译之后的机器语言包(0101)为RPM格式,win里面的*.exe安装包也是二进制包,不过其和RPM的格式不一样,所以Linux系统无法安装*.exe,源码包与二进制包还有区别在于,二进制包无法看见源代码,而且,如果用源代码包安装系统要先编译源码包再安装,编译过程会耗费一段时间,所以一般都用二进制包,简单快捷, 上下载的安装包都是厂商编译完后的二进制包。
源码包
优点:
- 开源,如果有足够的能力,可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高,相同版本系统,相同版本的软件,源码包安装的比二进制包安装的性能好5%左右;
- 卸载方便,不会像win一样卸载会有垃圾文件产生,这是Linux系统比win系统稳定的主要原因
缺点:
- 安装步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
- 编译时间较长,安装比二进制安装时间长,安装源码包比相当大小的二进制包时间长几十倍,如果用源码包安装一个几个G的Linux系统大概需要大概3天时间,编译过程非常复杂,安装起来比较困难
- 因为是编译安装,安装过程中一旦 错新手很难解决
RPM包
二进制包的优点
- 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
- 安装速度比源码包安装快的多(厂商编译过,所以安装非常快)
缺点
- 经过编译,不再可以看源代码
- 功能选择不如源码包灵活
- 依赖性(基本上所有的RPM包都有依赖性)
RPM软件包管理
RPM包命令管理
RPM包命名规则
httpd-2.2.15-15.el6.centos.1.i686.rpm
- httpd 软件包名
- 2.2.15 软件版本
- 15 软件发布次数
- el6.centos 适合的Linux平台,
- i686 适合的硬件平台(如果写的是X64,那么只能安装在64位的cpu平台上)如果写的是noarch,意思是说适合所有平台。
- rpm rpm包拓展名(所有rpm包都为rpm,所有的安装包都必须以rpm结尾为扩展名,Linux里面没有扩展名这一说,不像win里面每个文件都有规定一类的扩展名,Linux系统不会在意文件的扩展名,随便取,但是rpm包必须以rpm结尾为扩展名,因为这是给root用户看的,给管理员看的,不然不认识rpm包。)
注意:区分包名(httpd)和包全名(httpd-2.2.15-15.el6.centos.1.i686.rpm)是有区别的,在有些命令里两个是不一样的概念。
PRM包依赖性
- 树形依赖:a->b->c(安装a需要先装b,安装b需要先装c,安装顺序为cba,卸载顺序为abc)
- 环形依赖:a->b->c->a(解决方法是用一条命令一次性安装abc)
- 模块依赖:模块依赖查询 站(www.rpmfind.net)
post:挂载
首先创建挂载点,一般选择/mnt/目录下创建挂载点
记住别犯傻,今天我看视频去找cd光盘的设备文件cdrom,居然去/etc/里面去找,简直是脑子抹了屎,没找到还去 上搜为什么,搞了好一会儿,是说怎么没看见设备文件啊,太蠢了,记住/etc/文件夹是存放系统的配置文件的文件夹,设备文件是存放在/dev/里面的。
cdrom是指向sr0的软链接
创建挂载点:
可以看见,挂载文件夹的大小非常小而打开里面的文件却是比较多比较大的这点有待讨究。
上面安装出现错误,显示安装的包有依赖,其中有一个依赖的包为libodbc.so.2()(64bit)这种以.so.2结尾的包都是库依赖,是不会在 Packages内的,这种库依赖包不是单独独立的包,它是某一个软件包中的软件,也就是说我只要把这个软件所在的包装上,那么这个软件就会装上,就解决了依赖性。
安装升级与卸载
包全名和包名
-
包全名:操作的包是没安装的软件包时,使用包全名。而且要注意路径,因为没有装过,系统没有记录软件包和其路径位置,安装后,包名会被记录在资料数据库内
-
包名:操作已经安装的软件包时,使用包名。这个时候包已经装过了,系统就会直接去搜索包名,是搜索/var/lib/rpm/中的数据库。(这个库中的文件都是二进制文件,不能用vim直接打开,只能用相应的指令打开,在数据库中搜索,所有不需要绝对路径,直接用命令搜索包即可)
RPM安装
rpm -ivh [包全名]
一般都是-ivh 固定使用
- -i (install) 安装
- -v(verbose) 显示详细信息
- -h (hash) 显示进度
- –nodeps 不检测依赖性(一般不用,依赖性是一定存在的,实验是可以用,可以忽略这个指令)
查看挂载信息
RPM包升级
rpm -Uvh [包全名]
- -U (upgrade) 升级
你需要升级某个软件,则你必须在电脑里面有比当前安装的软件更加高级的包,包全名就是这个更高级的包的路径以及包全名。其过程与安装过程完全一样。
卸载
rpm -e [包名]
- -e (erase) 卸载
- –nodeps 不检查依赖性
因为卸载时,软件包已经被安装,包名已经被记录在了资料数据库内,所以不需要包全名只需要包名即可,而且也不需要绝对路径,在任何路径下,直接卸载包名即可卸载软件。
查询
查询是否安装
rpm -q [包名]
- -q 查询 (query)
- -qa 所有 (all)查询所有包
- qi 查询软件信息 (information)
- -p 查询未安装包信息 (package),意思是安装包已经在你的系统里了,你也知道他在哪里,看得见它,不过你想看它的信息资料,包的信息都是已经写好打包在包内的,为安装我也可以查看它的信息,用这个命令需要用包全名,加包全名的地方只有安装和升级,以及这里,加包全名是因为未安装,包名信息不会录入资料数据库,无法直接用包名。
- ql 列表(list) 查询已包安装位置以及其安装文件列表
- rpm包安装位置在开发者写包的时候就已经指定好了,所以一般都是默认安装到原本指定的安装路径,虽然我们可以指定安装位置,但是不推荐,因为很多系统服务或者软件服务都是依赖默认路径的,人为更改安装路径会导致服务无法进行,查询已包安装位置用rpm -ql [包名],查询未安装包打算要安装的路径位置用rpm -qlp [包全名]
比如指令rpm-qa查询所有已经安装的RPM包 ,这里也不需要注意绝对路径,不管在哪都可以查询
rpm -qa | grep [包名]
加上管道符联合grep指令,可以查询所有含包名的软件包。
查询系统文件属于哪个RPM包
rpm -qf [系统文件名]
- -f 查询系统文件属于哪个软件包(file)这里的系统文件名必须是系统的文件,而不能是自己建的文件,因为只有经过系统包装过的文件才能追溯它属于哪个包,没有包装过的无法追溯。,系统文件名是用绝对路径,要文件的具体位置。/etc/目录下的配置文件大部分都是包安装出来的。
[root@XYLJ Packages]# rpm -ql httphttpd-tools http-parser [root@XYLJ Packages]# rpm -ql httpd未安装软件包 httpd [root@XYLJ Packages]# rpm -ql httpd-tools /usr/bin/ab/usr/bin/htdbm/usr/bin/htdigest/usr/bin/htpasswd/usr/bin/httxt2dbm/usr/bin/logresolve/usr/share/doc/httpd-tools-2.4.6/usr/share/doc/httpd-tools-2.4.6/LICENSE/usr/share/doc/httpd-tools-2.4.6/NOTICE/usr/share/man/man1/ab.1.gz/usr/share/m
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!