1.总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt总结程序包获取途径,以及rpm, yum, apt命令选项示例。

主流的包管理器为rpm(for red hat),dpkg(debian)

以及对rpm进行管理的包管理工具yum,负责解决rpm包管理器无法解决的包依赖问题

dnf:同为rpm包管理工具,用来替代yum

apt:deb包管理工具

1.1包文件组成

包内的文件

元数据:包的名称,版本,依赖

安装卸载脚本

1.2包文件的获取途径

系统发行光盘

第三方组织提供的:EPEL源

包官方网站,下载到本地解压编译

1.3rpm,yum,apt命令选项

rpm选项搭配:

-ivh                    #一般不会使用rpm包进行直接安装,一般会使用rpm命令进行包查询
-qa                     #查询系统中已安装的包
-qi                     #查询指定软件包的详细信息
-ql                     #列出指定软件包的所有文件和目录
-qf                     #显示指定文件属于哪个软件包
-qc                     #列出指定软件包的配置文件

yum选项搭配:

install            #下载指定软件包及其依赖项
update             #升级系统中可升级的软件包
remove             #卸载软件包,及其不再被其他包依赖的依赖包
search             #搜索关键字软件包
list               #列出可下载的软件包
info               #查看指定软件包的信息
clean              #清除缓存
-y                 #同意下载

apt选项搭配

update            #更新软件源列表中的软件包最新的元数据
remove            #卸载软件包
purge             #连软件包及其配置文件一起删除
list              #作用同yum
search            #作用同yum
install           #作用同yum

2.简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。

yum/dnf服务端存储rpm软件包的元数据

yum客户端查询yum服务器进行安装

#!/bin/bash

#1.决定使用http让远程客户端连接本机,一共有三种方式,http,https,ftp
yum -y install httpd && systemctl enable --now httpd

#2.misc光盘本身带有AppStream和BaseOS,所以可以直接使用
yum -y install autofs && systemctl enable --now autofs
ls /misc/cd

mkdir -p /var/www/html/rockylinux/8/{BaseOS,extras,AppStream}

cp -r /misc/cd/BaseOS/ /var/www/html/rockylinux/8/
cp -r /misc/cd/AppStream/ /var/www/html/rockylinux/8/

#想配extras,server先配,然后再制作extras源
cat > /etc/yum.repos.d/server.repo << EOF
[BaseOS]
name=BaseOS-server-config
baseurl=file:///var/www/html/rockylinux/8/
gpgcheck=0

[AppStream]
name=AppStream-server-config
baseurl=file:///var/www/html/rockylinux/8/AppStream
gpgcheck=0

[extras]
name=extras-server-config
baseurl=https://mirrors.aliyun.com/rockylinux/8/extras/x86_64/os/
gpgcheck=0

[epel]
name=EPEL-server-config
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
gpgcheck=0
EOF

#拉取extras,epel的元数据
dnf reposync --repoid=extras --download-metadata -p /var/www/html/rockylinux/8/
dnf reposync  --repoid=epel --download-metadata  -p /var/www/html/rockylinux/8/

客户端配置

[BaseOS]
name=baseos
baseurl=http://10.0.0.8/rockylinux/8/BaseOS
gpgcheck=0

[AppStream]
name=AppStream
baseurl=http://10.0.0.8/rockylinux/8/AppStream
gpgcheck=0

[extras]
name=extras
baseurl=http://10.0.0.8/rockylinux/8/extras
gpgcheck=0

测试

yum repolist查看仓库

3.简要总结apt工作原理

在服务器上复制所有的deb包,然后使用apt分析工具genbasedir对每个deb的包头信息进行分析,并将分析结果存储在deb索引清单文件中,一旦apt服务器中的deb有变动,使用genbasedir更新索引清单

客户端安装或升级时,询问服务器的索引清单文件,从而得到所有有依赖的软件包,并一同下载。当用户使用apt update时,客户端的deb文件就会和服务器端的deb文件进行比对,从而知道哪些包没有安装,哪些已安装或是可以升级的。

4.编译安装nginx的步骤总结

#!/bin/bash

1.更新deb库,下载nginx依赖项
apt update;apt -y install wget make gcc libpcre3-dev openssl libssl-dev zlib1g-dev

2.创建一个不可登录的系统用户由nginx管理
useradd -r -s /usr/sbin/nologin nginx

3.下载软件包
wget https://nginx.org/download/nginx-1.22.1.tar.gz
#wget https://nginx.org/download/nginx-1.24.0.tar.gz
#wget https://nginx.org/download/nginx-1.26.3.tar.gz

