第二周作业
一、Linux安全模型:
Linux安全模型:是一个多层次的安全体系,它包括访问控制、用户身份验证、文件系统安全、SSL和SELinux等组件,这些组件一起工作以确保系统的安全性和完整性。
Linux安全模型是一个包含多个组件的系统,这些组件一起工作以确保系统的安全性和完整性。
- 访问控制:使用访问控制显示用户对系统资源的访问,通过文件权限和用户身份验证来控制文件和目录的访问,并会通过进程权限和SELinux策略来控制进程对系统资源的访问。
- 用户身份验证:使用用户名和密码或者其他的身份验证方式来验证用户的身份,可以防止未经授权的用户访问系统资源。
- 文件系统安全:在文件系统上设置权限和使用SELinux控制进程对文件系统的访问。
- 安全套接字层(SSL):Linux支持SSL加密网络通信,使用公共密钥和私有密钥对数据就进行加密,以确保数据在传输过程中的安全性;
二、vim几种模式,常见操作如下;
- 如何打开文件,并在命令模式中退出文件;
命令模式下:
vim +文件名 打开文件
:q 退出文件(未修改文件内容时)
:q! 强制退出文件
:wq 保存并退出文件
- 打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。;
:i 进入插入模式
命令模式下,按ESC键,退出编辑模式进入命令模式;
:wq 退出文件
- 打开文件(命令模式)之后,进入插入模式,编写一段话,“马哥出品,必属精品”, 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件,cat命令验证输入文件内容;
:i 进入插入模式
马哥出品,必属精品
按ESC键,退出编辑模式进入命令模式;
:wq 保存并退出文件
三、总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
文本处理工具
- grep:用于搜索文本内容,并支持使用正则表达式进行搜索匹配。常见选项如下:
-i:忽略大小写
-r:递归地搜索目录
-v:只显示不匹配的行
-n:显示匹配行的行号
**示例:搜索在/etc/passwd 文件下包含“user”的行;**
[22:13:55 root@bogon ~]#grep -n "user" /etc/passwd
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
25:user2:x:1003:1003::/home/user2:/bin/bash
26:user3:x:1004:1004::/home/user3:/bin/bash
27:user4:x:1005:1005::/home/user4:/bin/bash
28:user5:x:1006:1006::/home/user5:/bin/bash
29:user6:x:1007:1007::/home/user6:/bin/bash
30:user7:x:1008:1008::/home/user7:/bin/bash
31:user8:x:1009:1009::/home/user8:/bin/bash
32:user9:x:1010:1010::/home/user9:/bin/bash
33:user10:x:1011:1011::/home/user10:/bin/bash
- sed:用于对文本进行编辑,支持正则表达式。常见选项如下:
-e:指定多个编辑命令
-i:直接修改文件内容
-r:使用扩展正则表达式
示例:将config文件中的"SELINUX"替换为“selinux”,并直接修改文件内容;
[22:42:46 root@bogon selinux.bak-2023-04-19_22-41-55]#cat config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[22:44:08 root@bogon selinux.bak-2023-04-19_22-41-55]#sed -i 's/SELINUX/selinux'/g config
[22:44:21 root@bogon selinux.bak-2023-04-19_22-41-55]#cat config
# This file controls the state of SELinux on the system.
# selinux= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
selinux=enforcing
# selinuxTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
selinuxTYPE=targeted
文件查找工具
- find:查找文件和目录,支持根据文件名、文件类型、文件大小等条件进行搜索;
-name:根据文件名进行匹配
-type:根据文件类型进行匹配
-size:根据文件大小进行匹配
-exec:对匹配的文件执行指定的命令
``示例:查找/data 目录下所有包含".txt"的文件, 并将这些文件拷贝到/data/backup/文件中;
[22:50:58 root@bogon data]#find /data/ -name '*.txt'
/data/b.txt
/data/1.txt
/data/11.txt
[22:51:50 root@bogon data]#find /data/ -name '*.txt' -exec cp {} /data/backup/ \;
cp: '/data/backup/b.txt' and '/data/backup/b.txt' are the same file
cp: '/data/backup/1.txt' and '/data/backup/1.txt' are the same file
cp: '/data/backup/11.txt' and '/data/backup/11.txt' are the same file
[22:53:22 root@bogon data]#ls backup/
11.txt 1.txt b.txt
[22:53:36 root@bogon data]#
文本处理三剑客
- grep:用于在文本中查找匹配的模式。
-i:忽略大小写
-r:递归地搜索目录
-v:只显示不匹配的行
-n:显示匹配行的行号
```示例:查找/etc/passwd 文件中包含“root”的行;
[23:17:57 root@bogon data]#grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[23:18:10 root@bogon data]#
- sed:用于在文本中进行编辑和转换。常见选项:
-e:指定多个编辑命令
-i:直接修改文件内容
-r:使用扩展正则表达式
示例:将文件中“selinux”修改为“SELINUX”并输出标准输出。
[23:23:02 root@bogon selinux.bak-2023-04-19_22-41-55]#sed 's/selinux/SELINUX/g' config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[23:23:55 root@bogon selinux.bak-2023-04-19_22-41-55]#
文本格式命令(printf)
printf 是格式化输出的命令,可将数据按照指定的格式输出到标准输出或者文件中,常见选项如下:
%d:十进制整数
%f:浮点数
%s:字符串
%c:字符
%x:十六进制整数
示例:输出一个整数、一个浮点数和一个字符串;
[23:30:56 root@bogon data]#printf "%d %.2f %s\n" 10 3.14159 "hello"
10 3.14 hello
四、总结文本处理的grep命令相关的基本正则表达式和扩展表达式。
使用grep命令进行文本处理时,就可以用正则表达式指定匹配模式。grep支持基本正则表达式和扩展表达式。
`基本正则表达式:
.:匹配任意一个字符。
^:匹配行首的位置。
$:匹配行尾的位置。
*:匹配前一个字符出现 0 次或多次。
[]:匹配括号中的任意一个字符。
[^]:匹配不在括号中的任意一个字符。
\( 和 \):将括号中的内容作为一个分组。
\{n,m\}:匹配前一个字符出现 n 到 m 次。
示例:grep 'root'/etc/passwd :匹配文件中以‘root’开头的行;
grep 'root$' /etc/passwd :匹配文件中以‘root’结尾的行;
grep 'root1.*user2' /etc/passwd :匹配文件中含有‘root’并且后边跟着‘user’的行;
grep '[abc]' test.txt :匹配文件中包含字符a、b、c的行;
grep '[^abc]' test.txt :匹配文件中不包含字符a、b、c的行;
扩展正则表达式:
+:匹配前一个字符出现 1 次或多次。
?:匹配前一个字符出现 0 次或 1 次。
|:表示或者,匹配两个模式中的一个。
():分组。
{n,m}:匹配前一个字符出现 n 到 m 次。
grep -E '^root' /etc/passwd :匹配文件中以‘root’开头的行;
grep -E '^root$' /etc/passwd :匹配文件中以‘root’结尾的行;
grep -E 'root{3,}' text.txt :匹配文件中至少含有3个‘root’的行;
五、总结变量命名规则,不同类型变量(环境变量、位置变量、只读变量、局部变量、状态变量)如何使用。
1、变量名命名规则
变量命名规则:
变量名只能包含字母、数字和下划线(_)。
变量名的第一个字符必须是字母或下划线。
变量名不能是保留关键字(如if、else、for等)。
变量名应该有意义,描述变量所代表的值。
2、不同类型变量的使用:
**环境变量**:环境变量是在shell中定义的变量,它们对所有在该shell中启动的进程都可见。可以使用export命令将一个变量设置为环境变量,
例如:export PATH=/usr/local/bin:$PATH,将/usr/local/bin添加到PATH环境变量中。
**位置变量**:位置变量是在shell中使用命令行参数传递给脚本的变量。它们的名称为$0、$1、$2等,其中$0代表脚本本身的名称。
例如,如果你运行脚本test.sh,可以使用$1获取第一个命令行参数,即test.sh后面的第一个参数。
**只读变量**:只读变量是使用readonly命令定义的变量,它们的值不能被修改。这通常用于防止意外更改重要变量的值。
例如:readonly NAME="John",将变量NAME设置为只读,不能被修改。
**局部变量**:局部变量是在shell脚本中定义的变量,它们只在该脚本的当前作用域中可见。
例如,使用local关键字定义一个局部变量:local COUNT=10,在函数内部定义一个局部变量COUNT。
**状态变量**:状态变量是在脚本中使用特定值表示不同状态的变量,
例如,$?变量表示上一个命令的退出状态。通常,0表示成功,非零值表示错误。例如,echo $?
六、通过shell编程完成30只鸡和兔子的头,80只鸡和兔的脚,分别有几只鸡几只兔?
[23:10:30 root@localhost scripts]#cat chicken_rabbit.sh
#!/bin/bash
#
#***********************************************************
#Author: Devin
#QQ: 2858206461
#Date: 2023-04-20
#FileName: chicken_rabbit.sh
#URL:
#Description: The test script
#Copyright (C): 2023All rights reserved
#*********************************************************
HANDS=$1
FEET=$2
#设鸡为X只,兔子为Y只
# X + Y = hands
#2X + 4Y = feet
X=$((HANDS -Y))
Y=$(((FEET - 2 *HANDS)/2))
echo "鸡的数量为$X,兔子的数量为$Y"
[23:10:50 root@localhost scripts]#
[23:11:56 root@localhost scripts]#bash chicken_rabbit.sh 30 80
鸡的数量为30,兔子的数量为10
[23:12:14 root@localhost scripts]#
七、结合编程的for 循环,条件测试,条件组合,完成批量创建100个用户,1)for遍历1…100;2)先判断ID是否存在;3)用户存在则说明存在,若不存在则创建用户并说明已添加;
[23:22:47 root@localhost scripts]#cat useradd.sh
#!/bin/bash
#
#***********************************************************
#Author: Devin
#QQ: 2858206461
#Date: 2023-04-20
#FileName: useradd.sh
#URL:
#Description: The test script
#Copyright (C): 2023All rights reserved
#*********************************************************
#!/bin/bash
# 批量创建100个用户
for i in {1..100}; do
username="user$i"
if id "$username" >/dev/null 2>&1; then
echo "用户 $username 已存在"
else
useradd "$username"
echo "用户 $username 已添加"
fi
done
[23:22:59 root@localhost scripts]#bash useradd.sh
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
用户 user1 已添加
用户 user2 已存在
用户 user3 已存在
用户 user4 已存在
用户 user5 已存在
用户 user6 已存在
用户 user7 已存在
用户 user8 已存在
用户 user9 已存在
用户 user10 已存在
用户 user11 已添加
用户 user12 已添加
用户 user13 已添加
...
用户 user99 已添加
用户 user100 已添加
八、磁盘存存储术语总结:head,track,sector,cylinder.
磁头(head):磁头是磁盘驱动器中的一种机械部件,用于读取和写入数据。每个盘面都有一个或多个磁头,每个磁头都能读取或写入一个磁道的数据。例如,一个硬盘可能有多个盘面,每个盘面上有多个磁头。
磁道(track)磁道是磁盘上的一个环形轨道,沿着这个轨道可以读取或写入数据。一个盘面上通常有多个磁道,每个磁头可以访问一个磁道上的数据。磁道通常被划分为多个扇区。
扇区(sector)扇区是磁盘上的一个小块,用于存储数据。一个磁道上通常有多个扇区,每个扇区存储一段数据。扇区的大小通常为512字节或4KB。
柱面(cylinder)**柱面是多个盘面上同一半径上的一组磁道的集合。例如,如果一个硬盘有两个盘面,每个盘面上有100个磁道,则第一个盘面的第一个磁道和第二个盘面的第一个磁道组成了一个柱面。在访问磁盘时,通常需要移动磁头到所需的柱面上,然后再移动到需要的磁道和扇区。
九、总结MBR,GPT结构;
1、MBR结构
主引导记录,是一种较老的硬盘分区结构。MBR被放置在硬盘的第一个扇区,大小为512字节。最多只能支持4个主分区,或3个主分区和1个扩展分区。扩展分区可以被划分为多个逻辑分区。由于MBR采用32位的分区起始地址和分区大小,因此无法支持超过2TB的硬盘。
引导程序:启动计算机时加载并执行的程序。
分区表:记录硬盘分区的信息,包括分区类型、起始扇区和分区大小等。
校验和:用于校验MBR的完整性。
2、GPT结构
全局唯一标识分区表,是一种较新的硬盘分区结构。GPT被放置在硬盘的第一个扇区之后,大小为34个扇区(约为17KB)。GPT支持128个分区条目,并使用64位的分区起始地址和分区大小,因此能够支持超过2TB的硬盘。GPT还支持备份分区表,以防主分区表损坏。支持的分区数量较少且无法支持超过2TB的硬盘,而GPT是一种较新的硬盘分区结构,支持更多的分区数量和超过2TB的硬盘。
GPT头:记录GPT的元数据,包括分区表的数量、大小和校验和等。
分区表:记录硬盘分区的信息,每个分区表包含128个条目,每个条目为一个分区的信息,包括分区类型、起始扇区和分区大小等。
分区条目:包含每个分区的元数据,例如分区名称、GUID等。
十、总结学过的分区,文件系统管理,SWAP管理相关的命令及选项;
1、分区相关命令
1.1、fdisk:对磁盘进行分区和管理,包括创建分区表、创建、删除和修改分区等操作。
-n:创建新分区。
-d:删除分区。
-t:更改分区类型。
-p:显示分区表。
1.2、parted:用于创建、删除和磁盘管理分区,支持多种分区格式,包括MBR、GPT等。
print:显示分区表。
mklabel:创建新分区表。
mkpart:创建新分区。
rm:删除分区。
resizepart:调整分区大小。print:显示分区表。
2、文件系统管理命令
2.1、mkfs:用于创建文件系统,支持多种文件系统格式,包括ext4、xfs等。常用选项:
-t:指定文件系统类型。
-c:检查磁盘坏道。
2.2、tune2fs:用于调整文件系统的参数,调整 ext2、ext3 或 ext4 文件系统的属性,例如inode数量、块大小等。常用选项:
-i:设置检查间隔时间。
-c:设置检查次数。
-l:查看文件系统的信息。
2.3、xfs_info:查看XFS文件系统的信息。
2.4、fsck:检查和修复文件系统。常用选项:
-f:强制检查和修复文件系统。
-y:自动回答“yes”以所有问题。
-a:自动修复错误。
检查文件系统(fsck):
sudo fsck /dev/sdb1
2.5、挂载和卸载命令
mount:将文件系统挂载到指定的目录下。常用选项:
-t:指定文件系统类型。
-o:指定挂载选项,例如读写权限等。
umount:卸载已挂载的文件系统。
##### 挂载文件系统(mount):
sudo mount /dev/sdb1 /mnt
umount: 用于卸载文件系统。例如,卸载 /mnt
3、SWAP管理命令
swapon:启用SWAP分区。常用选项:
-s:显示SWAP分区信息。
创建新的分区并格式化为ext4文件系统:
# 创建新分区
sudo fdisk /dev/sdb
# 格式化为ext4文件系统
sudo mkfs.ext4 /dev/sdb1
启用SWAP分区:
# 创建SWAP分区
sudo mkswap /dev/sdc1
# 启用SWAP分区
sudo swapon /dev/sdc1
查看已启用的SWAP分区:
sudo swapon -s
禁用SWAP分区:
sudo swapoff /dev/sdc1
十一、总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
RAID(Redundant Array of Independent Disks)是一种通过组合多个磁盘来提高数据存储性能、可靠性和容错性的技术。
RAID 0
工作原理:将数据分成块,分别存储在不同的磁盘上,提高读写性能。
利用率:最高,将所有磁盘空间都用于存储数据。
冗余性:没有冗余,一个磁盘故障会导致数据丢失。
性能:较好的读写性能,但是可靠性较差。
至少几个硬盘实现:2个硬盘。
RAID 1
工作原理:将数据同时写入两个硬盘中,实现数据冗余,提高可靠性。
利用率:最低,只有50%的磁盘空间用于存储数据,另外50%用于备份数据。
冗余性:最高,可以容忍一块磁盘故障,不会导致数据丢失。
性能:读取性能好,写入性能略差。
至少几个硬盘实现:2个硬盘。
RAID 5
工作原理:将数据和校验信息分块存储在多个硬盘上,实现数据冗余和容错性。
利用率:较高,有n-1块硬盘用于存储数据,1块硬盘用于存储校验信息。
冗余性:较好,可以容忍一块硬盘故障,不会导致数据丢失。
性能:读取性能好,写入性能一般。
至少几个硬盘实现:3个硬盘。
RAID 10
工作原理:将多个硬盘分为两组,每组内采用RAID 1的方式实现数据冗余,两组之间采用RAID 0的方式实现读写性能提升。
利用率:较低,只有50%的磁盘空间用于存储数据。
冗余性:较好,可以容忍一组内一块硬盘故障和另一组内的所有硬盘故障,不会导致数据丢失。
性能:读取性能和写入性能都较好。
至少几个硬盘实现:4个硬盘。
RAID 01
工作原理:将多个硬盘分为两组,每组内采用RAID 0的方式
十二、完成不影响业务对LVM磁盘扩容及缩容示例。
是一种逻辑卷管理器,它提供了对磁盘和分区的逻辑抽象,从而使磁盘和分区的管理更加灵活和可靠。LVM允许在不影响数据的情况下对逻辑卷进行扩容和缩容。
1、扩容逻辑卷
将’/dev/vg1/1v1’的大小扩展到10GB;
# 查看逻辑卷的信息
sudo lvdisplay /dev/vg1/lv1
# 扩展逻辑卷到 10GB
sudo lvextend -L 10G /dev/vg1/lv1
# 查看逻辑卷的新信息
sudo lvdisplay /dev/vg1/lv1
# 扩展文件系统大小
sudo resize2fs /dev/vg1/lv1
2、缩容逻辑卷
将逻辑卷 /dev/vg1/lv1 的大小缩小到 5GB:
# 缩小文件系统大小
sudo resize2fs /dev/vg1/lv1 5G
# 缩小逻辑卷到 5GB
sudo lvreduce -L 5G /dev/vg1/lv1
# 查看逻辑卷的新信息
sudo lvdisplay /dev/vg1/lv1