过了几天,我发现我电脑里面的这些程序都是linux光盘镜像自带的应用程序,然后想下载一些好玩的应用程序却不知道怎么下载,真是头疼呢!没办法,又只能去找L哥哥帮忙了,看看他又有什么好的点子!
“hi,L哥哥,你在干嘛呀!我又有困难了,快来帮帮我~”,“好的,马上过来!”。不知道小哥哥又练了什么法术,“biu~的一下就出现在我的面前!”
Me: “以前我用windows的时候,直接下载一个应用程序.exe文件,点击就能自动安装了,可是这个linux有点不一样呢,好头疼呀!”
L哥哥: “哦,原来你是这个问题呀?你用windows用习惯了,它下载应用程序,傻瓜似安装就可以,但是对于linux,我们需要自己编译源程序安装,不过现在已经有了linux软件包管理了,所以也很简单,当你掌握了你会发现linux比windows还好用呢!”
“什么是编译?软件包管理又是什么鬼?”
“没事,我先给你说一说基础的东西,慢慢你就知道了”
软件包的组成成分
一般一个应用程序都有相应的四个组成成分
- 二进制程序:
/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
- 库:
/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/lib64
- 配置文件
- 帮助文档
一般我们拿到一个软件源程序包,将其解压打开,其目录下一般都会包含这四个组成成分,我们通过一些命令安装这些源码,系统会通过预编译-编译-汇编-链接库文件这些步骤将这个应用程序安装在我们的linux系统,应用程序会默认安装在linux文件系统下(我们可以指定安装的位置)。
编译安装源程序的步骤:
- 拿到源代码并解压
tar xf package_name.tar.{gz | bz2 | xz}
- 切换至源码目录中
cd package_name
- 执行configure脚本
./configure [--prefix=/usr/local/package_name][--sysconfdir=/etc/package_name]
编译
make
安装
make install
但是,你有没有觉得编译安装源程序太麻烦了?是的,的确很麻烦。所以凡事一有麻烦的事情,总会有一些人站出来,所以我们又有了软件包管理器–rpm
rpm软件包管理
rpm包的命名格式:name-version-release.arch.rpm
如:bash-4.3.2-2.el6.x86_64.rpm
rpm包获取途径:
如:清华园http://mirror.tuna.tsinghua.edu.cn
安装
如: 安装清华园下对应自己linux系统版本下的zsh
(1)获取源
wget https://mirror.tuna.tsinghua.edu.cn/centos/7.4.1708/os/x86_64/Packages/zsh-5.0.2-28.el7.x86_64.rpm
(2)安装
rpm -ivh /path/to/rpmpackage
卸载
rpm -e package_name [--nodeps忽略依赖]
查询
rpm -q package_name 某包是否安装
rpm -qa 已经安装的包
rpm -qi package_name 某包详细信息
rpm -ql package_name 安装某包后生成的文件列表
rpm -qf /path/to/file 查询此文件属于哪一个包安装后生成的
rpm -qc package_name 安装后生成的配置列表
rpm -qd package_name 帮助信息
rpm -q --scripts package_name 相关的脚本
rpm -qpl /path/to/file 尚未安装的包的相关信息
升级
rpm -F 只是升级
rpm -U 升级/安装
校验
rpm -V package_name 文件是否被修改过
rpm -k /path/to/file 检验来源完整性
rpm数据库重建
/var/lib/rpm 数据库位置
rpm --initdb 初始化(如果已经存在不会执行)
rpm --rebuilddb 重建(会覆盖原有库)
哇哦!原来是这么下载的啊!从rpm包服务网站wget下来,然后用rpm包安装就行啦!可是!当我下载的包安装时提示我还依赖于其他的某些包,这个时候还得去找依赖的包下载,而且有时候依赖的包的版本又不符合,又整出一大堆麻烦事,还是有那么多命令,对于记忆力这么差的我,记不住怎么办……L哥哥一下就看出我的心事,“当然,我知道你在想什么,因为大部分人都是这么想的,所有,后来又有人站出来搞了一个rpm包的前端管理工具”
yum : rpm包的前端管理工具
其实yum相当于一个共享rpm包的文件服务器,通俗的来说就是保存了很多rpm包的仓库网站,但是我们可以通过配置本地yum客户端直接连接到一个较近的能用的yum仓库。当用yum命令下载一个rpm包时,命令程序首先会访问本机的/etc/yum.repo.d/[a | b | c].repo的仓库配置文件,然后连接此仓库,然后将yum仓库的rpm包的信息和其有依赖关系的包的元数据信息先缓存到本地/var/cache/yum/…目录下,然后跟据缓存的信息检测本机已经安装了哪些依赖关系的包,没有安装的就提示你然后安装!很智能!有木有!
yum客户端
- 配置文件
[main] : 主配置段
[repo] : 仓库配置段
[base_name]
name=String
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/7.4.1708/os/x86_64/ (此路径上存在repodata,repodata是标识yum仓库url路径的)
enabled=1 {1 | 0} 是否启用(默认为启用)
gpgcheck=1 {1 | 0} 检测来源合法
gpgkey=公钥文件 RPM-GPG-KEY-CentOS-7 跟repodata在同一目录
cost=1000 {1000|2000|3000} 优先级,1000最先
- 缓存元数据
- 分析元数据
- 根据分析结果,执行具体操作
yum命令:
yum install package_name 安装包
yum reinstall package_name 重新安装某包
yum check-update package_name 检测升级
yum update package_name 升级
yum erase package_name 卸载-包和依赖的包
yum repolist 显示可用仓库
yum clean all [all | packages 等等] 清理缓存
yum list all [all | installed | available] 列表 | 已安装 | 可以安装
yum info package_name 包的详细信息
yum grouplist 显示包组
yum grouping package_group_name 显示包组信息
yum groupinstall package_group_name 安装包组
yum groupremove package_group_name 删除包组
yum history yum历史命令
创建yum源
例: 基于httpd建立一个openstack源
createrepo /var/www/html/openstack createrepo命令在packages目录下
service http start 启动httpd服务
netstat -tnl 查看80端口
[epel]enabled=1 如果有依赖包,到epel里去找
yum install package_name 测试使用创作的yum源
局域网内访问:本机ip/openstack
我靠!简直不要太爽,那我现在下载zsh就不用wget了,直接在/etc/yum.repo.d/tuna.repo配置好yum的清华园仓库,然后yum install zsh,哇塞,直接安装成功,太棒了!!!!!!
学习补充
补充1:基本上系统自带有yum仓库配置,可是有些yum仓库距离我们太远,下载太慢,我们可以自行配置,配置EPEL
:wget下载epel.rpm包到自己本地,然后安装,这时候,你会发现在/etc/yum.repo.d/这个目录下多了两个文件,一个是epel.repo, 一个是testing.repo(testing是用来测试用的不用管),而这个epel.repo就是帮我们自动配置了yum源!
补充2:今天在用yum下载mosh显示包依赖有问题不能安装,原来是本地上mosh依赖包没有更新不支持mosh导致,果断更新系统yum仓库。
有两个选择:
#1.更新所有的包
yum update
#2.仅更新mosh依赖的包
yum update package_name
更新之后再安装mosh就没有再出现这个问题。