第五周作业

第五周作业

1、总结rocky 系统的启动流程,grub工作流程

1、Rocky Linux grub工作流程启动概述

  1. 系统电源开启

    • 计算机开机时,BIOS 或 UEFI(在较新的系统中)进行硬件初始化(例如,检查硬盘、内存、处理器等)。
    • UEFI(统一扩展固件接口)是 BIOS 的现代替代品,支持更大的硬盘、快速启动等。
  2. 启动引导程序(Bootloader)

    • BIOS 或 UEFI 查找启动设备,通常是硬盘上的主引导记录(MBR)或者 GPT 分区表上的 EFI 分区。
    • 在 UEFI 模式下,通常会寻找 EFI 系统分区(ESP)中的引导程序。
    • 在 Legacy BIOS 模式 中,计算机会加载 MBR 中的引导程序。
  3. GRUB 的工作流程

    • GRUB (GRand Unified Bootloader) 是 Linux 系统的标准引导加载程序,负责加载操作系统。
    • 在 Rocky Linux 中,GRUB 通常安装在 EFI 分区 或 MBR 中(取决于系统是采用 UEFI 启动还是传统的 BIOS 启动)。

2、总结awk工作原理,awk命令,选项,示例。

1、awk 工作原理

AWK 是一种强大的文本处理工具,通常用于扫描文件或输入数据并根据指定的模式进行处理。它的名字来源于其三位创始人:Al Aho、Peter Weinberger 和 Brian Kernighan。AWK 是一种基于模式的处理语言,其基本工作原理是:

  1. 输入数据行:AWK 将输入数据按行进行处理。
  2. 模式匹配:对于每一行,AWK 会与提供的模式进行匹配。如果模式与当前行匹配,则执行指定的操作。
  3. 字段分割:AWK 会将每一行按字段分割,默认以空格或制表符作为分隔符,可以通过指定分隔符来修改。
  4. 执行操作:对于匹配的行,AWK 会执行指定的操作,例如打印字段、修改文本等。
  5. 输出结果:根据所指定的操作,AWK 会输出处理后的结果。

2、awk 命令结构

awk命令的基本结构如下:

awk 'pattern { action }' file
  • pattern:模式,可以是正则表达式、条件表达式等。只有匹配该模式的行才会执行后续的动作。
  • action:对匹配的行执行的操作,通常是打印、修改或计算某些字段。

如果省略了 pattern,则默认为处理每一行;如果省略了 action,则默认执行打印匹配行。

3、awk 主要选项

  1. -F:指定输入字段的分隔符(默认是空格或制表符)。

    root@test:~# cat test1.txt 
    Filesystem      Size  Used Avail Use% Mounted on
    udev            969M     0  969M   0% /dev
    tmpfs           198M  1.2M  196M   1% /run
    /dev/vda1        20G  4.9G   15G  26% /
    tmpfs           986M     0  986M   0% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           986M     0  986M   0% /sys/fs/cgroup
    /dev/loop0       64M   64M     0 100% /snap/core20/1974
    /dev/loop1       92M   92M     0 100% /snap/lxd/24061
    /dev/vda15      105M  6.1M   99M   6% /boot/efi
    tmpfs           198M     0  198M   0% /run/user/0
    /dev/loop3       39M   39M     0 100% /snap/snapd/21759
    /dev/loop4       64M   64M     0 100% /snap/core20/2434
    /dev/loop5       92M   92M     0 100% /snap/lxd/29619
    /dev/loop6       45M   45M     0 100% /snap/snapd/23258
    overlay          20G  4.9G   15G  26% /var/lib/docker/overlay2/0e262c329745c2b3063d29ae92163536dcdbc4330304f2b8cad75f9560c983ba/merged
    overlay          20G  4.9G   15G  26% /var/lib/docker/overlay2/b9bb55ac4937226fa97e23ec84c391b7e2cbb2e1c9b6cc2194b7834eceff86e0/merged
    root@test:~# awk -F " " '{ print $1 }' test1.txt 
    Filesystem
    udev
    tmpfs
    /dev/vda1
    tmpfs
    tmpfs
    tmpfs
    /dev/loop0
    /dev/loop1
    /dev/vda15
    tmpfs
    /dev/loop3
    /dev/loop4
    /dev/loop5
    /dev/loop6
    overlay
    overlay
  2. -c:启用颜色输出

    root@test:~# awk -c '{ print $1 }' test1.txt
  3. -f:从文件加载 AWK 脚本。

    root@test:~# cat script.awk 
    BEGIN { print "hello" }
    { print $1 }
    END { print "End" }
    
    root@test:~# awk -f script.awk test.txt 
    hello
    End
    
  4. -W compat:启用与旧版本 AWK 兼容的行为。

    awk -W compat '{ print $1 }' file.txt
    
  5. -w:在 GNU AWK 中启用或禁用警告消息。

