第二周作业

1、总结linux安全模型

资源分派:
Authentication:认证,验证用户身份
当用户登录系统时必须提供认证信息(账号,密码,key)。

Authorization:授权,不同的用户设置不同权限
用户授权权限,组授权权限。

Linux安全上下文Context:运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够
访问资源的权限取决于进程的运行者的身份。

分别以root 和wang 的身份运行 /bin/cat /etc/shadow ,得到的结果是不同的,资源能否能
被访问,是由运行者的身份决定,非程序本身。

Accouting|Audition:审计

当用户登录成功时,系统会自动分配令牌 token,包括:用户标识和组成员等信息。

审计能够记录日志的内容:
日期与事件以及事件的结果
触发事件的用户
所有认证机制的使用都可以被记录,如ssh等
对关键数据文件的修改行为等都可以被记录
历史记录的cmd命名。
等等

2、总结学过的权限,属性及ACL相关命令及选项,示例。

2.1文件的权限:

程序访问文件时的权限,取决于此程序的发起者
进程的发起者,同文件的属主:则应用文件属主权限
进程的发起者,属于文件属组;则应用文件属组权限
应用文件“其它”权限
r:可以读取文件
w:可以修改、增加文件内容。(1)如果没r权限,则不能vim,只能覆盖或追加。(2)能否删文件取决于父目录的权限
x:执行权限。(1)没有r权限,不能执行shell脚本,会报权限不足,但能执行二进制程序。

文件权限常见组合:
— 0
r 4
r-x 5
rw 6
rwx 7
新建文件和目录的默认权限:
umask 的值可以用来保留在创建文件权限
实现方式:
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶
数不变
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022
思考:为什么root的umask比普通用户权限大。
root权限较大,减去大的umask后新建的文件权限较小,为了系统安全。
例如:root新建默认权限: 666-022 权限为:644 rw-r–r–
例如:user新建默认权限: 666-002 权限为:664 rw-rw-r–
所有用户新建的文件没有X权限,X权限危险!!!

[root@rocky-8 test]# umask -S
u=rwx,g=rx,o=rx
[root@rocky-8 test]# umask
0022
[root@rocky-8 test]# who
root     pts/0        2023-10-03 00:57 (192.168.44.1)
[root@rocky-8 test]# 

注意:
 用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向
右查看其权限
r和w权限对root 用户无效
只要所有者,所属组或other三者之一有x权限,root就可以执行

2.2目录的权限:

r:具有浏览目录的功能。
(1)没有x权限,不能进入目录,ls -l只能看到文件名,看不到文件权限信息。不能进入目录的子目录。
w:必须配合x权限。具有增加,删除,修改,移动,复制目录内的文件。
(1)没有x权限,不能vim创建文件,不能使用重定向创建文件;
(2)没r权限,不能看到目录下的文件;
(3)没x权限,不能修改文件名。目录有了wx权限,可以删除,改名文件(前提知道目录下的文件名);
(4)不能修改目录下别人文件的权限,能否追加内容,查看文件内容还要取决于该文件的权限;
(5)移动目录内的文件除了目录需要wx,文件也需要r;
(6)cp文件,目录不需要w。
x:能进入目录。
(1)没r权限,看不到目录内容;
(2)没w权限,不能创建,删除,修改mv;
(3)cp文件除了目录需要x,文件也需要r。
在这里插入图片描述

2.3 chown 命令可以修改文件的属主,也可以修改文件属主在这里插入图片描述

示例修改文件:

[root@rocky-8 ~]# ll
总用量 8
-rw-r--r--  1 root   root      0 930 21:54 1.txt
-rw-r--r--  1 root   root      0 930 21:54 2.txt
-rw-r--r--  1 root   root      0 930 21:54 3.txt
-rw-r--r--  1 root   root      0 930 21:54 4.txt
[root@rocky-8 ~]# 
[root@rocky-8 ~]# chown lixuan 1.txt 
[root@rocky-8 ~]# ll
总用量 8
-rw-r--r--  1 lixuan root      0 930 21:54 1.txt
-rw-r--r--  1 root   root      0 930 21:54 2.txt
-rw-r--r--  1 root   root      0 930 21:54 3.txt
-rw-r--r--  1 root   root      0 930 21:54 4.txt
[root@rocky-8 ~]# chown :lixuan 2.txt 
[root@rocky-8 ~]# ll
总用量 8
-rw-r--r--  1 lixuan root      0 930 21:54 1.txt
-rw-r--r--  1 root   lixuan    0 930 21:54 2.txt
-rw-r--r--  1 root   root      0 930 21:54 3.txt
-rw-r--r--  1 root   root      0 930 21:54 4.txt
[root@rocky-8 ~]# chown lixuan:lixuan 3.txt 
[root@rocky-8 ~]# ll
总用量 8
-rw-r--r--  1 lixuan root      0 930 21:54 1.txt
-rw-r--r--  1 root   lixuan    0 930 21:54 2.txt
-rw-r--r--  1 lixuan lixuan    0 930 21:54 3.txt
-rw-r--r--  1 root   root      0 930 21:54 4.txt
[root@rocky-8 ~]# 

示例修改文件夹:

