Linux运维学习记录04
一、通过网络配置命令,让主机可以上网。 ip, netmask, gateway, dns,主机名。相关命令总结,最终可以通过这些配置让你的主机上网。
1.先修改网卡名
2.然后配置静态IP地址,子网掩码和网关 vim /etc/sysconfig/network-scripts/ifcfg-eth1
3.进行查看
4.新增DNS vim /etc/resolv.conf
5.用DNS解析域名
6.添加查看域后缀
7.使用ping命令与外部网络连接
连接成功
二、解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。
TYPE=Ethernet
该配置项指明网络接口的类型。Ethernet 表示这是一个有线网络接口。
BOOTPROTO=dhcp
该配置项定义了接口获取IP地址的方式。dhcp 表示通过 DHCP(动态主机配置协议)自动获取 IP 地址。
NAME=eth0
该配置项指定了网络接口的逻辑名称,通常与 DEVICE 项一致。这里 eth0 是接口的名称。
DEVICE=eth0
该配置项指定了网络接口的设备名称,是操作系统识别的接口标识符。通常与 NAME 项一致
ONBOOT=yes
该配置项定义了系统启动时是否自动启用该网络接口。yes 表示在系统启动时自动激活该接口。
PROXY_METHOD=none
该配置项定义代理方法。设置为 none 表示不使用任何代理。
BROWSER_ONLY=no
该配置项决定网络连接是否仅用于浏览器访问网络。设置为 no 表示网络连接不限制为浏览器使用。
DEFROUTE=yes
该配置项定义此接口是否作为默认路由。yes 表示该接口将被设置为默认网关接口。
IPV4_FAILURE_FATAL=no
该配置项定义如果IPv4配置失败,是否停止启动网络服务。no 表示即使IPv4配置失败,网络服务也不会停止。
IPV6INIT=yes
该配置项定义是否启用IPv6支持。yes 表示启用IPv6。
IPV6_AUTOCONF=yes
该配置项定义是否使用自动配置来获取IPv6地址。yes 表示启用自动配置。
IPV6_DEFROUTE=yes
该配置项定义此接口是否作为IPv6的默认路由。yes 表示该接口将被设置为IPv6的默认网关接口。
IPV6_FAILURE_FATAL=no
该配置项定义如果IPv6配置失败,是否停止启动网络服务。no 表示即使IPv6配置失败,网络服务也不会停止。
IPV6_ADDR_GEN_MODE=eui64
该配置项定义生成IPv6地址的方式。eui64 表示基于接口的MAC地址生成IPv6地址。
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
这是该网络接口配置的唯一标识符,用于唯一标识网络连接配置。
三、 基于配置文件或命令完成bond0配置
先创建bong0配置文件 vim ifcfg-bond0
然后创建网卡配置文件 vim ifcfg-eth2 vim ifcfg-eth3
查看
完成bond0配置
进行测试
四、 通过ifconfig命令结果找到ip地址.
五、 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。
六、 使用while read line和/etc/passwd,计算用户id总和。
七、 总结索引数组和关联数组,字符串处理,高级变量使用及示例。
索引数组:
一次只赋值一个元素
一次赋值全部元素
数组的长度,即数组中元素的个数
数组切片
向数组中追加元素向数组中追加元素
关联数组
字符串处理
字符串截取
基于模式取子串
查找替换
查找删除
字符大小写转换
高级变量
八、 求10个随机数的最大值与最小值。
九、 使用递归调用,完成阶乘算法实现。
十、解析进程和线程的区别? 解析进程的结构。
1.解析进程和线程的区别
进程是操作系统分配资源的最小单位;线程是程序执行的CPU调度的最小单位;
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多。
解析进程的结构
进程结构包含以下部分:
进程控制块(PCB):
进程id、用户id和组id
程序计数器
进程的状态(有就绪、运行、阻塞)
进程切换时需要保存和恢复的CPU寄存器的值
描述虚拟地址空间的信息
描述控制终端的信息
当前工作目录
文件描述符表,包含很多指向file结构体的指针
进程可以使用的资源上限(ulimit –a命令可以查看)
输入输出状态:配置进程使用I/O设备
进程地址空间:
代码段:用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。
数据段:用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。
BSS段:Block Started by Symbol”的缩写,意为“以符号开始的块,BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零。
堆(heap):存放数组和对象,堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
栈(stack):栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量,但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的后进先出特点,所以栈特别方便用来保存/恢复调用现场。可以把堆栈看成一个寄存、交换临时数据的内存区。
资源分配:
文件描述符表:进程当前打开的文件列表。
信号处理:信号处理程序的地址。
内核堆栈:
每个进程在内核空间都有一个内核堆栈,用于系统调用处理、异常处理等。
十一、 结合进程管理命令,说明进程各种状态。
1.停止状态
2.可中断睡眠状态
kill -CONT 5702
3.运行状态 ps aux
4.僵尸状态 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(zombie)进程。
5.孤儿进程 如果在子进程在退出前,父进程先退出,这时子进程将成为孤儿进程,因为它的父进程已经死了。孤儿进程会被PID=1的systemd进程收养,成为systemd的子进程。孤儿进程还会继续运行,而不会随父进程退出而终止,只不过其父进程发生了改变。
6.就绪态:ready
十二、 说明IPC通信和RPC通信实现的方式。
IPC 通信实现方式
管道(Pipes)
匿名管道:只能用于具有亲缘关系的进程(如父子进程),数据通过内存缓冲区传输,一端写入数据,另一端读取。
命名管道(FIFO):支持无亲缘关系的进程之间通信,允许不同进程通过命名的文件路径进行读写操作。
消息队列(Message Queues)
系统维护消息队列,进程可以通过系统调用将消息放入队列中,其他进程可以读取消息。
提供有序的消息通信,允许多个进程发送和接收消息。
共享内存(Shared Memory)
不同进程通过映射同一个内存区域来共享数据。共享内存是最快的 IPC 方式,但需要同步机制(如信号量或互斥锁)来保证数据一致性。
信号(Signals)
信号是异步的通知机制,允许进程向其他进程发送信号,以通知事件的发生或控制进程的执行(如终止或暂停)。
套接字(Sockets)
本地套接字可用于同一台主机上的进程之间的通信。虽然它最常用于网络通信,但也能用于本地主机进程之间。
信号量(Semaphores)
信号量用于控制多个进程对共享资源的访问,通常用于实现同步和互斥,确保不会有多个进程同时访问关键资源。
RPC 通信实现方式
基本步骤
客户端发送请求:客户端调用远程函数,并通过序列化(如 JSON、XML、Protobuf 等)将请求数据打包并发送到服务器。
服务器处理请求:服务器接收到请求后,解包并调用对应的本地函数,将结果打包后返回给客户端。
客户端接收响应:客户端解包服务器返回的响应,并获得调用结果。
常见的 RPC 实现
gRPC:基于 HTTP/2 和 Protocol Buffers 的高性能 RPC 框架,支持多种编程语言,提供双向流式通信和负载均衡。
XML-RPC:通过 HTTP 协议传输 XML 格式的请求和响应,简单且广泛兼容,但性能相对较低。
JSON-RPC:通过 HTTP 或 WebSocket 传输 JSON 格式的数据,易于使用和实现,常用于轻量级系统。
Thrift:Apache Thrift 是一个多语言支持的 RPC 框架,支持高效的二进制序列化,适用于大规模分布式系统。
REST(基于 HTTP 的模拟 RPC):虽然 REST 本质上不是 RPC,但通过 HTTP 请求(如 GET、POST)来实现远程服务调用,与 RPC 类似,具有更强的跨平台性。
实现技术
序列化/反序列化:RPC 系统需要将函数参数和返回值打包成可通过网络传输的格式(如 Protobuf 或 JSON),再通过反序列化恢复原始数据。
网络传输:通过 TCP、HTTP、WebSocket 等协议传输数据。
代理机制:RPC 通常使用代理(Stub 和 Skeleton)来隐藏底层网络通信的复杂性,使远程调用看起来像本地调用。
十三、总结Linux,前台和后台作业的区别,并说明如何在前台和后台中进行状态转换。
前台作业:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
由前台转后台停止 然后转后台运行
由前台转后台停止 然后转前台运行
十四、实现定时任务,每日凌晨1点,删除指定文件(自己创建即可)
输入crontab -e
这个定时任务将在每天凌晨1:00运行,并删除指定的文件
查看任务 grep CRON /var/log/cron
十五、实现定时任务每月月初对指定文件进行压缩(自己创建文件)
输入crontab -e
这个定时任务将在每月的1日午夜运行,并将指定的文件压缩成一个 .tar.gz 压缩包。