目录
网络
七层模型
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
应用层:负责应用程序之间数据沟通-HTTP/FTP
传输层:负责应用程序之间数据传输-TCP/UDP
网络层:负责地址管理与路由选择-IP-路由器
链路层:负责相邻设备之间的数据传输-以太网协议-交换机
物理层:负责物理光电信号的传输-以太网协议-集线器
数据的封装
TCP/IP五层协议及端口号
ARP协议
将IP地址转换成MAC
检测地址是否冲突
TCP协议
三次握手
四次挥手
不同处:
三次握手: 双方各自向对方发起建立连接的请求,再各自给对方回应,只不过,中间的 SYN 和 ACK 能合并在一起
四次挥手: 双方各自向对方发起建立连接的请求,再各自给对方回应,只不过,中间的 FIN 和 ACK 不一定能合并在一起
控制位类型
URG(紧急位)ACK(确认位)PSH(急切位)RST(重置位)SYN(同步位)FIN(断开位)
Seq(序号)ack(确认号)syn(同步号)fin(断开号)
交换机工作原理
1.学习功能
数据帧经过交换机,交换机会自动学习数据帧的源mac地址
2.转发功能
数据帧经过交换机,会在mac表中查找数据帧的目的mac,查找成功,会从相应的接口转发数据
3.查询功能(泛洪.)
数据帧经过交换机,会在mac表中查找数据帧的目的mac,查找失败,会从所有接口转发相同数据(泛洪)
4.刷新功能
交换机默认300s刷新一次mac地址表
网络地址的分类
A 0-127
B 128 -191
C 192 -223
D 224 - 239
私网
10.0.0.0 10.255.255.255
172.16.0.0. 172.31.255.255
192.168.0.0 192.168.255.255
vlan
隔绝广播风暴 划分广播域
网关
不同网段之间通讯 一定是靠网关转发的
linux
软件安装
rpm安装
rpm [选项] rpm软件包
rpm -ivh 软件名
自己安装依赖关系
yum安装
yum -y install 软件名
源来自 本地yum仓库或者网络源
搭建本地仓库
mount /dev/sr0 /mnt 挂载提供安装包
cd /etc/yum.repos.d 切换到固定目录
mkdir bak 建立备份文件夹
mv *.repo bak 将所有的网络源移走 减少干扰
vim xxx.repo 自建配置文件 本地源
[xxx]
name=xxx
baseurl=file:///mnt file:/// 固定格式
gpgcheck=0
yum clean all 清除缓存
yum makecache 重新建立元数据
yum install bind - y 验证
yum install 软件名
yum remove 软件名
编译安装
将源代码 通过编译软件 转成二进制程序。
解压源代码
./configure 检测安装环境,并且选择安装功能
make 将源代码转换成二进制
make install 安装进硬盘,永久保存在硬盘上
永久挂载
/etc/fstab
解挂载 unmount
用户和权限管理
linux 有三大 用户类型
1.超级管理员:最高权限拥有者 root
2.普通用户: 权限受限的用户,
3.程序用户: 不是给人用的,是给程序使用的用户
root 不一定是超级管理员
uid=0 的才是超级管理员
uid 取值的范围
0 是超级管理员
201-999 系统用户
1000-60000 普通用户
/etc/passwd
存放用户信息文件
系统上所有的用户信息 都存在这个文件中
root : x : uid 用户编号 : gid 组编号 : root : /root : /bin/bash
root:用户名
x:密码占位符
0 : uid 用户编号
0: gid 组编号
root: 备注
/root: 家目录的位置
/bin/bash:用户默认加载的 shell 环境
/etc/shadow
存放 用户密码信息的文件
useradd [选项] 用户名
对新建用户的基本信息进行修改
选项:
-u 指定uid
-d 指定家目录
-M 不建立家目录
-s 指定shell类型
-e 账户失效时间 yy-mm-dd
-g 指定基本组的 gid
-G 指定附加组的gid
passwd 用户名 修改密码
-l 锁定用户 ,不让用户登录
-u 解锁
-S 查看是否锁定
-d 清空密码,不需要密码登录
权限:
r w x
读 写 执行
一个普通能被删除和自身权限有关么?
和本身没有关系,只和所在目录有关 必须有 w x
目录必须要有执行权限 ,否则任何事情做不了,目录的最小权限x
rwx rwx rwx --- --- ---
属主 属组 其他
rwx=777 4读 2写 1执行
权限命令 chmod
chmod 777 文件/文件夹 -R 递归
磁盘
分区 逻辑卷 raid
分区
fdisk
fdisk -l 查看所有硬盘
fdisk 设备名 分区 f
fdisk /dev/sdb(硬盘名)
partprobe 刷新
格式化分区 mkfs.xfs或mkfs -t xfs 设备名 mkfs.xfs /dev/sdb1 mkfs.ext4
挂载 mount /dev/sdb1 /mnt/
df 查看
LVM逻辑卷
做逻辑卷分三步:
建物理卷 建卷组 建逻辑卷
物理卷:可以是一整块硬盘,也可以是一个分区(如果改类型)
卷组 : 将物理卷打散成pe 一个pe默认4M
逻辑卷:从卷组中取pe
前3步做完 等于做完分区
逻辑卷建立完成后位置在
/dev/同名的卷组文件夹/和逻辑同名的文件
格式化 安装文件系统
挂载
扩展逻辑卷
1卷组里的空间足够你扩容
2卷组里的空间不足够你扩容
pvcreate
vgcreate 总大小
lvcreate
1.卷组不够,先加物理卷 ,在加入卷组
RAID
raid0:读写性能提升可用空间、无容错能力、不允许坏盘,坏一个会影响整个盘。
最少需要磁盘数:2块
raid1:读写性能提升,写性能略有下降,磁盘利用率50%,有容错能力,允许损坏1块。
最少需要磁盘数:2块
raid5:读、性能提升,写的性能略微降低,利用略n-1、有容错能力,允许最多损坏1块磁盘。
最少需要磁盘数:3块
raid1 0:读写性能提升,每组镜像最多只能坏一块
最少磁盘数:4块
引导和服务
1、加电自检 bios 检测硬件是否正常
2、mbr主引导记录 前446字节中有一个小的grub 软件 后64 字节分区表 2标志位,前446字节叫grub的第一阶段
,引导进入第二阶段,grub第一阶段 十二进制不需要文件系统,也看不懂
3、grub二阶段 加载内核文件 系统内存当中运行起来 这个文件/boot/grub2/grub.cfg存放内核文件
4、加载内核 加载完毕就进入操作系统
5、启动操作系统需要的进程,
systemd服务
进程和计划任务管理
进程:运行的程序就叫进程
ps aux 查看进程 ps -elf
五大性能,关注的系统性能
1、内存 free -h 查看内存
buff cache 读写缓存
2、cpu 使用率:top 动态 ps aux 静态 ps-elf vmstat
3、磁盘容量 剩余 df 分区 fdisk 详细 fdisk -l 设备名
磁盘读写性能 磁盘io: vmstat iostat dd iotop
i 往磁盘里面写 o复制出来
4、网卡流量:iftop
计划任务crontab
crontab -e
* * * * * 绝对路径命令
分 时 日 月 周
系统安全及应用
chattr + i /etcc/passwd 加上就无法删除 -i 就取消这个权限
在/etc/sudoers
文件系统与日志分析
/var/log
当需要了解这个文件有没有被修改过 - Modify Time
当需要了解这个文件最后被查看的时间 - Access Time
当需要了解这个文件权限最后变动的时间 - Change Time
linux网络
ifconfig
在不带任何选项和参数执行 ifconfig 命令时, 将显示当前主机中已启用(活动)的网络接口信息
ifconfig 具体网卡名称 #只显示具体网卡的详细信息(无论该网卡是否启用)
ifconfig -a #表示显示所有网卡包括没有启动的网卡
ifconfig 网卡名称 [up|down] #表示开启或关闭网卡
ifconfig 网络接口 ip地址 [netmask 子网掩码]
ifconfig 网络接口 ip地址[/子网掩码长度]
ifconfig ens33:0 地址 #表示虚拟网卡
查看或设置当前主机名
hostname [主机名]
通过修改/etc/hostname文件来修改主机名
通过hostnamectl来修改主机名
查看或设置主机中路由表信息
route [-n]
-n:将路由记录中的地址信息显示为数字形式
添加 指定网段的路由记录
route add -net 网段地址 gw IP地址
删除指定网段的路由记录
route del -net 网段地址
向路由表中添加默认网关记录
route add default gw IP地址
netstat 选项
服务不能用 ,ftp httpd网页无法访问
-
一般先ping 看能不能通 如果你网络不通 网络调通 防火墙 抓包
-
看看你的服务是否开启 syetemctl status 服务名
-
ss netstat 看看你的 服务端口是否被占用 一个给一个服务 网页 80 你 apache nginx
-
最后看你 服务的配置文件是否正确
ss [选项]
ss 命令:也可以查看网络连接情况,主要用于获取 socket 统计信息,它可以显示和 netstat 命令类似的输出内容。 但 ss 的优势在于它能够显示更多更详细的有关 TCP 和UDP连接状态的信息,而且比 netstat 更快速更高效 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。 ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效 ss命令是Linux CentOS 7中iproute软件包的一部分,默认已经安装。
测试网络连通性 ICMP 协议
格式:
ping [选项] 目标主机
路由追踪
格式:
traceroute IP地址
域名解析 nslookup
格式:
nslook 域名
dig 可以显示出更多详细信息
永久修改网络相关配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
远程同步
scp
tcpdump
网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。
dns域名解析
分为:
正向解析 将域名解析为对应的IP地址
反向解析 将IP地址解析为对应的域名
迭代:不需要去查
递归:需要取自己查
ftp远程传输
被动模式:服务器被动等待数据连接
主动模式:服务器主动发起数据连接
PXE装机
大概过程
-
分配给同一局域网内新加机器的地址(配置文件) dhcp 分配地址 指明tftp 服务器的地址
-
tftp服务端开启 udp 配置 默认关闭
-
安装syslinux 取得 pxelinux.0 文件
-
安装vsftpd服务挂载软件安装源(mount /dev/sr0 /var/ftp/centos7)
-
将四大文件拷入 (/var/lib/tftpboot )
-
initrd.img
-
pxelinux.0 (类似grub)
-
pxelinux.cfg/default (手写)
-
vmlinuz
6.将服务开启,关闭防火墙,selinux
shell脚本
一般shell脚本文件都以.sh结尾
#!/bin/bash
脚本的执行
路径+脚本名 脚本文件对于属主应有执行权限
bash 脚本 直接使用解释器运行脚本,不需要权限
管道符 |
'' 强引用,不识别变量
" " 弱引用,识别变量
{} 确定变量范围
$@ 当成个体返回
$* 当成整体返回
$? 上一次执行结果是否正确 0是正确 非0是不正确
$0 当前脚本的名字
-F 指定分隔符
变量类型:环境变量、只读变量、位置变量、预定义变量
正则表达式
元字符
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符,示例:[zhou] [0-9] [] [a-zA-Z] [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围
广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
Unicode 正则表达式会匹配全角空格符
表示次数
* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符,不包括0次
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\} #匹配前面的字符至多n次,<=n
\{n,\} #匹配前面的字符至少n次
ifconfig ens33|grep netmask|grep -o
[0-9] [0 1 2 3 4 5 6 7 8 9]
位置锚定
^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行 只有root)
^$ #空行
^[[:space:]]*$ # 空白行
\< 或 \b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b #词尾锚定,用于单词模式的右侧
\<PATTERN\> #匹配整个单词
扩展正则表达式
grep -E
egrep
表示分组
() 分组
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
后向引用:\1, \2, ...
| 或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat
文本三剑客grep sed awk
grep [选项]… 查找条件 目标文件
sed [option]... 'script;script;...' [input file...]
选项 自身脚本语法 支持标准输入管道 处理列
awk [options] 'program' var=value file…
awk 选项 模式 处理的动作 处理行
指定 '{print }'
防火墙
防火墙的分类
应用层 进程 程序
表示层
会话层
传输层 端口 防火墙
网络层 ip 路由器 三层
数据链路层 mac 交换机
物理层 定义标准
防火墙工具
iptables
firewalld
nftables
iptables表链结构
四表
raw表:跟踪数据包
mangle表:标记数据包
nat表:修改数据包的源目标IP地址或端口
filter表:过滤数据包
五链
input:处理入站数据包
output:处理进站数据包
forward:处理转发数据包
postrouting:进行路由选择后处理数据包
prerouting:进行路由选择前处理数据包