[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 root root 6 103 01:08 dir1
drwxr-xr-x 2 root root 6 103 01:08 dir2
drwxr-xr-x 2 root root 6 103 01:08 dir3
drwxr-xr-x 2 root root 6 103 01:08 dir4
drwxr-xr-x 2 root root 6 103 01:08 dir5
[root@rocky-8 test]# chown lixuan dir1
[root@rocky-8 test]# chown :lixuan dir2
[root@rocky-8 test]# chown lixuna:lixuan dir3 #为什么没成功?
chown: 无效的用户: “lixuna:lixuan”
[root@rocky-8 test]# chown lixuna:lixuan dir3
chown: 无效的用户: “lixuna:lixuan”
[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 lixuan root   6 103 01:08 dir1
drwxr-xr-x 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-x 2 root   root   6 103 01:08 dir3
drwxr-xr-x 2 root   root   6 103 01:08 dir4
drwxr-xr-x 2 root   root   6 103 01:08 dir5

2.4 设置文件的属组信息chgrp

在这里插入图片描述

[root@rocky-8 test]# chgrp lixuan dir3
[root@rocky-8 test]# 
[root@rocky-8 test]# 
[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 lixuan root   6 103 01:08 dir1
drwxr-xr-x 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-x 2 root   lixuan 6 103 01:08 dir3
drwxr-xr-x 2 root   root   6 103 01:08 dir4
drwxr-xr-x 2 root   root   6 103 01:08 dir5

2.5 修改文件权限

在这里插入图片描述

[root@rocky-8 test]# chmod u=rwx dir5
[root@rocky-8 test]# 
[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 lixuan root   6 103 01:08 dir1
drwxr-xr-x 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-x 2 root   lixuan 6 103 01:08 dir3
drwxr-xr-x 2 root   root   6 103 01:08 dir4
drwx------ 2 root   root   6 103 01:08 dir5
[root@rocky-8 test]# chmod g=rw  dir4 
[root@rocky-8 test]# chmod o=r dir3
[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 lixuan root   6 103 01:08 dir1
drwxr-xr-x 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-- 2 root   lixuan 6 103 01:08 dir3
drwxrw-r-x 2 root   root   6 103 01:08 dir4
drwx------ 2 root   root   6 103 01:08 dir5
[root@rocky-8 test]# chmod u=rwx,g=rwx,o=  dir2
[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 lixuan root   6 103 01:08 dir1
drwxrwx--- 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-- 2 root   lixuan 6 103 01:08 dir3
drwxrw-r-x 2 root   root   6 103 01:08 dir4
drwx------ 2 root   root   6 103 01:08 dir5
[root@rocky-8 test]# chmod 600 dir1
[root@rocky-8 test]# ll
总用量 0
drw------- 2 lixuan root   6 103 01:08 dir1
drwxrwx--- 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-- 2 root   lixuan 6 103 01:08 dir3
drwxrw-r-x 2 root   root   6 103 01:08 dir4
drwx------ 2 root   root   6 103 01:08 dir5
[root@rocky-8 test]# 

2.6Linux文件系统上的特殊权限

前面介绍了三种常见的权限:r, w, x 还有三种特殊权限:SUID, SGID, Sticky
特殊权限
SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限。
SGID作用于二进制可执行文件上,用户将继承此程序所有组的权限。
作于于目录上, 此目录中新建的文件的所属组将自动从此目录继承。
STICKY 作用于目录上,此目录中的文件只能由所有者自已来删除

特殊权限SUID

前提:进程有属主和属组;文件有属主和属组
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
进程访问文件时的权限,取决于进程的发起者
二进制的可执行文件上SUID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主。
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
SUID权限设定

chmod u+s FILE...
chmod 4xxx FILE
chmod u-s FILE...
[root@centos8 ~]#ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 34928 May 11  2019 /usr/bin/passwd
特殊权限SGID

二进制的可执行文件上SGID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属组为原程序文件的属组
SGID权限设定:
chmod g+s FILE…
chmod 2xxx FILE
chmod g-s FILE…

目录上的SGID权限功能:
默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有
写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录
SGID权限设定:
chmod g+s DIR…
chmod 2xxx DIR
chmod g-s DIR…

特殊权限 Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
Sticky权限设定:
chmod o+t DIR…
chmod 1xxx DIR
chmod o-t DIR…

[root@centos8 ~]#ll -d /tmp
drwxrwxrwt. 15 root root 4096 Dec 12 20:16 /tmp
特殊权限数字法

SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

[root@rocky-8 test]# chmod 4777 1111 
[root@rocky-8 test]# 
[root@rocky-8 test]# 
[root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 root   root   6 103 01:43 111
-rwsrwxrwx 1 root   root   0 103 01:43 1111

2.7 设定文件特殊属性

设置文件的特殊属性,可以访问 root 用户误操作删除或修改文件
不能删除,改名,更改
chattr +i file
只能追加内容,不能删除,改名
chattr +a file
显示特定属性
lsattr

root@rocky-8 test]# ll
总用量 0
drwxr-xr-x 2 root   root   6 103 01:43 111
-rwsrwxrwx 1 root   root   0 103 01:43 1111
-rw-r--r-- 1 root   root   0 103 01:54 1.txt
-rw-r--r-- 1 root   root   0 103 01:54 2.txt
-rw-r--r-- 1 root   root   0 103 01:54 3.txt
-rw-r--r-- 1 root   root   0 103 01:54 4.txt
-rw-r--r-- 1 root   root   0 103 01:54 5.txt
-rw-r--r-- 1 root   root   0 103 01:54 6.txt
drw------- 2 lixuan root   6 103 01:08 dir1
drwxrwx--- 2 root   lixuan 6 103 01:08 dir2
drwxr-xr-- 2 root   lixuan 6 103 01:08 dir3
drwxrw-r-x 2 root   root   6 103 01:08 dir4
drwx------ 2 root   root   6 103 01:08 dir5
[root@rocky-8 test]# lsattr 
-------------------- ./dir1
-------------------- ./dir2
-------------------- ./dir3
-------------------- ./dir4
-------------------- ./dir5
-------------------- ./111
-------------------- ./1111
----i--------------- ./1.txt
-------------------- ./2.txt
-------------------- ./3.txt
-------------------- ./4.txt
-------------------- ./5.txt
-------------------- ./6.txt
[root@rocky-8 test]# rm -f 1.txt 
rm: 无法删除'1.txt': 不允许的操作
[root@rocky-8 test]# mv 1.txt 1.txt.bak
mv: 无法将'1.txt' 移动至'1.txt.bak': 不允许的操作
[root@rocky-8 test]# echo 111 >1
111/   1111   1.txt  
[root@rocky-8 test]# echo 111 >1.txt 
-bash: 1.txt: 不允许的操作
[root@rocky-8 test]# 
[root@rocky-8 test]# cat 2.txt 
1lie
[root@rocky-8 test]# 
[root@rocky-8 test]# 
[root@rocky-8 test]# chattr +a 2.txt 
[root@rocky-8 test]# 
[root@rocky-8 test]# 
[root@rocky-8 test]# rm -f 2.txt 
rm: 无法删除'2.txt': 不允许的操作
[root@rocky-8 test]# mv 2.txt 2.txt.bak
mv: 无法将'2.txt' 移动至'2.txt.bak': 不允许的操作
[root@rocky-8 test]# echo 2lie >2.txt 
-bash: 2.txt: 不允许的操作
[root@rocky-8 test]# echo 2lie >>2.txt 
[root@rocky-8 test]# cat 2.txt 
1lie
2lie
[root@rocky-8 test]# 

2.8ACL权限功能

ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

ACL生效顺序:
所有者,自定义用户,所属组|自定义组,其他人。

ACL相关命令:
setfacl 可设置ACL权限

getfacl 可查看设置的ACL权限

#清除所有ACL权限
setfacl -b file1
#复制file1的acl权限给file2
getfacl file1 | setfacl --set-file=- file2

3. 结合vim几种模式,学会使用vim几个常见操作。

1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
vim file-----:q或者q!
在这里插入图片描述
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。

答:输入i (进入插入模式)—esc(回到命令模式)—q(退出)或者q!(强制退出)或者wq(保存并退出)。

3)打开文件(命令模式)之后,进入插入模式,编写一段话,“马哥出品,必属精品”, 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
答:vim mage.txt —i---- “马哥出品,必属精品”,–esc–wq!

4)使用cat命令验证文件内容,是刚刚自己写的内容。

[root@rocky-8 ~]# vim mage.txt
[root@rocky-8 ~]# cat mage.txt 
"马哥出品,必属精品"
[root@rocky-8 ~]# 

5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
答: vim打开文件后,上下左右键,或者hjkl也可以。
行复制:yy
行删除:dd
行粘贴:p

4,总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。

文本查看工具

在这里插入图片描述 head 和 tail 总结
在这里插入图片描述

文本统计工具

在这里插入图片描述##### 文件查找工具

locate工具

在文件系统上查找符合条件的文件非实时查找(数据库查找)
格式:

locate [OPTION]… [PATTERN]…

-i 不区分大小写的搜索

-n N 只列举前N个匹配项目

-r 使用基本正则表达式

查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db

执行updatedb可以更新数据库
示例:

locate和updatedb命令来自于mlocate包
索名称或路径中包含“conf"的文件
 
locate conf
 
#使用Regex来搜索以“.conf"结尾的文件
 
locate -r '\.conf$'
 
文件新创建和删除,无法马上更新locate数据库
find工具

find 是实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
查找条件丰富
可能只搜索用户具备读取和执行权限的目录
格式:

find [OPTION]... [查找路径] [查找条件] [处理动作]
 
指定搜索目录层级:
 
-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
 
-mindepth level 最小搜索目录深度
 
对每个目录先处理目录内的文件,再处理目录本身:
 
-depth  
 
-d
 
根据文件名和inode查找:
 
-name "文件名称" #支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
 
-iname "文件名称"  #不区分字母大小写
 
-inum n #按inode号查找
 
-samefile name #相同inode号的文件
 
-links n   #链接数为n的文件
 
-regex “PATTERN"   #以PATTERN匹配整个文件路径,而非文件名称
 
根据属主、属组查找:
 
-user USERNAME #查找属主为指定用户(UID)的文件
 
-group GRPNAME #查找属组为指定组(GID)的文件
 
-uid UserID #查找属主为指定的UID号的文件
 
-gid GroupID #查找属组为指定的GID号的文件
 
-nouser #查找没有属主的文件
 
-nogroup #查找没有属组的文件
根据文件类型查找:
 
-type TYPE
 
TYPE可以是以下形式:
 
f: 普通文件
 
d: 目录文件
 
l: 符号链接文件
 
s:套接字文件
 
b: 块设备文件
 
c: 字符设备文件
 
p: 管道文件
 
空文件或目录:
 
-empty
 
组合条件:
 
与:-a ,默认多个条件是与关系,所以可以省略-a
 
或:-o
 
非:-not !
 
排除目录:
 
#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
 
find /etc -path '/etc/security' -a -prune -o -name "*.conf"
 
根据文件大小来查找:
 
-size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感
 
#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]
 
-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]
 
+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)
根据时间戳:
 
#以“天"为单位
 
-atime [+|-]#
 
# #表示[#,#+1)
 
+# #表示[#+1,∞]
 
-# #表示[0,#)
 
-mtime
 
-ctime
 
#以“分钟"为单位
 
-amin
 
-mmin
 
-cmin
 
根据权限查找:
 
-perm [/|-]MODE
 
MODE  #精确权限匹配
 
/MODE #任何一类(u,g,o)对象的权限中只要有一位匹配即可,或关系,+ 从CentOS 7开始淘汰
 
-MODE #每一类对象都必须同时拥有指定权限,与关系
 
0 表示不关注
 
正则表达式:
 
-regextype type
 
-regex pattern

处理动作:

-print:默认的处理动作,显示至屏幕
 
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
 
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
 
-delete:删除查找到的文件,慎用!
 
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会
 
交互式要求用户确认
 
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
 
{}: 用于引用查找到的文件名称自身

示例:

find -perm 755 会匹配权限模式恰好是755的文件
 
只要当任意人有写权限时,find -perm /222就会匹配
 
只有当每个人都有写权限时,find -perm -222才会匹配
 
只有当其它人(other)有写权限时,find -perm -002才会匹配
 
find /you/find/dir -regextype posix-extended -regex "regex"
 
#备份配置文件,添加.orig这个扩展名
 
find  -name  ".conf"  -exec  cp {} {}.orig \;
 
#提示删除存在时间超过3天以上的joe的临时文件
 
find /tmp -ctime +3 -user joe -ok rm {} \;
 
#在主目录中寻找可被其它用户写入的文件
 
find ~ -perm -002  -exec chmod o-w {} \;
 
#查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
 
find /data –type f -perm 644  -name "*.sh" –exec chmod 755 {} \;
find /etc  -maxdepth 2 -mindepth 2
 
#find -regex ".*\.txt$"
 
#查看/home的目录
 
find /home –type d -ls
 
#find /app -type d -empty
 
!A -a !B = !(A -o B)
 
!A -o !B = !(A -a B)
 
#找出/tmp目录下,属主不是root,且文件名不以f开头的文件
 
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
 
find /tmp -not \( -user root -o -name 'f*' \) –ls
 
#排除/proc和/sys目录
 
find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -type f -a -mmin -1

5. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。

gerp命令:

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
格式:
grep [OPTIONS] PATTERN [FILE…]

常见选项:
--color=auto 对匹配到的文本着色显示
-m  # 匹配#次后停止
-v 显示不被pattern匹配到的行,即取反
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-P 支持Perl格式的正则表达式
-f file 根据模式文件处理
-r   递归目录,但不处理软链接
-R   递归目录,但处理软链接

范例:取两个文件的相同行

[root@centos8 ~]#cat /data/f1.txt
a
b
1
c
[root@centos8 ~]#cat /data/f2.txt
b
e
f
c
1
2
[root@centos8 ~]#grep -f /data/f1.txt /data/f2.txt  #grep方法
b
c
1
[root@centos8 ~]#cat /data/f1.txt /data/f2.txt| sort | uniq -d #其他方法

范例: 过滤掉文件的注释(包括#号的行)和空行
[root@centos8 ~]#grep -Ev ‘^$|#’ 【 file】

基本正则正则表达式

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)
不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配
符功能是用来处理文件名,而正则表达式是处理文本内容中字符
正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等
正则表达式分两类:
基本正则表达式:BRE Basic Regular Expressions
扩展正则表达式:ERE Extended Regular Expressions
正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块,如:PCRE(Perl Compatible Regular
Expressions)
正则表达式的元字符分类:字符匹配、匹配次数、位置锚定、分组

基本正则表达式元字符
.   匹配任意单个字符(除了\n),可以是一个汉字或其它国家的文字
[]   匹配指定范围内的任意单个字符,示例:[wang]   [0-9]   [a-z]   [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,示例:[^wang] 
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围
广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
-----------------
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\r\t\v]。注意 Unicode 
正则表达式会匹配全角空格符
\S     #匹配任何非空白字符。等价于 [^\f\r\t\v]
\w #匹配一个字母,数字,下划线,汉字,其它国家文字的字符,等价于[_[:alnum:]字]
\W #匹配一个非字母,数字,下划线,汉字,其它国家文字的字符,等价于[^_[:alnum:]字]
匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n
\{n,\}  #匹配前面的字符至少n次
位置锚定

位置锚定可以用于定位出现的位置

^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行
^$ #空行
^[[:space:]]*$ #空白行
\<\b   #词首锚定,用于单词模式的左侧
\>\b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词
#注意: 单词是由字母,数字,下划线组成
分组其它

分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)+
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名
方式为: \1, \2, \3, …
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
注意: \0 表示正则表达式匹配的所有字符
示例:

\(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2

注意: 后向引用 引用前面的分组括号中的模式所匹配字符,而非模式本身

标识或者

或者:|
示例:

a\|b #a或b  
C\|cat #C或cat   
\(C\|c\)at #Cat或cat

范例:排除空行和#开头的行

[root@centos6 ~]#grep -v '^#' /etc/httpd/conf/httpd.conf |grep -v ^$
[root@centos6 ~]#grep -v '^#\|^$' /etc/httpd/conf/httpd.conf
[root@centos6 ~]#grep -v '^\(#\|$\)' /etc/httpd/conf/httpd.conf 
[root@centos6 ~]#grep "^[^#]" /etc/httpd/conf/httpd.conf
扩展正则表达式

字符匹配

. 任意单个字符
[wang] 指定范围的字符
[^wang] 不在指定范围的字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

次数匹配

*   匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次

位置锚定

^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾

分组其它

() 分组
后向引用:\1, \2, ... 注意: \0 表示正则表达式匹配的所有字符
| 或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat

6. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。

命名的需求:

1、区分大小写
2、不能使用程序中的保留字和内置变量;例如:if、for、hostname
3、只能使用数字、字母以及下划线,且不能以数字开头,注意:不支持端横线“-”,和主机名相反
3、不要使用内置变量,使用英文尽量使用词义通俗易懂,PATH p=123(错误写法)
4、大驼峰 StudentFirstName
5、小驼峰 studentFirstName
6、下划线 student_name

环境变量:由系统维护、用于设置工作环境
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量。
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程。
一般只在系统配置文件中使用,在脚本中较少使用。

位置变量:通过命令给脚本传递参数
位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数。

只读变量:只可以读取不可更改
只读变量:只能声明定义,但后续不能修改和删除,即常量。

局部变量

状态变量
进程执行后,将使用变量 ? 保存状态码的相关数字,不同的值反应成功或失败, ? 保存状态码的相关数字,不同的值反应成功或失败, ?保存状态码的相关数字,不同的值反应成功或失败,?取值范例 0-255
$?的值为0 #代表成功
$?的值是1到255 #代表失败

自定义变量:由用户自己定义,修改和使用
特殊变量:环境变量、只读变量、位置变量、预定义变量
系统内置变量:PATH、UID、HOSTNAME、USER
位置变量:通过命令给脚本传递参数
预定义变量:bash中内置的一类变量,是不能够修改的。

7. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?

[root@rocky-8 ~]# ./chook_rabbit.sh 30 80
兔子:10
鸡:20
[root@rocky-8 ~]# ./chook_rabbit.sh 30 80
兔子:10
鸡:20
[root@rocky-8 ~]# cat chook_rabbit.sh 
#!/bin/bash

head=$1
foot=$2

rabbit=$(((foot-head-head)/2))
chook=$[head-rabbit]
echo "兔子"$rabbit
echo "鸡"$chook

[root@rocky-8 ~]# 

8. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,

1)for遍历1…100
for i in{1…100};do

2)先id判断是否存在

