1. 总结linux安全模型
Linux安全模型的资源分派是由认证(Authentication)授权(Authorization)审计(Accouting|Audition)的方式实现资源的分派,当一个用户成功登录时系统会自动分配一个令牌token,包含用户表示和组成员等信息。
当一个用户登录了Linux,系统会通过给用户发送User ID (UID)类似身份证号的数字ID,来去认证识别用户,不同的UID代表不同的用户,其中root用户分配UID为0,普通用户则会自动分配1-60000,其中系统用户:1-499(Centos6之前),1-999(Centos7之后)的UID。当一个或者多个用户加入用户组时,系统会通过发放Group ID (GID)来去标识组里各个成员的用户组ID,root组GID分配为0,普通组分配为500之后(Centos6之前),1000以后(Centos7以后)给用户使用。
用户和组之间的关系分为两种:
1.用户和主要组:用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,作为用户的主要组,由此组中只有一个用户,又称为私有组。
2.用户的附加组:一个用户可以属于零个或多个辅助组,附属组。
Linux当中的程序,进程,以及进程发起者的身份运行,能访问的资源权限取决于进程的运行者的身份。
其用户的权限授权分别以可读(r)可写(w)可执行(x)的使用方式赋予使用者相应的操作权限,来去保证系统的安全。
2. 总结学过的权限,属性及ACL相关命令及选项,示例
Linux的权限分为三种:常规权限,特殊权限以及特殊属性。
常规权限分为:
r(可读)w(可写)x(可执行)
其中在Linux权限下,分别可以为所有者,所属组,其他组设置相应的权限:
- rwx r-x r-x
u (所有者) g(所属组) o(其他组)
设置权限的方式为两种,一种通过二进制转换八进制的计算,输入数字来去属于权限:
每一个权限的二进制分别对应数字为:
r- - = 100
- w - =010
- - x = 001
- - - =0
二进制转换为二进制对应的数字为:
r=4
w=2
x=1
-=0
为三个组赋予相应的权限对应数字为:
rwx=7 (4+2+1)
rw-=6 (4+2+0)
r-x=5 (4+0+1)
赋予权限的操作命令:chmod [可选项] <mode> <file...>
示例:
为文件创建所有rwx权限:
chmod 777 ceshi.txt
为所有者创建所有权限,所属组和其他组只创建r-x属性
chmod 755 ceshi.txt
只有所有者对文件持有所有权限,所属组和其他组没有任何权限:
chmod 700 ceshi.txt
另外一种赋予权限的方式通过-=+直接赋予u、g、o相应的权限:
示例:
为所有者创建所有权限,所属组和其他组只创建r-x属性
chmod u=rwx,g=r-x,o=r-x ceshi.txt
以下是Linux的特殊权限:
SUID:作用于二进制可执行文件上,用户执行此程序时将继承此程序所有者的权限
去掉程序的SUID权限 chmod u-s /usr/bin/cat 增加权限chmod 4755 /usr/bin/cat
SGID:作用于二进制可执行文件上,用户执行此程序时将继承此程序所有组的权限
作用于目录上,此目录中新建的文件的所属组将自动从此目录继承
SGID 增加权限chmod 2755 /usr/bin/cat
Sticky:作用于目录上,此目录中的文件只能由所有者自己来删除
t粘滞位 chmod 1755 /tmp
特殊属性:
设置文件特殊属性,可以访问root用户,防止误操作或修改文件(也就是限制root用户操作)
chattr和lsattr
示例:
不能删除 不能改名 不能修改
Chattr +i 文件名
只能追求加内容 不能删除 不能改名
Chattr +a 文件名
3. 结合vim几种模式,学会使用vim几个常见操作
1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
vim rwx.txt 回车 之后就会打开文件
在文件命令模式下输入 ”:q “是退出文件,输入”:wq“是保存并退出文件,输入”:q!“是强制退出文件
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
在命令模式下,输入a,i,o都可以进入到插入模式下,在插入模式按一下ESC键,就会退回到命令模式,同时输入”:q“将退出文件
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
4)使用cat命令验证文件内容,是刚刚自己写的内容。
5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
在命令模式下,输入u和w键会在单词间跳转
w:跳入到下一个单词的词首
e:跳入到下一个单词的词尾
b:跳入当前或前一个单词的词首
H:页首
M:页中间
L:页尾
zt:将光标移动到屏幕的顶端
zz:将光标移动到屏幕的中间‘
zb:将光标移动到屏幕的低端
^:调至行首
0:跳转至行首
$:跳转至行尾
hjkl分别是左下上右句子间跳转
yy:复制光标所在当前行
n+yy:复制所在当前行以及n+一下几行
p:粘贴所在当前行
dd:删除所在当前行
n+dd:删除所在当前行以及n+一下几行
4. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例
touch 创建普通文件
cat 看完文件内容
tac 将文件的内容从后往前的倒着输出一次
more 查看文件内容,支持翻页(只能往下查看,不能往上查看)
less 同样也是查看文件内容,但是支持的功能比较多一些,支持文件搜索,滚动,上下翻页等。
head 默认输出文件开头的前10行,但是也支持输出特定的前几行
tail 默认输出文件后面的倒数10行,同时也支持也支持输出文件内容的后几行
文件查找工具 find
find命令可以匹配指定目录下对应的文件或者目录,匹配的条件可以是名称,类型,大小,权限等。匹配到文件之后还可以做一些后续的工作
find按文件名搜索:
find 搜索路径 [选项] 搜索内容
在当前目录下根据文件的小大来去搜索文件:
根据文件的类型来去搜索文件
使用通配符匹配文件
文件处理三剑客 grep sed
grep是处理文本工具的三剑客之一,主要以逐行的方式读入数据,一行一行的对文本中的内容进行匹配
grep [参数] [匹配模式] [文本路径]
-v:排除
grep -v “#” /etc/fstab
-n:显示行号
-c:统计次数
-e:两个搜索结果同时显示
-w:只找对应的单词,不着包含所要搜索的其他字母
-o:只显示搜索的结果
字符匹配
. :匹配任意单个字符(除了\n),可以是一个汉字或其他国家的文字
[]:匹配指定范围内的任意单个字符,
[^]:匹配指定范围外的任意单个字符
匹配次数:
*:匹配前面的字符任意次,也包括0次,贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配前面的字符出现0次或者1次,即:可有可无 (grep ‘go?gle’ test.txt)
\+:匹配其前面的字符出现最好1次,即:肯定有且一个以上
\{\n}:匹配指定数量 (grep ‘go\{8\}gle’ test.txt) “\”转义符
也可对位置锚定
^ 行首锚定定,用于模式的最左侧
排除 grep -v ‘^#’ /etc/fastab
找root开头的行grep ‘^root’ /etc/passwd
$ 行尾锚定,用于模式的最右侧
sed可以逐行对文本中的内容进行交互式的插入,删除或者替换。
Sed [选项] [sed自己的语言语法处理逻辑] [处理的文件名]
-n 表示安静模式,不输出不匹配的行
-r 识别扩展正则
-i 直接对原文件进行编辑
-e 识别多个命令操作
p 输出信息
i insert,指定信息前插入信息
a append指定信息后追加新的信息
d delete删除指定信息
s substitute替换信息
c 替换一整行信息
g 实现逐个替换
示例:
只显示第三行的打印输出
只输出#开头的行
SED替换成WED
sed -i ‘/SED/c WED‘ /etc/passwd
搜索root 并替换成ROOT
sed -i 's/root/ROOT/g' /etc/passwd
5. 总结文本处理的grep命令相关的基本正则和扩展正则表达式
grep [参数] [匹配模式] [文本路径]
-v:排除 grep -v “#” /etc/fstab
-n:显示行号
-c:统计次数
-e:两个搜索结果同时显示 grep -e false -e bash /etc/passwd
-w:只找对应的单词,不着包含所要搜索的其他字母
-o:只显示搜索的结果
字符匹配
. :匹配任意单个字符(除了\n),可以是一个汉字或其他国家的文字
[]:匹配指定范围内的任意单个字符,
[^]:匹配指定范围外的任意单个字符
匹配次数:
*:匹配前面的字符任意次,也包括0次,贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配前面的字符出现0次或者1次,即:可有可无 (grep ‘go?gle’ test.txt)
\+:匹配其前面的字符出现最好1次,即:肯定有且一个以上
\{\n}:匹配指定数量 (grep ‘go\{8\}gle’ test.txt) “\”转义符
6. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用
变量命名的规则要求:
区分大小写
不能使用程序中的保留字和内置变量:如if ,for
只能使用数字,字母下划线,且不能数字开头,注意:不支持短横线“-”,和主机名相反
见名知意,用英文单词命名,并体现出实际作用,不要简写如:ATM
变量名大写
局部变量名小写
函数名小写
大驼峰 :由单词组成,且每个单词的首字母是大写,其他小写
小驼峰 :每个单词的首字母是大写,第一个单词首字母,小写,但后续是大写
环境变量:也可以称作为全局变量,当用户登录系统当中时,这些变量就已经在系统当中定义好了相应的参数,提供给系统调用。环境变量使用时需要先通过export或者declare -x事先进行声明,此环境变量才可以使用。
echo $PATH
位置变量:在Linux当中,每一个命令行都有各自的位置参数,可以通过调用命令行的位置参数,来去传递给脚本,提脚本灵活使用。
bash a.sh a b c
只读变量:设置完成的变量只能读取,不能修改和删除。
readonly [选项] [变量名=变量值]
局部变量:自己定义好一个变量,可以随时修改,删除,使用。之后变量只在当前shell的进程环境下生效。
a=b
echo $a
状态变量:状态变量就是系统当中设定好的一类特殊变量,用户只能使用,但是不能够修改删除。例如:
$*:表示所有位置参数的内容看成一个整体返回 返回所有
$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#:表示命令行中位置参数的总个数
$0:表示当前执行的脚本或程序的名称 当前脚本的名字
$$:当前bash的进程id
$!: 后台任务最后一个id
7. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
先使用80个脚减去30个鸡头和30个兔头,也就得出了20个鸡的结果,兔子比鸡多出两只脚那就再乘以2所得的结果也就是兔子的数量。
8. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
#!/bin/bash
for i in {1..100}; do
grep "user$i" /etc/passwd &> /dev/null
if[ $? -ne 0 ];then
useradd user$i &> /dev/null
echo "用户创建成功:user"$i
else
echo "用户创建失败,用户已存在:user"$i
done
9. 磁盘存储术语总结: head, track, sector, sylinder
head:磁头 每一个盘面都有一个磁头,用来读写数据。
track:磁道 每一个磁盘都会被划分成很多个同心圆,每个由内向外的同心圆的轨道叫做磁道
sector:扇区 将每一个盘面的磁道由内而外划分成若干个内角的扇形,每个磁道划分的扇形圆弧就叫做扇区
sylinder:柱面 每个磁道上各个位置上的磁道的集合形成的柱面,叫做柱面。
10. 总结MBR,GPT结构
MBR分区被称作为传统分区,其分区表的结构为:主分区,扩展分区,逻辑分区三种结构。
1.MBR主分区只能分4个,超过4个就不能被分区了,只能分出三个主分区,一个扩展分区,通过扩展分区在分逻辑分区。
2.在扩展分区中可以分出多个逻辑分区,逻辑分区的数量没有限制。
3.MBR使用的是32位标识扇区,里面的任何分区,包括主分区扩展分区,逻辑分区,都不能够超过2T,使得MBR不能很好的处理大容量硬盘。
4.UEFI不支持MRB分区,因为UEFI是近年的新技术,UEFI主要支持GPT的分区。只能够使用Bios的主板硬件才可以支持MBR分区。
GTP分区表,全部都是可以进行主分区的,没有扩展分区逻辑分区的概念。
1.GTP分区表支持64位8z空间,支持128个分区,作为物理硬盘是足够使用了
2.GTP每个分区表最大容量是1,048,576TB,足够用户使用了
3.GTP分区表支持UEFI模式,使用老旧的Bios容易出现兼容性的问题。
11. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
fdisk:管理MBR分区,分配分区大小,查看分区
parted:可以查看分区表信息,硬盘大小,硬盘参数,扇区大小等
mkfs:格式化,为分区写入系统
tune2fs:用于管理文件系统
xfs_info:查看xfs设备的详细信息
xfs_info /dev/vda1
fsck:检查并修复文件系统
fsck /dev/sdb
mount:挂载硬盘,同步硬盘
mount /dev/sdb1 /tmp
umount:取消硬盘挂载点
umount /dev/sdb1
swapon:启用Linux系统的交换分区或交换文件(虚拟内存)
swapon /dev/sda5
swapoff:关闭系统交换分区
swapoff /dev/sda5
12. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现
RAID0:至少需要一块硬盘,如果在两块硬盘共同协作的情况下,每块硬盘各储存50%的数据,利用率达到100%,无冗余性,如果其中一块硬盘损坏,另外的一个硬盘的数据也就无效了。一块硬盘也可以做RAID阵列,但是效果意义不大,之后可以再加入其他硬盘。
RAID1:至少需要两块硬盘,可以实现容错性,镜像操作。因为两块硬盘是镜像的关系,当文件要写入RAID1时,文件会写入到磁盘1,同时也会把写入的数据复制到磁盘2,以此达到镜像的操作。因为是镜像的关系,磁盘利用率只是用了50%,有冗余性,读取性能增强,写入性能低下,空间利用率低。两个硬盘同时操作同样的文件,如果其中一个硬盘删除掉了之后,另外的一个硬盘的数据也就被删除掉了。镜像的操作代替不了传统的备份,但是两个硬盘可以同时的读数据。
RAID5:至少需要三块硬盘,每次数据写入到阵列当中会把校验信息存放到每一个磁盘当中,如果有N块硬盘,数据将会分成N分,并发到N块硬盘当中,当其中一块硬盘损坏之后,可以通过奇数的校验信息,恢复损坏的其中一块硬盘的数据,只能允许损坏一块硬盘。
RAID10:RAID10是由RAID1和RAID0两种阵列组成,至少需要四块硬盘,先去通过建立RAID1实现镜像,之后再通过RAID0实现条带存放。当输入写入RAID阵列中时,数据将会以条带的存放方式存放到以两个RAID1组成的RAID0的硬盘当中,随后两个RAID1再将数据进行双磁盘的镜像。RAID10和RAID01的区别在于,RAID10时先条带存放之后再镜像也就是1+0,而RAID01则是,先镜像,再通过条带存放也就是0+1.
13. 完成不影响业务对LVM磁盘扩容及缩容示例
扩容
首先查看LVM是否存在使用,以及卷组的可扩容空间
使用命令vgs或者vgdisplay
接着使用lvs 或者 lvdisplay查看LVM
之后输入命令进行扩容,对空间以及文件系统同时扩容
lvextend -r -l +100%free /dev/testvg0/lv-mysql
-l 增加磁盘的内存选项
-r 文件系统以及容量同时扩容
缩容
先去卸载硬盘的挂载点
umount /data/mysql
之后通过命令进行缩容
lvreduce -L 5G -r /dev/testvg0/lv-mysql
最后将缩容的硬盘重新挂载
mount /dev/testvg0/lv-mysql /data/mysql