4、awk 内建变量

  • $0:当前记录(整行)。
  • $1, $2, ..., $n:当前记录的第 n 个字段。
  • NF:当前记录的字段数(即列数)。
  • NR:已处理的记录数(即行号)。
  • FS:输入字段分隔符。
  • OFS:输出字段分隔符。

1、awk 示例

示例 1:打印文件的每一行

root@test:~# cat example.txt
字符。
hello
mysql
linux
Oracle
root@test:~# awk '{ print $0 }' example.txt
字符。
hello
mysql
linux
Oracle

示例 2:打印每一行的第一个字段

root@test:~# awk '{ print $1 }' test1.txt 
Filesystem
udev
tmpfs
/dev/vda1
tmpfs
tmpfs
tmpfs
/dev/loop0
/dev/loop1
/dev/vda15
tmpfs
/dev/loop3
/dev/loop4
/dev/loop5
/dev/loop6
overlay
overlay

示例 3:使用字段分隔符

你可以指定逗号 , 作为字段分隔符:

root@test:~# cat test.txt 
John,30,Engineer
Jane,25,Doctor
Tom,40,Teacher
root@test:~# 
root@test:~# awk -F "," '{ print $1 }' test.txt 
John
Jane
Tom

示例 4:按字段进行条件筛选

例如,筛选年龄大于 30 的人:

这里 $2 > 30 是条件,表示第 2 个字段(年龄)大于 30。

root@test:~# awk -F "," '$2 > 30 { print $1 }' test.txt 
Tom

示例 5:打印 NR 和每一行内容

NR 会显示当前行号,$0 会显示整行内容。

root@test:~# awk '{ print NR ": " $0 }' test.txt 
1: John,30,Engineer
2: Jane,25,Doctor
3: Tom,40,Teacher

示例 6:计算列的总和

可以使用 AWK 来计算这些数字的总和:

root@test:~# cat test.txt 
10
20
30
40
70
root@test:~# awk  '{ sum += $1 } END { print sum }' test.txt 
170

2、awk 实用技巧

  • 打印多列:可以在 print 命令中打印多个字段:

    root@test:~# awk '{ print $1, $3 }' test.txt 
    John,30,Engineer 
    Jane,25,Doctor 
    Tom,40,Teacher 

    这将打印每行的第一个和第三个字段。

  • 使用 BEGIN 和 END 块BEGIN 和 END 用于在处理文件之前和之后执行一些操作。

    root@test:~# awk 'BEGIN { print "Start of file" } { print $1 } END { print "End of file" }' test.txt 
    Start of file
    John,30,Engineer
    Jane,25,Doctor
    Tom,40,Teacher
    End of file
  • 格式化输出:使用 printf 来控制输出的格式。

    root@test:~# awk '{ printf "Name: %-10s Age: %-3s\n", $1, $2 }' test.txt 
    Name:            Age:    
    Name: John,30,Engineer Age:    
    Name: Jane,25,Doctor Age:    
    Name: Tom,40,Teacher Age:  

    这会格式化输出名称和年龄,使它们对齐。

总结

awk 是一个非常强大的文本处理工具,适用于处理结构化文本文件,如日志文件、CSV 文件、配置文件等。它的核心理念是基于模式进行处理,能够灵活地对文本进行筛选、修改和计算。通过使用合适的模式和操作,awk 可以高效地处理各种文本数据。

3、打印/etc/passwd的奇数行

awk中有一个内建变量 NR,它表示当前正在处理的记录(行)号。我们可以通过判断 NR 是否为奇数来选择打印奇数行。

root@test:~# awk 'NR % 2 == 1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:112:116:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash

4、打印Linux系统的"IP地址,系统版本,CPU核心,内存大小"

echo "IP地址: $(hostname -I | awk '{print $1}')"
echo "系统版本: $(lsb_release -d | awk -F':\t*' '{print $2}')"
echo "CPU核心数: $(nproc)"
echo "内存大小: $(free -h | awk '/^Mem/ {print $2}')"

5、在文本的所有行前加序号

root@test:~# cat test.txt 

John,30,Engineer
Jane,25,Doctor
Tom,40,Teacher
root@test:~# awk '{print NR, $0}' test.txt 
1 
2 John,30,Engineer
3 Jane,25,Doctor
4 Tom,40,Teacher

6、统计某个文件夹下的文件占用的字节数。

方法 1:使用 du 命令