if id user$i ;then

3)用户存在则说明存在,用户不存在则添加用户并说明已添加。

[root@rocky-8 jiaoben]# cat useradd100.sh 
#!/bin/bash
#
#********************************************************************
#Author:		    MR.lee
#QQ: 			    245388878
#Date: 			    2023-10-06
#FileName:		    useradd100.sh
#email: 			    13924531637@139.com
#Description:		The test script
#Copyright (C): 	2023 All rights reserved
#********************************************************************
NAME=user
for i in {1..100};do
   if id $NAME$i;then  #根据命令的退出状态来执行命令,例如:id user1 系统有$?为0(真),反之为1-255(假),
     echo $NAME$i "用户已存在"
   else
      useradd $NAME$i
      echo $NAME$i "用户已创建"
   fi
  done
[root@rocky-8 jiaoben]# 

在这里插入图片描述在这里插入图片描述

9. 磁盘存储术语总结: head, track, sector, sylinder.

head:磁头 磁头数=盘面数;

track:磁道 磁道=柱面数;

sector:扇区,512bytes;

cylinder:柱面 1柱面=512sector数/trackhead数=51263255=7.84M

10. 总结MBR,GPT结构。

MBR(Master Boot Record),中文意为"主引导区记录"。硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为三个部分。

第一部分为pre-boot区(预启动区),占446字节
第二部分是Partition table区(分区表),占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中
第三部分是magic number,占2个字节,固定为55AA

