马哥教育Linux-第03周作业

学号:N74058

1. 尝试基于gcc命令说明 c语言编译过程。
1、预编译,该过程会对各种预处理指令(以#开头代码行,如#include,#define,#ifdef等)进行处理,删除注释和多余的空白字符。o是参数,是对命令输出结果进行导入操作。命令:gcc -E hello.c -o hello.i
2、编译,该过程会对代码进行语法、语义分析和错误判断,生成汇编代码文件。命令:gcc -S hello.i -o hello.s
3、汇编,该过程会将汇编代码转化为计算机可识别的二进制文件。命令:gcc-c hello.s -o hello.o
4、连接,该过程就是将多给*****.o文件合并成一个可执行文件(也就是二进制指令),类似Windows下的.exe文件。命令:gcc hello.o -o hello
其实,并不需要这么多步操作,只需要对最开始的文本文档hello.c执行命令“gcc hello.c -o hello”,即可生成计算机可执行文件hello,然后执行命令“./hello”即可运行命令。之所以有这么多步,只是方便我们对C语言的编译过程有更深刻的了解。

2. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt
DPKG(Debian包管理系统)dpkg --help
是Debian Linux家族的基础包管理系统,它用于安装、删除、存储和提供deb包的信息。
APT(高级打包工具)apt --help
一个dpkg包管理系统的前端工具,它是一个非常受欢迎的、自由而强大的,有用的命令行包管理器系统。Debian及其衍生版,例如Ubuntu、Linux Mint。apt-get命令是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。
RPM(红帽包管理器)rpm --help
红帽包管理器是红帽创建的Linux基本标准(LSB)打包格式和基础包管理系统。基于这个底层系统,有多个前端包管理工具可供使用
YUM(开源、流行的命令行包管理器)yum --help
YUM是一个开源、流行的命令行包管理器,它是用户使用 RPM 的界面(之一)。YUM命令是在Fedora和RedHat以及SUSE中基于RPM的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
DNF(基于RPM发行版包管理器)dnf --help
是一个用于基于RPM的发行版的包管理器,Fedora 18引入了它,它是下一代 YUM.它是Fedora 22及更新版本的默认包管理器,Rhel 8和CentOS 8也在应用。

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

RMP
-a:查询所有套件
-c:只列出组态配置文件,本参数需配合"-l"参数使用
-d:只列出文本文件,本参数需配合"-l"参数使用
-e<套件档>或–erase<套件档>:删除指定的套件
-f<文件>+:查询拥有指定文件的套件
-h或–hash:套件安装时列出标记
-i:显示套件的相关信息
-i<套件档>或–install<套件档>:安装指定的套件档
-l:显示套件的文件列表
-p<套件档>+:查询指定的RPM套件档
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户
-R:显示套件的关联性信息
-s:显示文件状态,本参数需配合"-l"参数使用
-U<套件档>或–upgrade<套件档>:升级指定的套件档
-v:显示指令执行过程
-vv:详细显示指令执行过程,便于排错
YUM
install:安装rpm软件包
update:更新rpm软件包
check-update:检查是否有可用的更新rpm软件包
remove:删除指定的rpm软件包
list:显示软件包的信息
search:检查软件包的信息
info:显示指定的rpm软件包的描述信息和概要信息
clean:清理yum过期的缓存
shell:进入yum的shell提示符
resolvedep:显示rpm软件包的依赖关系
localinstall:安装本地的rpm软件包
localupdate:显示本地rpm软件包进行更新
deplist:显示rpm软件包的所有依赖关系
APT
安装包 apt install package
卸载安装包 apt remove package
检测并清除无用的安装包apt autoremove
更新所有安装包apt update&upgrade package
更新所有已安装的软件包apt-get upgrade
将系统升级到新版本(解决依赖关系并升级)apt-get dist-upgrade
更新apt-get update
安装一个新软件包apt-get install package
卸载一个已安装的软件包(保留配置文件)apt-get remove package
卸载一个已安装的软件包(删除配置文件)apt-get –purge remove package
移除已安装的软件的旧版本软件包(删除为了满足其他软件包的依赖而安装的,但现在不再需要的软件包。)apt-get autoclean package
移除下载到本地的已经安装的软件包apt-get clean
列出已安装软件包
sudo apt list --installed
sudo apt list --installed | less
sudo apt list --installed | grep package

4. 简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。
yum工具除了能够解决软件安装时的依赖关系以外,还提供了一个仓库的功能。
yum仓库也叫yum源,类似安卓系统的软件商店;Linux系统配置了yum仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载;yum的工作需要两部分来合作,一部分是yum服务器端,另一部分就是客户端的yum工具。 

服务端
yum.sh
!/bin/bash
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[BaseOS]
name=BaseOS
baseurl=file:///misc/cd/BaseOS
https://mirror.tuna.tsinghua.edu.cn/centos/8/BaseOS/x86_64/os/
https://mirrors.huaweicloud.com/centos/8/BaseOS/x86_64/os/
https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/
https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
gpgcheck=0

[AppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
https://mirror.tuna.tsinghua.edu.cn/centos/8/AppStream/x86_64/os/
https://mirrors.huaweicloud.com/centos/8/AppStream/x86_64/os/
https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/
https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
gpgcheck=0

[epel]
name=EPEL
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/basearch
https://mirrors.cloud.tencent.com/epel/basearch
https://mirrors.huaweicloud.com/epel/basearch
https://mirrors.aliyun.com/epel/basearch
gpgcheck=0
enabled=1

[extras]
name=extras
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/basearch/os
https://mirrors.cloud.tencent.com/centos/basearch/os
https://mirrors.huaweicloud.com/centos/basearch/os
https://mirrors.aliyun.com/centos/basearch/os
gpgcheck=0
enabled=1

[PowerTools]
name=CentOS- - PowerTools - mirrors.aliyun.com
EOF
#只下载相关的依赖包,而不安装

# /data/目录如果不存在 ,会自动创建
yum -y install --downloadonly --downloaddir=/data/httpd httpd
[root@rocky yum.repos.d]# ll /data/httpd/
total 2040
-rw-r--r-- 1 root root 125969 Dec 18 01:33 apr-1.7.0-11.el9.x86_64.rpm
-rw-r--r-- 1 root root 96676 Dec 18 01:33 apr-util-1.6.1-20.el9.x86_64.rpm
-rw-r--r-- 1 root root 12993 Dec 18 01:33 apr-util-bdb-1.6.1-20.el9.x86_64.rpm
-rw-r--r-- 1 root root 15529 Dec 18 01:33 apr-util-openssl-1.6.1-20.el9.x86_64.rpm
-rw-r--r-- 1 root root 48821 Dec 18 01:33 httpd-2.4.53-7.el9.x86_64.rpm
-rw-r--r-- 1 root root 1417527 Dec 18 01:33 httpd-core-2.4.53-7.el9.x86_64.rpm
-rw-r--r-- 1 root root 14879 Dec 18 01:33 httpd-filesystem-2.4.53-7.el9.noarch.rpm
-rw-r--r-- 1 root root 83870 Dec 18 01:33 httpd-tools-2.4.53-7.el9.x86_64.rpm
-rw-r--r-- 1 root root 32868 Dec 18 01:33 mailcap-2.1.49-5.el9.noarch.rpm
-rw-r--r-- 1 root root 152352 Dec 18 01:33 mod_http2-1.15.19-2.el9.x86_64.rpm
-rw-r--r-- 1 root root 63356 Dec 18 01:33 mod_lua-2.4.53-7.el9.x86_64.rpm

# 把文件拷贝到没网的机器安装
yum -y install /data/httpd/*.rpm

  

# 实现私用 yum 仓库
# 1.先配置外网的yum源
# 2.下载httpd并启动
# yum install httpd -y
# systemctl enable --now httpd
# 3.查看并下载epel源
# yum repolist
repo id repo name
AppStream AppStream
BaseOS BaseOS
epel epel repo
extras extras
# dnf reposync --repoid=epel --download-metadata -p /var/www/html
# 访问
http://10.0.0.134/epel

  

# 客户端
# 在开一台机器,修改yum源
[root@client ~]#cat /etc/yum.repos.d/test.repo
[epel]
name=epel
baseurl=http://10.0.0.134/epel
enabled=1
gpgcheck=0
# 查看
yum repolist
# 可以下载了 

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

Rocky Linux
#关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i '/SELINUX=/ s/enforcing/disabled/' /etc/selinux/config #安装WGET yum -y install wget #创建阿里云YUM源 mkdir -vp /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache #装机必备 yum -y install vim gcc gcc-c++ make bind-utils bind-chroot bind bind-libs yum install java-1.8.0-openjdk* -y yum install -y mysql mysql-server mysql-devel mariadb-server
ubuntu
#设置root登录
sudo passwd root
#安装VIM和net-tools
apt install -y vim net-tools
#设置xshell远程登录
vim /etc/ssh/ssd_config
PermitRootLogin yes
/etc/init.d/ssh restart
#关闭防火墙
ufw disable

6. 解读一键安装httpd脚本,并自行实现一个一键安装脚本,要求
1)基于位置变量传递版本号
yum info httpd
2)基于独立函数进行初始化步骤,禁用防火墙,安装开发依赖包。
3)基于独立函数进行下载包,解压包。
4)基于独立函数进行编译,安装包。
5)基于独立函数完成链接包。
6)启动服务,并输出自定义的语句,安装xxx服务

操作命令
wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.bz2 -P /usr/local/src/
cd /usr/local/src/
tar xf httpd-2.4.54.tar.bz2
cd httpd-2.4.54
./configure --help #查看选项
./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl
make && make install
echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
. /etc/profile.d/httpd.sh
apachectl start
useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
vim /etc/httpd/httpd.conf
user apache
group apache
apachectl restart
一键安装httpd脚本
#!/bin/bash
CPUS=`grep -c  processor /proc/cpuinfo`
HTTPD_VERSION=2.4.54
INSTALL_DIR=/apps/httpd
COLOR="echo -e  \E[32;1m"
END="\E[0m"

systemctl disable --now firewalld
yum -y install vim gcc make apr-devel apr-util-devel openssl-devel pcre-devel redhat-rpm-config bzip2
cd /usr/local/src
rpm -q wget || yum -y install wget
wget https://dlcdn.apache.org/httpd/httpd-${HTTPD_VERSION}.tar.bz2  || { $COLOR
"下载失败,退出" $END;exit ; }


tar xf httpd-${HTTPD_VERSION}.tar.bz2

cd httpd-${HTTPD_VERSION}

./configure --prefix=${INSTALL_DIR} --enable-ssl  --disable-status

make -j $CPUS && make install

ln -s /apps/httpd/bin/apachectl  /usr/local/bin/

apachectl start && $COLOR"安装成功!"$END
$COLOR"请访问:http://`hostname -I`"$END 

7. 总结开放系统互联OSI模型,每层作用及对应的协议。
物理层:是参考模型的最底层,也是OSI模式的第一层。物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:是OSI模型的第二层,负责建立和管理节点间的链路。因此这一层的主要功能是:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。
网络层:是OSI模型的第三层,是通信子网的最高一层。其主要功能是:通过路由将数据从源地址转发到目的地址,实现IP跳转。
传输层:OSI下3层的任务是数据通信,上3层的任务是数据处理。而传输层是OSI模型的第4层。该层提供建立、维护和诉除传输连接的功能,起到承上启下的作用。主要功能:向网络层提供可靠的端到端的差错和流量控制,保证报文的正确传输;同时向高层屏蔽下层数据通信的细节,保证上层(应用层)提供数据正确无误。
会话层:是用户应用程序和网络之间的接口,主要功能:管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止应用程序之间的会话建立、管理和维护会话。
表示层:是OSI模型的第六次,主要工程:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
应用层:是OSI模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,该层的主要功能是:直接向用户提供服务,完成用户希望在网络上完成的各种工作。

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

# 显示当前端口范围
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
32768	60999
# 临时修改端口范围
[root@localhost ~]# echo 20000 60000 > /proc/sys/net/ipv4/ip_local_port_range
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
20000	60000
# 永久修改
[root@localhost ~]# echo "net.ipv4.ip_local_port_range = 20000 60000" >> /etc/sysctl.conf

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

 

端口号取值范围0~6535 因为十六位二进制构成 2^16
第一行 四层协议必须干的活
第二行 序号:保证数据的顺序
第三行 确认序号:去要下一个序号同时代表我已经收到了
第四行 首部长度 数据面前的称之为头部
6位标记位 每一个标记位占一位,URG紧急标记位,ACK确认标记位
PSH若置为1这一数据段不在缓存区里等待,直接优先处理,RST断开连接标记位。
SYN请求标记位,置一建立连接的过程。FIN结束标记位,置一释放连接的过程。
第五行 校验和目的是保证数据完整性
二层使用的循环冗余算法 CRC算法
四层使用的是反码相加法 强度较强
四层伪头部校验 --- 12个字节的内容,32源IP,32目标IP,8位保留,8位协议,16位总长度
注意:不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对

三次握手过程详细说明:
1、客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);
2、服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)。

四次挥手​​​​​​​过程详细说明:
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);
2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕。

10. 总结主机到主机的包传递过程。
主机A在本机的路由表中查询匹配主机B的IP的网络号;
如果能够查询到,说明主机B和主机A在同一网段(通常是在同一局域网内),则下一跳即为主机B。主机A在ARP缓存中查找主机B的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC地址,目的MAC是主机B的MAC地址。
如果主机A和主机B是网线直连的,那么主机B直接收到主机A发来的帧。
如果主机A和B是通过交换机相连的,交换机的某个端口收到主机A发来的帧,然后根据帧中的目的MAC地址在MAC地址表中查询对应的转发端口。如果找到了,直接从该端口转发出去;如果没找到,则在除了接收到数据包以外的所有端口进行转发(广播)。
如果主机A和B是通过路由器相连的,路由器的某个端口收到主机A发来的帧,其后的处理流程见步骤4。
如果不能查询到,说明主机A和主机B不处于同一网络中,需要通过网关来进行跨网络的通信。主机A会通过默认网关(通常是路由器)来提交报文,即下一跳是路由器。主机A根据网关的IP在自己的ARP缓存中查找对应的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC,目的MAC是路由器的MAC。
当网关路由器接收到数据帧时,首先提取包头中的目的MAC地址,在MAC表进行查询。如果找到对应项,则按对应的端口进行转发(这一步实现了与交换机一样的功能);如果没找到对应项,则提取数据包包头中的目的IP。
如果目的IP是自己(这是可能的,比如ping路由器),则交由上层处理。
如果目的IP不是自己,则需要进行转发,在路由表中查询目的IP的转发端口和下一跳IP。若找到了对应的路由表项,则按照路由表项转发;若没找到对应的路由表项,则按照缺省路由进行转发。转发时,源和目的IP地址不变,源MAC地址改为转发端口的MAC地址,目的MAC地址改为下一跳IP的MAC地址。

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

A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,它主要为大型网络而设计的,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到127.0.0.0)。可用的A类网络有127个,每个网络能容纳16777214个主机。其中127.0.0.1是一个特殊的IP地址,表示主机本身,用于本地机器的测试。
注:
A:0-127,其中0代表任何地址,127为回环测试地址,因此,A类ip地址的实际范围是1-126.
默认子网掩码为255.0.0.0
B类IP地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
注:
B:128-191,其中128.0.0.0和191.255.0.0为保留ip,实际范围是128.1.0.0–191.254.0.0。
C类IP地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
注:C:192-223,其中192.0.0.0和223.255.255.0为保留ip,实际范围是192.0.1.0–223.255.254.0
D类地址
用于多点广播(Multicast)。D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。224.0.0.0到239.255.255.255用于多点广播 。

在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255

另一种解释方法,道理都一样,供参考:
A类地址的第一组数字为1~126。其中0代表任何地址,127为回环测试地址,注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不能传送。B类地址的第一组数字为128~191。C类地址的第一组数字为192~223。
A类地址
A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络掩码为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。
B类地址
B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络掩码为:255.255.0.0;B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。
C类地址
C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络掩码为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,最后一组数字作为网络上的主机地址。
D类地址
用途比较特殊,D类地址称为广播地址,供特殊协议向选定的节点发送信息时用。

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

主机数=16382
子网掩码=255.255.192.0
计算方法
CIDR:无类域间路由,目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围
CIDR 无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16
netmask子网掩码:32位或128位(IPv6)的数字,和IP成对使用,用来确认IP地址中的网络ID和主机ID,对应网络ID的位为1,对应主机ID的位为0,范例:255.255.255.0 ,表现为连续的高位为1,连续的低位为0
主机数
CIDR表示法显示网络id是前18位,所以主机id为后14位,主机数=2^14-2=16382
子网掩码
主机IP为 201.222.200.111
根据CIDRD对应的子网掩码为:255.255.11000000.0 转换成二进制就是255.255.192.0

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

用自已的子网掩码分别和自已的IP及对方的IP相与,比较结果,相同则同一网络,不同则不同网段
例:A的子网掩码为255.255.0.0转为二进制为11111111.11111111.0.0 A的IP转为二进制为00001010.0.00000001.00000001
与己IP相与00001010.0.0.0 转换为二进制结果为10.0.0.0 A的网段为10.0.0.0
与BIP相与00001010.0.0.0转换为二进制结果为10.0.0.0
A可以同B通信,A的角度,A与B在同一个网段
如果B与A通信
B拿自己的子网掩码和自己的IP相与得出网段为10.0.2.0。拿自己的子网掩码与A的IP相与得出的网段为10.0.1.0。结果不在同一个网段
与判断,有假则假,全真才真

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

划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID
位数变多,网络ID位向主机ID位借n位,将划分2^n个子网
2^5=32 所以网络ID要向主机ID借5位才可以划分32个子网
公式
网络数=2^可变的网络ID位数
主机数=2^主机ID的位数-2
网络ID=IP与子网掩码netmask
CIDR表示法,可以表示网络的ID的位数,IP/网络ID的位数
netmask子网掩码: 可以表示网络ID的位数,32bit二进制,对应于网络ID的位为1,对应于主机ID的位为0
划分子网:网络ID向主机借位,如果借N位,则划分2^N个子网

求每个子网的掩码,主机数。

由第一题可知划分子网后的IP为10.0.0.0/13
所以子网掩码为11111111.11111000.0.0 转换为10进制为255.248.0.0
主机数=2^(32-13)-2=524286

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

主机名
工具hostname
centos7以上版本设置主机名 hostnamectl set-hostname 主机名 主机名放在新文件里面/etc/hostname
centos6改配置文件vim /etc/sysconfig/network hostname+主机名 配合生效

IP/netmask
工具ifconfig
#ifconfig eth0 10.0.0.68 netmask 255.255.0.0 添加ip及子网掩码
#ifconfig eth0 0.0.0.0 清除eth0上面的IP地址
启用和禁用网卡
ifconfig eth0 down
ifconfig eth0 up
对一个网卡设置多个IP地址
ifconfig eth0:1 172.16.0.8/24
ifconfig eth0:1 down

工具IP
ip [ OPTIONS ] OBJECT { COMMAND | help }
命令说明
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE,可设置属性:up and down:激活或禁用指定接口,相当于 ifup/ifdown
show [dev IFACE] [up]::指定接口 ,up 仅显示处于激活状态的接口
man帮助:ip(8), ip-address(8), ip-link(8), ip-route(8)
#禁用网卡
ip link set eth1 down
#网卡改名
ip link set eth1 name wangnet
#启用网卡
ip link set wangnet up
#网卡别名
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
#清除网络地址
ip addr flush dev eth0

网络配置方式
静态指定:
ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc
system-config-network-tui,setup
配置文件
动态分配:
DHCP: Dynamic Host Configuration Protoco

centos6修改网卡名配置文件vim /etc/udev/rules.d/70-persistent-net.rules
不重启的情况下使用新网卡名需要先禁用网卡,然后改名,在启用网卡例 ip link set eth0 down,ip link set eth0 name abc,ip link set abc up,ip a a 192.168.3.145 ,设置地址就可以上网了

centos7,8改网卡名修改配置文件vim /etc/default/grub GRUB_CMDLINE_LINUX=后面添加net.ifnames=0

保存后在执行grub2-mkconfig -o /boot/grub2/grub.cfg命令,reboot生效


ubuntu修改网卡名vim /etc/default/grub GRUB_CMDLINE_LINUX=后面添加net.ifnames=0
保存后在执行grub-mkconfig -o /boot/grub/grub.cfg命令 ,REBOOT生效

ubuntu配置自动获取IP
网卡配置文件采用YAML格式,必须以 /etc/netplan/XXX.yaml 文件命名方式存放
可以每个网卡对应一个单独的配置文件,也可以将所有网卡都放在一个配置文件里
范例:
cat /etc/netplan/01-netcfg.yaml
#This file describes the network interfaces available on your system
#For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
修改网卡配置文件后需执行命令生效:netplan apply

ubuntu配置静态IP
范例:
vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [192.168.8.10/24,10.0.0.10/8] #或者用下面两行,两种格式不能混用
- 192.168.8.10/24
- 10.0.0.10/8
gateway4: 10.0.0.2
nameservers:
search: [magedu.com, magedu.org]
addresses: [180.76.76.76, 8.8.8.8, 1.1.1.1]
查看ip和gateway
ip addr
route -n
查看DNS
resolvectl status #Ubuntu 20.04新命令

IP地址修改(centos) 先进入cd /etc/sysconfig/network-scripts/目录下创建配置文件
DEVICE=eth0
NAME=eth0
BOOTPROTO=dhcp
保存后nmcli connection reload 加载配置文件
在执行nmcli connection up eth0 (此方法为自动获取地址)
以下配置为自动获取地址
DEVICE=eth0
NAME=eth0
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.3.134
PREFIX=24
GATEWAY=192.168.3.1
DNS1=180.76.76.76
DNS2=114.114.114.114
DNS3=192.168.3.1
保存后nmcli connection reload 加载配置文件
在执行nmcli connection up eth0 (此为手动配置)

特centos7执行一条命令就可以systemctl restart network
ip a 验证地址,
路由:默认网关
路由表主要构成:
Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,
优先级最低
Genmask:目标网络对应的netmask
Iface: 到达对应网络,应该从当前主机哪个网卡发送出来
Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果
是直连网络,gateway是0.0.0.0
Metric: 开销cost,值越小,路由记录的优先级最高

工具route
route -n 查看路由表


添加路由:route add
route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
删除路由:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]

DNS服务器
cat /etc/resolv.conf 查看dns
主DNS服务器
次DNS服务器
第三个DNS服务器

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

动态配置
DEVICE=eth0 (表示这个配置文件时针对ETH0配的前面必须大写字母)
NAME=eth0 (网卡名称,代表一套配置的名称)
BOOTPROTO=dhcp (自动获取ip模式)
保存后nmcli connection reload 加载配置文件
在执行nmcli connection up eth0 (此方法为自动获取地址)

静态配置
以下配置为自动获取地址
DEVICE=eth0(表示这个配置文件时针对ETH0配的前面必须大写字母)
NAME=eth0(网卡名称,代表一套配置的名称)
#BOOTPROTO=dhcp
BOOTPROTO=static或者none (表示静态配置地址即手动添加)
IPADDR=192.168.3.134 (ip地址)
PREFIX=24 (子网掩码)
GATEWAY=192.168.3.2 (网关)
DNS1=180.76.76.76 (DNS)
DNS2=114.114.114.114
DNS3=192.168.3.1
保存后nmcli connection reload 加载配置文件
在执行nmcli connection up eth0 (此为手动配置)

centos7执行一条命令就可以systemctl restart network

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

创建bonding设备的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.3.10
PREFIX=8
#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一
条线路不通就转入另一条线路
BONDING_OPTS=“mode=1 miimon=100 fail_over_mac=1”

/etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

/etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes


查看bond0状态:
cat /proc/net/bonding/bond0

删除bond0
删除bond0/eth0/eth1
重新创建eth0/eth1
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1

命令的方法
#添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
ipv4.method manual ipv4.addresses 10.0.0.100/24
#添加从属接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
#注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
#要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
#启动绑定
nmcli con up mybond0

18. 通过ifconfig命令结果找到ip地址.
ifconfig ens32 | awk 'NR==2{print $2}'
19. 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。

#!/bin/bash

NET=10.0.0
cat /dev/null >  hosts.txt
for i in {1..254};do
    if ping -c1 -W1 $NET.$i &> /dev/null ;then
        echo $NET.$i is up | tee -a hosts.txt
    fi
done
#!/bin/bash

NET=10.0.0
cat /dev/null > hosts2.txt
for((i=1;i<=254;i++));do
    if ping -c1 -W1 $NET.$i &> /dev/null ;then
        echo $NET.$i is up | tee -a hosts2.txt
    fi
done

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

cat /etc/passwd > firstsum.txt (创建文件)

编辑脚本firstsum.sh
#!/bin/bash

sum=0
while read first ;do
line=echo $first| cut -d ":" -f 3
let sum+=line
done < firstsum.txt
echo $sum

命令计算
cat /etc/passwd |cut -d “:” -f3 |paste -s -d+|bc
posted @ 2023-02-12 11:54  Jack_Cui  阅读(64)  评论(0编辑  收藏  举报