11.网络管理
1.主机名
1.查看 #hostname -->查看
2.修改
1.临时修改(命令行修改)
#hostname newname -->主机名变更为newname,临时生效,关机消失
2.永久修改(修改配置文件)
#vim etc/sysconfig/network -->重启生效,因为linux不能随意重启,故临时永久须同时修改
3.ping 测试与目标主机的连通性 主机名映射<==>名称解析
vim etc/hosts -->主机名解析的文件
格式 -->IP 主机名
4.主流DNS 8.8.8.8和144.144.144.144
2.网卡配置
1.查看网络接口 -->ifconfig(linux中) -->仅显示已激活的网卡 -->ifconfig -a 显示全部网卡
-->ipconfig(windows中)
lo -->local loopback 本地回环网卡,ping本地网卡用于测试网卡是否正常,127.0.0.0只能在主机内工作,本地测试使用
lo网卡不能对外通信
2.永久关闭窗口化导致的网卡错误
1.service NetworkManager stop 关闭当前系统
2.service iptables stop
3.service ip6tables stop
4.chkconfig NetworkManager off 关闭开机启动项
5.chkconfig iptables off
6.chkconfig ip6tables off
7.setenforce 0
8.vim etc/selinux/config Selinux=disabled
3.临时激活网卡
#ifconfig eth0 up <==> #ifup eth0
4.临时关闭网卡
#ifconfig eth0 down <==> #ifdown eth0
5.临时设置ip
#ifconfig eth0 192.168.99.200 natmask 255.255.255.0 <==>ifconfig eth0 192.168.99.200/24
网管为4组8位的二进制数,可以通过/加1的个数来写网关
ip的前24个二进制数为网络位,后八位为主机位,主机位全为0为广播地址,全为1为广播地址,均不可配给主机
6.远程连接 -->通过xshell链接,连接格式 ssh+ip地址 SSH协议
3.永久设置ip和网络配置 -->修改配置文件
1.位置 -->/etc/sysconfig/network-scripts/ifcfg-eth0
2.内容
1.DEVICE=eth0 -->设备名称,要与设备名和文件名对应
2.HWADDR -->硬件地址 可以省略不写
3.TYPE=Ethernet -->网络类型-->万维网
4.UUID -->硬件在系统内的唯一编号 可以省略不写
5.ONBOOT -->网卡是否开机启动,设置为开机启动,yes
6.NM_CONTROLLED -->能否被networkmanager控制,为窗口化的设置 不写
7.BOOTPROTO -->是否启用dhcp(动态主机配置协议,自动分配ip),因为目前要手动设置固定ip,故不使用dhcp协议,写none或static
8.IPADDR -->加入自定义ip
9.NETMASK -->设置子网掩码 -->NETMASK=255.255.255.0 <==>PREFIX=24 <==> IPADDR=192.168.6.6/24
10.GATEWAY -->网关 暂时不需要
eg
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.6.6
NETMASK=255.255.255.0
PREFIX=24
setup也可以设置ip,是红帽公司制作的伪图形化的网络设置,也可以用于设置网卡。
4.一个网卡多个ip设置
1.临时设置 -->#ifconfig eth0:0 192.168.6.6/24 up -->创建新的ip
2.永久修改
1.创建新的配置文件 etc/sysconfig/network-scripts/ifcfg-eth0:0
2.配置文件内容修改 -->修改DEVICE=eth0:0
-->IPADDR和NETMASK重新设置
5.网卡绑定 -->将两个网卡绑定作为一个新的网卡,目的是当一个网卡出现故障时用另一个网卡做备份,故不采用平等分配任务的方式
1.假定三个网卡分别为eth0,eth1,bond0
三个网卡配置文件存放地点都是 etc/sysconfig/network-scripts,分别命名:ifcfg-eth0,ifcfg-eth1,ifcfg-bond0
2.修改配置文件
1.对于eth0、eth1
只更改名字,添加-->MASTER=bond0
-->SLAVE=yes
删除ip,netmask和prefix
2.对于bond0 除了名字外不需要改
3.添加虚拟bond0
1.创建 vim etc/modprobe.d/dist.conf
在最后一行增加 --> alias bond0 bonding
options bonding miimon=100 mode=1 fail_over_mac=1
1.alias bond0 bonding -->用bonding模块生成bond0模块
2.options添加在创建bond0的过程中需要的选项:miimon间隔检测,miimon=100即100ms
3.mode 模式 -->mode=0 平均负载
-->mode=1 自动主备(至少有一个备份)
4.mode=1 fail_over_mac=1 -->仅在虚拟机中需要这么设置,实际工作中不需要这一段
4.删除绑定 -->rmmod bonding
5.查看绑定网卡状态
# cat proc/net/bonding/bond0
6.echo $LANG -->查看当前系统的文字类型和字号
12.硬盘管理
1.传统分区
1.查看硬盘 -->#fdisk -l -->查看全部硬盘
硬盘要经过 -->分区-->格式化-->挂载-->自动挂载 的过程
2.msdos分区方法
1.msdos分区方式 -->分区数量是有限的,仅能创建四个主分区
-->最大仅支持2T的分区,所以按照该方法,尽可以分配8T空间
为了解决主分区仅有4个的问题,引入扩展分区的概念
-->扩展分区与主分区总共也只能有4个,扩展分区内可以在进行分区,且不受数量限制,成为逻辑分区
-->仅有主分区和逻辑分区能储存文件,扩展分区负责管理逻辑分区。
仅有主分区可以做逻辑分区,其他情况下完全相同。
分完主分区,剩下的全给扩展分区即可,且扩展分区仅能有一个。
2.进入分区模式 -->#fdisk dev/sdb
1.键入m可以查看分区模式帮助
2.n -->创建新的分区
1.extended -->e 扩展分区
2.primarypartion-->p 主分区
3.logical -->l 逻辑分区
3.p -->打印当前分区情况
4.d -->删除分区
5.q -->不保存退出
6.w -->保存退出
3.创建文件系统/格式化
#mkfs.ext4 dev/sdb1 -->即可完成对sdb1分区的格式化 -->make filesystem
查看msdos分区情况 -->blkid #fdisk(block id)
4.df -->查看文件系统剩余空间
5.fdisk 命令仅可以操作msdos分区方式。
parted命令可操作多种分区方式(包括msdos、gpt),但常用于gpt分区模式。
3.挂载
1.临时 创建挂载点 -->#mkdir data
挂载 -->#mount dev/sdb1 data
2.开机自动挂载
1./etc/rc.d/rc.local -->开机自动刷新的脚本
-->用于用户个性化设定,每个启动占一行
-->是系统启动过程中最后执行的一个脚本文件,故开机过程中需要使用的挂载不可以写在写在rc.local中
2./etc/fstab -->专门用于文件系统自动挂载的的配置文件 -->每个自动挂载占一行,每行6段,分别为文件系统(UUID),挂载点,文件系统类型,文件系统挂载属性,是否备份,是否检查
1.文件系统: 可以使用blkid查看全部挂载的UUID,粘贴过去即可
2.挂载点: 与临时挂载相同即可
3.文件系统类型:etx4、xfs等 -->光驱文件的文件类型ISO9660
4.挂载属性: 常用为默认值defaults
5.是否备份: 即备份在磁盘中,一般不备份,0
6.是否检查fask:即开机是否检查,有三种 -->0 不检查
-->1 优先级高的检查,即先检查
-->2 优先级低的检查,即后检查
除了根目录和引导分区,其他一般不检查。
eg UUID='*****' data ext4 defaults 0 0
3.自挂载检查
因为要开机自启动,所有在设置完后要检查书写是否有误,用mount -a检查
mount -a挂载全部,若执行无误,则说明自动挂载没有问题
4.移除挂载 umount +挂载点
3.上传到服务器再挂载
#mount -o loop lee.iso mnt/rhel --> -o loop 本地回环挂载,仅在直接挂载iso的时候才需要写,若是光驱挂载则不需要写。
4.#mount -o remoount,re -->若是自动挂载出现问题,则在init 1中如此设置,目的是重新设置根目录的读写权限。
4.gpt分区 在parted模式中操作 -->parted dev/sdb -->加要分区的设备
1.针对大容量磁盘,理论上没有分区数量的限制,最大支持18EB大小的分区。所有分区都是主分区。
2.查看全部分区 #parted -l
parted模式中使用 p-->查看当前分区情况
3.转换分区表 #parted mklabel gpt -->将msdos分区的磁盘转化为用gpt格式分区。
#parted mklabel msdos -->将gpt分区转化为msdos
4.分区
mkpart primary 0 1G -->primary 主分区,所有分区都是主分区 0 起始位置(起点) 1G 截至位置(终点) -->第一个分区1G
mlpart primary 1G 3G -->起点 1G 终点 3G -->第二个分区2G
q保存退出
5.格式化 mkfs.ext4 dev/sdb1
6.gpt对原硬盘重新分区后,需要修改自动挂载
vim etc/fstab 更改UUID及其他修改过的内容。
2.LVM分区方式 -->可以实现容量扩展 -->logic volume manager 逻辑卷管理器
1.介绍 -->lvm是一个产品,是一个管理工具 LVM将多个磁盘用逻辑平台整合成一个逻辑设备。
LVM(logical valume manager)管理 --> LV(logical valume)逻辑卷
|
VG(valume group)卷组
|
PV(physical valume)物理空间
--> 在lvm中,磁盘被称为物理空间,即PV
LV(逻辑卷)=VG(卷组)+PV(物理空间) -->平台 =设备+管理
--> pv中的物理卷大小可以不同,但是同一个逻辑卷内的物理分区(PE)一定是相同的。
--> vg将pv的物理空间分割成n个大小相同的块,成为PE(physical extent)物理分区(屋里单元)
--> LV是有磁盘空间组成的,可以增加物理分区,且物理分区大小没有限制,但所有的物理磁盘都被分割成的大小相同的PE
2.常见指令 -->通过-h查询使用即可
1.物理空间PV -->pvcreate pvremove pvs(简略)pvdisplay(详细) pvmove
2.卷组VG -->vgcreate vgremove vgs vgdisplay vgextend(拓展空间)vgreduce(缩小空间)
3.逻辑卷LV -->lvcreate lvremove lvs lvdiaplay lvextend lvreduce
3.创建LVM分区 -->查看分区信息 proc/partitions
-->首先要准备disk硬盘文件,可以有多个硬盘,也可以通过不同分区实现多个物理空间。
1.创建PV pvcreate dev/sdb1 dev/sdb2
pvs
2.创建VG vgcreate Avg dev/sdb1 dev/sdb2
vgs
3.创建LV lvcreate -n Alv -L 2G Avg -->-n 命名,便于区分使用(可省略) -L 设定size大小,必须写
lvs Alv存在于/dev/Avg/Alv
4.格式化 mkfs.etx4 dev/Avg/Alv
5.挂载 mount dev/Avg/Alv data
4.扩展空间
1.现在创建要增加的空间 pvcreate dev/sdb3
pvs
2.增加VG空间 vgextend -f Avg dev/sdb3 -->-f强制添加,在添加过程中会清空sdb3,会产生咨询,故可以加-f强制执行。
3.增加LV空间 先增加物理空间 lvextend -L +2G dev/Avg/Alv -->增加2G空间
-L 5G -->增加到5G空间
在增加逻辑空间 e2fsck -f dev/Avg/Alv -->先要执行文件系统检查,检查完成后才可以执行逻辑空间扩展
resize2fs dev/Avg/Alv -->执行逻辑空间扩容,使逻辑空间扩大到与物理空间一致。
5.缩小空间
1.缩小卷组vg -->vgreduce Avg dev/sdb2 -->拿走物理空间sdb2
2.缩小LV 先卸载挂载 -->umount dev/Avg/Alv
文件系统检查 -->e2fsck -f dev/Avg/Alv
缩小逻辑边界 -->resize2fs dev/Avg/Alv 2G -->将lv的逻辑空间缩小为2G
缩小物理边界 -->lvreduce -L 2G dev/Avg/Alv -->将lv的逻辑空间缩小为2G
注:因为缩小空间会造成数据丢失,而且不存在缩小空间的情况,故任何情况下都不能缩小LVM空间
13.RAID
1.HBA:主机总线适配器(Host Bus Adapter)
-->作用是在服务器和储存装置间提供输入输出处理和物理连接的电路板或集成电路适配器
-->HBA是服务器内部的I/O通道与储存系统的I/O通道之间的物理连接
主机总线 <-->光纤通道
2.Redundent Array of Independent Disks -->独立磁盘列阵 -->SCSI磁盘使用
3.原理
磁盘列阵作为一个独立的系统在主机外直连或通过网络与主机相连。
UPS -->不间断电源 断电后可以给机房提供一段时间的电,给各用户完成当前工作安全退出的时间
有供电时起稳压器的作用,固定到220V
4.模式
1.RAID0 -->多块磁盘同时进行读写,可以显著提升读写性能,但由于文件切割和合并读取时需要时间,并不是硬盘越多速度越快
-->由于在分个过程中一部分数据储存在多个硬盘中,只要有一个硬盘故障,所有数据就全部失效了
-->由于硬盘存在一定的不可靠性,当磁盘数量增大时,很容易出错
-->RAID0模式没有磁盘冗余能力,由于出错概率很大,不用于储存数据,但可以用于存放swam(内存)
-->由于raid0模式的文件都是平均分配,故使用的硬盘一般要求同一厂家、同一类型、同意大小
-->因为文件是平均分配的,相当于在硬盘中存在一条水平线,故被称为条带
-->磁盘利用率 1
2.RAID1 -->数据在RAID1模式下自动创建镜像,在不同的硬盘中写入完全相同的数据
-->数据在写入磁盘时没有变化,但是在读取时可以从不同的磁盘中同时读取,故可以提升读取速度
-->由于文件自动备份了,只有列阵中所有的磁盘都故障才会导致数据丢失
-->提高了数据的安全性,有磁盘冗余能力,但是磁盘利用率低。
-->无法取代备份,为了避免设备损坏而导致业务终止的,而最常见的数据丢失是逻辑层面的误删除,当逻辑操作删除数据时,镜像文件也会一起删除。
-->磁盘虑用率 1/n
3.RAID4 -->至少需要三块盘,其中两个是数据盘,一个是校验盘,校验盘不存放数据,存放前两块盘数据的异或(相同为假,不同为真)
-->当一块盘出现故障,可以通过另外两块存放的数据计算得到
-->当一块硬盘出错时,导致另外两块硬盘工作量严重增加,更容易出现问题
-->为了避免另两块硬盘故障,会在增加热备盘,当一块硬盘故障时热备盘储存计算得到的数据。
-->磁盘利用率 (n-1)/n
4.RAID5 -->储存方式与4类似,但RAID5中校验信息储存在磁盘中的各个地方,不再单独纯存在一个磁盘
-->避免了存放了数据的硬盘工作量远大于校验盘,使各个硬盘工作量相似
-->磁盘利用率 (n-1)/n
5.RAID10-->至少四块盘 -->数据先按RAID0分割成多个块,在每块存储是,用RAID1模式-->将数据先备份再储存,
-->RAID10 底层做1,上层做0
-->利用率 1/2
6.RAID01-->底层做0,上层做1
-->利用率与RAID10相同,但是安全性不如10,故不用RADI01
7.jbod -->扩展空间,文件按照硬盘顺序书写,不提高速度,不产生冗余
注:软RAID性能特别差
14.DHCP
-->dynamic host configuration protocol动态主机配置协议
-->前身 boot protocal 引导协议
-->以租约的形式进行,客户端的dhcp-client询问网络上dhcp服务器的dhcp-server,获得根据dhcp协议分配的ip,分配后租约有效期12H,在时间进行一半(6H)时发起续租,续租到12H
-->DHCP-Server使用UDP67作为服务端口,DHCP-Client使用UDP68作为服务端口
1.安装DHCP yum install dhcp
2.修改配置文件
先获取模版 cp usr/share/doc/djcp-4*/dhcpd.conf.sample etc/dhcp/dhcpd.conf
修改配置文件 vim etc/dhcp/dhcpd.conf
subnet 192.168.6.0 netmask 255.255.255.0 {
range 192.168.6.15 192.168.6.100;
option routers 192.168.6.6;
}
后面的内容可以删除
3.重启服务 service dhcpd restart
4.查看端口状态 netstat -tunlp
5.修改用户端网卡设置,更改为dhcp获得ip
更换网卡时,会出现新增加的网卡不是从eth0开始,可是删除原有的设备文件,重新识别
> etc/udev/rules.d/70-peisistent-net.rules
6.主机A的dhcp-client请求IP过程 -->tcp/ip模型 应用层、传输层、网络层、物理层
-->应用层首部 加入目标段口67,源端口68 -->打包
-->传输层首部 加入目标IP(广播地址 255.255.255.255)源IP(广播地址) -->打包
-->网络层首部 加入目标mac地址(不知道) 源mac(自己的硬件mac) -->打包
-->帧头 由网卡上的帧头将打包好的文件送入网络中网络中有交换机和路由器
-->交换机用于交换数据,路由器用于跨网段传输,路由器工作时会屏蔽IP为广播地址的请求
-->dhcp在启动时会在内核注册监听67号端口,故所有寻找67好端口的文件内核都会直接传送给dhcpd进程
dhcp-discover -->dhcp-offer -->dhcp-request -->dhcp ack(确认)
-->续租的指令也是dhcp-request -->若一直无法找到dhcp-server,则给自己配一个本地网段的ip 169.254.*.*/16
7.ps -ef 用于查看当前用户所有后台运行的进程
-->常加过滤选项 ps -ef |grep dhcpd
kill指令用于给进程发信号,通常用于杀死进程,故不常用,仅用于通过service命令无法结束进程时使用
-->kill -9相当于kill -s term -->强制关闭,容易丢失数据
-->kill -1 kill -s hup -->平滑重启
-->kill -15 kill -s -->平滑关闭
15.系统启动与服务
1.系统启动流程
1.加载bios -->bioa中包含了cpu的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等。
2.读取MBR -->MBR是硬盘上第0个磁道的第一个扇区,主引导记录,里面存放了预启动信息、分区表信息,大小是512字节。
-->系统找到bios指定的硬盘MBR后,会将其复制到物理内存中。
-->被复制到物理内存的内容就是boot loader,比较常用的一种就是grub。
3.Boot Loader -->在操作系统内核运行之前运行的一段小程序
-->作用:初始化硬件设备,建立内存空间的映射图,为调用操作系统做好准备。
-->常见的有 Grub Lilo spfdisk
-->系统读取内存中的grub配置信息,并依照此配置信息来启动不同的操作系统
4.加载内核 -->根据grub设定的内核映像所在路径,系统读取内核映像并解压缩
-->在解压时,屏幕会显示 Uncompressing Linux 内核解压完成会显示 OK,booting the kernel
-->解压后的内核放置在内存中,调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备完成lunux核心环境的建立。
-->完成内核加载后,基于linux的程序就可以正常运行了。
5.设定运行等级 -->内核加载完成后,执行/sbin/init,会读取/etc/inittab文件。
-->/etc/innittab文件用于设定Linux的运行等级,具体形式是 id:5:initdefault: -->表明要运行在等级5上
6.init执行rc.sysinit -->设定运行等级后,linux执行的第一个用户曾文件就是/etc/rc.d/rc.sysinit脚本程序
-->rc.sysinit脚本的作用是设定PATH,设定网络配置(/etc/sysconfig/netwoek),启动swap分区,设定内存文件(/proc)
7.启动内核模块 -->根据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
8.执行不同级别的脚本程序
-->根据运行级别的不同,系统会运行rc0.d到rc6.d中相应的脚本程序来完成初始化工作和启动相应服务
-->位置:/etc/rc.d
9.执行/etc/rc.d/rc.local
-->rc.local就是在一切初始化工作后,Linux留给用户进行个性化设置的地方,可以把想要开机启动的东西放到这里面,但尽可以存放与开机进程无关的内容,因为开机进程的最后才会读取该文件
10.执行/bin/login
-->进入登录状态,启动完成。
2.服务
1.按照功能分类
1.系统服务:服务对象是Linux系统本身或者linux系统用户(system service)
2.网络服务:服务对象是网络中的其他客户端(clients)(Networking Service)
2.按照启动方式分类
1.独立系统服务:服务启动后,除非系统关闭或管理者手动结束,服务都会在后台自动执行(不论服务有没有被使用),Standalone Service -->独立服务有时也被称为Sys V服务
2.临时服务:客户端需要时被启动,使用完结束服务
3.进程自启动 -->chkconfig
-->chkconfig --list 列出所有可管理的脚本 -->chkconfig --list iptables 查看目标进程
-->chkconfig --iptables on -->进程iptables在2345级别均打开开机自启动
-->chkconfig --level 23 iptables off -->在23级别关闭自启动
-->RHEL6中,默认防火墙是iptables
RHEL7中,默认防火墙是firewalld -->开 systemctl enable firewalld
-->关 systemctl disable firewalld
RHEL7中,系统进程全部使用systemctl管理
16.myaql安装
1.文件上传 利用xshell将配置文件和二进制安装包拷贝至linux虚拟机中/usr/local/src中
2.将my.cnf配置文件移动到/etc中,并覆盖原文件 原文件是系统安装时就产生的无用的文件,直接覆盖即可
3.准备mysql数据文件的安装路径 -->/data/mysql
4.创建mysql用户,要求mysql用户属于mysql组
5.解压二进制安装文件,将解压后的文件移动并重命名为local/mysql
6.将/data/mysql和/usr/local/mysql的属组和属主都改为mysql用户
7.初始化数据库 执行文件/usr/local/mysql/scripts中的 musql_instal_db脚本
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --defaults-file=/etc/my.cnf --user=mysql
8.初始化完成后在/usr/local/mysql/bin中执行文件mysqld-safe
./mysqld-safe --defaults-file=/etc/my.cnf & -->&是为了后台运行,不占用前台
9.添加mysql命令到bash
echo 'path=$path:/usr/local/mysql/bin' >> ~/.bash-profile
9.错误日志 -->/data/mysql/error.log
17.NFS网络共享
1.安装 -->yum install nfs-*
2.创建配置文件 -->vim etc/exports
nfsdir 192.168.6.*/24(rw,no_root_squash)
-->第一部分是文件系统,默认都写/nfsdir
-->第二部分是客户端可以写IP或者hostname(需要有主机映射)/netmask
-->第三部分写文件系统导出权限
先写ugo权限,no_root_squash是指不压缩root用户,在nfs配置中,默认将root用户压缩为nfsnobody。不写就是默认压缩,all_squash是压缩所有用户
3.客户端查看nfs -->showmount -e 192.168.6.6
挂载 -->mount -t nfs 192.168.6.6:/nfs mnt/nfs
4.挂在完成后,客户端动过访问本机的/mnt/nfs即可实现与服务器端的共享。
18.DNS
1.发展过程
1.本地host手动更新,由工作人员手动更新本地host解析文件
2.本地host自动更新,系统自动从ICANN下载。 -->ICANN是网络注册机构运行的一个host库,所有网站注册时都要将ip写入库中。
3.集中解析:本地在需要访问网址时向ICANN询问网址对应的ip地址。 随着pc的增加,ICANN数据库无法负担,建立服务器集群
4.分布式服务器:ICANN服务器建立多层次的分布式服务器集群,逐层授权,由根域,一级域(顶级域),二级域和子域(局域网)组成
1.根域 (.)告诉dns哪个一级域知道该网址对应的ip
2.一级域、顶级域:含有多个服务器群组,常见的有 .com公司 .mil军队 .edu .org组织 .cn.uk.us国家等
3.二级域(组织域):在某个一级域下面会有二级域 如.com下有 .bai .sina等二级域中的域有公司或组织申请
4.子域:建立在组织域下面,为二级域注册公司的内网,通常为局域网。
2.FQDN -->完全限定域名 -->fully qualified qomain name
1.由FQDN解析IP,正向解析
由IP解析FQDN,反向解析
2.www.baidu.com. -->www服务 .baidu二级域 .com一级域 .根域 在web中访问是可以省略最后一个.但在编写配置文件时不可以省略
在配置文件中,以根域.结尾则默认为是绝对FQDN,不再补充当前路径;若不以.结尾,则默认为相对路径,会在补充当前所在的目录。
3.递归询问 -->主机与局域网内的DNS之间的询问方式,主机仅询问DNS一次,就可以从DNS处得到权威答案。
迭代询问 -->主机所在局域网的DNS与ICANN服务器的询问方式。DNS先向根域询问,根域根据FQDN返回该fqdn所归属的一级域,这样的恢复成为参考答案
dns再向一级域询问,直到问道局域网中的dns时才可以得到权威答案,故成为迭代询问
4.根域不为任何人提供递归询问,仅有DNS可以进行递归询问。
DNS会进行缓存,缓存肯定应答和否定应答,储存时间由配置文件给定。
5.安装配置DNS
1.安装DNS -->yum install bind
-->rpm -ql bind
DNS -->协议
bind -->实现软件
named -->进程名称
2.修改配置文件
1.安装软件时产生的配置文件较为复杂,故暂不使用,将其改名后存在原位置以备调用 -->mv etc/named.conf etc/named.conf.bak
2.创建新的配置文件并写入 -->至少要对3个域解析 根域(.)本地域(localhost)127.0.0.1的反向域(1.0.0.127.in-addr.arpa)
vim etc/named.conf
opionts { -->全局变量,若是写在大括号内就是局部变量
directory "/var/named"; -->制定工作地址,后面的文件可以用相对路径书写
};
zone "." IN {
type hint; -->仅.目录的类型是hint,其他目录的文件类型都是master
file "named.ca"; -->区域数据文件,解析时的参考文件
};
zone "localhost" IN {
type master;
file "named.loophost";
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
};
zone "lee.com" IN {
type master;
file "lee.com.zone"; -->没有已存在的区域数据文件时,命名为自己,然后创建自己写。
};
3.创建并编辑需要的区域数据文件 -->区域数据文件中书写的是资源记录 var/named/lee.com.zone
-->格式 name + [ttl(缓存时间)] +IN(internet) +资源记录类型 +value
1.name是要设置的域的名字,如:www,ftp,dns等
2.缓存时间:可以在配置文件第一行为整个文件标明ttl -->$TTL=600
3.资源记录类型
1.SOA -->有且仅有一个SOA记录,必须在区域数据文件的第一个
-->name可以简写为@
-->soa的value 1.当前网络主DNS的FQDN DNS.lee.com
2.当前网络管理员的FQDN admin.lee.com (
2018051601; -->序号,若修改了dns的配置文件,可以通过修改序号使辅助dns立即同步新的dns信息
4H; -->辅助DNS自动同步时间间隔
10m; -->重试时间
7D; -->主DNS无法连接时,辅助DNS工作时间,超过设定的时间主DNS仍无法连接则自杀
1D; -->否定应答缓存时间
)
2.NS -->name可以简写为@
-->可以使用相对路径 -->dns就是相对路径,其对应的绝对路径是dns.lee.com. -->以.结尾默认是绝对路径,否则默认相对路径,则会再补一次
@ IN NS DNS
3.A -->NS中的设备必须有对应的A内容
-->DNS IN A 192.168.6.6
-->www IN A 192.168.6.66
-->NFS IN A 192.168.6.6
4.CNAME -->相当于别名 -->可以使用相对FQDN
-->abc IN CNAME www
5.事例
TTL 600
@ IN SOA DNS.lee.com admin.lee.com(
2018051601;
4H;
10m;
7D;
1D;
)
@ IN NS DNS
DNS IN A 192.168.6.6
www IN A 192.168.6.66
aaa IN CNAME www
4.安装完成后,/etc/rndc.key一般会有问题,故将其更新
-->rndc-confgen -r dev/vrandom -a
5.服务器端安装完成后,对客户端进行修改,给客户端的网卡配DNS -->vim etc/resolv.conf -->写入 nameserver 192.168.6.6
6.修改反向解析的配置文件 -->第二条中缩写的是最简单的配置文件,实际使用中还有很多选线,以安装产生的配置文件为例进行修改
1.将listen-on port 53的选项改为所有人可用 any
将allow-query的选项改为所有可用 any
将部分选项和logging部分加星号使其成为注释
2.在/etc/named.rfc1912.zones文件中写入要添加的正想和反向解析内容
正向 zone "lee.com" IN {
type master;
file "lee.com.zone"; -->没有已存在的区域数据文件时,命名为自己,然后创建自己写。
};
反向 zone :6.168.192.in-addr.arpa" IN {
type master;
file "192.168.6.zone";
};
7.编辑反向解析区域数据文件
1.将正向复制进行修改 cd var/named cp lee.com.zone 192.168.6.zone
2.将区域数据文件中的A格式的文件删掉,改为如下形式
15 IN PTR dns.lee.com
20 IN PTR ftp.lee.com
1 IN PTR www.lee.com
3。与正向想用,有NS就得有对应的PTR,其他内容不必修改
8.安装辅助DNS -->辅助DNS仅需要修改配置文件,区域数据文件会自动同步过来
1.与主DNS一样,修改/etc/named.conf文件,加入/etc/named.rfc1912.zones文件时不同,如下操作
正向 zone "lee.com" IN {
type slave;
masters {
192.168.6.6;
};
file "slave/lee.com.zone";
};
反向 zone :6.168.192.in-addr.arpa" IN {
type slave;
masters {
192.168.6.6;
};
file "slave/192.168.6.zone";
};
9.重启服务即可。
6.测试 -->host -t A www.lee.com [可加制定dns] -->正向解析
-->host -t PTR 192.168.6.1 -->反向解析
-->dig -t A www.lee.com
7.选项acl allow-query 允许提供服务
allow-transfer 允许传送 -->any 所有人
-->localnet 本地用户
-->localhost 本机
-->none 无用户
19.FTP -->文件传输协议的一种,较为原始
1.服务器端server -->vsftpd
客户端client -->ftp
-->客户端连接命令 #ftp 192.168.6.15 -->链接服务器后,直接输入指令是在服务器端操作,输入!加命令实在客户端本机操作。
-->vsftpd安装完成后可以直接使用,可以不修改配置文件。
2.可以为文件/var/ftpd/pub设置facl权限,已达到限制用户读写权限的方法。
3.修改配置文件 -->vim etc/vsftpd/vsftpd.conf
1.格式要求:启用的选项必须顶格,等号两侧不能有空格
#+空格,后面的内容都是注释内容,#后面直接接的内容是未启用的选项
2.anonymous_enable=yes -->是否启用匿名用户
local_enable=yes -->是否启用本地用户
write_enable=yes -->允许用户的写操作
3.chroot -->将用户禁锢在家目录中
chroot_local_user=yes -->启动禁锢
chroot_list_enable=yes -->启动chroot列表
chroot_list_file=/etc/vsftpd/chroot_list -->列表中的用户将会被禁锢
4.查看时间
1.date +"%F %T" -->yyyy-mm-dd hh-mm-ss
date +"%Y%m%d %H%M%S"
创建文件 -->touch 'date +"%Y%m%d %H%M%S"'
修改当前时间 -->date -s "20180517 18:08:00"
5.从另一台服务器上同步时间
1.修改配置文件 vim etc/ntp.conf
先删除4个原有的server
时间同步 service 127.127.1.0
fudge 127.127.1.0 stratum 2
2.打印 ntpd -p
3.同步时间 -->ntpdate 192.168.6.6
20.公私钥--互信
1.ssh协议 监听22号端口,为了安全,可以修改 -->ssh.conf客户端配置文件
-->sshd.conf服务配置文件
vim etc/ssh/sshd.conf port查询端口即可
可以通过netstat -tunpl |grep sshd查询当前使用端口情况
2.生成一对公私钥 xsheel-tools-userker generation wizard创建
3.修改配置文件 -->vim etc/ssh/sshd.comf
PubkeyAuthentication yes 取消注释,选项生效
passwirdAuthentication no 取消密码认证
将公钥名改为authorized-keys
4.互信
1.在本机创建一对公私钥 -->ssh-keygen -t rsa -->用rsa加密算法
2.将公钥传给对方 -->ssh-copy-id -i id_rsa.pub root@192.168.6.15
输入密码即可
5.传送文件 scp+file+user@IP
scp + 源文件 +目标文件
21.HTTP
1.应用层传输协议:dhcp dns ssh nfs ntp ftp http
传输层协议:tcp udp
1.udp -->用户数据报协议-->常用于即时通讯
-->特点是传输快,但该协议只负责发包,不会确认对方有没有收到
2.tcp -->传输控制协议 -->三次握手四次断开
1 2
seq=j------------------>
<----------------ack=j+i,seq=k
ack=k+q----------------> -->三次握手,确认连接
fin=1------------------>
<--------------------ack=1
<--------------------fin=1
ack=1------------------> -->四次断开,首先确认1与2断开,在确认2与1断开
3.DHCP默认在局域网使用,局域网网络环境较好,故使用UDP传输,DHCP-server监听UDP的67端口
FTP追求准确性,故使用TCP传送,FTP监听TCP的21端口
DNS同时使用UDP和TCP传输。为了追求速度,默认使用UDP传输方法,若一直无响应,则使用TCP传送,完成此次信息传送。故同时监听67和21端口
数据库和http为了追求数据的稳定和准确,仅使用TCp传送。
2.数据切割 文件在传送过程中会被切割传送,一个包最大为65536位,即8K,MTU最大允许1500B
传送到目的地后会在拼接起来
3.http -->超文本传送协议
1.html-->超文本协记语言
2.客户端使用浏览器访问即可
3.服务器端 http server/web server
1.http (阿帕奇) apache
2.nginx -->常作为反向代理服务器
3.IIS 微软开发在windows上用
4.lighttpd 轻量级httpd
4.httpd
1.基础页 var/www/html
主页 index.html -->若没有主页则显示欢迎页,若不想显示欢迎页,将其改名或删除即可
2.在有welcone.hmtl的情况下,若存在index则显示主页,若不存在undex则显示欢迎页
在没有welcome的情况下,若存在index则显示主页,若没有index则显示文件索引
3.serivce httpd configtest <===> http -t 测试语法错误
named-checkconf -->检查dns配置文件语法错误
4.netstat -tunpl |grep httpd -->查看使用端口 80
为了更安全更改监听端口 在配置文件中/listen即可查找,更改即可
更改后登录要加端口号 -->http://dns.lee.com:8080
5.client层 用户 <========> dns
|
反向代理层 -->Nginx-->监听80端口,因为阿帕奇服务器较多,如果直接接入公网会占用过的ip,费用较高,故引入反向代理服务器
-->反向代理服务器的作用是:转发用户请求给阿帕奇集群,再将阿帕奇的反馈传给用户,因为仅负责传递,工作量较小
web server层 -->apache服务器集群
-->不占用公网ip,不介入公网,不可以直接与用户传递,不再监听80端口,具体监听的端口由阿帕奇分配
5.高可用
1.负载均衡 -->轮询
-->加权轮询 -->适用于服务器性能不同时
-->ip hash -->固定ip访问的服务器
2.为了避免单点故障,采用高可用的方式,常用的就是主备绑定
6.keepalives
每个nginx服务器上有一个keepalived设备,两个keepalived设备之间会交换当前nginx服务器的情况,若其中一个出现问题,keepalived会告诉我对方,备份的nginx服务器就会开始工作
7.order allow,deny allow from -->设置白名单,除了允许的都禁止
order deny,allow deny from -->设置黑名单,
22.编译安装
1. .rpm -->自动创建目录结构
-->自动创建对应用户
-->使用yum安装,自动解决依赖性问题
2.汇编安装 -->需自行解决目录、用户、依赖性的问题,均须自行创建和安装
1.config 配置 -->检查系统环境,预先配置好环境
2.make 编译 -->语法、句法、词法等
3.make install 安装
3.Nginx安装
1.解压
2.创建用户,安装目录 usr/local/nginx
3.进入解压后的文件,运行安装
./configure --prefix=/usr/local/nginx -->安装路径
--user=nginx
--group=nginx
安装过程中若出现依赖性问题,可以先用yum将其安装 gcc
4.make
5.make install -->完成安装
23.ansible
1.centos安装 -->DXE+DHCP+FTP+KICKSTART -->cobbler +kickstart -->自动化安装centos
配置 -->puppet chef cfengine -->均已被saltstack取代
联动工具 -->ansible
-->现在,ansible已集成了配置和联动的功能,监控仍沿用zabbix
2.优点 -->noclient -->无客户端,客户使用时不需要安装客户端软件
-->no server -->不需要设置专门的服务器
-->基于现成模块
-->YAML -->ansible中的脚本叫playbook,用YAML语言写
有用的文件有 etc/ansible/hosts
usr/bin/ansible
usr/bin/ansible-doc
usr/bin/ansible-playbook
注:使用DHCP协议分发ip时,需要先绑定ip才可以使用ansible自动化运维
3.安装过程
1.安装软件 yum install ansible
2.修改hosts文件 -->vim etc/ansible/hosts
常使用的是分组管理,即
[group_name]
192.168.6.15
***
[group_name2]
192.168.6.16
***
3.配置互信 -->将server机与所有需要管理的服务器配置互信
ssh-keygen -t -isa -P '' -->创建无密码的公私钥
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.6.15
4.测试 -->ansible all -m ping
4.模块使用 -m -->ansible +操作的主机范围(分组) +操作选项+指令
1.查询模块使用方法 -->ansible-doc -s module_name
2.ping模块,用于检查制定机器是否还能联通
3.yum模块,管理软件包
-->config_file yum的配置文件
-->name 要进行操作的软件包的名字,默认是最新版本的,可以通过指明安装包或传递一个路径来安装指定版本
-->state 状态,表示要安装还是卸载
-->present 默认的,安装
-->lastest 安装最新版本
-->absent 删除
eg ansible test -m yum -a 'name=httpd state=latest'
ansible test -m yum -a 'name=hhtp://****/nginx .rpm state=present'
4.copy模块 在远程主机执行复制操作
-->src 后面接要复制到远端主机的文件在本地的地址,接一个路径。如果路径是以/结尾,则只复制路境内的内容,若没有加/则包含目录在内的全部文件都会复制
-->content 用于代替stc,可以直接设定指定文件的值
-->dest 将文件复制到远程主机的绝对路径,若源文件是目录,则该路径也必须是目录
-->directory_mode递归的设置目录的权限,默认为系统默认权限
-->force 若目标主机包含该文件,但内容不同,yes则强制覆盖。,no则不复制
eg
-copy
src:/srv/myfiles/foo.conf
dest:/etc/foo.conf
owner:foo
group:foo
mode:0644 <==>mode:u=rw,g=r,o=r <==>mode:u+re,g-wx,o-rwx
5.user模块 管理用户 -->useradd,usermod,userdel
eg
使用bash shell添加用户james -user:
name:james
shell:/bin/bash
groups:admins,developers
append:yes
删除用户 -user:
name:joind
state:absent
remove:yes
在~/.ssh/id_rsa中为用户jsmith创建ssh密钥
-user:
name:jsmith
genarete_ssh_key:yes
ssh_key_bits:2048
ssh_key_file:.ssh/id_rsa
1.home 制定用户的属组
2.uid 制定用户uid
3.passwd 制定用户密码,不能直接键入,以为是明文传输
4.name 制定用户名
5.createhome 是否创建家目录(yes|no)
6.system 是否为系统用户
7.state 状态,present创建,absent删除
8.remove 当state为absent时,remove=yes相当于userdel -r 连家目录一起删除
9.generate_ssh_key 是否产生ssh密钥,不会覆盖现有
10。ssh_key_passphrase 设置ssh密钥密码,若不提供默认无密码
6.group模块
1.gid 指定gid
2.name 指定用户名
3.stste 创建还是删除
4.system如果是,表示创建的是系统组
eg -group
name:group_name
state:present
7.service模块 -->管理服务,不适用于7
8.cron模块 -->设置定时任务
eg ansible test -m cron -a 'name="data" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 10.0.0.28"'
每个三分钟到主控端更新一次
删除 ansible test -m cron -a 'name="date" stateabsent'
5.YAML语法
1.序列用-代替,同意等级有多个时要加-
2.指令后要加:分割
3.创建 vim addgroup,yaml
编辑 host:aaa -->操作范围
remote_user:root
task:
name:add group dba
group:name=dba gid=1000 system=no -->调用group模块
name:add user oracle
user:name=oracle group=dba uid=2000 system=no
执行 ansible-playbook addgroup.yaml
24.shell语言
1.shell有两种含义 -->命令解释器,即bash命令解释器
-->程序设计语言,主要用于写脚本
2.强引用 -->单引号,单引号内写什么打印出来就是什么,不会进行替换
弱引用 -->双引号,双引号内可以进行变量替换,也可以先执行反引号内的命令然后替换
反引号 -->反引号,反引号内写命令,作用是先执行反引号内的命令,将执行的结果替换反引号部分,在执行其他命令
变量替换 -->echo "$abc" -->将变量abc的值回显
-->echo -n -->取消换行
-->echo -e -->生效反斜线表示的逃逸字符(转移符)
-->echo t -->换表符,-e生效,相当于键入一个tab
-->echo n -->换行,-e生效,相当于键入回车
计算机保存数据的两种方法: -->字符 按照纯ascii码表的方式来解析
-->数值 -->int float double
4.bash类型
1.本地变量 -->作用范围仅限于当前源程序文件,对shell来讲,仅对当前shell进程有效,对其子进程或者其他的shell无限
eg #bash -->进入子shell
#pstree -->查看进程数中pstree的位置
#exit -->退出子shell
-->赋值 -->变量名=value -->dir=/tmp/test abc="123"
-->变量只能用字母、数字、下划线,不建议用全大写,命名风格要一致
2.声明变量:declare -->-i 整数变量
-->-a 数组
-->-r 制度变量
-->-x 环境变量
-->如果名称中含有空格,需要用引号
3.引用变量 -->$abc
-->echo "there r many ${animal}s"
-->unset 直接加变量名,撤销变量,不加$
4.环境变量
-->exprt var_name -->将本地变量转换成环境变量
-->export var_name=value -->直接,命名环境变量
-->declare-x var_name -->声明环境变量
env、printenv、export -->查看环境变量
5.PS1:定义当前命令提示符 -->\h -->显示短主机名
-->\H -->显示完整主机名
PS2:续航符
6.特殊变量:$?
-->程序自身执行的返回值
-->程序执行的状态返回值
成功了 $?的返回值是0,若不成功,则为1-255之间的数
7.变量替换 -->用变量的值替换变量名 -->echo "$abc"
命令替换 -->用命令的执行结果替换命令 -->`***`或$()
5.管道符 -->仅传送正确执行的信息
tee -->一个输如两个输出,常见的是一份保存,一份传送给另一个命令
-->#ls etc |tee tmp/tee.out |tr 'a-z 'A-Z' -->tr 小写变大写
grep -->文本过滤
-i -->匹配过程中不区分大小写
-B# -->显示前免得n行,#后直接接行数
-A# -->显示后面的n行
-C# -->上下文的n行
-->正则表达式
-->. 匹配任意单个字符
-->[] 匹配制定范围内的任意单个字符
-->ls |grep ^[pP] -->用于不区分大小写过滤
-->[^] 匹配制定范围外的单个字符
-->[:space:] 匹配空白字符,包括空格Tab
-->[:punch:] 匹配标点符号
-->匹配次数
-->* 匹配无限次
-->? 只做次数匹配,0次或1次
-->\{m.n\} 最少m次,最多n次
-->锚定符
-->\< 词首锚定 -->\<r..t -->grep `\<root$ 111 -->仅看以root开头
-->\> 词尾 -->\>r..t -->grep `root\>` 111 -->仅看以root结尾
-->^ 行首 -->^r..t -->grep ^root 111
-->$ 行尾 -->r..t$ -->grep root$ 111
-->分组字符 () -->\(ab\)
eg He love his lover.
She like her liker.
He love his liker.
She like her lover.
进行如下操作可以得到不同的结果
1.\(l..e\).*\1r -->前面找到什么,后面就引用什么,\1引用之前括号中所匹配的内容
eg:#grep '\(l..e\).*\1r' 111 (查询内容存放在111中)
he love his lover.
She like her liker.
2.\(l\(..\)e\).*\1r -->\1表示第一个左括号匹配到的内容,\2表示第二个左括号匹配到的内容
eg:#grep '\(l\(..\)e\).*\1r' 111
he love his lover.
She like her liker.
#grep '\(l\(..\)e\).*\2er' 111
he love his lover.
She like her liker.
3.`\([1-3]\).*\1&` -->制定筛选范围,[]仅筛选框中的内容,以筛选内容结尾
6.文本处理命令
1.计数 -->wc(word count) -->wc [ ] ... file_name
-->-l 仅显示行数
-->-w 仅显示单词数
-->-c 仅显示字节数
eg #wc -l -w -c 111
--> 4 16 78 111
2.字符转换或删除字符
-->tr '集合1' '集合2' -->字符替换
-->tr -d ’字符集合 -->删除
3.剪切 -->cut
-->-d 制定分割符
-->-f 指定要显示的段
-->-c 裁剪字符,后直接接裁剪的字符位数 eg cut -c 3-8
-->单个数字一个字段,逗号分割,指定的字段,-表示涵盖的字段
-->常见的切割有两种
1.head -1 etc/passwd |cut -d " " -f 5 head -1 etc/passwd |cut -c 3-7
2.cut -d " " -f 5 etc/passwd
4.排序 -->sort [ ] file
-->-f 忽略字符大小写
-->-n 对数值进行排序
-->-t 制定分割符 -->将文件每一行按指定分隔符切片然后排序选定的片
-->-k 基于指定的字段排序
-->-u(uniq) 重复的行相当于一行-->uniq就是移除重复的行
-->sort -t : k3 -n etc/passwd -->以:为分割符,对第三段基于数值进行排序
5.去重 -->uniq
1.-c 统计每一行出现的次数
2.-d 仅显示重复过的行
3.-u 仅显示为重复的行
-->仅有相邻的重复才算做重复,故现排序在去重
-->sort -u =|sort|uniq
8.逻辑运算符
1.&& -->与 -->如果第一个数为假,结果一定为假-->短路操作符
|| -->或 -->如果第一个数为真,结果一定为真
! -->取反
2.整数比较
1.[ num1 -eq num2 ] -->是否等于
2.[ num1 -ne num2 ] -->是否不等于
3.[ num1 -gt num2 ] -->大于
4.[ num1 -lt num2 ] -->小于
5.[ num1 -ge num2 ] -->大于等于
6.[ num1 -le num2 ] -->小于等于
3.字符串测试
1.'num1'=='num2' -->等值比较
2.!= -->不等值比较
3.-n"$a" -->判断变量中是否含有字符 -->[[ -z $aaa ]] 空为真,不空为假
4.-z"$a" --> -->[[ -n $aaa ]] 不空为真,空为假 -->后接&&或||,相当于条件语句
4.文件测试
1.-e path -->文件是否存在
2.[-f|-d] -->是否为目录、文件
3.-l -->是否为链接
3.[-r|-w|-x] -->是否可读、写、执行
9.循环
1.for循环
eg for i in {1..10}
do
echo $1
done
2.while循环
eg read -p "Input a user: " user
while($user != 'quit')
do
echo `id $user`
done
3.until循环 -->until !=while
eg read -p "Input a user: " user
while($user = 'quit')
do
echo `id $user`
done
10.条件判断
1. --> id $user &> dev/null && echo yes
--> if id $user &> dev/null -->可以使用分号;作为分割符,即;then也可以
then
echo yes
fi
2. --> id $user &> dev/null && echo yes ||echo no
--> if id $user &>/dev/null
then
echo yes
else
echo no
fi
3. --> uid=`id -u $user`
if [$uid -eq 0]
then
echo "$user is admin"
elif [$uid -ge 1 -a $uid -le 499]
then
echo "$user is system"
elif [$uid -ge 500 -a $uid -le 999]
then
echo "instand"
else
echo "none"
fi
11.脚本中,为了便于在不用的使用环境下修改,有很多方法
1.设置变量 dir=/tmp/test1
2.读取外界指令 read dir -->执行脚本时系统会等待键入路径
-->为了可以知道要求输入的是什么,引入-p -->read -p "Input a dir" dir
-->因为有部分内容不希望在输入时被别人看到,引入-s -->read -s -p "Input a dir" dir
eg read -s -p "Input a dir" dir
mkdir $dir
cp etc/profile.d $dir
3.引用位置符 $1 -->其本身就是变量,脚本中直接只用就行,作为变量
-->echo "\$1 is $1" -->在执行时,运行脚本指令后面跟的第一个条件就是$1,系统自动将其捕捉并存为$1
-->在第10个位置符时,应将其引起来
eg -->echo "\$10 is ${10}"
mkdir $1
cp etc/profile.d $1
24.docker
1.安装 安装docker的rpm包和所有环境文件
对于联网环境,仅需要下载对应版本的docker-ce就可以了
-->通过wget命令将ce软件下载下来
通过systemctl enable docker 设置为开机启动
docker --version 可以用于查看当前版本
2.常用命令
1.docker images -->查看本地镜像
2.doker pull --help -->查看帮助
docker pull centos -->下载镜像文件
3.docker load -i centos7.tar -->-i从本地tar文件中读取而不是从在线仓库
4.docker run
--> docker run -it centos -->创建并进入容器
1.cat etc/redhat-release -->查看当前linux版本
-->docker run -t centos cat etc/rehhat-release -->在新创建的容器中执行命令,这里显示的是镜像centos的版本号
5.docker create -->创建容器 -->docker create centos7 bin/bash
6.docker ps -->查看容器
7.docker tag -->创建一个新的标签
docker tag centos:latest centos7:latest -->创建一个完全相同的标签,可以将之前的删除以实现更名
-->image ID相同则是同一个标签
8.docker search centos -->搜索镜像
docker search centos --list 5 -->只显示赞最多的5个
-->带有/的说明不是官方的镜像,是用户上传的
9.docker rmi -->删除镜像 -->可以一次删除多个镜像
-->docker rmi centos busybox -->一次删除多个
-->若同一个镜像有多个标签。只要不是删除最后一个标签,近删除标签,原文件不受影响
删标签时需要确认该标签为创建容器,若已有标签,需先将容器删除
-f 可以强制删除,但会造成数据丢失
10docker rm -->删除容器
3.镜像
1.创建镜像文件
1.docker commit -->基于已有镜像的容器创建
--> -a 添加创建者
docker commit -m "lee test" -a "lee"8c lee:latest
2.docker import -->基于本地模版导入,导入模版镜像
-->cat centos-6-x86-minimal.tar.gz | docker import -centos6:latest
3.docker save -o -->存出镜像
--> docker save -o centos_lee.gz cenros7:lee
4.docker load
5.docker pull -->从仓库中获取所需要的镜像 docker pull centos
6.docker push 192.168.222.33:5000/centos 上传
3.容器
1.创建 docker create centos7 /bin/bash
2.启动容器 docker start centos
3.新建并启动 docker run centos7 /bin/cat /etc/redhat-release
docker run -it centos -->-i 以交互模式运行,-t为容器分配一个伪终端,it通常一起使用
docker run -dt centos -->-d 后台运行
eg -->docker run -dt centos7 /bin/bash -c "while true ;do echo hello ; sleep 3 ; done"
可以通过docker logs be9 查看
4.关闭 docker stop ID -->id可以只写前几位
5.docker inspect -f "{{.state.pid}}" (ID) -->docker inspect ID获取镜像详细信息,-f以特定格式获取部分信息
4.进入容器 docker exec -it ID /bin/bash
5.curl http://192.168.222.150:5000/v2/_catalog 查看私有库里有哪些镜像
6.搭建私有仓库
docker run -d -p 5000:5000 registry
docker tag centos:latest 192.168.222.33:5000/centos
修改docker server的配置文件,在execstart 中添加内容
--insecure-registry 192.168.222.33:5000 保存生效
systemctl daemon-reload
systemctl restart docker
docker push 192.168.222.33:5000/centos -->即可实现上传
curl http://192.168.222.150:5000/v2/_catalog -->查看私有库里有哪些镜像
4.管理
1.删除私有仓库中的镜像
1.docker exec -it 容器ID sh
2.cd /var/lib/registry/docker/registry/v2/repositories/
删除要删除的镜像的目录即可
3.回收空间 registry garbage-collet/etc/docker/registry/comfig.yml
2.docker run -it --rm -v /lilaoshi centos
--rm 一旦容器停止就直接删掉
-v /lilaoshi 在centos容器中创建一个lilaoshi目录
在容器内可以通过ls查看目录情况
docker run -it --rm -v /tmp/lilaoshi:/lilaoshi centos -->制定映射关系,本机的/tmp/lilaoshi对应容器中的/lilaoshi,与-p 5000:5000类似
docker run -it --name web --link db:web centos -->根据centos镜像启动一个名为web的容器并将连接到db容器的链接起一个别名web
5.数据卷
1.docker run -v创建数据卷,可以一次创建多个
docker run -idt --name wahh -v /tmp/wahaha:/hahaha centos /bin/bash
创建一个名叫wahaha的容器,使用-v指定挂载一个本地已有的目录到容器中作为数据卷
2.设定权限
docker run -idt --name wahh -v /tmp/wahaha:/hahaha:ro centos
3.数据卷容器
1.先创建一个数据卷容器
docker run -idt --name dbdata -v /tmp/wahaha:/dbdata centos
2.在其他容器中使用 --volumes-from来挂在dbdata容器中的数据卷
docker run -dt --name db1 --volumes-from dbdata centos
docker run -dt --name db2 --volumes-from dbdata centos
此时,三个容器挂在了同一个/dbdata目录,任何一个的修改都会对三个容器产生变化
4.利用数据卷容器数据迁移
1.docker run --volumes-from dbdata -v $(pwd):/backup centos tar cvf /backup/backtar /dbdata
利用数据卷,将宿主机当前目录挂在到容器的/backup目录上,引用数据倦容奇dbdata,将/dbdata打包存放在/backp中及宿主机当前所在路径,完成备份
2.docker run -v --name dbdata2 -v /dbdata centos
docker run --volumes-from dbdata2 -v $(pwd):/backup centos tar xvf /backup/back.tar
创建一个新的容器,挂载数据卷然后将备份的文件以挂载的方式放到容器内,解压实现恢复
6.容器互联
1.-p 制定端口,后直接加端口数 -->-p 5000:5000 -->本机的5000对应容器的5000端口
-P 随机端口,后面不接数字
2.--link -->容器之间互通
docker run -dt --name centos centos
docker run -dt -P --name web --link centos:centos nginx
创建一个容器web,将web与centos链接,允许web访问centos容器的信息
--link name:alias -->name是要连接的容器的名字,alias是这个链接的别名
3.通过创建链接,避免了数据库等容器直接暴露端口,通过中间容器访问更安全