MBR分区表的硬盘最多能划分4个主分区磁盘或3个主分区和扩展分区,并且MBR最大仅支持2TB的硬盘,但拥有最好的兼容性。

GPT(GUID Partition Table),中文意为“全局唯一标识磁盘分区表”。GPT意为GUID分区表,这是一个正逐渐取代MBR的新标准,它由UEFI辅住而形成的,这样就有了UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR。这个标准没有MBR的那些限制。磁盘驱动器容量可以大得多,大到操作系统和文件系统都没法支持。它同时还支持几乎无限个分区数量,限制只在于操作系统,Windows支持最多128个GPT分区。通过UEFI,所有的64位的win10,win8,win7和Vista,以及所对应的服务器都能从GPT启动。

GPT分区表类型,此分区表类型不受分区个数、硬盘大小的限制(Windows系统最多只允许划分128个分区),最大支持18EB 大容量(EB=1024 PB,PB=1024 TB),而且GPT是一种新的硬盘分区标。

11. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff

查看分区挂载命令(lsblk)
sblk命令:
基本语法: lsblk +参数
-a/–all
Lsblk -a -----显示所有设备
-f/–fs(filesystem)
Lsblk -f ----显示文件系统的信息
-l/–list
Lsblk -l-------使用列表格式显示
-m/(permissions)
Lsblk -m-------显示权限信息
-S(scsi大写S)
Lsblk -S--------列出SCSI设备
-b(bytes)
Lsblk -b --------打印设备的容量(以人可读的格式字节)
功能描述: 列出块设备信息

