N74023作业,第二周

 1. 总结linux安全模型

安全方面的3A概念
Authentication: 认证,验证用户身份
Authorization: 授权,不同的用户设置不同权限
Accouting|Audition: 审计

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

文件权限
文件的权限主要针对三类对象进行定义
owner 属主,u
group 属组,g
other 其他,o

每个文件针对每类访问者都定义了三种权限
r Readable 4 可使用文件查看类工具获取其内容
w Writable 2 可修改其内容,文件的是否被删除和文件的权限无关
x excutable 1 可以把此文件提请内核启动为一个进程,即可以执行
此文件

文件权限常见组合
rwx 7
wr- 6
r-x 5
r-- 4
--- 0

对目录的权限
r 可以使用ls查看此目录中文件名列表,但无法看到文件的属性和内容
w 可以在目录中创建文件,也可以删除文件,而和此被删除的文件的权限无关
x 可以cd进入此目录,也可以查看此目录中指定文件的元数据,当预先知道文件名称时,
也可以查看文件的内容,属于目录的可访问的最小权限
- 不能访问目录
r-x 只读目录
rwx 可读也可以写目录

创建一个给mysql用的账号
useradd -d /data/mysql mysql

创建组然后创建用户
groupadd -g 123 -r mysql
useradd -u 123 -g mysql -s /sbin/nologin -d /data/mysql -M mysql

修改用户信息
usermod -u 111 -s /bin/false mysql

修改文件权限
模式法
chmod who(谁) opt(操作) per(权限) file
who:u(自己),g(组),o(other),a(所有人)
opt:+ - = 增加,删除赋予
per:r w x
例如:
chmod o+w all.log

数字法
r--
100 4
-w-
010 2
--x
001 1

rw- 6
rwx 7
r-x 5

给data下的文件夹增加执行权限
chmod -R a+X /data

rwxrw---- all.log
111 110 000
7 6 0
chmod 760 all.log

chmod 修改文件的读写访问权限
chown 修改用户和用户组的属性

umask
希望临时性文件权限为000
1.touch a.txt
chmod 000 a.txt
2.umask 777;touch a.txt;umask 022;
3.(umask 777;touch a.txt) 小括号可以一次性有效

3. 结合vim几种模式,学会使用vim几个常见操作。
1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
打开文件vim command;在命令模式输入":",然后点wq、q、q!都可以退出
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
在插入模式按ESC键可以进入命令模式,然后输入:wq可以退出
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
vim mage.txt i 输入马哥出品,必属精品 按ESC,然后输入:wq,然后退出
4)使用cat命令验证文件内容,是刚刚自己写的内容。
#vim mage.txt
[15:49:20 root@Rocky8 ~]#cat mage.txt
马哥出品,必属精品
5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。

4. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
文本查看工具
cat命令:查看文件
head命令:从头开始查看文件
tail命令:从结尾开始查看文件
more命令:过滤、分页显示文件
less命令:过滤、分页显示文件,支持上下键翻页显示
wc命令:显示每个文件的换行符、单词和字节计数

文本处理工具
sort命令:排序工具
uniq命令:去重工具
cut命令:切片工具

文本查找工具
locate:非实时查找。
来自于mlocate包,需要手动安装。包含locate和updatedb命令

find:实时查找。
来自于findutils包。包含find和xargs命令

5. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
正则表达式是一种可供Linux工具过滤文本的自定义模板。Linux工具(grep,sed,awk等工具)会在读取数据时使用正则
表达式对数据进行模式(PATTERN)匹配。如果数据匹配模式,它就会被处理,反之被丢弃。

POSIX 基础正则表达式(BRE)引擎

[]:表示一个字符,该字符可以是[]中指定的内容
例如:
[abc]:这个字符可以是a或b或c
[a-z] :表示任意一个小写字母
[a-zA-Z] :表示任意一个字母
[a-zA-Z0-9_] :表示任意一个数字字母下划线
[^abc] :该字符只要不是a或b或c

