第三周作业

1. 尝试基于gcc命令说明 c语言编译过程。

大致步骤为,预处理,编译,汇编,链接

预处理:

会处理以 # 符号开头的预处理指令,例如 #include、#define 等。所有被包含的头文件(例如标准库头文件 stdio.h)都会被插入到源代码中,扩展源文件。宏定义会被展开。比如hello.c变成hello.i后#include没了,替换成一堆c语言代码,此时还是属于c语言代码

编译:

将C源代码翻译成汇编语言,生成一个汇编代码文件,里面有汇编指令如movq

汇编:

汇编器接受汇编代码文件并将其转化为机器码指令。它生成一个目标文件,其中包含了二进制表示的机器码以及一些元数据,此时已经变成二进制文件

链接:

这个命令会将目标文件与所需的库文件链接在一起,生成可执行文件 hello

2. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取?

常见包管理器

有rpm(redhat pachage manager),包后缀rpm

ubuntu下的包管理器是dpkg,包后缀deb

上面两个都不能自动解决依赖,

yum,dnf,是rpm包管理器

apt是dpkg包管理器,最大的优势是可以自动解决依赖关系完成安装

包中包含文件

使用rpm2cpio来查看里面包含啥

    程序可执行文件:这是程序包中最关键的文件之一,它是实际运行程序的二进制文件。
    配置文件:程序包中可能包含了一些配置文件,这些文件包含了程序的一些配置信息,例如,端口号、数据库连接信息等。
    文档文件:为了方便用户使用程序,程序包通常会包含一些用户手册、帮助文档、使用说明等文档文件。
    库文件:很多程序需要使用到一些共享库文件,程序包中可能会包含这些库文件,以便于程序能够正确地运行。
    图标文件和资源文件:程序包还可能包含一些图标文件和其它资源文件,这些文件可以提高用户体验。
    安装脚本:一些程序包可能会包含一些安装脚本,这些脚本可以在程序安装前或安装后执行一些预处理或后续操作。

总之,程序包中的文件类型和数量因程序而异,但通常都包含了一些核心文件(如可执行文件和依赖库文件等)和与程序相关的配置文件和文档信息。

3. 总结程序包获取途径,以及rpm, yum, apt命令选项示例。

获取途径:

官网下载,第三方组织如epel,搜索引擎,自行用源码编译

rpm命令:

安装软件包:rpm -ivh xxx

卸载软件包:rpm -e

查询是否安装:rpm -qa

查看文件属于哪一个包:rpm -qf

yum命令:

安装:yum install

卸载:yum remove

查询:yum list

查询本地是否安装:yum list installed

,列出软件装哪去了:rpm -ql

离线下载包:yum localinstall httpd --downloadonly --downloaddir=/opt

查询文件或者命令来自哪一个包:yum provides mime.types

apt命令:

apt install

apt remove

apt search

apt-file search xxx 类似于yum provides

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

工作原理:

就是调用rpm,自动解决依赖关系

基于c/s结构

yum服务器存放rpm包与相关包的元数据库

yum客户端访问yum服务器进行安装或者查询

yum服务器端先建立一个rpm包的仓库,与之对应的元数据,客户端访问的时候先下载更新repodata,查询有没有包和依赖,有的话就远程拉取rpm包安装。

yum本地仓库

需要工具 reposync(同步软件的) createrepo(建立yum元数据的) 两个

createrepo可以直接下载。reposync没有直接的包,那就使用yum provides reposync搜索这个,发现在yum-until中,那就下载yum-until。

此次选择的仓库是清华大学镜像站的,地址层级需要到有repodata这一层

新建一个磁盘并挂载到/localrepo目录上(记得永久挂载)

输入命令 reposync -p /localrepo 不指定仓库名就是所有仓库都同步。同步完成后。进入/localrepo 输入createrepo。完成yum仓库元数据的创建

安装ftp或者http的软件,这里选择ftp,yum install vsftpd,修改vsftpd配置文件/etc/vsftpd/vsftpd.conf

systemctl restart vsftpd ;systemctl enable vsftpd

找一台客户机进行实验。

客户端yum配置:

yum clean all

yum makecache

yum repolist 查看仓库应该就只有一个叫localyum的仓库了,到此本地仓库搭载完成

