本文基于马哥教育就业班第二周课程总结

系统设计

  • 请总结Linux的安全模型

    1
    2
    3
    4
    5
    6
    7
    Linux的安全模型基于许多不同的安全措施,包括访问控制、加密、审计和漏洞修补以下是Linux安全模型的主要要点:
    1. 访问控制:Linux使用许多不同的访问控制机制来保护系统和数据其中最常见的是基于用户和组的访问控制,它允许管理员为每个用户和组分配不同的权限此外,Linux还支持访问控制列表(ACL)和强制访问控制(MAC)等高级访问控制机制;
    2. 加密:Linux支持许多不同的加密技术,包括SSL / TLS、SSH、IPSec和GPG等这些技术可以用于保护数据传输和存储,以及验证用户身份;
    3. 审计:Linux支持系统级别的审计,可以记录用户活动、系统事件和安全事件等这些日志可以用于监控系统安全性,并帮助管理员识别潜在的安全问题;
    4. 漏洞修补:Linux社区积极修补系统中发现的漏洞,并发布安全更新管理员应该定期更新系统以确保最新的安全补丁已安装;

    总之,Linux的安全模型是一个多层次的、综合的安全框架,它提供了许多不同的安全措施来保护系统和数据管理员应该了解这些措施,并采取适当的措施来保护他们的系统。
  • 总结学过的权限,属性及ACL相关命令及选项,示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Linux系统的权限、属性和ACL相关命令及选项如下:

    1. 权限相关命令:
    chmod:修改文件或目录的权限选项包括:
    u:表示用户权限
    g:表示组权限
    o:表示其他用户权限
    a:表示所有用户权限
    +:表示添加权限
    -:表示删除权限
    =:表示设置权限
    示例:将文件file.txt的所有用户的读写权限设置为可读可写,命令为:chmod a+rw file.txt

    chown:修改文件或目录的所有者和所属组选项包括:
    R:递归修改子目录和文件的所有者和所属组
    示例:将文件file.txt的所有者和所属组修改为user1和group1,命令为:chown user1:group1 file.txt

    chgrp:修改文件或目录的所属组选项包括:
    R:递归修改子目录和文件的所属组
    示例:将文件file.txt的所属组修改为group1,命令为:chgrp group1 file.txt

    2. 属性相关命令:
    lsattr:显示文件或目录的扩展属性选项包括:
    R:递归显示子目录和文件的扩展属性
    示例:显示文件file.txt的扩展属性,命令为:lsattr file.txt

    chattr:修改文件或目录的扩展属性选项包括:
    R:递归修改子目录和文件的扩展属性
    +:添加扩展属性
    -:删除扩展属性
    示例:将文件file.txt设置为只读,命令为:chattr +i file.txt

    3. ACL相关命令:
    getfacl:显示文件或目录的ACL信息选项包括:
    R:递归显示子目录和文件的ACL信息
    示例:显示文件file.txt的ACL信息,命令为:getfacl file.txt

    setfacl:设置文件或目录的ACL信息选项包括:
    R:递归设置子目录和文件的ACL信息
    m:修改ACL信息
    x:删除ACL信息
    示例:将文件file.txt的用户user1的读写权限设置为可读可写,命令为:setfacl -m u:user1:rw file.txt

    以上是Linux系统的权限、属性和ACL相关命令及选项的简要总结和示例。
  • 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Linux系统中的文本处理工具、文件查找工具、文本处理三剑客和文本格式化命令(printf)的相关命令及选项如下:

    1. 文本处理工具:
    grep:在文件中查找匹配的文本选项包括:
    i:忽略大小写
    v:反转匹配
    r:递归查找子目录
    示例:在文件file.txt中查找包含“hello”的行,命令为:grep “hello” file.txt

    sed:流编辑器,用于编辑文本流选项包括:
    i:直接修改文件
    s:替换匹配的文本
    示例:将文件file.txt中的“hello”替换为“world”,命令为:sed -i ‘s/hello/world/g’ file.txt

    awk:文本处理工具,用于处理结构化文本选项包括:
    F:指定分隔符
    NR:行号
    NF:字段数
    示例:在文件file.txt中查找第一列为“hello”的行,命令为:awk -F ‘,’ ‘$1=="hello"{print}’ file.txt

    2. 文件查找工具:
    find:在文件系统中查找文件选项包括:
    name:按名称查找
    type:按类型查找
    size:按大小查找
    示例:在当前目录及其子目录中查找所有扩展名为.txt的文件,命令为:find . -name “*.txt”

    文本处理三剑客:grep、sed和awk,是Linux系统中最常用的文本处理工具,被称为文本处理三剑客

    3. 文本格式化命令:
    printf:格式化输出文本选项包括:
    %s:字符串
    %d:十进制整数
    %f:浮点数
    示例:输出字符串“hello world”,命令为:printf "%s " “hello world”

    以上是Linux系统中的文本处理工具、文件查找工具、文本处理三剑客和文本格式化命令(printf)的相关命令及选项的简要总结和示例
  • 总结文本处理的grep命令相关的基本正则和扩展正则表达式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    基本正则表达式:
    ^:匹配行首
    $:匹配行尾
    .:匹配任意单个字符
    []:匹配括号内的任意一个字符
    [^]:匹配不在括号内的任意一个字符
    *:匹配前一个字符的零个或多个实例
    \:转义字符
    示例:匹配以“hello”开头的行,命令为:grep “^hello” file.txt

    扩展正则表达式:
    ?:匹配前一个字符的零个或一个实例
    +:匹配前一个字符的一个或多个实例
    ():分组匹配
    |:或匹配
    {n}:匹配前一个字符的n个实例
    {n,}:匹配前一个字符的至少n个实例
    {n,m}:匹配前一个字符的n到m个实例
    示例:匹配以“hello”开头或以“world”结尾的行,命令为:grep -E “^hello|world$” file.txt

    以上是Linux文本处理中,grep命令相关的基本正则表达式和扩展正则表达式的简要总结和示例
  • 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    在shell编程中,变量命名规则如下:
    变量名只能包含字母、数字和下划线\2. 变量名不能以数字开头
    变量名区分大小写

    不同类型变量的使用如下:
    1. 环境变量:
    环境变量是在shell启动时设置的变量,可以在整个shell会话中使用
    使用export命令将变量设置为环境变量
    示例:设置环境变量MY_VAR为hello,命令为:export MY_VAR=hello

    2. 位置变量:
    位置变量是在shell脚本中使用的特殊变量,用于存储命令行参数
    0表示脚本名称,
    1表示第一个参数,$2表示第二个参数,以此类推
    示例:输出第一个参数,命令为:echo $1

    3. 只读变量:
    只读变量是不能被修改的变量
    使用readonly命令将变量设置为只读变量
    示例:将变量MY_VAR设置为只读变量,命令为:readonly MY_VAR

    4. 局部变量:
    局部变量是在shell脚本中定义的变量,只能在当前脚本中使用
    使用local命令将变量设置为局部变量
    示例:在函数中定义局部变量MY_VAR,命令为:local MY_VAR="hello"

    5. 状态变量:
    状态变量是用于存储shell的状态信息的特殊变量
    ?表示上一个命令的退出状态码,
    !表示上一个后台命令的进程ID,#表示命令行参数的数量,
    *表示所有命令行参数的列表
    示例:输出上一个命令的退出状态码,命令为:echo $?

    以上是shell编程中变量命名规则和不同类型变量的使用的简要总结和示例。
  • 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    这是一个典型的数学问题,可以通过编写shell脚本来解决假设鸡的数量为x,兔的数量为y,则可以列出以下方程组:

    x + y = 30 2x + 4y = 80

    通过求解这个方程组,可以得到x和y的值,即鸡和兔的数量在shell脚本中,可以使用bc命令进行数学计算,代码如下:

    #!/bin/bash

    # 计算鸡和兔的数量
    # x为鸡的数量,y为兔的数量

    # 定义方程组
    eq1="x + y = 30"
    eq2="2*x + 4*y = 80"

    # 解方程组
    x=$(echo "scale=0; (4*30-80)/2" | bc)
    y=$(echo "scale=0; (80-2*30)/2" | bc)

    # 输出结果
    echo "鸡的数量为:$x"
    echo "兔的数量为:$y"
    在上面的代码中,首先定义了方程组eq1和eq2,然后使用bc命令求解方程组,最后输出鸡和兔的数量运行脚本后,输出结果如下:

    鸡的数量为:10
    兔的数量为:20
    因此,30鸡和兔的头,80鸡和兔的脚,分别有10只鸡和20只兔
  • 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
    1)for遍历1..100
    2)先id判断是否存在
    3)用户存在则说明存在,用户不存在则添加用户并说明已添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