du 命令(disk usage)可以用来显示文件和目录的磁盘使用情况。

root@test:~# du -sh /etc/
5.5M    /etc/
  • -s:表示汇总结果,只显示总计,不显示子目录。
  • -h:表示以MB为单位显示文件大小。

这个命令会返回目录(包括所有子文件和子目录)占用的字节数。

方法 2:使用 find 与 stat 命令

如果你希望统计文件夹下所有文件的大小,并且更详细地控制输出,可以使用 find 命令结合 stat 来实现。

root@test:~# find /home -type f -exec stat --format="%s" {} + | awk '{s+=$1} END {print s}'
5197
  • find /home -type f:查找指定目录下的所有文件(排除目录)。
  • stat --format="%s" {}:对于每个文件,stat 命令输出文件的字节大小(%s)。
  • awk '{s+=$1} END {print s}':通过 awk 累加所有文件的字节数,并输出总和。

7、总结内核设计流派及特点 

  • 单体内核:高性能、复杂性大、维护困难。适合需要高效执行的系统(如 Linux)。
  • 微内核:模块化、可扩展性强、提高了系统稳定性和安全性,但性能开销较大(如 Minix、QNX)。
  • 外核:最大限度地去除内核的硬件抽象,提供极高性能,但开发复杂度大(如 XOK)。
  • 宏内核:结合了微内核和单体内核的优点,平衡了性能和模块化(如 Windows NT、MacOS)。
  • 分层内核:通过层次化的设计提高了可维护性,但性能可能受到影响。

8、总结systemd服务配置文件

1. [Unit] 部分

该部分定义了服务单元的描述信息,以及该服务的依赖关系和行为。

  • Description:简短描述服务。
  • Documentation:服务的相关文档或网址。
  • After/Before:定义服务启动顺序。After 表示当前服务在指定服务之后启动,Before 表示当前服务在指定服务之前启动。
  • Requires:定义服务的强依赖关系。若依赖的服务启动失败,则当前服务也无法启动。
  • Wants:表示软依赖关系。若依赖服务未启动,不会阻止当前服务启动。
  • Conflicts:如果当前服务启动,指定服务将被停止。
2. [Service] 部分

该部分定义了服务的启动、停止、执行方式等细节。包括服务的执行命令、环境设置、权限配置等。

  • ExecStart:指定服务启动时要执行的命令或脚本。
  • ExecStop:指定停止服务时要执行的命令或脚本。
  • ExecReload:指定重新加载服务时要执行的命令或脚本。
  • Restart:设置服务崩溃后的重启策略。常用的值包括 no(不重启)、always(总是重启)、on-failure(失败时重启)。
  • Type:定义服务的启动类型。常见的值有:
    • simple:默认值,认为 ExecStart 启动命令会在后台启动服务,直到该命令退出为止。
    • forking:服务在启动时会产生一个子进程,父进程退出后服务继续运行。
    • oneshot:一次性任务(例如,初始化任务),启动后即退出。
    • notify:服务启动后通过 sd_notify 通知 systemd 启动完成。
  • User:定义服务运行的用户。
  • Group:定义服务运行的组。
  • WorkingDirectory:指定服务的工作目录。
  • Environment:设置环境变量。
3. [Install] 部分

该部分定义了如何将该服务单元与 systemd 启动流程集成,通常用于设置服务的启用和禁用规则。

  • WantedBy:指定服务应被哪些目标(target)所包含。常见的目标有 multi-user.target(多用户模式)和 graphical.target(图形界面模式)。
  • RequiredBy:表示该服务在目标启动时是必须启动的。
  • Also:指定其他要启用或禁用的服务。
  • Alias:为服务定义别名。
  • 启动服务

    systemctl start my_service.service
    
  • 停止服务

    systemctl stop my_service.service
    
  • 启用服务(开机启动)

    systemctl enable my_service.service
    
  • 禁用服务

    systemctl disable my_service.service
    
  • 查看服务状态

    systemctl status my_service.service
    
  • 重新加载服务配置

    systemctl daemon-reload
    
  • 重启服务

    systemctl restart my_service.service

9、 总结system启动流程

  1. 硬件自检和引导:系统电源开启后,BIOS/UEFI 进行硬件自检,并加载 Bootloader(如 GRUB)。
  2. 内核加载:Bootloader 加载内核,并将控制权交给内核。
  3. 内核初始化:内核初始化硬件、挂载根文件系统并启动 init 进程(通常为 systemd)。
  4. systemd 启动systemd 作为初始化进程开始工作,加载配置文件,启动服务并处理依赖关系。
  5. 启动系统目标(Target)systemd 启动各个目标,并启动相关服务。
  6. 用户登录:如果配置了图形界面,systemd 启动图形界面管理器,允许用户登录。
  7. 用户进程与应用启动:用户登录后,系统开始启动用户进程和应用程序。

