一.yum简介
1.1 yum简介
yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键,可以一键下载,一键安装和卸载。yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题。yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装。
 1.2 yum实现过程
 
1.光驱里自带 挂载提供软件包
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。
2. yum需要依赖于环境,依赖于服务端和客户端,允许跨网络
服务器:
-  RPM包 (Packages文件夹中) 
-  元数据(repodata文件夹:目录(软件的目录),软件的依赖关系,软件的位置) 
客户端的配置文件
baseurl=地址 一定要写到到 这两个文件夹 repodata packages 的上级目录
最终形成两个文件夹Packages (包文件夹一般取名packages)和 repodata(元数据文件夹)
仓库类型:
-  光盘的仓库基本仓库 比较常用的 
-  epel扩展仓库 比较新 
1.3 如何实现安装服务

元信息是一个文件 里面记录了安装包的路径 安装包的依赖关系
- 客户端根据配置文件找到服务端
- 客户端将元信息下载到本地仓库(元信息:安装包的位置,以及安装的依赖关系)
- 根据元信息去下载对应的安装包到本地后,然后安装
- 安装完成后再删除安装包
二.yum配置文件及命令
1. yum 配置文件
1.1 主配置文件
主配置文件 : /etc/yum.conf

[root@localhost]#vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever 
//yum下载的RPM包的缓存目录 $basearch代表硬件架构 $releasever系统版本比如7
keepcache=0                        //是否保存缓存  0代表不保存,1代表保存
debuglevel=2                       //调试级别
logfile=/var/log/yum.log		   //日志文件位置
exactarch=1						   //是否允许不同版本的rpm安装
obsoletes=1						   //update 的一个参数是否可以允许旧版本的运行	
gpgcheck=1                         //验证秘钥
plugins=1                          //是否允许插件1代表可以
installonly_limit=5                //保存几个内核 5代表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-releaseyum的repo配置文件中可用的变量:
$basearch:系统基础平台;i386, x86_64
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量1.2 仓库设置位置
yum仓库文件位置: /etc/yum.repos.d/*.repo

1.3 日志文件
日志文件位置: /var/log/yum.log

2. yum命令解释
| 命令 | 不加关键字 | 加入关键词、软件包、软件包组 | 
|---|---|---|
| yum list | 显示所有可用包 | 单个的可安装包 | 
| yum info | 显示所有可用包的信息 | 单个具体的信息 | 
| yum search | \ | 模糊查找所有的相关信息 | 
| yum provides | \ | 精确查找 | 
| yum grouplist | 显示所有可用包组 | 显示具体的包组 | 
| yum groupinfo | 显示所有的包组具体信息 | 显示具体的包组的具体信息 | 
| yum install | \ | 安装具体软件包 | 
| yum groupinstall | \ | 安装具体软件包组 | 
| yum update | 所有软件升级 | 具体软件升级 | 
| yum group update | 所有包组升级 | 所有包组升级 | 
| yum remove | \ | 卸载具体软件 | 
| yum groupremove | \ | 卸载具体包组软件 | 
| yum history | 查看当前yum操作历史 | \ | 
| yum history undo | 加入序号卸载序号里安装的软件 | \ | 
| yum history redo | 加入序号重新执行序号里的操作 | \ | 
① 软件查询
2.1 yum list [软件名]
显示可用的安装包



2.2 yum info [软件名]
显示安装包的详细信息

2.3 yum search <关键字>
根据关键字查找软件安装包

2.4 yum provides <关键字>
想知道某个命令却不知道具体的包用此命令查找

必须要写路径

2.5 yum grouplist [包组名]
安装包组的查询 不加包组名就是显示所有(此处例子由于安装了中文环境,无法显示英文包组名称无法直接复制中文使用,建议直接安装英文操作系统)

2.6 yum groupinfo <包组名>
显示具体的包组的具体信息
② 安装升级
2.7 yum install [软件名]
安装软件包

2.8 yum groupinstall <包组名>
安装具体软件包组

2.9 yum update
更新包组,可以单个也可以全部 后面加具体包组名称就是单个更新,不加就是全部更新。

2.10 yum groupupdate
组包更新和单个安装包更新

③ 软件卸载
2.11 yum remove <软件名>
卸载已安装的软件必须加软件名

2.12 yum groupremove <包组名>
2.13 yum history
查看历史的使用记录

2.14 yum history undo
加入序号卸载序号里安装的软件
可以使用yum history undo 4 进行卸载,这样对比remove好处是可以将所有的依赖都删除

2.15 yum history redo
加入序号重新执行序号里的操作

如果后悔卸载可以使用两种方式
yum history redo 4 (重新安装一遍)
yum history undo 4 (反悔卸载等于重新安装一遍)
3. 搭建仓库的方式
软件仓库的提供方式
FTP服务:ftp://ip地址/站点里路径
HTTP服务:http://域名或者ip地址/站点里的路径
本地目录:file://绝对路径 (file:///mnt 此处第三个/为根目录)
3.1 搭建本地yum仓库
① 首先将光驱中的镜像文件进行挂载
② 切换到yum.repo.d 目录下,将自带的仓库移走,因为多个开启仓库文件可能会造成冲突
③ 新建yum仓库文件
④ 测试


3.2 搭建阿里云仓库
(http方式外网环境)
不想搭了,放个牛
娱乐:





3.3 ftp方式搭建云仓库
服务端:


客户端:


客户端测试:

3.4 http 方式搭建
服务端:


客户端:


测试:

4.一些操作
4.1 误将rpm软件删除
进入急救模式
1 继续
切根

重启就可以重新安装回来
4.2 自行打包后建立元数据
实验目的:如果想将自己研发的软件上线可以本地安装,需要配置一个本地元,需要打包安装包和配置元信息
这里使用tree作为案例
① 将tree的安装包打包到一个文件夹

② 生成元信息
createrepo -v /data/test/ ##在/data/test/ 生成元信息

③ 在/data/test/ 查看 有安装软件不可缺少的两项 安装包和元数据

④ 移走之前网络元,搭建本地元,自建yum 仓库


⑤ 清理缓存,重新下载元数据

4.3 将 epl 源下载到本地使用
① 下载额外元
[root@localhost ~]#yum install epel-release -y
#安装epel源 生成epel仓库文件
② 同步 epl 元到指定文件夹
[root@localhost ~]# reposync -r epel -p /root/
#下载同步epel源 根据epel仓库文件去找目录
③ 现在只有安装包,还需要建立元数据,先安装建立元数据的命令
[root@localhost ~]# yum -y install createrepo
#安装建立元数据命令
④ 建立元数据
[root@localhost ~]# createrepo -v /root/epel
#建立元数据 软件目录 依赖关系
4.4 离线安装软件
实验目的:客户机没有任何网 ,服务机只下载不安装,再把安装包一个一个拷给客户机
[root@localhost yum.repos.d]# yum install tree --downloadonly --downloaddir=/opt/
--downloadonly #只下载相关包默认至某一目录
--downloaddir=绝对目录路径 #下载到某一目录

4.5 升级内核
① 安装 https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

② 找到元位置,并修改元配置文件


③ 找到内核软件包


④ 查看版本内核

⑤ 升级内核

⑥ 升级内核后,并不会覆盖原来的内核

三.网络文件服务——NFS
1.NFS简介
NFS(Network File System 网络文件服务)
-  NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。 
-  通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 
-  特点: -  采用TCP/IP传输网络文件 
-  安全性低 
-  简单易操作 
-  适合局域网环境 
 
-  
2.NFS原理

NFS优势:节省本地存储空间,将常用的数据如:/home 目录,存放在NFS服务器上且可以通过网络访问,将减少本地磁盘的使用率。
3.NFS软件介绍
软件包:nfs-utils(包括服务器端和客户端)
相关软件包:rpcbind(必须)
nfs端口号不固定 RPC端口号111
rpc UDP协议 远程过程调用
NFS服务主要进程:
-  rpc.nfsd 最主要的NFS进程,管理客户端是否可登录 
-  rpc.mountd 挂载和卸载NFS文件系统,包括权限管理 
-  rpc.lockd 非必要,管理文件锁,避免同时写出错 
-  rpc.statd 非必要,检查文件一致性,可修复文件 
日志位置: /var/lib/nfs/
NFS配置文件:
/etc/exports
/etc/exports.d/*.exports
4. NFS共享配置文件
文件格式:
共享目录 可以访问的主机地址(权限)
/share *()
服务器端:
#关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
#安装软件包
[root@localhost ~]# yum install nfs-utils.x86_64 rpcbind -y
#新建共享目录
[root@localhost ~]# mkdir /share
[root@localhost ~]# cd /share/
#修改权限
[root@localhost share]# chmod -R 777 /share/
#编辑配置文件
[root@localhost share]# vim /etc/exports
/share *
/share 192.168.91.0/24(rw,sync,no_root_squash)
#共享目录  网段           读写,同步,无root权限
[root@localhost ~]# systemctl start rpcbind 
[root@localhost ~]# systemctl start nfs 
#查看详细的nfs信息
[root@localhost share]#exportfs -v
#重读配置文件
[root@localhost share]#exportfs -r
#查看本机发布的 NFS 共享目录
[root@localhost ~]# showmount -e 客户端:
#挂载服务器至本地文件夹
[root@localhost ~]# mount 192.168.44.20:/share /mnt
#查看是否挂载成功
[root@localhost ~]# df -Th测试:
#服务器端在共享文件夹下创建目录
[root@localhost share]# cd /share/
[root@localhost share]# touch xyl.txt
#在客户端的挂载目录下查看是否成功看到文件
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
xyl.txt
操作:
服务端:


客户端:

测试:


权限问题:
客户端

服务端增加读写权限



服务端查看
因为客户端使用root用户访问时,映射为服务端的匿名用户

如何创建文件属主为root用户?

添加权限

此时想修改后的配置文件生效,又不想让正在操作的用户断开连接,就需要使用exprotfs -r 命令来刷新配置文件

| rw | 表示允许读写,ro 表示为只读 | 
| sync | 表示同步写入到内存与硬盘中 | 
| no_root_squash | 表示当客户机以root身份访问时赋予本地root权限(默认是root_squash) | 
| root_squash | 表示客户机用root用户访问该共享目录时,将root用户映射成匿名用户 | 
| all_squash | 所有访问用户都映射为匿名用户或用户组 | 
| async | 将数据先保存在内存缓冲区中,必要时才写入磁盘 | 
| subtree_check(默认) | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限 | 
| no_subtree_check | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 | 
| anonuid和anongid | 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用 | 
如何将客户端新建文件都指定一个用户,需要设置anonuid 和 anongid
指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
现在服务端上新建一个用户并指定uid号

修改服务端的配置文件,并刷新使其生效

此时去客户端创建文件

但是服务端查看发现,文件属主就是指定用户

5. exportfs 用于管理NFS导出的文件系统
选项:
| 选项 | 说明 | 
| -v | 查看本机所有NFS共享 | 
| -r | 重读配置文件,并共享目录 | 
| -a | 输出本机所有的共享 | 
| -au | 停止本机所有共享 | 
6. showmount 显示NFS服务器加载的信息
| -e | 显示服务器上所有的共享目录 | 
7.mount.nfs
NFS 相关的挂载选项
fg #(默认)前台挂载
bg #后台挂载
hard #(默认)持续请求
soft #非持续请求
intr #和hard配合,请求可中断
rsize #和wsize 一次读和写数据最大字节数,rsize=32768
_netdev #无网络连接不挂载
vers #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0
mount -o 临时挂载
在 /etc/fstab 里面开机挂载
8 . 搭建一台NFS共享服务器
实验准备
| NFS服务端 | 192.168.44.20 | 
| NFS客户端 | 192.168.44.10 | 
| NFS客户端 | 192.168.44.30 | 
步骤:
① 关闭防火墙和防护
② 服务端配置
先开启NFS服务

创建共享文件

写一点东西供客户端读取

给文件夹拉满权限,方便后续操作,配置完刷新配置文件

③ 客户端
在客户端下载并开启httpd服务,然后挂载使用

去浏览器访问这两个网址会得到相同的NFS服务器上的信息