4.创建存放目录
mkdir -p /apps/nginx

5.解压
tar xf nginx-1.22.1.tar.gz 

cd nginx-1.22.1

6.配置必须要的模块,并且指定安装路径,用户和组
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

7.编译安装
make && make install

8.更改所属用户所属组
chown -R nginx.nginx /apps/nginx

9.创建软链接,原目录名字太长
ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx


10.创建服务启动脚本,由systemctl管理
mkdir -pv /apps/nginx/run

11.将运行目录的所属主组更改为nginx本身
chown -R nginx.nginx /apps/nginx/run

12.加入服务启动脚本
cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/apps/nginx/run/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
EOF

13.指定线程存放路径
sed -i 's/^#pid.*/pid        \/apps\/nginx\/run\/nginx\.pid;/' /apps/nginx/conf/nginx.conf

14.重新加载systemd
systemctl daemon-reload
systemctl status nginx


5.磁盘存储术语总结: head, track, sector, cylinder.

head 磁头 用于读写数据
track 磁道 数据存储在磁道
sector 扇区 每个磁道按照512bytes进行划分,就是扇区
cylinder 柱面 磁头移动的时候,是一起移动的,如果是6个盘面,则6个磁头对应的磁道是一 致的,这就是柱面

6.总结MBR,GPT结构。

分区方式:MBR,GPT

MBR分区:

共有512个字节可供分配,其中

  • 0-446bytes:为bootloader系统启动相关
  • 64bytes:分区表,每16个字节为一个分区
  • 最后两位:标识位

单分区不能超过2T,一个分区最多有16个字节,其中记录开始位置的空间占4个字节,结束位置的空间占四个字节

一个字节8位,4个字节32位,所以最大为2^32个扇区,一个扇区512字节,则最大空间为2^32*512=2T

GPT:

GUID patition table 支持128个分区,使用64位

使用UUID表示磁盘和分区,GPT分区表自动备份在头尾两处,并且有CRC校验位

使用UEFI引导启动操作系统

GPT结构:GPT头,分区表,GPT分区,备份区域

7.总结学过的分区,文件系统管理,SWAP管理相关的命令及示例(加注释),示例 fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff

7.1文件系统

负责管理和存储文件信息的软件结构,负责为用户建立文件,存入、读出、修改、转储文件,控制文件的 存取,安全控制,日志,压缩,加密等。

常用文件系统:ext4,xfs,swap

7.11 ext4

ext4的文件系统容量达到1EB,而支持单个文件则达到16TB

理论上支持无限数量的子目录

ext4文件系统使用64位空间记录块数量和 inode数量

ext4的多块分配器支持一次调用分配多个数据块

修复速度更快

7.12 xfs

根据所记录的日志在很短的时间内迅速恢复磁盘文件内容 用优化算法,日志记录对整体文件操作影响非常小 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB 能以接近裸设备I/O的性能存储数据

7.2 mkfs

文件系统管理:

-t        #指定文件系统类型
-b        #指定block大小
-L        #设置卷标
-V        #显示创建过程
-m        #为超级用户设置的保留磁盘空间百分比

7.3 tune2fs

-l        #查看指定文件系统的信息
-L        #修改卷标
-m        #预留超级用户空间
-U        #修改UUID

7.4 xfs_info

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

xfs_info mountpoint|devname

7.5 fsck

文件系统修复

在执行修复前,取消文件挂载

-a        #自动修复
-r        #交互式修改错误

7.6 mount umount

mount /dev/sda1 /sda1    #将名为sda1的目录挂载到sda1的磁盘上去
mount --source /dev/sda2 -o ro /sda2    #只读挂载

umuont /dev/sda1        #取消挂载设备
umuont /sda1            #挂载点取消挂载

lsblk /dev/sda -f        #查看

7.7 parted

-l        #显示所有硬盘分区信息

parted /dev/sda print    #显示指定磁盘的分区信息
parted /dev/sda mklabel gpt    #创建gpt分区
parted /dev/sda mkpart primary 1 100    #创建主分区,针对MBR

7.8 fdisk

-l            #显示所有设备

子命令:
p             #输出分区列表
t             #更改分区类型
n             #创建新分区
d             #删除分区
w             #保存并退出

fdisk /dev/sda    #为指定的磁盘进行分区管理的操作

7.9 partprobe

用于同步分区表

7.10 swapon,swapoff

-a            #激活所有fstab中的交换空间
-s            #查看swap空间的使用情况

swapon /swapfile        #使用指定文件作为交换空间,还要为该文件创建文件系统

