第一阶段:
第一章节:
启动级别:
运行级别:linux运行级别分为7个级别,分别是0~6级别。
0代表关机(poweroff)、1代表单用户模式、2代表多用户模式,但没有网络服务、3代表完整多用户模式,有网络服务,登陆后进入控制台命令行模式、4运行级别,预留,系统未使用、5代表图形界面、6代表系统正常关闭并重启。
第二章节:全部命令及常用选项
Ctrl +c 强制终止当前命令
Ctrl + l 清屏,等价clear命令
Ctrl +a 光标移动到行首
Ctrl + e 光标移动到行末
Ctrl + u 快速删除当前光标处之前的所有字符内容
Ctrl + z 把命令放入后台,但是并未终止命令
Ctrl + r 在历史命令中搜索
Ctrl + k 快速删除从当前光标处到行尾的所有字符内容
Tab键:可以将输入的不完整命令或文件、目录名自动补齐。
Ls命令,显示指定目录内容及目录中隐藏的文件
-a 显示所有文件,包括以“.”开头隐藏的文件
-l: 使用长列表格式显示
-d:只显示目录本身的属性,不显示目录中的内容,一般结合-l使用
-h:显示目录或文件大小,需要结合-l结合使用,将会显示KB、MB等单位
-R:以递归的方式显示指定目录及其子目录中的所有内容
du命令,统计目录及文件的空间占用情况
-a:统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录
-h:显示出统计结果,使用-h选项后将显示出KB、MB等单位
-s:只统计每个参数所占用的空间总的大小,而不是统计每个子目录,文件的大小, -sh统计一个文件夹内所以文件总共占用的空间大小,-ah分别统计多个文件所占用 的空间大小
软硬链接区别
硬连接 | 软链接(符号链接) |
指向相同inode的多个名称 | 指向原始名称的附加名称 |
只能指向文件 | 可以指向文件或目录 |
所有名称是平等的 | 附加名称可以断开 |
更改源文件名称或者删除原文件 链接依然可以使用 | 更改源文件名称或者删除源文件 链接文件失效 |
不可以跨文件系统创建 | 可以跨多个文件系统创建 |
复制,删除,移动目录和文件
cp命令,复制文件或目录
cp 选项 源文件或者目录 目标文件或者目录
-f:覆盖目标同名文件或目录时不进行提醒,而是直接强制复制
-i:覆盖目标同名文件或目录时提醒用户确认
-p:复制时保持源文件的权限,属主及时间标记等属性不变
-r:复制目录时必须使用此选项,表示递归复制所有文件及子目录
rm,命令,删除文件或目录
-f:删除文件或目录时不进行提醒,而直接强制删除
-i:删除文件或目录时提醒用户确认
-r:删除目录时必须使用此选项,表示递归删除整个目录树(应谨慎使用)
-i:对于已经不在使用的数据(文件或者目录)一般结合“-rf”选项直接进行删除而不 进行提示
查找文件和目录
Which命令,查找用户所执行的命令文件存放的位置
Find命令,查找文件和目录
-type查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
根据日期和时间来查找文件和目录
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
根据大小查找文件
#find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
#find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
#find /tmp -size -2M //查找在/tmp 目录下小于2M的文件
#find /tmp -size +50M -size -100M //找到大于50MB且小于100MB的所有文件。
查看文件内容
cat命令,显示文件的内容
-n:文件中每一行都会显示行号
-b :指定行号指定的方式,主要有两种
-b a :表示不论是否为空行,也同样列出行号
-b t :如果有空行,空的那一行不要列出行号
more和less命令,分页查看文件内容
head和tail命令,查看文件开头或末尾的部分内容
sort命令,它将文件进行排序
-n 按照数字进行排序
-t 此例中指定 : 为分隔符
-k 此例中按照分割的第二区域进行排序
-f排序时,将小写字母视为大写字母
-M将前面3个字母依照月份的缩写进行排序
-r反向排序
-o将排序的结果输出到源文件
uniq命令,用户去除文件中的重复行,一般与sort命令结合使用。
-c或--count:在每列旁边显示该行重复出现的次数;
-i: 忽略大小写。
-d或--repeated:仅显示重复出现的行列;
-u或--unique:仅显示出一次的行列;
统计和检索文件内容
wc命令
-c:统计文件内容中的字节数
-l:统计文件内容中的行数
-w:统计文件内容中的单词个数(以空格或指标位作为分隔)
grep命令,检索、过滤文件内容
-i 忽略大小写
-v 取反
^ 以某关键字开头
$ 以某关键字结尾
^$ 空行
-l 一般和-r联用, 只显示包含关键字的文件的名字, 而不是显示文件内容
-r 递归检索
-q quiet 静默输出 一般在写脚本时候用
-n 显示匹配行的行号
备份与恢复文档
gzip和gunzip命令
压缩和解压
bzip2和bunzip2命令
压缩和解压
zip和unzip命令
-d:从压缩文件内删除指定的文件/把压缩文件解压到指定目录中
-r:递归处理,将指定目录下的所有文件和子目录一并处
-m:把文件移到压缩文件中
-v:查看压缩文件中的内容,但不解压,结合unzip命令使用,unzip-v压缩文件
-x:压缩时排除符合条件的文件
tar归档和释放命令
-c:创建(create).tar格式的包文件
-C:解压时指定释放的目标文件夹
-f:表示使用归档文件
-j:调用bzip2程序进行压缩或解压
-p:打包时保留文件及目录的权限
-P:打包时保留文件及目录的绝对路径
-t:列表查看保内的文件
-v:输出详细信息
-x:解开.tar格式的包文件
-z:调用gzip程序进行压缩或解压
Vi文本编辑器
三种不同的工作模式,即命令模式、输入模式和末行模式
命令模式:
a:在当前光标位置之后插入内容
A:在光标所在行的末尾(行尾)插入内容
i:在当前光标位置之前插入内容
l:在光标所在行的后面插入一个新行
o:在光标所在行的后面插入一个新行
O:在光标所在行的前面插入一个新行
末行模式:
对文件保存退出:wq(x!),保存:w,退出:q,强制退出:q!
Cut命令
-f:显示指定字段的内容
-d:指定字段的分隔符,默认的字段分隔符为“TAB”
-c:表示字符
第三章节:rpm包查询及安装和依赖,源码安装及优点
Rpm包管理命令
-qa:查看系统中已安装的所有RPM软件包列表 -qi:查看指定软件的详细信息
-ql:查询指定软件包所安装的目录、文件列表
-qc:仅显示指定软件包安装的配置文件
-qd:仅显示指定软件包安装的文档文件
-qf: 查询文件或目录属于哪个RPM软件
查询未安装的RPM包文件
-qpi:通过.rpm包文件查看该软件的详细信息
-qpl:查看.rpm安装包内所包含的目录、文件列表
-qpc:查看.rpm安装包内包含的配置文件列表
-qpd:查看.rpm安装包内包含的文档文件列表
安装或升级RPM软件
-i:安装一个新的rpm软件包
-U:升级某个rpm软件,若原本未装,则进行安装
-F:更新某个rpm软件,若原本未装,则放弃安装
-v:显示软件安装过程中的详细信息
-h:在安装或升级软件包的过程中,以“#”好显示安装进度
-e:卸载指定的RPM软件,格式:rpm -e 软件名
--force:强制安装所指定的rpm软件包
--nodeps:安装、升级或卸载软件时,忽略依赖关系
依赖
Rpm包一般是树形依赖A-B-C-D,安装时要从后往前安装先从D包开始、然后是C包......最后到A包。环形依赖:A-B-C-D-A
源码安装的优点
获得最新软件版本,及时修复bug
根据用户需要,灵活定制软件功能
兼容性好
第四章节:用户及组命令,sudo ACL
用户
useradd命令,添加用户账户
常用命令选项
-u:指定 UID 标记号
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或UID号)
-G:指定用户的附加组名(或GID号)
-M:不为用户建立并初始化宿主目录
-s:指定用户的登录Shell
passwd命令,为用户账号设置密码
常用命令选项
-d:清空用户的密码,使之无需密码即可登录
-l:锁定用户帐号
-S:查看用户帐号的状态(是否被锁定)
-u:解锁用户帐号
su命令,切换用户
usermod命令,修改用户账户
常用命令选项
-l:更改用户帐号的登录名称
-L:锁定用户账户
-U:解锁用户账户
userdel命令,删除用户账号
userdel [-r] 用户名
添加 -r 选项时:表示连用户的宿主目录一并删除
gpasswd命令:设置组帐号密码(极少用)、添加/删除组成员
命令选项:
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
groupdel:删除组账号
权限管理之acl选项
setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录名
-m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除所有的 ACL 配置参数;
-k :移除默认的 ACL 参数;
-R :递归配置 acl;
-d :配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;
我们可以通过setfacl 命令的 -x 选项来删除指定用户或组的 ACL 权限,
通过sudo提权
格式:sudo [-u 用户名] 命令操作
youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL
第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.
第五章节:磁盘 512--446-64-2 2种磁盘格式 磁盘的命名 磁盘分区 加载文件系统 LVM 阵列(三个阵列的优缺点) 会做RAID5
512-446-64-2
他一共512字节,前446字节是grub引导程序,这个会在后面学习;中间64字节是分区表,每个分区需要16个字节表示,因此主分区和扩展分区一共只能有4个分区,超过4个的分区只能从扩展分区上再设置逻辑分区来表示。每个分区的大小无法超过2T。 MBR的最后2个字节是结束符号
2种磁盘格式:MBR GPT
磁盘命名:IDE磁盘用hd表示 SCSI磁盘用sd表示
加载文件系统:mkfs.xfs /dev/sdb1
在分区中创建文件系统:mkfs -t xfs /dev/sdb1 或mkfs.xfs /dev/sdb1
Lvm逻辑卷管理:lvm逻辑卷从vg卷组种分割来,vg卷组是由pv物理卷所组成。
阵列
Raid0(条带化存储)
优点:将数据分段存储于各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍
缺点:没有数据冗余,单个磁盘的损坏会导致数据的不可修复
Rais1(镜像存储)
优点:具有100%数据冗余,提供最高的数据安全保障,理论上可以实现2倍的读取效率,设计和使用比较简单
缺点:空间利用率只有50%,在写性能方面略有下降。
Raid5
优点:读性能较高,中等的写性能,校验信息的分布方式存取,避免出现写操作的瓶颈
缺点:控制器设计复杂,磁盘重建的过程比较复杂
创建RAID5命令 mdadm -C /dev/md0 -l5 -n4 -x1 /dev/sd[b-f]
第六章节:熟练使用查看进行的命令及命令显示结果所包含的内容
Ps命令,查看静态的进程统计信息
a:显示当前终端下的所有进程信息,包括其他用户的进程。与x选项结合时将显示系 统中所有的进程信息。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程信息。
-e:显示系统内的所有进程信息。
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
执行ps aux 命令
USER:启动该进程的用户账号的名称
• PID :该进程在系统中的ID号。
• %CPU:该进程使用的 CPU 资源百分比;
• %MEM:该进程所占用的物理内存百分比;
• VSZ :该进程使用掉的虚拟内存大小,默认单位 (Kbytes)
• RSS :该进程占用常驻内存大小(物理内存),默认单位 (Kbytes)
• TTY :该进程是在那个终端上运行,若与终端无关,则显示 ?,另外, tty1-tty6 是本机上登录的终端,若为 pts/0 等等的,则表示为由网络远程连接到主机的。
• STAT:该程序当前的状态,主要的状态有:
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (暂时没正在运行,后台挂着,通常是系统服务或网 络服务);
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆 尸) 程序的状态
<:高优先级
N :低优先级
s:父进程
+:前台进程
• START:该进程被启动的时间;
• TIME :该进程实际使用 CPU 的时间。
• COMMAND:启动该进程的命令的名称
执行ps -elf 命令
F:进程标志,说明这个进程的权限,号码4代表是root,1则代表仅可被复制(fork), 而无法实际执行(exec)
S:STAT进程的状态
UID:进程的用户
PID:进程的标识号
PPID:父进程
C:cpu的使用率
PRI:进程的优先级(priority) ,被cpu所执行的优先级,数值越小越优先 ,数值越 高优先级
NI:谦让值(nice谦让值为-20~19) 数值越高优先值越低
ADDR、 SZ(使用掉的内存大小)、 WCHAN:都与内存相关
STIME:开启程序的时间
TTY:在哪个终端上运行
TIME:占用cpu的时间
CMD:终端上进程的名字
Top命令 动态的监控进程活动与系统负载信息,
第一行为任务队列信息,具体内容如表所示:
内 容 | 说 明 |
21:17:00 | 系统当前时间 |
up 9:47 | 系统的运行时间.本机己经运行 0 天 9 小时 47 分钟 |
2 users | 当前系统的登录用户数 |
load average: 0.00,0.01,0.05 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数) |
第二行为进程信息,具体内容如表所示:
内 容 | 说 明 |
Tasks: 150 total | 当前系统中的进程总数 |
1 running | 正在运行的进程数 |
149 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检査僵尸进程 |
第三行为 CPU 信息,具体内容如表所示:
内 容 | 说 明 |
0.1 us | 用户进程占用的 CPU 百分比 |
0.1sy | 系统内核进程占用的 CPU 百分比 |
0.0ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.7id | 空闲 CPU 占用的 CPU 百分比 |
0.1wa | 等待输入/输出的进程占用的 CPU 百分比 wait |
0.0hi | 硬中断请求服务占用的 CPU 百分比 |
0.1si | 软中断请求服务占用的 CPU 百分比 |
0.0st | st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU等待实际CPU的时间百分比 |
wa:
CPU 等待磁盘 IO 操作的时间。和 CPU 的处理速度相比,磁盘 IO 操作是非常慢的。有很多这样的操作,比如:CPU 在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU 只能处于空闲状态。Linux 系统在计算系统平均负载时会把 CPU 等待 IO 操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过 wa 来判断系统的性能瓶颈是不是过多的 IO 操作造成的。
hi & si:
这两个值表示系统处理中断消耗的时间。中断分为硬中断和软中断,hi 表示处理硬中断消耗的时间,si 表示处理软中断消耗的时间。硬中断是硬盘、网卡等硬件设备发送给 CPU 的中断消息,当 CPU 收到中断消息后需要进行适当的处理(消耗 CPU 时间)。软中断是由程序发出的中断,最终也会执行相应的处理程序(消耗 CPU 时间)。
st:
只有 Linux 在作为虚拟机运行时 st 才是有意义的。它表示虚机等待 CPU 资源的时间(虚机分到的是虚拟 CPU,当需要真实的 CPU 时,可能真实的 CPU 正在运行其它虚机的任务,所以需要等待)。
第四行为物理内存信息,具体内容如表所示:
内 容 | 说 明 |
Mem: 1863252 total | 物理内存的总量,单位为KB |
172208 used | 己经使用的物理内存数量 |
1429964 free | 空闲的物理内存数量。 |
261080 buff/cache | 作为缓冲的内存数量 |
我们还要解释一下缓冲(buffer)和缓存(cache)的区别:
缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
第五行为交换分区(swap虚拟内存)信息,如表所示:
内 容 | 说 明 |
Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
Ok used | 已经使用的交换分区的大小 |
2097148 free | 空闲交换分区的大小 |
1481544 avail Mem | 估计有多少内存可用于启动新程序,即系统可用内存 |
通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
再来看 top 命令的第二部分输出,主要是系统进程信息。这部分和 ps 命令的输出比较类似,只是如果在终端执行 top 命令,则不能看到所有的进程,而只能看到占比靠前的进程。
- PID:进程的 ID。
- USER:该进程所属的用户。
- PR:优先级,数值越小优先级越高。
- NI:优先级,数值越小、优先级越高。
- VIRT:该进程使用的虚拟内存的大小,单位为 KB。
- RES:该进程使用的物理内存的大小,单位为 KB。
- SHR:共享内存大小,单位为 KB。
- S:进程状态。
- %CPU:该进程占用 CPU 的百分比。
- %MEM:该进程占用内存的百分比。
- TIME+:该进程共占用的 CPU 时间。
- COMMAND:进程的命令名。
第七章节:启动流程
开机自检 > MBR引导 > GRUB菜单 > 加载内核 > centos7 第一个运行的进程 > 读取运行级别 > 初始化系统 > 并行启动服务 > 显示login界面
第八章节:网络命令使用 DHCP(1.什么情况使用DHCP,2.DHCP做什么的3.优缺点4.端口号及协议)
Netstat命令查看网络连接情况
选项
-a:显示当前主机中所有连接的网络连接信息
-n:以数字的形式显示相关的主机地址、端口等信息
-r:显示Routing Table;
-t:显示TCP传输协议的连线状况;
-u:显示UDP传输协议的连线状况;
-l :仅列出有在 Listen (监听) 的服务状态
-p:显示与网络连接相关的进程号、进程名称信息
Ss命令查看网络的连接情况
Ping命令测试网络的连通性
Traceroute命令跟踪数据包的路由路径
Nslokkup命令测试DNS域名解析
Ifconfig命令
DHCP什么情况下使用:
当一台计算机第一次运行引导程序,其ROM中没有该主机的IP地址,子网掩码或某个域名服务器的IP地址,DNCP就是自动给计算机分配IP地址使用的
它是做什么的?
给网络中的主机或设备自动分配IP地址, DNS服务器地址,网关地址等网络参数
优点:自动分配IP地址,方便管理,会同时租借相同的IP地址给两台主机,不需要重新设置IP地址。每次都自动获取IP地址就可以
缺点:ip随机分配,具有不确定性,访问权限变化,不可被访问(IP具有不确定性),安全性差
使用utd协议,67端口代表服务端,68代表客户端
第九章节:FTP(1.端口及协议 2.主被动模式 3.优缺点)
使用tcp协议,21端口用于建立控制连接,并传输指令,20端口用于建立数据连接,并传输文件数据
主动模式:客户端随机开放一个大于1024的端口,向服务器的端口发起连接,并且开启一个监听的端口,最后数据在20端口传输
被动模式:客户端随机开放一个大于1024的端口,向服务器的端口发起连接,服务器也开启一个大于1024端口,最后用户在20端口拉取数据
优点:完全基于网络,覆盖范围广,操作更加灵活
缺点:字符界面的ftp命令复杂,繁多
第十章节:DNS(1.端口及协议 2.解析流程 3.迭代查询和递归查询 4.域 5.A SPR SOA 6.DNS服务器分类)
使用协议:utp协议,udp53用来做dns解析,tcp53用来做dns主从复制
<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
<2> 当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS 信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
<3> 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
<4> 本地服务器再向返回的域名服务器发送请求。
<5> 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。
<6> 本地域名服务器将查询请求发送给返回的DNS 服务器。
<7> 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS 信息,查询过程 将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
<8> 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
A记录:也称为主句记录,使用最广泛的DNS记录,是把FQND映射到IP地址上(域名映射到IP上)
Cname资源记录:别名记录
Ptr资源记录:相对于A记录,把ip地址映射到FQND上(IP因映射域名),用于反向查询
NS记录:记录是域名服务器记录,用来指定该域名由哪些DNS服务器来进行解析。
Soa记录:NS记录说明说明了那台服务器在解析,没有说谁是主服务器,SOA中记录了那台是主服务器
Mx资源记录:邮件交换(MX)资源记录,在使用邮件服务器的时候,是不可缺少的
(1)递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果(解析成功或解析失败)回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询
DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
上图中的步骤1和8就是递归查询,2、3、4、5、6、7是迭代查询过程。
第十一章:ssh 会用命令进行文件及目录传输 2个验证
两个认证:
1)基于口令认证
基于口令的安全验证的方式就是使用服务器中系统帐号对应的密码,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。这要求输入的密码具有足够的复杂度才能具有更高的安全性(口令认证会受到“中间人”这种方式的攻击)。
2)基于密钥认证
基于密钥的安全验证必须为用户创建一对密钥(公钥和私钥),并把公钥放在需要访问的SSH服务器上,私钥存放在ssh客户端。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找公钥,然后把它和发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”,并把它发送给客户端软件。客户端收到质询之后,就可以用本地的私钥解密再把它发送给服务器。这种方式是相当安全的。
第十二章:rsync 1.原理 2.sersync+rsync的原理
rsync是一个Unix/linux系统下的文件同步和传输工具。提供了一个客户机和远程服务器的文件同步的快速方法。
原理
rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字
第十三章:NFS的原理 RPC
NFS就是Network File System(网络文件系统)的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件
NFS是通过网络来进行服务器端和客户端之间的数据传输,两者之间要传输数据就要有想对应的网络端口,基本上NFS服务器使用tcp 2049端口用于建立连接,但由于文件系统非常复杂,每次的开启的端口都是随机的,这个时候就使用RPC协议来完成,它统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息
RPC
当NFS每次开启的时候开启的端口都是随机的,这个时候NFS就会向RPC去注册端口,而注册的这些端口都会被记录下来,并且RPC对外开放的是111端口,所以用户可以通过RPC来实现实际端口数据的传输了
第十四章:防火墙 内核+用户 开放端口
服务器检查服务没有问题但是客户端不能链接
第二阶段:
shell脚本:
test表达式
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下:
文件比较
字符串比较
操作符 | 说明 | 示例 |
== | 判断两个字符串是否相等 | [ “$a” == “$b” ] |
!= | 判断两个字符串是否不相等 | [ “$a” != “$b” ] |
-z 字符串 | 判断字符串是否为空 | [ -z “$a” ] |
-n 字符串 | 判断字符串是否不为空 | [ -n “$a” ] |
str1 > str2 | 判断字符串str1是否大于str2 | [ “str1” \> “str2” ] |
str1 < str2 | 判断字符串str1是否小于str2 | [ “str1” \< “str2” ] |
逻辑操作符
注:[[ ]]是扩展test命令,&& 、|| 、> 、<像这样符号可以用在[[ ]]中,不能用在[ ]中。
if
在shell脚本应用中,if语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作,根据不同的复杂程度,if语句的选择结构可以分为三种基本类型,使用于不同的应用场合
单分支:单分支 if 条件语句最为简单,如果符合条件则执行某个程序,否则什么事情都不做
if [ 条件判断 ] ; then
commands
fi
在使用单分支 if 条件查询时需要注意几点:
if 语句使用 fi 结尾。
双分支:在双分支 if 条件语句中,当条件判断式成立时,则执行某个程序;当条件判断式不成立时,则执行另一个程序
if [ 条件判断 ]
then
commands
else
commands
fi
多分支:在多分支 if 条件语句中,允许执行多次判断。也就是当条件判断 1 成立时,执行程序 1;当条件判断 2 成立时,执行程序 2;依次类推,当所有条件不成立时,执行最后的程序
If [ 条件判断1 ] ; then
commands
elif [ 条件判断2 ] ; then
commands
elif [ 条件判断3 ] ; then
commands
.......
else
commands
Fi
case
流程控制语句:制语句即用来实现对程序流程的选择、循环、转向和返回等进行控制,case是根据变量的不同取值进行比较,然后针对不同的取值分别执行不同的命令操作
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
*)
;;
默认命令序列
esac
for
使用for循环语句时,需要指定一个变量及取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量值用完退出循环,for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环
语法格式:
for 变量名 in 变量取值列表
do
commands
done
while
重复判断条件测试操作,只要条件成立就反复执行对应的命令序列(循环体),直到条件测试不成立或为假
语法格式:
while 条件测试操作
do
命令序列
done
正则表达式
正则表达式,是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的分割,匹配、査找及替换操作,在正则表达式中,我们把用于匹配的特殊符号又称作元字符。在shell中,元字 符又分为基础元字符(BRE)和扩展元字符(ERE)。
基础元字符:
基础元字符 | |
元字符 | 作 用 |
* | 匹配前面的一个字符或子表达式0次或任意多次。如:a*hello匹配所有0个或多个a后,紧跟hello的行。即hello前面可以有任意多个a。 |
. | 匹配除换行符和回车符(“\n”和"\r")外的任意一个字符。例如:l..e匹配包含一个l,后跟两个任意字符,然后跟一个e的行。 |
.* | 表示匹配任意长度字符串 |
^ | 匹配行首。例如,^hello 会匹配以 hello 开头的行。 |
$ | 匹配行尾。例如,hello$ 会匹配以 hello 结尾的行 |
^$ | 匹配空行 |
[] | 匹配中括号中指定的任意一个字符,而且只匹配一个字符。例如[aoeiu]匹配任意一个元音字母, [0-9] 匹配任意一位数字,[a-z][0-9] 匹配由小写字母和一位数字构成的两位字符,[a-zA-Z] 匹配任意一位英文字母 |
[^] | 匹配除中括号中的字符以外的任意一个字符。例如,[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母, 注意:可以用^标记做[]内的前缀,表示除[]内的字符以外的任意一个字符。比如:搜索oo前没有g的字符串的行,应用 '[^g]oo' 作搜索字符串。^符号如果出现在[]的起始位置表示否定,但是在[]的其他位置是普通字符。[^ab^c] 匹配除了a、b、^、c以外的任意单个字符。 |
\ | 转义符,用于取消特殊符号的含义,使该特殊字符成为普通字符。例如:^\.[0-9][0-9]表示匹配以一个句点和两个数字开始。 |
\{n\} | 表示其前面的字符出现 n 次。例如,[0-9]\{4\} 匹配4位数字,1[35-9][0-9]\{9\} 匹配手机号码。 |
\{n,\} | 表示其前面的字符出现不少于 n 次。例如,[0-9]\{2,\} 匹配两位及以上的数字 |
\{n,m\} | 表示其前面的字符至少出现 n 次,最多出现 m 次。例如,[a-z]\{6,8\} 匹配 6〜8 位的小写字母 |
\< \> | 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。 |
扩展元字符
扩展元字符 | 描述 |
+ | 匹配前面的一个字符或子表达式1次或任意多次。 egrep “go+gle” filename或grep -E “go+gel” filename |
? | 匹配前面的一个字符或子表达式零次或一次。例如:如 “colou?r” 可以匹配 “colour” 或 “color” |
| | 表示或。如“was|his”既会匹配包含“was”的行,或匹配包含“his”的行 |
() | 将括号里的内容看成是一个整体。可以理解为由多个单个字符组成的大字符。 |
sed
sed 命令的基本格式:
sed [选项] ‘[动作指令]’ filename
选项:
-n 默认情况下,sed 会在动作指令执行完毕后,自动输出处理后的内容,而该选项会屏蔽默认输出。
-e 执行多个sed指令
-i 此选项会直接修改源文件,要慎用,修改前建议先备份源文件。
-i.bak 编辑源文件的同时创造.bak的备份
-r 使用扩展的正则表达式
动作指令:
p 打印 ,输出指定的行
S 替换,替换指定字符串
d 删除,删除行
a 增加行,在当前行下面插入文件
i 增加行,在当前行上面插入文件
c 把选定的行改为新的指定的文本
r 读取文件,即用于将一个独立文件的数据插入到当前数据流的指定位置
w 另存为
Awk
AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一,awk也是一个数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个字段来处理
awk 命令的基本格式为:
awk [-F field-separator] 'commands' filename
选项 | 含义 |
-F fs | 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符。 |
-v var=val | 在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val。 |
匹配规则:一般使用关系表达式作为条件。这些关系表达式非常多
条件类型 | 条 件 | 说 明 |
awk保留字 | BEGIN | 在awk程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次 |
awk保留字 | END | 在awk程序处理完所有数据,即将结束时执行。END 后的动作只在程序结束时执行一次 |
关系运算符 | > | 大于 |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 | |
== | 等于。用于判断两个值是否相等。如果是给变量赋值,则使用"=” | |
!= | 不等于 | |
匹配表达式 | ~(匹配) | value ~ /regexp/ 如果value匹配/regexp/,则返回真 |
!~(不匹配) | value !~ /regexp/ 如果value不匹配/regexp/,则返回真 | |
正则表达式 | /正则表达式/ | 如果在“//”中可以写入字符,则也可以支持正则表达式,如:/root/表示匹配含有root的行。 |
逻辑运算符 | && | 逻辑与 |
|| | 逻辑或 |