预定义字符:
. :表示任意一个字符,没有范围限制
\d :表示任意一个数字,等同于[0-9]
\w :表示任意一个单词字符,等同于[a-zA-Z0-9_]–单词指字母/数字/_
\s :表示任意一个空白字符
\D :表示不是数字
\W :不是单词字符
\S :不是空白字符

?:表示前面的内容出现0-1次
例如: [abc]? 可以匹配:a 或 b 或 c 或什么也不写
+:表示前面的内容最少出现1次
例如: [abc]+ 可以匹配:b或aaaaaaaaaa…或abcabcbabcbabcba…
但是不能匹配:什么都不写 或 abcfdfsbbaqbb34bbwer…
*:表示前面的内容出现任意次(0-多次)—匹配内容与+一致,只是可以一次都不写
例如: [abc]* 可以匹配:b或aaaaaaaaaa…或abcabcba…或什么都不写
但是不能匹配:abcfdfsbbaqbb34bbwer…
{n}:表示前面的内容出现n次
例如: [abc]{3} 可以匹配:aaa 或 bbb 或 aab 或abc 或bbc
但是不能匹配: aaaa 或 aad
{n,m}:表示前面的内容出现最少n次最多m次
例如: [abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc
但是不能匹配:aaaaaa 或 aabbd
{n,}:表示前面的内容出现n次以上(含n次)
例如: [abc]{3,} 可以匹配:aaa 或 aaaaa… 或 abcbabbcbabcba…
但是不能匹配:aa 或 abbdaw…

()用于分组,是将括号内的内容看做是一个整体
(abc){3} 表示abc整体出现3次. 可以匹配abcabcabc
但是不能匹配aaa 或abcabc

(abc|def){3} 表示abc或def整体出现3次.
可以匹配: abcabcabc 或 defdefdef 或 abcdefabc
但是不能匹配abcdef 或abcdfbdef


POSIX 扩展正则表达式(ERE)引擎
^ # 匹配行首,比如\^a\表示匹配以a开头的字符
$ # 匹配行尾,比如\a$\表示匹配以a结尾的字符
^$ # 匹配空行
[] # 匹配指定范围内的任意单个字符
[^] # 匹配不在指定范围内的任意单个字符
. # 匹配任意单个字符,也可以是汉字
* # 匹配前面的字符0到任意次
.* # 匹配任意字符
? # 匹配前面的字符0或1次,即可有可无
+ # 匹配前面的字符至少一次或多次,即肯定有一个
{n} # 匹配前面的字符n次
{m,n} # 匹配前面的字符至少m次,至多n次
{,n} # 匹配前面的字符至多n次,0-n次
{n,} # 匹配前面的字符至少n次,n-m次
\< # 匹配以什么开头的单词,例如 \<tom 就会匹配 "tomcat"
\> # 匹配以什么结尾的单词,例如 cat\> 就会匹配 "tomcat"
() # 分组,将多个字符作为整体处理
\n # 内置变量。n表示数字,表示前面第n个分组
| # 表示or的逻辑关系
[[:alnum:]] # 字母和数字
[[:alpha:]] # 任何大小写的字母
[[:lower:]] # 小写字母
[[:upper:]] # 大写字母
[[:blank:]] # 空白字符(空格和制表符)
[[:space:]] # 水平或垂直的空白字符
[[:cntrl:]] # 不可打印的控制字符,退格,删除
[[:digit:]] # 十进制数字
[[:xdigit:]] # 十六进制数字
[[:graph:]] # 可打印的非空白字符
[[:print:]] # 可打印字符
[[:punct:]] # 标点符号

6. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
明明要求:区分大小写/不能用程序中的保留字和内置变量如if,for/只能用字母、数字、下划线且不能以数字开头
命名习惯:用单词命名,不要简写/变量名大写,局部变量小写,函数名小写/大驼峰StudentFirstName/
小驼峰studentFirstName/下划线:student_name
环境变量:父进程的变量传给子进程使用,一般在shell配置里使用 export NAME=CEO / declare -x NAME=CEO
位置变量:$1,$2,$3系统自带的变量,脚本后第一、二、三个数。
color1.sh:
color=$1
echo -e "\E[1;${color}mcolor\E[0m"
例子:
bash color1.sh 32
color(绿色)
bash color1.sh 31
color(红色)
只读变量:常量,定义好不能删除,修改。退出后就没有了,不再存在 readonly pi=3.1415926
局部变量:只作用于函数内部,定义的时候前面加local
状态变量:echo $? 上一个命令成功或者失败的判断,0是成功,1-255是失败


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

HEAD=$1
FOOT=$2

RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHOOK=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK

[10:33:30 root@Rocky8 scripts]#bash /data/scripts/chook_rabbit.sh 30 80
RABBIT:10
CHOOK:20

8. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
for i in {1..10};do
useradd user$i
PASS=`cat /dev/urandom | tr -dc '[:alnum:]' |head -c12`
#选取urandom文件里面去除了字母和数字以外其他东西的随机字母或者数字,只取12位
echo $PASS | passwd --stdin user$i &> /dev/null
把生成的密码传给后边,设置成密码
echo user$i:$PASS >> /data/user.log
echo "user$i is created"
done

9. 磁盘存储术语总结: head, track, sector, sylinder.
机械硬盘的结构主要分为磁头,磁道、扇区和拄面。
磁头:由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
磁道:每个盘片都在逻辑上有很多的同心圆,最外面的同心圆就是 0 磁道。我们将每个同心圆称作磁道(注意,磁道只是逻辑结构,
在盘面上并没有真正的同心圆)。硬盘的磁道密度非常高,通常一面上就有上千个磁道。
扇区:在磁盘上每个同心圆是磁道,从圆心向外呈放射状地产生分割线(扇骨),将每个磁道等分为若干弧段,每个弧段就是一个扇区。
每个扇区的大小是固定的,为 512Byte。扇区是磁盘的最小存储单位。

柱面:如果硬盘是由多个盘片组成的,每个盘面都被划分为数目相等的磁道,那么所有盘片都会从外向内进行磁道编号,最外侧的就是 0 磁道。
具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。

存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数(512B)

10. 总结MBR,GPT结构。
MBR:Master Boot Record,主引导记录。使用32位表示扇区数(2^32*512B=2TB),所以最大只支持2TB容量的硬盘,
在Linux中可以创建3个主分区+任意扩展分区。
在MBR分区表中,第一个扇区(512bytes)包含主引导记录
前446字节存放boot loader启动相关
64字节存放分区表,每个分区占用16字节
2字节表示标识位,55 aa
MBR只支持4个主分区,如果想要划分多个分区,则需要创建至多1个扩展分区,然后在扩展分区创建多个逻辑分区。
(扩展分区需要转换为多个若干逻辑分区,才能使用)。

GPT:GUID,Globals Unique Identifiers(全局唯一标识符)。GPT没有逻辑分区和扩展分区的概念,在Linux中主分区的个数没有限制,
使用64位表示扇区数,最大支持8ZB容量的硬盘。GPT支持UEFI启动。


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

fdisk命令用于新建,修改及删除磁盘的分区表信息。语法格式为:

fdisk [options] device
fdisk -l [device...]

options:
m:查看全部 可用的参数
n:添加新的分区
d:删除分区信息
l:列出所有可用的分区类型
t:改变某个分区类型
p:查看分区表信息
g:创建gpt分区表
o:创建mbr分区表
w:保存并退出
q:不保存直接退出

$ fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n # 添加分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p # 主分区
Partition number (1-4, default 1): 1 # 分区编号
First sector (2048-41943039, default 2048): # 起始扇区
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +1G # 结束扇区

Created a new partition 1 of type 'Linux' and of size 1 GiB.

Command (m for help): w # 保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

mkfs创建文件系统

mkfs [options] [-t type] [fs-options] device [size]
-b:指定块大小

$ mkfs.ext4 /dev/sdb1
5、使用blkid或lsblk -f查看文件系统

$ blkid /dev/sdb1
/dev/sdb1: UUID="73a96cac-7693-4604-9573-73f497611833" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="4ad54fe3-01"

挂载分区
只有将创建完成文件系统的设备关联至目录,才能使用设备。mount命令用于挂载文件系统。

格式:
mount [选项] 设备 挂载目录

-a:挂载所有在/etc/fstab中定义的文件系统
-t:指定文件系统的类型
-ro:只读挂载
-rw:以读写方式挂载(默认)
-o:挂载选项列表,以英文逗号分隔
将/dev/sdb1挂载到/backup目录。系统会自动判断要挂载文件系统的类型。

$ mount /dev/sdb1 /backup
UUID是一串用于识别每块独立硬盘的字符串,具有唯一性和稳定性。也可以使用UUID值来挂载设备:

$ mount 73a96cac-7693-4604-9573-73f497611833 /backup

使用df命令查看挂载的设备。

$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 974M 24K 907M 1% /backup
以上挂载方式为临时挂载,系统重启后就会解除挂载。如果想要永久挂载,就需要将挂载信息写入至/etc/fstab文件中。

$ head -n1 /etc/fstab
/dev/mapper/rl-root / xfs defaults 0 0

" 设备文件 挂载目录 文件系统 挂载选项 是否备份 是否自检 "

1. 设备文件:一般为设备的路径+设备名称,也可以写通用唯一识别码(UUID)
2. 挂载目录:指定要挂载的目录,需要在挂载前创建好
3. 文件系统类型:文件系统类型,比如ext4、xfs、swap(交换分区)、ios9660(光盘文件系统)
4. 挂载选项:若设为defaults,则默认权限为rw,suid,dev,exec,auto,nouser,async。
5. 是否备份:若为1则开机后使用dump进行磁盘备份,为0则不备份
6. 是否自检:若为1则开机后自动进行磁盘自检,为0则不自检

如果是网络存储设备,建议加上`_netdev`参数。表示系统会等联网成功后才会挂载此硬盘。从而避免开机时间过长或失败的情况。

设置开机自动挂载
# 卸载
$ umount /backup
# 写入配置文件
$ echo "/dev/sdb1 /backup ext4 defaults 0 0" >> /etc/fstab
# 使用-a选项读取配置文件中的信息
$ mount -a

$ df -hT
/dev/sdb1 ext4 974M 24K 907M 1% /backup

添加交换分区
1、使用fdisk命令为sdb添加一个大小为1G的分区2。然后修改硬盘的标识符,修改为82(Linux swap):

Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2):
First sector (2099200-41943039, default 2099200):
Last sector, +sectors or +size{K,M,G,T,P} (2099200-41943039, default 41943039): +1G