swapoff        #关闭交换空间

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

8.1 raid 0

使用一个以上的硬盘,并行写入数据,速度非常快,但是有单点失败的问题,一旦一块硬盘发生故障,则数据丢失

利用率为:100%

8.2 raid 1

镜像写入文件,至少需要两块以上的硬盘,一起写入一样的数据,当一块硬盘损坏,另外一块硬盘可以作为备份,读写速度略微降低

利用率为50%

8.3 raid 5

最少需要3块以上的硬盘,在磁盘中加入校验位,如果一个磁盘损坏,可以根据未损坏磁盘数据和校验位一起计算出损坏的磁盘数据,允许最多一块硬盘损坏

利用率:(磁盘数量-1)/磁盘数量

8.4 raid 1+0

由至少四块硬盘组成,四块硬盘先两两组成raid1,随后组成的raid1再组合成为raid0,允许每组raid1最多损坏一块

利用率=50%

8.5 raid 0+1

多块磁盘先实现RAID0,再组合成RAID1,至少需要4块硬盘。假设使用四块硬盘组成raid01,那么允许损坏的磁盘必须是来自同一raid阵列才能保证数据不丢失。

利用率=50%

9. 总结LVM的基本原理,完成实验对LVM的创建和磁盘扩容

LVM允许对卷进行方便操作的抽象层,重新设定文件系统的大小,允许在多个设备间重新组织文件系统

可以弹性的修改LVM容量

基本原理:指定一个设备为物理卷,用一个或多个物理卷组成一个卷组,物理卷是用固定大小的物理区域来定义的。在物理卷之上的逻辑卷是由pe物理区域组成。可以在逻辑卷上创建文件系统并挂载。

1.安装工具
apt -y install lvm2

2.pv管理工具
pvs						#显示pv简要信息
pvdisplay				#显示详细信息

3.创建pv
pvcreate /dev/device
#pvremove /dev/device	#删除

4.添加一块硬盘

5.创建物理卷
pvcreate /dev/sdb
pvs

6.卷组管理工具
vgs
vgdisplay

7.添加卷组
vgcreate -s 16M vgname /dev/sdb /dev/sdc

8.往卷组添加更多容量
vgextend testvg /dev/sdb2

9.创建逻辑卷
lvcreate -l 100 -n lvname vgname (100为PE大小,可以在vgdisplay里面查看有多少)
lvs
lvdisplay

10.扩容逻辑卷
lvextend -L +5G /dev/vgname/lvname

11.文件系统扩容
resize2fs /dev/VG_NAME/LV_NAME

10.总结开放系统互联OSI模型,每层作用及对应的协议。

应用层:提供为应用软件而设的接口,实现通信,如http,https等(http)

表示层:把数据转换成双方通信能兼容能正常显示,并适合传输的格式(ssl/tls)

会话层:负责维护数据传输中的网络连接

传输层:把传输表头加至数据以形成数据包,传输表头包含了所使用的协议(tcp,udp)

网络层:决定了数据的路径选择,将网络表头加至数据包,以形成报文。网络表头包含了网络的数据(icmp)

数据链路层:负责网络寻址,网络层把数据包交给链路层后,数据链路层会给这个数据包加上数据链路表头表尾,就变成了信息框dataframe。数据链路表头,包含了物理地址(mac),确定数据收发设备。表尾,数据包末端标识符(ARP)

物理层:在局部局域网上传输dataframe,负责各个设备之间的互通连接。(Ethernet)

11.调整动态端口范围为20000-60000

echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
cat /proc/sys/net/ipv4/ip_local_port_range

12.总结TCP包头结构,TCP三次握手,4次挥手。

源端口,目标端口:通过指定计算机的目标端口和源端口,就能知道是哪两个进程需要通信,源端口目标端口为16位,端口的个数2^16=65536

序列号:本报文传输的第一个字节的编号

确认号:表示接收方期望收到发送方下一个报文段的第一个字节编号

数据偏移:确定数据从哪个位置开始

URG:紧急指针有效标志,显示该报文是否包含紧急数据

ACK:表示前面的确认号是否有效

PSH:推送标志,请求立即将数据传送给应用程序

RST:复位标志,用于异常情况下重置连接

SYN:同步标志,用于建立连接时同步序列号

FIN:结束标志,用于释放连接,表示发送方已经没有数据要发送了

窗口大小:表示发送方或接收方的接收窗口大小,即接收方当前允许接收的数据字节数

校验和:对 TCP 包头和数据部分进行校验,用于检测数据在传输过程中是否发生错误