可以使用以下的shell脚本来批量创建100个用户:

#!/bin/bash
# 批量创建100个用户
for i in {1..100}
do
# 判断用户是否存在
if id "user$i" >/dev/null 2>&1; then
echo "用户user$i已存在"
else
# 创建用户
useradd "user$i"
echo "用户user$i已添加"
fi
done
在上面的脚本中,使用for循环遍历1到100,对于每个用户,使用id命令判断用户是否存在如果用户存在,则输出提示信息;如果用户不存在,则使用useradd命令创建用户,并输出提示信息其中,">/dev/null 2>&1"用于将id命令的输出重定向到/dev/null,以避免输出到终端

运行脚本后,可以看到输出的提示信息,例如:
用户user1已添加
用户user2已添加
……

存储相关

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

    1
    2
    3
    4
    5
    6
    7
    8
    磁盘存储术语包括以下几个方面:
    1. 磁盘驱动器(Disk Drive):磁盘驱动器是计算机中用于读写磁盘的设备,通常包括一个或多个磁盘盘片和一个读写磁头
    2. 磁盘盘片(Disk Platter):磁盘盘片是磁盘驱动器中的一个圆形盘片,通常由铝或玻璃等材料制成,表面涂有磁性材料
    3. 磁头(Read/Write Head):磁头是磁盘驱动器中的一个读写设备,用于读取和写入磁盘上的数据
    4. 磁道(Track):磁道是磁盘盘片上的一个圆形轨道,用于存储数据一个磁盘盘片通常包含多个磁道,每个磁道被分成多个扇区
    5. 扇区(Sector):扇区是磁盘磁道上的一个小块,用于存储数据每个扇区通常包含512个字节的数据
    6. 柱面(Cylinder):柱面是磁盘驱动器中的一个逻辑概念,表示磁盘盘片上所有磁道的集合一个柱面包含多个磁道,每个磁道上包含多个扇区
    总的来说,磁盘存储术语中的head、track、sector和cylinder都是磁盘驱动器中的重要概念,用于描述磁盘上数据的存储和读写方式其中,head表示磁头,用于读取和写入数据;track表示磁道,用于存储数据;sector表示扇区,是磁道上的一个小块,用于存储数据;cylinder表示柱面,是磁盘盘片上所有磁道的集合,用于描述磁盘的物理结构
  • 总结MBR,GPT结构盛大开放接口

    1
    2
    3
    4
    5
    6
    7
    8
    MBR和GPT都是磁盘分区表的结构,用于描述磁盘上的分区信息它们的主要区别如下:
    1. MBR(Master Boot Record)是一种旧的磁盘分区表结构,最多支持4个主分区或3个主分区和1个扩展分区MBR的分区表存储在磁盘的第一个扇区,占用512个字节
    2. GPT(GUID Partition Table)是一种新的磁盘分区表结构,支持最多128个分区GPT的分区表存储在磁盘的第一个和第二个扇区之间,占用至少34个扇区
    除了支持的分区数量不同之外,MBR和GPT还有以下区别:
    1. MBR使用32位的分区标识符(Partition ID),而GPT使用128位的GUID(Globally Unique Identifier)
    2. MBR的分区表存储在磁盘的第一个扇区,容易被破坏,而GPT的分区表存储在多个扇区中,具有更好的容错性
    3. GPT支持UEFI(Unified Extensible Firmware Interface)启动,而MBR不支持UEFI启动
    总的来说,GPT是一种更先进、更灵活、更可靠的磁盘分区表结构,逐渐取代了旧的MBR结构
  • 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,并以fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff举例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    1. 分区管理命令:
    fdisk:用于创建、删除和修改磁盘分区
    parted:用于创建、删除和修改磁盘分区,支持更多的分区类型和文件系统类型
    示例:
    使用fdisk命令创建一个新的分区:
    fdisk /dev/sda
    使用parted命令创建一个新的分区,命令为:
    parted /dev/sda mkpart primary ext4 0% 100%

    2. 文件系统管理命令:
    mkfs:用于创建文件系统
    tune2fs:用于调整文件系统的参数
    xfs_info:用于显示XFS文件系统的信息
    fsck:用于检查和修复文件系统
    mount:用于挂载文件系统
    umount:用于卸载文件系统
    示例:
    使用mkfs命令创建一个ext4文件系统:
    mkfs.ext4 /dev/sda1
    使用tune2fs命令将ext4文件系统的最大挂载次数设置为10:
    tune2fs -c 10 /dev/sda1
    使用xfs_info命令显示XFS文件系统的信息:
    xfs_info /dev/sda1
    使用fsck命令检查并修复ext4文件系统:
    fsck.ext4 /dev/sda1
    使用mount命令挂载ext4文件系统:
    mount /dev/sda1 /mnt
    使用umount命令卸载ext4文件系统:
    umount /mnt

    3.交换分区管理命令:
    swapon:用于启用SWAP分区
    swapoff:用于禁用SWAP分区
    示例:
    使用swapon命令启用SWAP分区,命令为:swapon /dev/sda2 使用swapoff命令禁用SWAP分区,命令为:swapoff /dev/sda2

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

    1
    2
    3
    4
    5
    6
    7
    8
    RAID(Redundant Array of Independent Disks)是一种通过将多个硬盘组合起来来提高数据存储性能和可靠性的技术常见的RAID级别包括RAID 0、RAID 1、RAID 5、RAID 10和RAID 01,它们的工作原理、利用率、冗余性和性能如下:
    RAID 0:将多个硬盘组合成一个大的逻辑卷,数据被分散存储在各个硬盘上,从而提高了数据读写的速度RAID 0没有冗余性,如果其中一个硬盘损坏,所有数据都将丢失RAID 0的利用率为100%,性能较好,至少需要2个硬盘实现
    RAID 1:将多个硬盘组合成一个镜像卷,数据被同时写入多个硬盘,从而提高了数据的可靠性RAID 1的冗余性较好,如果其中一个硬盘损坏,数据仍然可以从其他硬盘中恢复RAID 1的利用率为50%,性能较差,至少需要2个硬盘实现
    RAID 5:将多个硬盘组合成一个逻辑卷,数据被分散存储在各个硬盘上,并使用奇偶校验码来保证数据的完整性RAID 5的冗余性较好,如果其中一个硬盘损坏,数据仍然可以从其他硬盘中恢复RAID 5的利用率为n-1/n,性能较好,至少需要3个硬盘实现
    RAID 10:将多个硬盘组合成多个镜像卷,并将这些镜像卷组合成一个逻辑卷,数据被同时写入多个硬盘,从而提高了数据的可靠性和读写性能RAID 10的冗余性和性能较好,如果其中一个硬盘损坏,数据仍然可以从其他硬盘中恢复RAID 10的利用率为n/2,至少需要4个硬盘实现
    RAID 01:将多个硬盘组合成多个逻辑卷,并将这些逻辑卷组合成一个镜像卷,数据被同时写入多个硬盘,从而提高了数据的可靠性和读写性能RAID 01的冗余性和性能较好,如果其中一个硬盘损坏,数据仍然可以从其他硬盘中恢复RAID 01的利用率为n/2,至少需要4个硬盘实现

    总的来说,不同的RAID级别适用于不同的应用场景,需要根据实际需求选择合适的RAID级别RAID 0适用于需要高速读写的场景,但不适用于需要数据冗余的场景;RAID 1适用于需要数据冗余的场景,但性能较差;RAID 5适用于需要数据冗余和高速读写的场景,但需要至少3个硬盘实现;RAID 10和RAID 01适用于数据量大且对性能和冗余要求较高的场景
  • 完成不影响业务对LVM磁盘扩容及缩容示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    1. 扩容LVM磁盘
    # 查看当前的逻辑卷和卷组信息
    lvdisplay
    vgdisplay
    pvdisplay
    # 扩大逻辑卷的容量到20GB
    lvextend -L 20G /dev/vg1/lv1
    # 扩大文件系统的容量到20GB
    resize2fs /dev/vg1/lv1
    2. 缩容LVM磁盘
    # 缩小文件系统的容量到10GB
    resize2fs /dev/vg1/lv1 10G
    # 缩小逻辑卷的容量到10GB
    lvreduce -L 10G /dev/vg1/lv1