Created a new partition 2 of type 'Linux' and of size 1 GiB.
Partition #2 contains a xfs signature.

The signature will be removed by a write command.

Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Command (m for help): w
The partition table has been altered.
Syncing disks.

mkswap命令用于对分区创建交换分区
$ mkswap /dev/sdb2
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=f1372ea2-5dce-43a5-a7ac-d196919030cb
3、swapon命令用于激活新的交换分区设备,如果已经将配置信息写入/etc/fstab,就可以使用swapon -a 来读取配置文件。

$ free -h
total used free shared buff/cache available
Mem: 1.7Gi 266Mi 1.0Gi 8.0Mi 459Mi 1.3Gi
Swap: 2.0Gi 0B 2.0Gi

$ swapon /dev/sdb2
$ free -h
total used free shared buff/cache available
Mem: 1.7Gi 266Mi 1.0Gi 8.0Mi 459Mi 1.3Gi
Swap: 3.0Gi 0B 3.0Gi
4、在/etc/fstab中写入新增加交换分区信息:

$ echo "/dev/sdb2 swap swap defaults 0 0" >> /etc/fstab

使用swapoff来禁用交换分区:

$ swapon -s # 查看使用的设备
Filename Type Size Used Priority
/dev/dm-1 partition 2125820 0 -2
/dev/sdb2 partition 1048572 0 -3

