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

软件管理

  • 尝试基于gcc命令说明 c语言编译过程。
    C语言编译过程主要包括预处理、编译、汇编和链接四个阶段。gcc命令是一个常用的C语言编译器,可以完成这四个阶段的工作。
    下面是gcc命令的使用示例和各个阶段的说明:
    1. 预处理阶段主要是对源代码进行宏替换、头文件包含等操作,生成预处理后的代码。gcc命令中使用参数“-E”来进行预处理,示例命令如下:
    $ gcc -E main.c -o main.i
    2. 编译阶段主要是将预处理后的代码转换成汇编代码。gcc命令中使用参数“-S”来进行编译,示例命令如下:
    $ gcc -S main.i -o main.s
    3. 汇编阶段主要是将汇编代码转换成机器码。gcc命令中使用参数“-c”来进行汇编,示例命令如下:
    $ gcc -c main.s -o main.o
    4. 链接阶段主要是将多个目标文件链接成一个可执行文件。gcc命令中使用参数“-o”来指定输出文件名,示例命令如下:
    $ gcc main.o -o main
    以上是gcc命令的使用示例和C语言编译过程的各个阶段说明。在实际编译过程中,可以使用gcc命令的多个参数来控制编译过程的细节,例如优化级别、调试信息等。
  • 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt
    1. 程序包通常包含以下内容的文件:
    可执行文件:程序的主要执行文件,通常存放在/bin、/usr/bin、/sbin、/usr/sbin等目录下
    库文件:程序所依赖的库文件,通常存放在/lib、/usr/lib、/usr/local/lib等目录下
    配置文件:程序的配置文件,通常存放在/etc目录下。
    文档文件:程序的文档文件,通常存放在/usr/share/doc目录下
    其他文件:程序所需要的其他文件,如图标、音频、视频等文件

    2. 以下是常见的程序包管理器及其命令:
    yum/dnf:适用于Red Hat、CentOS等基于RPM的Linux发行版:
    安装程序包:sudo yum/dnf install package_name
    卸载程序包:sudo yum/dnf remove package_name
    更新程序包:sudo yum/dnf update package_name
    搜索程序包:sudo yum/dnf search package_name
    查看程序包信息:sudo yum/dnf info package_name

    3. apt:适用于Debian、Ubuntu等基于Debian的Linux发行版:
    安装程序包:sudo apt-get install package_name
    卸载程序包:sudo apt-get remove package_name
    更新程序包:sudo apt-get update && sudo apt-get upgrade
    搜索程序包:sudo apt-cache search package_name
    查看程序包信息:sudo apt-cache show package_name

    4. pacman:适用于Arch Linux发行版:
    安装程序包:sudo pacman -S package_name
    卸载程序包:sudo pacman -R package_name
    更新程序包:sudo pacman -Syu
    搜索程序包:sudo pacman -Ss package_name
    查看程序包信息:sudo pacman -Si package_name

    以上是常见的程序包管理器及其命令,可以根据实际需求选择合适的程序包管理器。获取命令可以通过man命令查看程序包管理器的帮助文档,或者在终端中输入程序包管理器的命令加上-h或–help参数获取帮助信息。
  • 总结程序包获取途径,以及rpm, yum, apt命令选项示例
    程序包获取途径主要有以下几种:
    官方软件仓库:操作系统或发行版官方提供的软件仓库,可以通过程序包管理器进行访问和下载
    第三方软件仓库:由第三方提供的软件仓库,可以通过程序包管理器进行访问和下载
    官方网站:软件开发者或厂商官方网站提供的下载链接,可以通过浏览器进行访问和下载
    第三方网站:由第三方提供的软件下载网站,可以通过浏览器进行访问和下载

    以下是rpm、yum和apt命令的选项示例:
    1. rpm命令选项示例
    安装程序包:sudo rpm -ivh package_name.rpm
    卸载程序包:sudo rpm -e package_name
    查看程序包信息:sudo rpm -qi package_name
    查看程序包文件列表:sudo rpm -ql package_name
    查看程序包依赖关系:sudo rpm -qR package_name

    2. yum命令选项示例
    安装程序包:sudo yum install package_name
    卸载程序包:sudo yum remove package_name
    更新程序包:sudo yum update package_name
    搜索程序包:sudo yum search package_name
    查看程序包信息:sudo yum info package_name

    3. apt命令选项示例
    安装程序包:sudo apt-get install package_name
    卸载程序包:sudo apt-get remove package_name
    更新程序包:sudo apt-get update && sudo apt-get upgrade
    搜索程序包:sudo apt-cache search package_name
    查看程序包信息:sudo apt-cache show package_name

    以上是程序包获取途径和rpm、yum、apt命令的选项示例,可以根据实际需求选择合适的获取途径和命令选项。
  • 简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用
    yum/dnf是基于RPM包管理器的程序包管理器,主要用于在Linux系统中安装、升级和卸载软件包。其工作原理如下:
    配置软件仓库:yum/dnf通过配置软件仓库来获取软件包信息。软件仓库可以是本地的、远程的或者是第三方的。
    搜索软件包:yum/dnf通过搜索软件仓库来查找需要安装的软件包。
    下载软件包:yum/dnf会从软件仓库中下载需要安装的软件包及其依赖的软件包。
    安装软件包:yum/dnf会自动解决软件包之间的依赖关系,并安装需要的软件包。
    升级软件包:yum/dnf会检查软件仓库中是否有新版本的软件包,并自动升级已安装的软件包。
    卸载软件包:yum/dnf会自动卸载不再需要的软件包,并删除其依赖的软件包。

    1. 搭建私有yum仓库
    # 安装httpd和createrepo
    yum install httpd createrepo
    # 设置httpd服务开机自启动并启动服务
    systemctl enable --now httpd
    # 创建yum仓库目录
    mkdir -p /var/www/html/yum/base
    mkdir -p /var/www/html/yum/epel
    # 复制软件包到yum仓库目录
    # 将需要的软件包复制到对应的yum仓库目录中。

    # 创建base源的yum仓库
    createrepo /var/www/html/yum/base
    # 创建epel源的yum仓库
    createrepo /var/www/html/yum/epel

    2. 使用yum仓库
    在另一个虚拟机中,编辑yum仓库配置文件/etc/yum.repos.d/myrepo.repo,添加以下内容:
    #yum_server_ip为搭建yum仓库的服务器的IP地址。
    [base]
    name=My Base Repository
    baseurl=http://yum_server_ip/yum/base
    enabled=1
    gpgcheck=0

    [epel]
    name=My EPEL Repository
    baseurl=http://yum_server_ip/yum/epel
    enabled=1
    gpgcheck=0

    3.测试yum仓库
    在另一个虚拟机中,使用yum命令测试yum仓库是否可用:
    # 更新yum仓库缓存
    yum makecache
    # 搜索软件包
    yum search package_name
    # 安装软件包
    yum install package_name

    以上是yum/dnf工作原理的简要总结和搭建私有yum仓库的步骤,可以根据实际需求进行配置和使用。
  • 总结系统安装之后的常用初始化步骤。rocky/ubuntu
  1. 制作CentOS8模板
  2. 制作Ubuntu模板
  • 解读一键安装httpd脚本,并自行实现一个一键安装脚本,要求
    1)基于位置变量传递版本号
    2)基于独立函数进行初始化步骤,禁用防火墙,安装开发依赖包。
    3)基于独立函数进行下载包,解压包。
    4)基于独立函数进行编译,安装包。
    5)基于独立函数完成链接包。
    6)启动服务,并输出自定义的语句,安装xxx服务
    以下是一个示例的一键安装脚本,安装的是 Apache httpd 服务器:

    #!/bin/bash
    # 定义变量
    version=$1
    httpd_url="https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-$version.tar.gz"
    httpd_dir="httpd-$version"

    # 初始化步骤
    function init() {
    # 禁用防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    # 安装开发依赖包
    yum install -y gcc make apr-devel apr-util-devel pcre-devel
    }

    # 下载包
    function download() {
    wget $httpd_url
    tar -zxvf $httpd_dir.tar.gz
    }

    # 编译、安装包
    function install() {
    cd $httpd_dir
    ./configure --prefix=/usr/local/httpd
    make && make install
    }

    # 链接包
    function link() {
    ln -s /usr/local/httpd/bin/apachectl /usr/bin/apachectl
    }

    # 启动服务
    function start() {
    /usr/local/httpd/bin/apachectl start
    echo "Apache httpd $version has been installed."
    }

    # 执行函数
    init
    sleep 1

    download
    sleep 1

    install
    sleep 1

    link
    sleep 1

    start


    该脚本的原理是:
    定义了变量 version、httpd_url 和 httpd_dir,分别表示 httpd 的版本号、下载链接和解压后的目录名
    定义了函数 init,用于禁用防火墙和安装开发依赖包
    定义了函数 download,用于下载 httpd 包并解压
    定义了函数 install,用于编译、安装 httpd 包
    定义了函数 link,用于创建软链接
    定义了函数 start,用于启动 httpd 服务并输出自定义的语句
    在脚本的最后,按照顺序执行了 init、download、install、link 和 start 函数。
    如果要使用该脚本安装 httpd,需要在命令行中指定 httpd 的版本号,例如:
    ./install_httpd.sh 2.4.48