5. 总结系统安装之后的常用初始化步骤。rocky/ubuntu

rocky:

修改网卡,关闭防火墙,关闭selinux,配置yum源

ubuntu:

修改网卡,关闭防火墙,关闭selinux,配置yum源,ubuntu开启root远程登录。

可以根据实际需求进行初始化

6. 解读一键安装httpd脚本,并自行实现一个一键安装脚本,要求

1)基于位置变量传递版本号

2)基于独立函数进行初始化步骤,禁用防火墙,安装开发依赖包。

3)基于独立函数进行下载包,解压包。

4)基于独立函数进行编译,安装包。

5)基于独立函数完成链接包。

6)启动服务,并输出自定义的语句,安装xxx服务

[root@localhost src]# cat http_install.sh
httpdownload ()
{
wget https://dlcdn.apache.org/httpd/httpd-$1.tar.bz2 -P /usr/local/src/
tar jxvf httpd-$1.tar.bz2 -C /usr/local/src/
}
chushihua ()
{
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
yum install gcc make apr-devel apr-util pcre redhat-rpm-config.noarch -y
}

httpdinstall ()
{
cd /usr/local/src/httpd-$1
./configure --prefix=/usr/local/apache2
make
make install
}
httplink ()
{
ln -s /usr/local/apache2/bin/apachectl /usr/local/bin/
}
httpdownload $1
chushihua
httpdinstall $1
httplink
apachectl start && echo "success install httpd service"

[root@localhost src]#

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

应用层

为用户提供服务,对用户展示的最终界面。

协议:ssh,telnet,http等

表示层

数据提供表示,以什么方式表现出来,比如声音翻译成二进制,电脑才能识别播放出来

比如encode与decode区别,你自己有ascll,utf-8,GBK,这里我处理是统一转换成unicode字符串

加密,对称加密与非对称加密

压缩,tar -zcvf zip等

协议:各种编码协议

会话层

确定是否需要网络传递,比如发一个邮件,这个时候就需要走网络通道。如果你只是保存一个txt文档,这个就不需要走到下一层

协议:rpc

传输层

1.数据分组或者组装,上层流下来的数据进行拆分成数据包

2.提供传输协议的选择,tcp,udp

端口分装

差错校验

协议:tcp,udp,sctp

网络层

ip地址编址

路由选择

静态路由,对设备开销比较小

动态路由,开销大,需要实时运算

协议:ip,icmp,arp

数据链路层

mac地址寻址,同网段

差错校验

协议:ppp,HDLC

物理层

数据实际传输

电气特性定义

协议:以太网协议

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

[root@localhost src]# echo 20000 60000 > /proc/sys/net/ipv4/ip_local_port_range
[root@localhost src]# cat /proc/sys/net/ipv4/ip_local_port_range
20000   60000
[root@localhost src]#

 永久保存需要放在/etc/sysctl.conf中,修改后执行 sysctl -p,

从sys下面开始写,/换成.就是文件中的内核参数写法

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

tcp包结构:

由源目端口号,Seq序号,Ack序号,offset偏移量(包切片后的位置偏移),标志位ACK,SYN,FIN,等

三次握手:

整个握手过程可以分为两个阶段,第一次客户端SYN过去,服务端ACK确认回来, 第二次服务端SYN过去,客户端ACK回来。服务端过去的SYN与ACK放一个包里面传了。

第一次握手客户端进入syn—sent,,SYN标志位置为1,seq序列号随机生成。

第二次握手SYN标志位也置1,ACK位置1.确认号ack,是要ACK标志位置1才有效,确认号ack就写上一个接收到的seq号+1,然后自己也新生成一个新的seq号服务端进入syn—rcvd。第三次握手只有ACK置1,ack写上一个接收对面的报文的seq+1,seq写自己上一个发送的报文的seq+1,客户端发出包,进入establishd,服务端收到包,进入establishd

四次挥手

挥手也是一样的,发FIN过去,回一个ACK。 服务端也是发一个FIN,客户端回一个ACK。与挥手的区别就是中间那个服务端的FIN与ACK的无法合成一个包来传输,相当于他先发了一个ACK回应,然后等待自己这边传输结束后再发起FIN,