$ swapoff /dev/sdb2

使用文件方式提供swap功能
$ dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.84864 s, 581 MB/s

$ mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=88d7aa70-d1be-4936-8553-6a8301d4b3db

$ chmod 600 /swapfile

$ echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
$ swapon -a
$ free -h
total used free shared buff/cache available
Mem: 1.7Gi 264Mi 76Mi 8.0Mi 1.4Gi 1.3Gi
Swap: 3.0Gi 0.0Ki 3.0Gi

$ swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2125820 268 -2
/swapfile file 1048572 0 -3


12. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。
利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

RAID0技术把多块物理硬盘设备(至少为两块)通过硬件或软件的方式串联到一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。
RAID0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如图所示,数据会被分别写入到不同的硬盘设备中,
即硬盘1和硬盘2都会保存数据,最终提升读取,写入效果。可用空间为所有硬盘的空间。

RAID1技术把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份),
当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。在写入操作时考虑到因硬盘切换带来的开销,
因此RAID1的速度会比RAID0有稍微的降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值
可以说硬盘数量的倍数。但是因为是在多块硬盘中写入相同的数据,因此硬盘利用率得以下降。从理论上来说,下图的硬盘空间利用率
只有50%,当有3块硬盘的时候,空间利用率只有33%左右,以此类推。

