Linux学习笔记(11)软件包管理
Linux中的软件包分为源码包(脚本安装包)及二进制包(RPM包、系统默认包)。其中源码包的优点是:
1)源码包是开源的,如果有足够的能力,可以修改源代码;
2)可自由选择所需的功能;
3)源码包需编译安装,所以更加适合自己的系统,稳定且效率高;
4)卸载方便,只需删除安装文件目录,且不留垃圾文件。
其缺点是:
1)安装过程步骤较多,尤其安装较大的软件集合时,容易出现拼写错误;
2)编译过程时间较长,安装比二进制包长;
3)因为是编译安装,安装过程中一旦报错,新手很难解决。
二进制包的优点是:
1)包管理系统简单,只通过几个命令就可以实现包的安装、升级和卸载;
2)安装速度比源码包快的多。
缺点是:
1)经过编译,不再可以看到源代码;
2)功能选择不如源码包灵活;
3)依赖性较强。
1 rpm命令管理
(1)rpm包的命名规则
rpm包如:httpd-2.2.15-15.el6.centos.1.i686.rpm
其中,httpd是软件包名,2.2.15是软件的版本,15是软件的发布次数,el6.centos是适合的Linux平台,i686是适合的硬件平台,rpm是rpm包扩展名。
(2)rpm依赖性
树形依赖:包a依赖包b,包b又依赖包c,即a->b->c,卸载时的顺序是c->b->a。
环形依赖:如a->b->c->a,可以将a,b,c同时进行安装。
模块依赖:可以通过www.rpmfind.net网站查询模块依赖。
(3)rpm包的安装、升级与卸载
1)包全名与包名的区别
包全名:当操作的包是没有安装的软件包时,将使用包全名,而且还要注意路径。
包名:操作已经安装的软件包时,将使用包名,主要是搜索/var/lib/rpm中的数据库。
2)rpm安装,其格式为:
rpm -ivh 包全名
其中,-i表示安装(install),-v表示显示详细信息(verbose),-h表示安装进度(hash),--nodeps表示不检测依赖性,直接安装提供的包全名。
3)rpm包升级,其格式为:
rpm -Uvh 包全名
其中,-U选项表示升级(update)
4)rpm包卸载,其格式为:
rpm -e 包名
其中,-e表示卸载(erase),--nodeps表示不检查依赖性。
5)查询包是否安装,格式为:rpm -q 包名,其中-q选项表示查询(query)
查询所有已安装的rpm包,格式为:rpm -qa 包名,其中-a表示所有(all)。
6)查询软件包详细信息,格式为:rpm -qi 包名,其中-i选项表示查询软件信息(information),-p选项表示查询尚未安装的包信息(package),此时应变为包全名。
7)查询包中文件的安装位置,格式为:rpm -ql 包名,其中-l选项表示列表(list),-p选项可以查看尚未安装的包中文件打算安装在哪个目录下(package),此时应变为包全名。
8)查询系统文件属于哪一个rpm包,格式为:rpm -qf 系统文件名,其中-f选项表示系统文件,该文件必须是安装后生成的文件,自己创建的文件不能查询。
9)查询软件包的依赖性,格式为:rpm -qR 包名,其中-R表示显示软件包的依赖性(requires)。
(4)校验和文件提取
1)包校验主要是通过对比原始安装包,以检验包安装后的文件是否被修改。其格式为:
rpm -V 已安装的包名
其中-V选项表示检验(verify)。
例:修改/etc/yum.conf中的注释部分,然后进行校验。
[root@localhost Packages]# rpm -V yum S.....T. c /etc/yum.conf
验证内容中的前8个信息的具体内容如下:
S |
文件大小是否改变 |
M |
文件的类型或文件的权限(rwx)是否被修改 |
5 |
文件MD5校验和是否被改变(可看成文件内容是否改变) |
D |
设备的代码是否改变 |
L |
文件路径是否改变 |
U |
文件的所有者是否改变 |
G |
文件的所属组是否改变 |
T |
文件的修改时间是否改变 |
之后的1信息表示文件类型,主要包含以下几种:
c |
配置文件(configure file) |
d |
普通文档(documentation) |
g |
"鬼"文档(ghost file),即该文件不应该被这个rpm包所包含 |
l |
授权文件(license file) |
r |
描述文件(readme) |
2)rpm包中文件的提取,常用于误操作,其格式为:
rpm2cpio 包全名 | cpio -idv .文件绝对路径
其中rpm2cpio命令是将rpm包转化为cpio格式的命令。cpio是标准工具,用于创建软件档案文件及从档案文件中提取文件。其格式为:
cpio 选项 [文件|设备]
其中-i选项为copy-in模式,表示还原,-d选项表示还原时自动新建目录,-v选项表示显示还原过程。
例:
rpm -qf /bin/ls #查询ls命令属于哪个软件包 mv /bin/ls /tmp/ #造成ls命令误删的假象 rpm2cpio /mnt/cdrom/Packages/coreutils-8.4--.el6.i686.rpm | cpio -idv ./bin/ls #提取rpm包中ls命令到当前目录的/bin/ls下 cp ./bin/ls /bin/ #将ls命令复制回/bin目录,修复文件丢失
2 yum在线管理
yum主要是解决rpm包的依赖性问题。在不联网的情况下,可以将光盘作为yum源。
(1)IP地址配置
可以使用setup命令设置IP地址。设置完之后需要将网卡设置为自启动,只需将/etc/sysconfig/network-scripts/ifcfg-eth0中的ONBOOT="no"修改为"yes"即可。设置完之后,需要重新启动网络服务,执行命令service network restart。
(2)网络yum源
网络yum源保存在/etc/yum.repos.d/centos-Base.repo文件中。
[base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck= gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
文件内容具有如下类似的规则:
[base] #容器名称,一定要放在方括号"[]"中
name #容器说明,可以自己随便写
mirrorlist #镜像站点,可注释掉
baseurl #yum源服务器地址
enabled #此容器是否生效,0表示不生效,不写或1表示生效
gpgcheck #为1表示rpm的数字证书生效,为0表示不生效
gpgkey #数字证书的公钥文件保存位置,这里不用修改
(3)yum命令
注意yum命令没有包全名的概念!
1)查询所有可用软件包列表,其格式为:yum list,搜索服务器上所有与关键字相关的包,其格式为:yum search 关键字
2)yum安装的格式为:yum -y install 包名,其中install表示安装,-y选项表示自动回答yes。
3)yum升级的格式为:yum -y update 包名,其中update表示升级,-y选项表示自动回答yes。
注意:如果不加包名的话,表示将升级所有的软件包,包括linux内核。
4)yum卸载的格式为:yum -y remove/erase 包名,其中remove/erase表示卸载,注意使用yum卸载时会将所依赖的软件包也卸载掉,因此,yum升级和yum卸载尽量少用。
5)yum软件组管理命令
列出所有可用的软件组列表,其格式为:yum grouplist
安装指定软件组(组名可以由grouplist查出来),其格式为:
yum groupinstall 软件组名
卸载指定软件组,其格式为:yum groupremove 软件组名
(4)光盘yum源搭建
yum源除了可以在网络上获取,也可以通过系统安装光盘获取。在VMware中将ISO镜像加载进来,并选中"已连接",如下图所示:
接下来的步骤是:
1)挂载光盘。在/mnt目录下创建光盘挂载点cdrom,随后使用mount命令进行挂载。
[root@localhost ~]# mkdir /mnt/cdrom [root@localhost ~]# mount /dev/cdrom /mnt/cdrom mount: block device /dev/sr0 is write-protected, mounting read-only
2)使网络yum源失效,否则将自动检测网络yum源。即在/etc/yum.repos.d/目录下将相应的文件改名,仅保留CentOS_Media.repo。
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo [root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak [root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak [root@localhost yum.repos.d]# mv CentOS-Vault.repo Debuginfo.repo.bak
3)修改光盘yum源文件,需严格遵守源文件格式。
[root@localhost yum.repos.d]# vi CentOS-Media.repo [c6-media] name=CentOS-$releasever - Media baseurl=file:///mnt/cdrom/ #注意此处为自己光盘的挂载地址 # file:///media/CentOS/ #将不存在的地址注释掉 # file:///media/cdrom/ # file:///media/cdrecorder/ gpgcheck= enabled= #将0改为1,使光盘yum源配置文件生效 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
4)使用yum命令进行验证
[root@localhost yum.repos.d]# yum search zsh Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile =====================N/S Matched: zsh ============================= python-twisted-core-zsh.i686 : Tab completion for Zsh and Twisted Core zsh-html.i686 : Zsh shell manual in html format zsh.i686 : A powerful interactive shell Name and summary matches only, use "search all" for everything.
3. 源码包管理
(1)源码包与rpm包的区别
在安装之前是概念上的区别,安装后二者的安装位置不同。一般情况下,rpm包的默认安装位置如下:
/etc/ |
配置文件安装目录 |
/usr/bin/ |
可执行的命令安装目录 |
/usr/lib/ |
程序所使用的函数库保存位置 |
/usr/share/doc/ |
基本的软件使用手册保存位置 |
/usr/share/man/ |
帮助文件保存位置 |
源码包安装在指定的位置当中,一般是/usr/local/软件名/。rpm包安装的服务可以使用系统服务管理命令(service)来管理。
例:rpm包安装的apache的启动方法为:
service httpd start #使用service管理
/etc/rc.d/init.d/httpd start #使用绝对路径来启动
注意:service命令是RedHat专有,该命令将会到系统默认位置搜索相关服务。
源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中,所以只能用绝对路径进行服务的管理。
例:源码包安装的apache,使用如下方法启动:
/usr/local/apache2/bin/apachetl start
(2)源码包安装过程
安装前需要安装C语言编译器gcc,可以使用yum install gcc进行安装。然后下载apache源码包,下载地址为:http://mirror.bit.edu.cn/apache/httpd/。注意:源代码的保存位置为/usr/local/src,软件的安装位置为/usr/local。当安装过程停止,并出现error、warning或n的提示时,安装过程出现错误。
具体的安装过程如下:
1)下载源码包
2)解压缩下载的源码包,可以使用du -sh 文件名格式查询文件或文件夹大小
3)进入解压缩目录
4)查看软件自带的INSTALL文件中的安装方法。简要说明如下:
① ./configure主要用于软件配置与检查,主要执行的功能有定义需要的功能选项如安装目录,检测系统环境是否符合安装要求,把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编译。
② make 编译,如果报错可以使用make clean将已编译的文件全部清空。
③ make install 编译安装,此步骤真正向目录中写入数据。
源码包卸载时不需要卸载命令,直接删除安装目录即可,且不会遗留任何垃圾文件。
4. 脚本安装包
脚本安装包并不是独立的软件包类型,常见安装的是源码包,是人们为了把安装过程写成自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装,非常类似于windows下软件的安装方式,主要用于硬件驱动。
例:安装webmin,该软件是基于web的linux系统管理界面,可以通过图形化的方式设置用户账号、apache、DNS、文件共享等服务。其安装方法如下:
1)下载包:http://sourceforge.net/projects/webadmin/files/webmin。
2)解压缩,并进入解压缩目录。
3)执行安装脚本webmin.sh
Linux学习笔记(11)软件包管理的更多相关文章
- Linux学习笔记(五) 账号管理
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Linux学习笔记12—磁盘管理
一.查看磁盘或目录的容量 1. df命令 作用:查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何参数,默认是按k为单位显示的 参数: -I : 查看inodes使用状况 -h: 使用合适的 ...
- linux学习笔记 yum 在线管理软件包
-y 如果yum在工作过程中需要使用者响应.这个参数可以直接回答yes #yum list 列出资源库中所有可安装或者可更新的rpm包 #yum perl 列出为perl的包 #yum perl* ...
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...
- linux —— 学习笔记(用户管理与权限控制)
目录:1.用户的创建和管理 2.组的创建和管理 3.文件执行权限的控制 4.不用密码执行sudo 1.用户的创建和管理 用户的创建和管理: useradd.usermod . userdel . ...
- Linux学习笔记11——文件I/O之二
一.文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. 1.每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2.内 ...
- Linux学习笔记 -- 磁盘的管理
df df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法: df [-ahikHTm] [目录或文件名] 选项与参数: -a ...
- 韦东山嵌入式Linux学习笔记05--存储管理器
SDRAM: 原理图如下: jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接 ...
- Linux学习笔记 11
移除文件 #rm -i file 有信息确认的文件删除 #rm file1 file2 有信息确认的文件删除 #rm -rf file 强制删除file文件
随机推荐
- cf592d
题意:给出一个无根树,点数为10^5,所有边的长度为1.给定其中有一些点是受到攻击的. 现在要求一个人选定一个点作为起点,走遍所有的受攻击点(不用再回到起点). 需要的最短距离是多少,选定的起点是哪个 ...
- 解读Unity中的CG编写Shader系列六(漫反射)
转自 http://www.itnose.net/detail/6116553.html 如果前面几个系列文章的内容过于冗长缺乏趣味着实见谅,由于时间原因前面的混合部分还没有写完,等以后再补充,现在开 ...
- Qt 文件处理
1.删除目录下所有的文件 void deleteAllFiles(const QString& fileDir) { QDir dir(fileDir); if(!dir.exists()) ...
- Divide and conquer:Sumsets(POJ 2549)
数集 题目大意:给定一些数的集合,要你求出集合中满足a+b+c=d的最大的d(每个数只能用一次) 这题有两种解法, 第一种就是对分,把a+b的和先求出来,然后再枚举d-c,枚举的时候输入按照降序搜索就 ...
- c#操作时间
本年还剩下多少天 private string GetEndTime() { DateTime dt = DateTime.Now; DateTime startYear = DateTime.Now ...
- 根据OSG中的ref_ptr和Reference简化的智能指针
main.cpp测试代码 #include "TestSmartPointer" void fun() { SP<TestSmartPointer> sp1=new T ...
- CSS伪类
CSS伪类:控制元素的某种状态 语法:元素名称:伪类名称{属性:值} CSS伪类控制链接状态 状态 语法 未访问的链接 a:link{color:#ff00ff} 已访问的链接 a:visited{c ...
- Nodejs的第一个页面
nodejs安装后如何查看和安装其他工具 网上nodejs的文章已经很多,这里只是写下自己的小小心得,如果能帮到别人当然更好. 安装nodejs这里就不叙述了,直接上nodejs官网下载就好了,初学者 ...
- iOS 十六进制和字符串转换
NSString *dictString = [dict JSONFragment];//组合成的. dictString==={"content":"Sadgfdfg& ...
- Android 毛玻璃效果
muzei live wallpaper https://github.com/romannurik/muzei