紧急指针:指出紧急数据的末尾在报文段中的位置

12.1TCP三次握手

第一次握手:客户端向服务端发送SYN包,表示请求连接,此时客户端进入syn_sent状态

第二次握手:服务端收到SYN包后,为该连接分配资源,选择自己的序列号,服务端向客户端发送SYN+ACK包,syn和ack都设为1,syn为表示同意链接,ack表示确认确认客户的syn包,服务端将确认号设置为序列号+1,服务器将syn,sck,自身序列号,确认号一起发给客户端,此时服务端进入syn_rcvd状态

第三次握手:客户端收到syn+ack包后,将包头中的ack设为1,确认号设置为服务器初始序列号加1,表示确认收到syn包。客户端将包含ack和确认号包发给服务端,连接成功

12.2四次挥手

第一次挥手:客户端主动请求关闭连接,向服务端发送FIN号和序列号,此时客户端进入FIN-WAIT1状态

第二次挥手:服务器收到数据包后,将确认号设置为客户端序列号+1,同时将ACK标志位设为1,将自身序列号,ACK和确认号封装进数据包中发给客户端,同时将自己这边还未传输完的数据传输给客户端,此时服务器进入closewait状态,客户端进入FIN-WAIT2状态

第三次挥手:当服务器完成发送数据后,服务器会将FIN标志位设为1,同时将此时此刻的序列号封装进数据包中,包中含有四项信息,FIN,ACK,序列号,确认号,其中ACK和确认号没有发生变化。此时服务器进入LASTACK状态

第四次挥手:客户端收到FIN号后,将ACK设为1,确认号设为服务器序列号加1,同时将此时的序列号设为上次确认号。服务器收到ACK包后进入close状态,而客户端进入time-wait状态,客户端超时后也进入cloasewait状态

13.总结主机到主机的包传递过程。

源192.168.3.1 目标192.168.3.2

先建立连接,应用层要求网络层为自己和远程主机设置可靠连接,传输层则会使用TCP,而TCP则通过IP将SYN包送到远程主机,IP通过数据链路层准备将数据包发送到远程主机上。数据链路层则是通过ARP确定是否有到远程主机的路由记录,如果没有则进行ARP广播,同时将准备发送的数据放入parking lot,询问对方是否有目标的MAC地址。找到后,将数据包传输到远程主机上。

远程主机接收到数据包后,识别到ARP mac地址,将该数据包传到数据链路层,并通过ARP解析该MAC地址,得到该数据包来自192.168.3.1,同时将该条路由记录添加到ARP table中。有了目标mac地址和目标ip后,远程主机将该数据包传回192.168.3.1

数据包回到本机后,将该条路由记录添加到ARP tables中。同时将之前放入parking lot的数据包传输到远程主机。

远程主机收到数据包后,需要对192.168.3.1进行回应,将数据包中的SYN和ACK设为1,同时将确认号一起打包

本机收到ACK后,将ACK设为1,确认号为服务器初始序列号+1。将数据包发送给远程主机表示连接成功

本机将需要发送的应用层数据发送给远程主机,远程主机收到后,发送ACK标志位表示确认

14.总结IP地址 A, B, C, D 类,并解析IP地址的组成

A分类地址,前8位为网络ID,且第一位固定为0,最小为0(10000000),最大为127(011111111),0-127

B地址,前十六位为网络ID,且前两位为10,最小为128,最大为191

C地址,前二十四位为网络ID,且前三位为110,192-223

D地址,多拨地址,前四位固定为1110,224-239

IP地址组成:

  • 网络ID,标识网络,每个网段分配一个网络ID
  • 主机ID,标识单个主机,由组织分配给单个设备

15. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。

最多主机数=2^主机ID位数 -2

总共由32位,主机ID则有32-18=14位

2^14 -2 =16382

子网掩码:前18位为网络位:

1111 1111,1111 1111,1100 0000,0000 0000

将二进制转为十进制:

255.255.192.0

16.当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?

计算两者的网络地址:

A:前十六位为网络ID,则10.0.0.0为其网络地址

B:根据子网掩码计算网络地址:10.0.2.0

比较得知两者网络地址不一样,判断不在同一网段,需要通信的话则需要借助路由器。

17.如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。"

32=2^5说明需要划分5次才能覆盖到32个子网

所以需要向主机位借5位给网络位

子网掩码变为/13

则每个子网的掩码为:255.11111 000.0.0=255.248.0.0

主机数则为:2^(32-13)-2=524286

所以可得每个子网的掩码为255.248.0.0,每个子网大约有524286台主机

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