RAID5技术是把硬盘设备的奇偶校验信息保存到其他硬盘设备中。RAID5磁盘阵列中的数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,
而是存储到其他每一块硬盘上。这样的好处是,其中任何一块硬盘损坏后不至于出现致命的错误。在下图中,parity部分存放的就是数据的奇偶
校验信息。RAID5最少由3块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于RAID1级别,好处就在于保存的是奇偶校验信息而不是
一模一样的文件内容。其可用容量是N-1(块硬盘)。

RAID10技术是RAID1+RAID0技术的一个”组合体“。如图所示,RAID10至少需要4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据
的安全性;然后再对两个RAID1磁盘阵列组建RAID0磁盘阵列,进一步提高设备的读写速度。这样从理论上来讲,如果坏的不是同一个(RAID1)磁
盘阵列中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。其可用容量为50%。

13. 完成不影响业务对LVM磁盘扩容及缩容示例。
LVM(逻辑卷管理器)允许用户对硬盘资源进行动态调整。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,、
可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。

扩展逻辑卷
用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩容之前需要卸载设备和挂载点的关联。

# 卸载挂载点
$ umount /media/lv0

# 查看vg剩余空间,还有9.96G的空间
$ vgs
VG PV LV SN Attr VSize VFree
rl 1 2 0 wz--n- <49.00g 0
vg0 4 1 0 wz--n- 19.96g 9.96g

# -l +100%free表示使用卷组的全部剩余空间。还可以-L +9G指定增加的容量或使用-L 10G将容量扩容至19G。
# -r选项扩展文件系统。
$ lvextend -r -l +100%free /dev/vg0/lv0

重新挂载硬盘并查看挂载状态
$ mount -a
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv0 20G 24K 19G 1% /media/lv0


缩小逻辑卷
只能缩减ext4文件系统的逻辑卷,不支持xfs文件系统。

1、卸载挂载
$ umount /media/lv0

2、缩小逻辑卷至10GB,同时缩小文件系统。
$ lvreduce -L 10G -r /dev/vg0/lv0

3、重新挂载逻辑卷
$ mount -a
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv0 9.8G 25M 9.3G 1% /media/lv0

posted @ 2023-03-20 09:53  下雨天ltf  阅读(43)  评论(0)    收藏  举报