在这里插入图片描述
Name-----------设备名称
Maj(major):min(minor) ----主要设备号:次要设备号
Rm----------removal显示可移动设备 1表示可移动设备,0表示非移动设备
Size:---------块设备的空间大小
Ro------read only 是只读,1表示只读,0表示非只读
Type------块设备类型
disk(磁盘类型),part(分区),lvm(逻辑卷)rom(只读存储)
Mountpoint—挂载点

2.2.4.2 查看和管理分区信息
blkid 可以查看块设备属性信息
格式:
常用选项:
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备

fdisk(gdisk), parted命令

fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作,可以是交互或非交互方式

Fdisk命令:
基本语法:fdisk +参数(-l)查看硬盘所有块设备
Fdisk -l +路径 查看指定硬盘信息

子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出

[root@centos7 ~]# fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ae5b8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   106956799    52428800   83  Linux
/dev/sda3       106956800   111151103     2097152   82  Linux swap / Solaris
/dev/sda4       111151104   419430399   154139648    5  Extended
/dev/sda5       111153152   111357951      102400   83  Linux

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2cab4823

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41943039    10484736   8e  Linux LVM

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@centos7 ~]# fdisk -l  /dev/sda1

Disk /dev/sda1: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@centos7 ~]# fdisk -l  /dev/sda

Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ae5b8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   106956799    52428800   83  Linux
/dev/sda3       106956800   111151103     2097152   82  Linux swap / Solaris
/dev/sda4       111151104   419430399   154139648    5  Extended
/dev/sda5       111153152   111357951      102400   83  Linux
[root@centos7 ~]# 

查看内核是否已经识别新的分区
cat /proc/partitions
CentOS 7,8 同步分区表:
partprobe

范例:非交互式创建分区
echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc

parted命令

注意:parted的操作都是实时生效的,小心使用
格式:
parted [选项]… [设备 [命令 [参数]…]…]
范例:

parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print 
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted -l   列出所有硬盘分区信息

创建文件管理工具 mkfs命令

创建文件管理工具
mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat

[root@centos7 ~]# mkfs.ext4 /dev/sdc
[root@centos7 ~]# mkfs.xfs /dev/sdc

(2) mkfs -t FS_TYPE /dev/DEVICE
-L ‘LABEL’ 设定卷标

[root@centos7 ~]# mkfs -t ext4 /dev/sdc
[root@centos7 ~]# mkfs -t  xfs  /dev/sdc

-t {ext2|ext3|ext4|xfs} 指定文件系统类型
-b {1024|2048|4096} 指定块 block 大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大

-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128—4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,…] 启用指定特性
-O ^FEATURE 关闭指定特性
mke2fs:ext系列文件系统专用管理工具

tune2fs,

使用tune2fs命令可以查看和调整文件系统的参数。
在这里插入图片描述

xfs_info

xfs_info:显示示挂载或已挂载的 xfs 文件系统信息

[root@centos8 ~]#xfs_info /dev/sda7
meta-data=/dev/sda7              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
文件系统检测和修复fsck

文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下执行下面命令修复
fsck: File System Check
注意:FS_TYPE 一定要与分区上已经文件类型相同

常用选项:
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
常用选项:
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

挂载文件系统 mount

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入
口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空
进程正在使用中的设备无法被卸载
格式:
device:指明要挂载的设备
设备文件:例如:/dev/sda5
卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’
UUID: -U ‘UUID’:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e’
伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录

mount 常用命令选项
mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只读挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有
auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
 async   异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
   sync   同步模式,内存更改时,同时写磁盘,安全,但效率低下
 atime/noatime 包含目录和文件
 diratime/nodiratime 目录的访问时间戳
 auto/noauto 是否支持开机自动挂载,是否支持-a选项
 exec/noexec 是否支持将文件系统上运行应用程序
 dev/nodev 是否支持在此文件系统上使用设备文件
 suid/nosuid 是否支持suid和sgid权限
 remount 重新挂载
 ro/rw 只读、读写   
 user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
 acl/noacl 启用此文件系统上的acl功能
 loop 使用loop设备
 _netdev   当网络可用时才对网络资源进行挂载,如:NFS文件系统
 defaults 相当于rw, suid, dev, exec, auto, nouser, async

挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录

持久挂载

将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
/etc/fstab格式帮助:
每行定义一个要挂载的文件系统,,其中包括共 6 项
要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=“”
UUID:UUID=“”
伪文件系统名称:proc, sysfs
挂载点:必须是事先存在的目录
文件系统类型:ext4,xfs,iso9660,nfs,none
挂载选项:defaults ,acl,bind
转储频率:0:不做备份 1:每天转储 2:每隔一天转储
fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检 ,1:首先自检;一般只有rootfs才用 2:非rootfs使用

添加新的挂载项,需要执行下面命令生效
mount -a

umount

卸载文件系统 umount
卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点
查看挂载情况
查看挂载
#通过查看/etc/mtab文件显示当前已挂载的所有设备
mount
#查看内核追踪到的已挂载的所有设备
cat /proc/mounts
查看挂载点情况
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT

终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT

swap 介绍

swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据
时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过
多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露
注意:为优化性能,可以将swap 分布存放,或高性能磁盘存放
在这里插入图片描述
交换分区实现过程

  1. 创建交换分区或者文件
  2. 使用mkswap写入特殊签名
  3. 在/etc/fstab文件中添加适当的条目
  4. 使用swapon -a 激活交换空间
swapon

启用swap分区
swapon [OPTION]… [DEVICE]
-a #激活所有的交换分区
-p PRIORITY #指定优先级(-1到32767之间),值越大,优先级越高.也可在/etc/fstab文件中的第4列指
定:pri=value
范例:创建swap分区

[root@centos8 ~]#echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdc
[root@centos8 ~]#mkswap /dev/sdc1
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f
[root@centos8 ~]#blkid /dev/sdc1
/dev/sdc1: UUID="d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f" TYPE="swap"
PARTUUID="b094d43d-01
[root@centos8 ~]#vim /etc/fstab
UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap         swap defaults 0 0
[root@centos8 ~]#swapon -a
[root@centos8 ~]#free -h
            total       used       free     shared buff/cache   available
Mem:          3.7Gi       264Mi       3.2Gi       9.0Mi       261Mi       3.2Gi
Swap:         4.0Gi         0B       4.0Gi
[root@centos8 ~]#cat /proc/swaps
Filename Type Size Used Priority
/dev/sda5                               partition 2097148 0 -2
/dev/sdc1                               partition 2097148 0 -3

禁用swap分区:
swapoff [OPTION]… [DEVICE]
范例:禁用swap分区

[root@centos8 ~]#sed -i.bak '/swap/d' /etc/fstab
[root@centos8 ~]#swapoff -a

SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越高
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的
没有用户指定优先级的swap,会给这个优先级减一
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远
高于核心缺省指定的优先级(是负数)
范例: 修改swap分区的优先级

[root@centos8 ~]#cat /etc/fstab 
#
UUID=acf9bd1f-caae-4e28-87be-e53afec61347 /             xfs     defaults       
0 0
UUID=1770b87e-db5a-445e-bff1-1653ac64b3d6 /boot         ext4   defaults       
1 2
UUID=ffffd919-d674-44d9-a4e7-402874f0a1f0 /data         xfs     defaults       
0 0
UUID=409e36d2-ac5e-423f-ad78-9b12db4576bd swap           swap   defaults       
0 0
UUID=509ee336-6aec-48b0-b390-12c1f9889520 swap           swap    pri=100         
0 0

范例: 以文件实现swap功能

[root@centos8 ~]#dd if=/dev/zero of=/swapfile bs=1M count=1024
[root@centos8 ~]#mkswap /swapfile
[root@centos8 ~]#blkid /swapfile >> /etc/fstab
[root@centos8 ~]#/etc/fstab
/swapfile swap         swap   defaults        0 0 #不要用
UUID,使用文件的路径
[root@centos8 ~]#chmod 600 /swapfile
[root@centos8 ~]#swapon -a
[root@centos8 ~]#swapon -s
Filename Type Size Used Priority
/dev/sda5                             partition 2097148 0 -2
/swapfile                             file   1048572 0 -3
swap的使用策略

/proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间
使用规则
当内存使用率达到100-swappiness时,会启用交换分区
简单地说这个参数定义了系统对swap的使用倾向,此值越大表示越倾向于使用swap。
可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性

12. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。

RAID

独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列
(Redundant Array of Inexpensive Disks),简称磁盘阵列。利用虚拟化存储技术把多个硬盘组合起
来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。
RAID 层级不同,数据会以多种模式分散于各个硬盘,RAID 层级的命名会以 RAID 开头并带数字,例
如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每种等级
都有其理论上的优缺点,不同的等级在两个目标间获取平衡,分别是增加数据可靠性以及增加存储器
(群)读写性能。
简单来说,RAID把多个硬盘组合成为一个逻辑硬盘,因此,操作系统只会把它当作一个实体硬盘。
RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID
功能更加有效地与主板集成,它也成为普通用户的一个选择,特别是需要大容量存储空间的工作,如:
视频与音频制作。
RAID功能实现
提高IO能力,磁盘并行读写
提高耐用性,磁盘冗余算法来实现
RAID实现的方式
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
软件RAID:通过OS实现,比如:群晖的NAS

3.2.1 RAID-0

以 chunk 单位,读写数据,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。
但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失
在这里插入图片描述
读、写性能提升
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数:1+

3.2.2 RAID-1

也称为镜像, 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读
取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低
在这里插入图片描述
读性能提升、写性能略有下降
可用空间:1*min(S1,S2,…)
磁盘利用率 50%
有冗余能力
最少磁盘数:2+

3.2.3 RAID-4

在这里插入图片描述
多块数据盘异或运算值存于专用校验盘
磁盘利用率 (N-1)/N
有冗余能力
至少3块硬盘才可以实现

3.2.4 RAID-5

在这里插入图片描述
读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+

3.2.5 RAID-6

在这里插入图片描述
双份校验位,算法更复杂
读、写性能提升
可用空间:(N-2)*min(S1,S2,…)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+

3.2.6 RAID-10


读、写性能提升
可用空间:N*min(S1,S2,…)/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+

3.2.7 RAID-01

在这里插入图片描述
多块磁盘先实现RAID0,再组合成RAID1

3.2.8 RAID-50

在这里插入图片描述
多块磁盘先实现RAID5,再组合成RAID0

3.2.9 RAID-60

在这里插入图片描述

3.2.9 其它级别

JBOD:Just a Bunch Of Disks 只是一堆磁盘
在这里插入图片描述
功能:将多块磁盘的空间合并一个大的连续空间使用
第一块硬盘存放所有磁盘的分段信息,如果损坏,整个阵列会失败
后续磁盘损坏只会影响本块磁盘的数据
可用空间:sum(S1,S2,…)

3.2.10 RAID 总结

常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50,RAID-60
磁盘阵列比较表
在这里插入图片描述
在这里插入图片描述

13. 完成不影响业务对LVM磁盘扩容及缩容示例。

1,准备磁盘。
2,格式化分区 类型为8e linux lvm
在这里插入图片描述
3,#创建物理卷
pvcreate /dev/sdb1
pvcreate /dev/sdc1

[root@centos7 ~]# pvs
  PV         VG Fmt  Attr PSize   PFree  
  /dev/sdb1     lvm2 ---   10.00g  10.00g
  /dev/sdc1     lvm2 ---  <10.00g <10.00g

4、为卷组分配物理卷
vgcreate vg0 /dev/sdb1