10、 总结DNS域名三级结构

  1. 顶级域:位于域名最右侧,表示域名的类别或地区。
  2. 二级域:位于顶级域和三级域之间,通常表示公司、组织或品牌。
  3. 三级域:位于二级域之前,通常用来表示具体的服务、子站点或位置。

11、总结DNS服务工作原理,涉及递归和迭代查询原理

工作原理

  1. 用户发起 DNS 查询请求
    当用户在浏览器中输入域名(如 www.baidu.com)时,系统需要通过 DNS 将该域名解析为相应的 IP 地址。

  2. 本地 DNS 缓存查询
    操作系统或本地 DNS 解析器会首先检查是否有缓存的解析结果。如果本地 DNS 缓存中有该域名的解析结果,直接返回给用户。

  3. 向递归 DNS 服务器发送查询请求
    如果本地缓存中没有解析结果,客户端会向本地 DNS 服务器(通常由 ISP 提供)发送 DNS 查询请求。

  4. 递归查询和迭代查询
    本地 DNS 服务器会通过递归查询或迭代查询的方式继续查找目标 IP 地址。

递归查询

递归查询是 DNS 查询过程中的一种常见查询方式,在这种查询模式下,DNS 服务器会完全负责从根域名服务器开始,一直查询到最终的结果(即目标 IP 地址),并将最终的解析结果返回给客户端。客户端不需要进行多个查询,所有的查询过程由 DNS 服务器来完成。

迭代查询

迭代查询是另一种常见的查询方式,在这种方式下,DNS 服务器并不负责递归查询的全过程,而是逐步返回每一层的查询结果,让客户端或下一个 DNS 服务器继续查询。每次返回一个指向下一级 DNS 服务器的地址,直到最终找到目标的 IP 地址。

12、 实现私有DNS, 供本地网络主机作DNS递归查询。

暂时没有时间做 有空补上

13、 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。

DNS 服务器类型

  • 递归 DNS 服务器:负责完成递归查询,直到获取最终结果。
  • 权威 DNS 服务器:存储域名解析的真实记录,提供权威回答。
  • 转发 DNS 服务器:将 DNS 请求转发给其他服务器。
  • 缓存 DNS 服务器:缓存查询结果以提高响应速度。

DNS 解析的类型

  1. 正向解析:将域名解析为 IP 地址。
  2. 反向解析:将 IP 地址解析为域名。

资源记录定义

DNS 中的资源记录是存储在 DNS 服务器中的数据结构,用于提供域名解析信息。每个资源记录包含一个域名、一个记录类型、一个时间戳(TTL)以及相关的数据信息。

  • A 记录:IPv4 地址。
  • AAAA 记录:IPv6 地址。
  • CNAME 记录:别名记录。
  • MX 记录:邮件交换记录。
  • PTR 记录:反向解析记录。
  • NS 记录:域名服务器记录。
  • SOA 记录:权威起始记录。
  • TXT 记录:任意文本信息。
  • SRV 记录:服务记录。
  • CAA 记录:证书授权记录。

14、实现DNS主从同步,实现DNS子域授权 

15、总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。

  1. OpenSSH 服务安全加固:通过禁用 root 登录、强制密钥认证、限制登录用户、修改 SSH 端口、配置防火墙、定期更新等措施来增强 OpenSSH 的安全性。

  2. OpenSSH 免密认证原理:免密认证依赖公钥加密,客户端使用私钥解密由服务器发送的加密挑战,验证通过后允许登录。免密认证相比密码认证更加安全、便捷。

  3. 免密认证实现过程:通过生成 SSH 密钥对,将公钥复制到服务器,配置 SSH 服务启用公钥认证,禁用密码认证,最后验证是否可以成功免密登录。

免密认证实现过程暂时没有时间做 有空补上。

16、 总结对称加密和非对称加密的概念和常见的加密算法

  1. 对称加密

    • 使用相同的密钥进行加密和解密,通常更为高效。
    • 常见算法:AES、DES、3DES、Blowfish、RC4、Twofish。
    • 适用于大量数据加密,但密钥管理和传输存在安全隐患。
  2. 非对称加密

    • 使用一对密钥进行加密和解密,公钥用于加密,私钥用于解密。
    • 常见算法:RSA、ECC、DSA、ElGamal、Diffie-Hellman。
    • 适用于数字签名、身份验证和安全密钥交换,密钥管理更为灵活,但加密速度较慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值