网络相关

  • 总结开放系统互联OSI模型,每层作用及对应的协议。
    开放系统互联(OSI)模型是一个由国际标准化组织(ISO)制定的网络通信协议参考模型,它将网络通信分为七个层次,每个层次都有自己的功能和协议。
    1. 物理层:负责传输比特流,即0和1的电信号,以及定义物理接口和传输介质。常用的协议有:IEEE 802.3、IEEE 802.5、RS-232、V.35等
    2. 数据链路层:负责将比特流组装成帧,并进行差错检测和纠正。常用的协议有:PPP、HDLC、Ethernet、Token Ring等
    3. 网络层:负责将数据包从源地址传输到目的地址,实现路由和拥塞控制。常用的协议有:IP、ICMP、ARP、RARP等
    4. 传输层:负责提供端到端的可靠数据传输和错误恢复。常用的协议有:TCP、UDP、SPX等
    5. 会话层:负责建立、管理和终止会话,实现数据交换和同步。常用的协议有:RPC、SQL、NFS等
    6. 表示层:负责数据格式转换、加密解密、压缩解压缩等。常用的协议有:JPEG、MPEG、ASCII、EBCDIC等
    7. 应用层:负责提供各种网络应用服务,如电子邮件、文件传输、远程登录等。常用的协议有:HTTP、FTP、SMTP、POP3等
    以上是OSI模型每层的作用及对应协议
  • 调整动态端口范围为20000-60000
    在Linux主机上,可以通过修改/proc/sys/net/ipv4/ip_local_port_range文件来调整动态端口范围。
    以下是将动态端口范围调整为20000-60000的步骤:
    使用root用户登录Linux主机,修改/proc/sys/net/ipv4/ip_local_port_range文件
    $ sudo echo "20000 60000" > /proc/sys/net/ipv4/ip_local_port_range
    验证动态端口范围是否已经修改成功
    $ cat /proc/sys/net/ipv4/ip_local_port_range
    如果输出结果为“20000 60000”,则说明动态端口范围已经修改成功。

    注意:以上修改是临时的,重启系统后会恢复默认值。如果需要永久修改动态端口范围,可以在/etc/sysctl.conf文件中添加以下内容:
    # 修改动态端口范围
    net.ipv4.ip_local_port_range = 20000 60000
    然后执行以下命令使修改生效:
    $ sudo sysctl -p
    以上是将Linux主机动态端口范围调整为20000-60000的步骤,可以根据实际需求进行调整。
  • 总结TCP包头结构,TCP三次握手,4次挥手
    TCP是一种面向连接的、可靠的传输协议,它通过TCP包头中的控制信息来实现数据传输的可靠性和有序性。
    以下是TCP包头结构、TCP三次握手和四次挥手的简要总结:

    TCP包头结构
    TCP包头结构由20个字节组成,包括以下字段:
    源端口和目的端口:用于标识发送方和接收方的端口号。
    序列号和确认号:用于实现数据传输的可靠性和有序性。
    数据偏移和保留位:用于标识TCP包头长度和保留位。
    标志位:用于标识TCP包的类型,如SYN、ACK、FIN等。
    窗口大小:用于实现流量控制。
    校验和:用于检测TCP包头和数据的完整性。
    紧急指针:用于标识紧急数据的位置。

    TCP三次握手
    TCP三次握手是建立TCP连接的过程,包括以下步骤:
    第一次握手:客户端向服务器发送SYN包,请求建立连接。
    第二次握手:服务器收到SYN包后,向客户端发送SYN+ACK包,表示可以建立连接。
    第三次握手:客户端收到SYN+ACK包后,向服务器发送ACK包,表示连接已经建立。

    TCP四次挥手
    TCP四次挥手是关闭TCP连接的过程,包括以下步骤:
    第一次挥手:客户端向服务器发送FIN包,请求关闭连接。
    第二次挥手:服务器收到FIN包后,向客户端发送ACK包,表示已经收到关闭请求。
    第三次挥手:服务器向客户端发送FIN包,请求关闭连接。
    第四次挥手:客户端收到FIN包后,向服务器发送ACK包,表示已经收到关闭请求。
    以上是TCP包头结构、TCP三次握手和四次挥手的简要总结,可以帮助理解TCP协议的工作原理和数据传输过程。
  • 总结主机到主机的包传递过程
    主机到主机的包传递过程可以分为以下几个步骤:
    应用层:发送主机的应用程序将数据封装成应用层协议数据单元(PDU),如HTTP、FTP、SMTP等。
    传输层:传输层协议将应用层PDU封装成传输层协议数据单元(PDU),如TCP、UDP等。
    网络层:网络层协议将传输层PDU封装成网络层协议数据单元(PDU),如IP、ICMP、ARP等。
    数据链路层:数据链路层协议将网络层PDU封装成数据链路层协议数据单元(PDU),如Ethernet、PPP等。
    物理层:物理层协议将数据链路层PDU封装成比特流,通过物理介质传输到接收主机
    接收主机:接收主机将接收到的比特流转换成数据链路层PDU,然后依次解封装,直到应用层协议数据单元被传递到接收主机的应用程序
    在传递过程中,每一层协议都会添加一些控制信息,如源地址、目的地址、端口号、序列号、确认号、校验和等,用于实现数据传输的可靠性、有序性和安全性。同时,每一层协议也会对数据进行一些处理,如分段、分组、路由、差错检测和纠正等,以保证数据能够正确地传输到目的主机。
  • 总结IP地址 A, B, C, D 类,并解析IP地址的组成
    IP地址是互联网协议中用于标识网络设备的地址,根据IP地址的不同分类,可以将其分为A、B、C、D四类。以下是IP地址A、B、C、D类的简要总结及其组成:
    A类IP地址
    A类IP地址的第一个字节范围是1~126,用于大型网络,其组成如下:
    第一个字节:网络地址,后三个字节:主机地址

    B类IP地址
    B类IP地址的第一个字节范围是128~191,用于中型网络,其组成如下:
    前两个字节:网络地址,后两个字节:主机地址

    C类IP地址
    C类IP地址的第一个字节范围是192~223,用于小型网络,其组成如下:
    前三个字节:网络地址,最后一个字节:主机地址

    D类IP地址
    D类IP地址的第一个字节范围是224~239,用于多播地址,其组成如下:
    第一个字节:1110开头,后三个字节:多播组标识

    IP地址的组成包括网络地址和主机地址,其中网络地址用于标识网络,主机地址用于标识网络中的主机。IP地址的长度为32位,通常用点分十进制表示法表示,如192.168.1.1。IP地址的子网掩码用于划分网络地址和主机地址的边界,通常也用点分十进制表示法表示,如255.255.255.0。
  • 201.222.200.111/18计算主机数?子网掩码?说明计算方法。
    根据IP地址201.222.200.111/18,可以计算出主机数和子网掩码,具体计算方法如下:
    1. 计算子网掩码
    子网掩码用于划分网络地址和主机地址的边界,根据CIDR表示法,/18表示前18位为网络地址,后14位为主机地址,因此子网掩码的前18位为1,后14位为0,即255.255.192.0。
    2. 计算主机数
    根据CIDR表示法,/18表示有14位用于主机地址,因此可以计算出主机数为2的14次方减2,即16382个主机。
    综上所述,根据IP地址201.222.200.111/18,可以计算出子网掩码为255.255.192.0,主机数为16382个。
  • 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
    A和B的IP地址分别为10.0.1.1/16和10.0.2.2/24,其中A的子网掩码为255.255.0.0,B的子网掩码为255.255.255.0。根据子网掩码的规则,如果两个主机的IP地址的网络地址相同,则它们在同一个网段中。因此,A和B的网络地址分别为10.0.0.0和10.0.2.0,不在同一个网段中。

    由于A和B不在同一个网段中,它们不能直接通信。如果需要让它们通信,可以通过路由器或者三层交换机等设备进行中转,将数据包从一个网段转发到另一个网段。在这种情况下,需要在路由器或者三层交换机上配置路由表,以便正确地转发数据包。
  • 如何将10.0.0.0/8划分32个子网?
    将10.0.0.0/8划分为32个子网,需要将原来的8位网络地址划分为更多的子网地址位。可以通过增加子网掩码的位数来实现,具体步骤如下:

    1. 确定需要划分的子网数
    将10.0.0.0/8划分为32个子网,需要确定需要划分的子网数为32个
    2. 确定子网掩码
    根据需要划分的子网数,可以计算出需要增加的子网掩码位数。由于32个子网需要使用5位二进制数来表示,因此需要将原来的8位网络地址中的5位作为子网地址位,剩余的3位作为主机地址位。因此,新的子网掩码为255.255.248.0
    3.计算子网地址
    根据新的子网掩码,可以计算出每个子网的子网地址。由于每个子网的子网地址位不同,因此需要逐个计算。以第一个子网为例,其子网地址为10.0.0.0,第二个子网的子网地址为10.0.8.0,以此类推。
    4. 计算广播地址和可用主机数
    根据新的子网掩码,可以计算出每个子网的广播地址和可用主机数。以第一个子网为例,其广播地址为10.0.7.255,可用主机数为2046个,第二个子网的广播地址为10.0.15.255,可用主机数为2046个,以此类推。
    综上所述,将10.0.0.0/8划分为32个子网的步骤包括确定需要划分的子网数、确定子网掩码、计算子网地址、计算广播地址和可用主机数。
  • 求每个子网的掩码,主机数。
    将10.0.0.0/8划分为32个子网后,每个子网的掩码和主机数如下:
    子网1:10.0.0.0/21,掩码255.255.248.0,主机数2046
    子网2:10.0.8.0/21,掩码255.255.248.0,主机数2046
    子网3:10.0.16.0/21,掩码255.255.248.0,主机数2046
    子网4:10.0.24.0/21,掩码255.255.248.0,主机数2046
    子网5:10.0.32.0/21,掩码255.255.248.0,主机数2046
    子网6:10.0.40.0/21,掩码255.255.248.0,主机数2046
    子网7:10.0.48.0/21,掩码255.255.248.0,主机数2046
    子网8:10.0.56.0/21,掩码255.255.248.0,主机数2046
    子网9:10.0.64.0/21,掩码255.255.248.0,主机数2046
    子网10:10.0.72.0/21,掩码255.255.248.0,主机数2046
    子网11:10.0.80.0/21,掩码255.255.248.0,主机数2046
    子网12:10.0.88.0/21,掩码255.255.248.0,主机数2046
    子网13:10.0.96.0/21,掩码255.255.248.0,主机数2046
    子网14:10.0.104.0/21,掩码255.255.248.0,主机数2046
    子网15:10.0.112.0/21,掩码255.255.248.0,主机数2046
    子网16:10.0.120.0/21,掩码255.255.248.0,主机数2046
    子网17:10.0.128.0/21,掩码255.255.248.0,主机数2046
    子网18:10.0.136.0/21,掩码255.255.248.0,主机数2046
    子网19:10.0.144.0/21,掩码255.255.248.0,主机数2046
    子网20:10.0.152.0/21,掩码255.255.248.0,主机数2046
    子网21:10.0.160.0/21,掩码255.255.248.0,主机数2046
    子网22:10.0.168.0/21,掩码255.255.248.0,主机数2046
    子网23:10.0.176.0/21,掩码255.255.248.0,主机数2046
    子网24:10.0.184.0/21,掩码255.255.248.0,主机数2046
    子网25:10.0.192.0/21,掩码255.255.248.0,主机数2046
    子网26:10.0.200.0/21,掩码255.255.248.0,主机数2046
    子网27:10.0.208.0/21,掩码255.255.248.0,主机数2046
    子网28:10.0.216.0/21,掩码255.255.248.0,主机数2046
    子网29:10.0.224.0/21,掩码255.255.248.0,主机数2046
    子网30:10.0.232.0/21,掩码255.255.248.0,主机数2046
    子网31:10.0.240.0/21,掩码255.255.248.0,主机数2046
    子网32:10.0.248.0/21,掩码255.255.248.0,主机数2046
    每个子网的掩码都是255.255.248.0,主机数都是2046个。
  • 通过网络配置命令,让主机可以上网。 ip, netmask, gateway, dns,主机名。相关命令总结,最终可以通过这些配置让你的主机上网。
    要让主机能够上网,需要进行以下配置:IP地址、子网掩码、网关、DNS服务器和主机名。具体命令如下:
    # 设置主机名
    hostnamectl set-hostname ostest
    # 设置网络地址
    nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.10.138/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2
  • 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。
    /etc/sysconfig/network-scripts/ifcfg-eth0 是 Linux 系统中用于配置网络接口 eth0 的文件。该文件的格式如下:

    复制DEVICE=eth0
    BOOTPROTO=none
    ONBOOT=yes
    IPADDR=192.168.1.100
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    各个字段的含义如下:

    DEVICE:指定网络接口的名称,例如 eth0
    BOOTPROTO:指定网络接口的启动协议,可以是 none、dhcp、bootp、static 等。none 表示不使用启动协议,需要手动配置 IP 地址等信息;dhcp 和 bootp 表示使用 DHCP 或 BOOTP 协议自动获取 IP 地址等信息;static 表示使用静态 IP 地址
    ONBOOT:指定网络接口是否在系统启动时自动启用,可以是 yes 或 no
    IPADDR:指定网络接口的 IP 地址
    NETMASK:指定网络接口的子网掩码
    GATEWAY:指定网络接口的默认网关
    DNS1 和 DNS2:指定 DNS 服务器的 IP 地址,可以指定多个 DNS 服务器

    这些字段的值可以根据需要进行修改,修改后需要重启网络服务或者重启系统才能生效。
  • 基于配置文件或命令完成bond0配置
    在 Linux 系统中,可以通过配置文件或命令来完成 bond0 的配置。下面分别介绍两种方法:

    基于配置文件完成 bond0 配置

    在 /etc/sysconfig/network-scripts/ 目录下创建一个名为 ifcfg-bond0 的文件,并添加以下内容:

    DEVICE=bond0
    BOOTPROTO=none
    ONBOOT=yes
    BONDING_OPTS="mode=1 miimon=100"
    IPADDR=192.168.1.100
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    其中,DEVICE 指定了 bond0 的名称,BOOTPROTO 设置为 none 表示不使用启动协议,需要手动配置 IP 地址等信息,ONBOOT 设置为 yes 表示在系统启动时自动启用,BONDING_OPTS 指定了 bond0 的模式和心跳检测时间,IPADDR、NETMASK、GATEWAY、DNS1 和 DNS2 分别指定了 IP 地址、子网掩码、默认网关和 DNS 服务器的 IP 地址。

    基于命令完成 bond0 配置

    使用以下命令创建 bond0:

    modprobe bonding
    echo "alias bond0 bonding" >> /etc/modprobe.d/bonding.conf
    使用以下命令配置 bond0:

    ifconfig bond0 192.168.1.100 netmask 255.255.255.0 up
    echo "192.168.1.1 via bond0" >> /etc/sysconfig/network-scripts/route-bond0
    echo "nameserver 8.8.8.8" > /etc/resolv.conf
    echo "nameserver 8.8.4.4" >> /etc/resolv.conf
    其中,modprobe bonding 命令加载 bonding 模块,echo "alias bond0 bonding" >> /etc/modprobe.d/bonding.conf 命令将 bond0 和 bonding 模块关联起来。ifconfig bond0 192.168.1.100 netmask 255.255.255.0 up 命令配置 bond0 的 IP 地址和子网掩码,并启用 bond0 接口。echo "192.168.1.1 via bond0" >> /etc/sysconfig/network-scripts/route-bond0 命令配置 bond0 的默认网关。echo "nameserver 8.8.8.8" > /etc/resolv.conf 和 echo "nameserver 8.8.4.4" >> /etc/resolv.conf 命令配置 DNS 服务器的 IP 地址。

    无论是基于配置文件还是命令完成 bond0 配置,都需要重启网络服务或者重启系统才能生效。
  • 通过ifconfig命令结果找到ip地址.
    在终端中输入 ifconfig 命令,按下回车键。
    在 ifconfig 命令的输出结果中,可以找到当前计算机的 IP 地址。通常情况下,IP 地址会显示在 inet 或 inet addr 字段后面,例如:

    eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:12345 errors:0 dropped:0 overruns:0 frame:0
    TX packets:6789 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:12345678 (12.3 MB) TX bytes:567890 (567.8 KB)
    在上面的示例中,eth0 是网卡名称,inet addr:192.168.1.100 表示当前计算机的 IP 地址为 192.168.1.100。
  • 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。
    以下是一个使用 Bash 脚本判断本地网络内在线主机 IP 的示例:

    #!/bin/bash
    # 获取本地 IP 地址和子网掩码
    ip=$(ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)
    subnet=$(ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 4)

    # 将子网掩码转换为 CIDR 格式
    cidr=$(echo $subnet | awk '{ split($0, a, "."); print a[1]*256^3 + a[2]*256^2 + a[3]*256 + a[4] }' | awk '{ mask = 0xFFFFFFFF << (32 - log($1)/log(2)); print 32 - log(mask)/log(2) }')

    # 获取本地网络的 IP 段
    network=$(echo $ip | awk -F '.' '{ print $1,$2,$3 }' OFS='.' | sed "s/$/.0\/$cidr/")

    # 遍历本地网络内的 IP 地址
    for i in $(seq 1 254); do
    address="$network.$i"
    ping -c 1 -w 1 $address > /dev/null 2>&1
    if [ $? -eq 0 ]; then
    echo "$address is online"
    fi
    done

    该脚本的原理是通过获取本地 IP 地址和子网掩码,计算出本地网络的 IP 段,然后遍历该 IP 段内的所有 IP 地址,使用 ping 命令测试每个 IP 地址是否在线。如果 ping 命令返回值为 0,则表示该 IP 地址在线,输出该 IP 地址。
    注意:该脚本中的 eth0 是网卡名称,如果你的网卡名称不是 eth0,需要将脚本中的 eth0 替换为你的网卡名称。
  • 使用while read line和/etc/passwd,计算用户id总和
    可以使用 while read line 和 /etc/passwd 文件来计算用户 ID 的总和。以下是一个示例脚本:

    #!/bin/bash
    sum=0
    while read line; do
    uid=$(echo $line | cut -d ':' -f 3)
    sum=$((sum + uid))
    done < /etc/passwd

    echo "Total UID: $sum"

    该脚本的原理是使用 while read line 循环读取 /etc/passwd 文件中的每一行,然后使用 cut 命令提取每行中的用户 ID(第三个字段),并将其累加到 sum 变量中。最后输出 sum 变量的值,即为用户 ID 的总和。
    注意:该脚本需要使用 root 权限运行,因为只有 root 用户才有权限读取 /etc/passwd 文件。