[root@centos7 ~]# vgcreate vg0 /dev/sdb1
  Volume group "vg0" successfully created
[root@centos7 ~]# 
[root@centos7 ~]# 
[root@centos7 ~]# pvs
  PV         VG  Fmt  Attr PSize   PFree  
  /dev/sdb1  vg0 lvm2 a--  <10.00g <10.00g
  /dev/sdc1      lvm2 ---  <10.00g <10.00g

5.从卷组创建逻辑卷
lvcreate -L 500M -n data vg0

[root@centos7 ~]# lvcreate -L 500M -n data vg0
  Logical volume "data" created.
[root@centos7 ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data vg0 -wi-a----- 500.00m                                                    
[root@centos7 ~]# lsblk 
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0  200G  0 disk 
├─sda1         8:1    0    1G  0 part /boot
├─sda2         8:2    0   50G  0 part /
├─sda3         8:3    0    2G  0 part [SWAP]
├─sda4         8:4    0    1K  0 part 
└─sda5         8:5    0  100M  0 part /data
sdb            8:16   0   20G  0 disk 
├─sdb1         8:17   0   10G  0 part 
│ └─vg0-data 253:0    0  500M  0 lvm  
├─sdb2         8:18   0    1K  0 part 
└─sdb5         8:21   0   10G  0 part 
sdc            8:32   0   10G  0 disk 
└─sdc1         8:33   0   10G  0 part 
sr0           11:0    1  4.4G  0 rom  

6.mkfs.xfs /dev/vg0/data

root@centos7 /]# mkfs.xfs /dev/vg
vg0/         vga_arbiter  
[root@centos7 /]# mkfs.xfs /dev/vg0/data 
mkfs.xfs: /dev/vg0/data appears to contain an existing filesystem (ext4).
mkfs.xfs: Use the -f option to force overwrite.
[root@centos7 /]# mkfs.xfs -f  /dev/vg0/data 
meta-data=/dev/vg0/data          isize=512    agcount=4, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@centos7 ~]# lsblk -l
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda        8:0    0  200G  0 disk 
sda1       8:1    0    1G  0 part /boot
sda2       8:2    0   50G  0 part /
sda3       8:3    0    2G  0 part [SWAP]
sda4       8:4    0    1K  0 part 
sda5       8:5    0  100M  0 part /data
sdb        8:16   0   20G  0 disk 
sdb1       8:17   0   10G  0 part 
vg0-data 253:0    0  500M  0 lvm  
sdb2       8:18   0    1K  0 part 
sdb5       8:21   0   10G  0 part 
sdc        8:32   0   10G  0 disk 
sdc1       8:33   0   10G  0 part 
sr0       11:0    1  4.4G  0 rom  
[root@centos7 ~]# lsblk -f
NAME         FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                             
├─sda1       xfs                         4480e468-b062-44b2-a02a-ba53ebdeba6f   /boot
├─sda2       xfs                         38e69d2a-06e2-4ada-9254-6fc27c5a2798   /
├─sda3       swap                        c39bae4c-fec4-4290-b258-cf252d3635d7   [SWAP]
├─sda4                                                                          
└─sda5       xfs                         e8715e85-be85-465d-8f74-88b7cd3bbea0   /data
sdb                                                                             
├─sdb1       LVM2_member                 6kZEq9-B565-jPf6-DaTk-6u3O-tXF4-2qcjUA 
│ └─vg0-data xfs                         4c955709-6828-408b-80d8-06311ac4fe25   
├─sdb2                                                                          
└─sdb5                                                                          
sdc                                                                             
└─sdc1       LVM2_member                 eVRoHy-hbbz-2mcD-MNYg-b9XZ-n0rT-VcR9E0 

6.挂载
mount /dev/vg0/data /data2