第二次挥手,只是对前一个的确认,因为自己数据包还没有处理完的,colse—wait到last—ack还有一段时间,所以第二第三次seq并不连续,但是第一个第四个是连续的,说明客户端这边到fin—wait1的时候就已经停止发送数据包了。但是服务器这边还是会发包,第一个来回只是表示了客户端已经结束了,但是服务端这里有些可能还没有发完,所以需要等待这边发送完成后,服务器再发fin包

可以看到,如果按照3次握手来对比,四次挥手就是把中间那一次的fin与ack分开了,因为握手的时候是没有数据传输的,所以可以syn与ack合在一起,挥手是因为服务器可能还在传数据,所以先传一个ack,然后再传一个fin

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

发送过程:

应用层:数据封装成应用层的数据包,比如http,送往下一层处理

传输层:在应用层的基础上加上传输层的字段,比如tcp的头部(有端口号信息),送往下一层

网络层:加上网络层的字段,ip报头(有ip地址信息),送往下一层

数据链路层,添加数据链路层头部信息(有mac地址信息)

物理层:在物理介质中进行信息传输,如网线,光纤等

接收过程:

与发送的相反,层层解包

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

    A类地址:以0开头,第一个字节范围从1到126,用于大型网络。其中,0和127是保留地址,不可使用。A类地址的网络号占8位,主机号占24位。
    B类地址:以10开头,前两个字节共占用16位,范围从128.0到191.255,用于中等规模的网络。B类地址的网络号占16位,主机号占16位。
    C类地址:以110开头,前三个字节共占用24位,范围从192.0.0到223.255.255,用于小型网络。C类地址的网络号占24位,主机号占8位。
    D类地址:以1110开头,前四个字节共占用32位,没有主机号和网络号,专门用于组播,ospf组播等。

ip地址组成:

点分十进制,共32位,分为网络位与主机位
 

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

18位掩码,那主机位数就是14位,2的14次方-2=16382

18位子网掩码:255.255.192.0

 

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

a判断一个网段:a用自己ip与自己掩码与运算,b的ip与自己掩码与运算,结果相同的话就是网络位一致,在一个网段。但是反过来b做运算的时候就不在一个网络了

不能通信

14. 如何将10.0.0.0/8划分32个子网?

32等于2的5次方,向右移5位

每个子网的掩码

11111111.11111000.0.0

主机数

13位掩码,那就19位主机位,2的19次方减2=524286

15. 通过网络配置命令,让主机可以上网。 ip, netmask, gateway, dns,主机名。相关命令总结,最终可以通过这些配置让你的主机上网。

ip a a 10.0.0.1/24 dev eth0

ip link set eth0 up

 ip route add default via 10.0.0.254

echo "nameserver 223.5.5.5" > /etc/resolv.conf

一般通过修改网卡配置文件方式来配置网络

16. 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。

TYPE:网络接口类型,一般设置为Ethernet
BOOTPROTO:启用的协议类型,可设置为static(静态IP)或dhcp(动态获取IP)或者none
NAME:网络接口名称
DEVICE:网络接口设备名称
ONBOOT:开机是否启用该网络接口,yes表示启用
IPADDR:网络接口IP地址
NETMASK:子网掩码PREFIX:也是子网掩码位数,比如可以直接写24
GATEWAY:默认网关
DNS1:首选DNS服务器
DNS2:备选DNS服务器

对于ipv6的设置暂时可以删除,生产网络很少需要ipv6
 

17. 基于配置文件或命令完成bond0配置

18. 通过ifconfig命令结果找到ip地址.

19. 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。

[root@localhost ~]# cat ip_on_check.sh
#!/bin/bash
for i in `seq 1 255`
do
         ping 192.168.174.$i -w1 &> /dev/null
        if [ $? -eq 0 ];then
                echo "主机192.168.174.$i在线"
        fi
done
[root@localhost ~]#

20. 使用while read line和/etc/passwd,计算用户id总和。

[root@localhost ~]# cat sumid.sh
#!/bin/bash
#awk -F: '{print $3}' /etc/passwd > userid.tmp
IFS=:
sum=0
while read a b id d
do
#       echo "id $id"
let "sum +=$id"
done < /etc/passwd
echo "id_sum is $sum"

[root@localhost ~]# sh sumid.sh
id_sum is 195560
[root@localhost ~]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值