[root@centos7 ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
devtmpfs                920732       0    920732   0% /dev
tmpfs                   931500       0    931500   0% /dev/shm
tmpfs                   931500    9728    921772   2% /run
tmpfs                   931500       0    931500   0% /sys/fs/cgroup
/dev/sda2             52403200 1755984  50647216   4% /
/dev/sda5                98980   38996     59984  40% /data
/dev/sda1              1038336  145404    892932  15% /boot
tmpfs                   186304       0    186304   0% /run/user/0
/dev/mapper/vg0-data    508580   25824    482756   6% /data2

扩容、lvm ,data目录

1,首先查看pvs是否有空间,不够需要pvcreate /dev/XXX 创建物理卷 , 我之前加了一块10g的sdc盘。
2, 第一步实现逻辑卷的空间扩展

[root@centos7 ~]# lvextend -L +8G /dev/vg0/data 
  Size of logical volume vg0/data changed from 500.00 MiB (125 extents) to <8.49 GiB (2173 extents).
  Logical volume vg0/data successfully resized.
[root@centos7 ~]# lvs
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data vg0 -wi-ao---- <8.49g                                                    
[root@centos7 ~]# pvs
  PV         VG  Fmt  Attr PSize   PFree  
  /dev/sdb1  vg0 lvm2 a--  <10.00g  <1.51g
  /dev/sdc1      lvm2 ---  <10.00g <10.00g
[root@centos7 ~]# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  vg0   1   1   0 wz--n- <10.00g <1.51g
[root@centos7 ~]# 

注意:还没扩容文件系统,块设备显示已扩容,文件系统还是原来的容量:

[root@centos7 ~]# lsblk #块设备显示已扩容
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0  200G  0 disk 
├─sda1         8:1    0    1G  0 part /boot
├─sda2         8:2    0   50G  0 part /
├─sda3         8:3    0    2G  0 part [SWAP]
├─sda4         8:4    0    1K  0 part 
└─sda5         8:5    0  100M  0 part /data
sdb            8:16   0   20G  0 disk 
├─sdb1         8:17   0   10G  0 part 
│ └─vg0-data 253:0    0  8.5G  0 lvm  /data2
├─sdb2         8:18   0    1K  0 part 
└─sdb5         8:21   0   10G  0 part 
sdc            8:32   0   10G  0 disk 
└─sdc1         8:33   0   10G  0 part 
sr0           11:0    1  4.4G  0 rom  
[root@centos7 ~]# df -h  #文件系统还是原来的容量
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              900M     0  900M   0% /dev
tmpfs                 910M     0  910M   0% /dev/shm
tmpfs                 910M  9.5M  901M   2% /run
tmpfs                 910M     0  910M   0% /sys/fs/cgroup
/dev/sda2              50G  1.7G   49G   4% /
/dev/sda5              97M   39M   59M  40% /data
/dev/sda1            1014M  142M  873M  15% /boot
tmpfs                 182M     0  182M   0% /run/user/0
/dev/mapper/vg0-data  497M   26M  472M   6% /data2

2, 第一步实现逻辑卷的空间扩展
第二步实现文件系统的扩展
#针对ext
resize2fs /dev/VG_NAME/LV_NAME

#针对xfs
xfs_growfs MOUNTPOINT

[root@centos7 ~]# xfs_growfs /dev/mapper/vg0-data
meta-data=/dev/mapper/vg0-data   isize=512    agcount=4, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 128000 to 2225152
[root@centos7 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              900M     0  900M   0% /dev
tmpfs                 910M     0  910M   0% /dev/shm
tmpfs                 910M  9.5M  901M   2% /run
tmpfs                 910M     0  910M   0% /sys/fs/cgroup
/dev/sda2              50G  1.7G   49G   4% /
/dev/sda5              97M   39M   59M  40% /data
/dev/sda1            1014M  142M  873M  15% /boot
tmpfs                 182M     0  182M   0% /run/user/0
/dev/mapper/vg0-data  8.5G   29M  8.5G   1% /data2

#一步实现容间和文件系统的扩展
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME

[root@centos7 ~]# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  vg0   1   1   0 wz--n- <10.00g <1.51g 
[root@centos7 ~]# lvresize  -r -l +100%FREE /dev/vg0/data 
  Size of logical volume vg0/data changed from <8.49 GiB (2173 extents) to <10.00 GiB (2559 extents).
  Logical volume vg0/data successfully resized.
meta-data=/dev/mapper/vg0-data   isize=512    agcount=70, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2225152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2225152 to 2620416
[root@centos7 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              900M     0  900M   0% /dev
tmpfs                 910M     0  910M   0% /dev/shm
tmpfs                 910M  9.5M  901M   2% /run
tmpfs                 910M     0  910M   0% /sys/fs/cgroup
/dev/sda2              50G  1.7G   49G   4% /
/dev/sda5              97M   39M   59M  40% /data
/dev/sda1            1014M  142M  873M  15% /boot
tmpfs                 182M     0  182M   0% /run/user/0
/dev/mapper/vg0-data   10G   29M   10G   1% /data2
[root@centos7 ~]# 

缩容、lvm的 data目录

注意:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减
我这里是xfs文件系统,首先卸载然后改成ext4文件系统:

[root@centos7 ~]# lsblk -f
NAME         FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                             
├─sda1       xfs                         4480e468-b062-44b2-a02a-ba53ebdeba6f   /boot
├─sda2       xfs                         38e69d2a-06e2-4ada-9254-6fc27c5a2798   /
├─sda3       swap                        c39bae4c-fec4-4290-b258-cf252d3635d7   [SWAP]
├─sda4                                                                          
└─sda5       xfs                         e8715e85-be85-465d-8f74-88b7cd3bbea0   /data
sdb                                                                             
├─sdb1       LVM2_member                 6kZEq9-B565-jPf6-DaTk-6u3O-tXF4-2qcjUA 
│ └─vg0-data xfs                         4c955709-6828-408b-80d8-06311ac4fe25   /data2
├─sdb2                                                                          
└─sdb5                                                                          
sdc                                                                             
└─sdc1       LVM2_member                 eVRoHy-hbbz-2mcD-MNYg-b9XZ-n0rT-VcR9E0 
sr0          iso9660     CentOS 7 x86_64 2020-11-04-11-36-43-00    
[root@centos7 ~]# umount /data2
[root@centos7 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          920732       0    920732   0% /dev
tmpfs             931500       0    931500   0% /dev/shm
tmpfs             931500    9728    921772   2% /run
tmpfs             931500       0    931500   0% /sys/fs/cgroup
/dev/sda2       52403200 1755992  50647208   4% /
/dev/sda5          98980   38996     59984  40% /data
/dev/sda1        1038336  145404    892932  15% /boot
tmpfs             186304       0    186304   0% /run/user/0
[root@centos7 ~]# mkfs.ext4 /dev/vg0/data 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620416 blocks
131020 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@centos7 ~]# 
[root@centos7 ~]# mount /dev/vg0/data /data2
[root@centos7 ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
devtmpfs                920732       0    920732   0% /dev
tmpfs                   931500       0    931500   0% /dev/shm
tmpfs                   931500    9728    921772   2% /run
tmpfs                   931500       0    931500   0% /sys/fs/cgroup
/dev/sda2             52403200 1755992  50647208   4% /
/dev/sda5                98980   38996     59984  40% /data
/dev/sda1              1038336  145404    892932  15% /boot
tmpfs                   186304       0    186304   0% /run/user/0
/dev/mapper/vg0-data  10186004   36888   9608652   1% /data2
[root@centos7 ~]# lsblk -f
NAME         FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                             
├─sda1       xfs                         4480e468-b062-44b2-a02a-ba53ebdeba6f   /boot
├─sda2       xfs                         38e69d2a-06e2-4ada-9254-6fc27c5a2798   /
├─sda3       swap                        c39bae4c-fec4-4290-b258-cf252d3635d7   [SWAP]
├─sda4                                                                          
└─sda5       xfs                         e8715e85-be85-465d-8f74-88b7cd3bbea0   /data
sdb                                                                             
├─sdb1       LVM2_member                 6kZEq9-B565-jPf6-DaTk-6u3O-tXF4-2qcjUA 
│ └─vg0-data ext4                        684da0ab-374a-497d-b425-88989f9b3dda   /data2
├─sdb2                                                                          
└─sdb5                                                                          
sdc                                                                             
└─sdc1       LVM2_member                 eVRoHy-hbbz-2mcD-MNYg-b9XZ-n0rT-VcR9E0 
sr0          iso9660     CentOS 7 x86_64 2020-11-04-11-36-43-00                 
[root@centos7 ~]# 
      

3,卸载然后缩容文件系统—缩容逻辑卷–挂载:

[root@centos7 ~]# umount /data2
e2fsck -f /dev/vg0/data 
resize2fs /dev/vg0/data -7G  #带减号是减少多少,不带减号是缩到多少
lvreduce -L -7G /dev/vg0/data 
mount /dev/VG_NAME/LV_NAME mountpoint

一条命令:

umount /dev/vg0/data
lvreduce  -L 7G -r /dev/vg0/data  #带减号是减少多少,不带减号是缩到多少
mount /dev/vg0/data  /data2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值