共 181 篇文章

标签:主机配置 第16页

深入了解Linux QoS的实现机制 (linux qos 实现机制)

网络质量及网络性能一直是企业与个人所关心的重点,为此,许多网络管理员和系统管理员通过不断地研究和尝试,试图实现更好的网络质量服务(QoS)。在众多的QoS技术中,Linux QoS 被认为是一种简便易行的解决方案。本文将深入探讨Linux QoS的实现机制,帮助读者理解Linux QoS的优势和限制,帮助读者更好地应用Linux QoS技术。 一、Linux QoS的概述 QoS(Quality of Service)质量服务,是一种网络技术,通过对网络流量进行控制和调整,来提高网络的性能。Linux QoS是一种基于Linux内核实现的QoS技术,通过对Linux内核中的网络流量进行分类和控制,来实现各种QoS服务。 Linux QoS技术主要分类为三种: (1)差异化服务(DiffServ),它是一种面向服务质量的网络架构,可提供QoS级别服务,以便在网络中向待分类流提供优先级。当网络拥塞时,这些流的优先级将确定其在网络资源分配中的优先级。该技术通常用于有限带宽情况下的网络。 (2)集成服务(IntServ),它利用公共网络的服务质量特征来提供服务质量。此技术用于高速网络和网络中存在连续保证带宽的应用。在几乎没有拥塞的情况下,该技术会分配足够的带宽给每一个QoS流。 (3) 策略性选择服务(PSS),它是一个以策略为基础的联盟,在一个联盟中的用户可以凭借自己的策略来访问自己所需要的服务。这种技术在企业内部网络中经常使用。 二、Linux QoS的实现方式 Linux QoS的实现方式主要包括三个方面: (1)流量分类 Linux QoS的流量分类是通过将网络中的流量进行分类,并将其放入不同的队列中,这些队列可按照优先级从高到低的顺序进行排列。Linux下的流量分类机制主要有基于 iptables 的流量分类和基于 tc 命令的流量分类。 (2)队列调度 队列调度是Linux QoS中用来调整流量的重要机制之一,其主要目的是对网络流量进行排队、调度和按照一定的策略分配。队列调度可实现不同流量的优先级。 (3)流量控制 流量控制是Linux QoS的最后一个环节,主要用于根据不同应用程序的需求,对流量进行限制、控制。通过流量控制机制,可确保网络的正常运行。 三、Linux QoS的应用 (1)业务分级与限速 通过对网络中的数据流进行分类和限速,可以使得不同的业务拥有不同的优先级,从而降低只负荷造成的瓶颈,实现网络的负载均衡。 (2)视频流优先级 在观看视频时,如果网络带宽不足,会导致视频的像素下降、画面卡顿,用户体验大打折扣。使用Linux QoS技术,对视频流的优先级进行提高,能够使得视频流在带宽不足的情况下仍然能够得到保证。 (3)游戏流优先级 当网络有拥塞情况发生时,游戏可能会因为网络卡顿或丢包而影响游戏体验。通常来说,需要通过提高游戏的流量优先级,让重要数据包优先传输,来保证网络的高质量和行畅。 四、Linux QoS的局限 尽管Linux QoS 在网络带宽管理和流量控制领域有很多优秀的优点,但也存在一些局限性。主要体现在以下几个方面: (1)Linux QoS技术对于新晋管理员使用门槛较高,需要对Linux的网络原理和Linux实现QoS的机制有着更深入的了解。 (2)流量分类对硬件层面有着更高的需求,需要更高速的网路交换机支持,来确保较高级别的服务质量。 结论: Linux QoS 的实现机制及其应用场景是一个极为广泛的话题,随着网络技术的变化和网络性能的需求增加,Linux QoS 技术必然会有新的发展。潜在的研究和应用价值是无限的,我们需要在不断摸索和实践的过程中,不断发现和探讨。 相关问题拓展阅读: 面试 linux 文件系统怎样io到底层 Linux下IPV4和IPV6的互操作性研究 面试 linux 文件系统怎样io到底层 前言:本文主要讲解LinuxIO调度层的三种模式:cfp、deadline和noop,并给出各自的优化和适用场景建议。IO调度发生在Linux内核的IO调度层。这个层次是针对Linux的整体IO层次体系来说的。从read()或者write()系统调用的角度来说,Linux整体IO体系可以分为七层,它们分别是:VFS层:虚拟文件系统层。由于内核要跟多种文件系统打交道,而每一种文件系统所实现的数据结构和相关方法都可能不尽相同,所以,内核抽象了这一层,专门用来适配各种文件系统,并对外提供统一操作接口。文件系统层:不同的文件系统实现自己的操作过程,提供自己特有的特征,具体不多说了,大家愿意的话自己去看代码即可。页缓存层:负责真对page的缓存。通用块层:由于绝大多数情况的io操作是跟块设备打交道,所以Linux在此提供了一个类似vfs层的块设备操作抽象层。下层对接各种不同属性的块设备,对上提供统一的BlockIO请求标准。IO调度层:因为绝大多数的块设备都是类似磁盘这样的设备,所以有必要根据这类设备的特点以及应用的不同特点来设置一些不同的调度算法和队列。以便在不同的应用环境下有针对性的提高磁盘的读写效率,这里就是大名鼎鼎的Linux电梯所起作用的地方。针对机械硬盘的各种调度方法就是在这实现的。块设备驱动层:驱动层对外提供相对比较高级的设备操作接口,往往是C语言的,而下层对接设备本身的操作方法和规范。块设备层:这层就是具体的物理设备了,定义了各种真对设备操作方法和规范。有一个已经整理好的,非常经典,一图胜千言:我们今天要研究的内容主要在IO调度这一层。它要解决的核心问题是,如何提高块设备IO的整体性能?这一层也主要是针对机械硬盘结构而设计的。众所周知,机械硬盘的存储介质是磁盘,磁头在盘片上移动进行磁道寻址,行为类似播放一张唱片。这种结构的特点是,顺序访问时吞吐量较高,但是如果一旦对盘片有随机访问,那么大量的时间都会浪费在磁头的移动上,这时候就会导致每次IO的响应时间变长,极大的降低IO的响应速度。磁头在盘片上寻道的操作,类似电梯调度,实际上在最开始的时期,Linux把这个算法命名为Linux电梯算法,即:如果在寻道的过程中,能把顺序路过的相关磁道的数据请求都“顺便”处理掉,那么就可以在比较小影响响应速度的前提下,提高整体IO的吞吐量。这就是我们为什么要设计IO调度算法的原因。目前在内核中默认开启了三种算法/模式:noop,cfq和deadline。严格算应该是两种:因为之一种叫做noop,就是空操作调度算法,也就是没有任何调度操作,并不对io请求进行排序,仅仅做适当的io合并的一个fifo队列。目前内核中默认的调度算法应该是cfq,叫做完全公平队列调度。这个调度算法人如其名,它试图给所有进程提供一个完全公平的IO操作环境。注:请大家一定记住这个词语,cfq,完全公平队列调度,不然下文就没法看了。cfq为每个进程创建一个同步IO调度队列,并默认以时间片和请求数限定的方式分配IO资源,以此保证每个进程的IO资源占用是公平的,cfq还实现了针对进程级别的优先级调度,这个我们后面会详细解释。查看和修改IO调度算法的方法是:cfq是通用服务器比较好的IO调度算法选择,对桌面用户也是比较好的选择。但是对于很多IO压力较大的场景就并不是很适应,尤其是IO压力集中在某些进程上的场景。因为这种场景我们需要的满足某个或者某几个进程的IO响应速度,而不是让所有的进程公平的使用IO,比如数据库应用。deadline调度(最终期限调度)就是更适合上述场景的解决方案。deadline实现了四个队列:其中两个分别处理正常read和write,按扇区号排序,进行正常io的合并处理以提高吞吐量。因为IO请求可能会集中在某些磁盘位置,这样会导致新来的请求一直被合并,可能会有其他磁盘位置的io请求被饿死。另外两个处理超时read和write的队列,按请求创建时间排序,如果有超时的请求出现,就放进这两个队列,调度算法保证超时(达到最终期限时间)的队列中的请求会优先被处理,防止请求被饿死。不久前,内核还是默认标配四种算法,还有一种叫做as的算法(Anticipatoryscheduler),预测调度算法。一个高大上的名字,搞得我一度认为Linux内核都会算命了。结果发现,无非是在基于deadline算法做io调度的之前等一小会时间,如果这段时间内有可以合并的io请求到来,就可以合并处理,提高deadline调度的在顺序读写情况下的数据吞吐量。其实这根本不是啥预测,我觉得不如叫撞大运调度算法,当然这种策略在某些特定场景差效果不错。但是在大多数场景下,这个调度不仅没有提高吞吐量,还降低了响应速度,所以内核干脆把它从默认配置里删除了。毕竟Linux的宗旨是实用,而我们也就不再这个调度算法上多费口舌了。1、cfq:完全公平队列调度cfq是内核默认选择的IO调度队列,它在桌面应用场景以及大多数常见应用场景下都是很好的选择。如何实现一个所谓的完全公平队列(CompletelyFairQueueing)?首先我们要理解所谓的公平是对谁的公平?从操作系统的角度来说,产生操作行为的主体都是进程,所以这里的公平是针对每个进程而言的,我们要试图让进程可以公平的占用IO资源。那么如何让进程公平的占用IO资源?我们需要先理解什么是IO资源。当我们衡量一个IO资源的时候,一般喜欢用的是两个单位,一个是数据读写的带宽,另一个是数据读写的IOPS。带宽就是以时间为单位的读写数据量,比如,100Mbyte/s。而IOPS是以时间为单位的读写次数。在不同的读写情境下,这两个单位的表现可能不一样,但是可以确定的是,两个单位的任何一个达到了性能上限,都会成为IO的瓶颈。从机械硬盘的结构考虑,如果读写是顺序读写,那么IO的表现是可以通过比较少的IOPS达到较大的带宽,因为可以合并很多IO,也可以通过预读等方式加速数据读取效率。当IO的表现是偏向于随机读写的时候,那么IOPS就会变得更大,IO的请求的合并可能性下降,当每次io请求数据越少的时候,带宽表现就会越低。从这里我们可以理解,针对进程的IO资源的主要表现形式有两个:进程在单位时间内提交的IO请求个数和进程占用IO的带宽。其实无论哪个,都是跟进程分配的IO处理时间长度紧密相关的。有时业务可以在较少IOPS的情况下占用较大带宽,另外一些则可能在较大IOPS的情况下占用较少带宽,所以对进程占用IO的时间进行调度才是相对最公平的。即,我不管你是IOPS高还是带宽占用高,到了时间咱就换下一个进程处理,你爱咋样咋样。所以,cfq就是试图给所有进程分配等同的块设备使用的时间片,进程在时间片内,可以将产生的IO请求提交给块设备进行处理,时间片结束,进程的请求将排进它自己的队列,等待下次调度的时候进行处理。这就是cfq的基本原理。当然,现实生活中不可能有真正的“公平”,常见的应用场景下,我们很肯能需要人为的对进程的IO占用进行人为指定优先级,这就像对进程的CPU占用设置优先级的概念一样。所以,除了针对时间片进行公平队列调度外,cfq还提供了优先级支持。每个进程都可以设置一个IO优先级,cfq会根据这个优先级的设置情况作为调度时的重要参考因素。优先级首先分成三大类:RT、BE、IDLE,它们分别是实时(RealTime)、更佳效果(BestTry)和闲置(Idle)三个类别,对每个类别的IO,cfq都使用不同的策略进行处理。另外,RT和BE类别中,分别又再划分了8个子优先级实现更细节的QOS需求,而IDLE只有一个子优先级。另外,我们都知道内核默认对存储的读写都是经过缓存(buffer/cache)的,在这种情况下,cfq是无法区分当前处理的请求是来自哪一个进程的。只有在进程使用同步方式(syncread或者syncwirte)或者直接IO(DirectIO)方式进行读写的时候,cfq才能区分出IO请求来自哪个进程。所以,除了针对每个进程实现的IO队列以外,还实现了一个公共的队列用来处理异步请求。当前内核已经实现了针对IO资源的cgroup资源隔离,所以在以上体系的基础上,cfq也实现了针对cgroup的调度支持。总的来说,cfq用了一系列的数据结构实现了以上所有复杂功能的支持,大家可以通过源代码看到其相关实现,文件在源代码目录下的block/cfq-iosched.c。1.1cfq设计原理在此,我们对整体数据结构做一个简要描述:首先,cfq通过一个叫做cfq_data的数据结构维护了整个调度器流程。在一个支持了cgroup功能的cfq中,全部进程被分成了若干个contralgroup进行管理。每个cgroup在cfq中都有一个cfq_group的结构进行描述,所有的cgroup都被作为一个调度对象放进一个红黑树中,并以vdisktime为key进行排序。vdisktime这个时间纪录的是当前cgroup所占用的io时间,每次对cgroup进行调度时,总是通过红黑树选择当前vdisktime时间最少的cgroup进行处理,以保证所有cgroups之间的IO资源占用“公平”。当然我们知道,cgroup是可以对blkio进行资源比例分配的,其作用原理就是,分配比例大的cgroup占用vdisktime时间增长较慢,分配比例小的vdisktime时间增长较快,快慢与分配比例成正比。这样就做到了不同的cgroup分配的IO比例不一样,并且在cfq的角度看来依然是“公平“的。选择好了需要处理的cgroup(cfq_group)之后,调度器需要决策选择下一步的service_tree。service_tree这个数据结构对应的都是一系列的红黑树,主要目的是用来实现请求优先级分类的,就是RT、BE、IDLE的分类。每一个cfq_group都维护了7个service_trees,其定义如下:其中service_tree_idle就是用来给IDLE类型的请求进行排队用的红黑树。而上面二维数组,首先之一个维度针对RT和BE分别各实现了一个数组,每一个数组中都维护了三个红黑树,分别对应三种不同子类型的请求,分别是:SYNC、SYNC_NOIDLE以及ASYNC。我们可以认为SYNC相当于SYNC_IDLE并与SYNC_NOIDLE对应。idling是cfq在设计上为了尽量合并连续的IO请求以达到提高吞吐量的目的而加入的机制,我们可以理解为是一种“空转”等待机制。空转是指,当一个队列处理一个请求结束后,会在发生调度之前空等一小会时间,如果下一个请求到来,则可以减少磁头寻址,继续处理顺序的IO请求。为了实现这个功能,cfq在service_tree这层数据结构这实现了SYNC队列,如果请求是同步顺序请求,就入队这个servicetree,如果请求是同步随机请求,则入队SYNC_NOIDLE队列,以判断下一个请求是否是顺序请求。所有的异步写操作请求将入队ASYNC的servicetree,并且针对这个队列没有空转等待机制。此外,cfq还对SSD这样的硬盘有特殊调整,当cfq发现存储设备是一个ssd硬盘这样的队列深度更大的设备时,所有针对单独队列的空转都将不生效,所有的IO请求都将入队SYNC_NOIDLE这个servicetree。每一个servicetree都对应了若干个cfq_queue队列,每个cfq_queue队列对应一个进程,这个我们后续再详细说明。cfq_group还维护了一个在cgroup内部所有进程公用的异步IO请求队列,其结构如下:异步请求也分成了RT、BE、IDLE这三类进行处理,每一类对应一个cfq_queue进行排队。BE和RT也实现了优先级的支持,每一个类型有IOPRIO_BE_NR这么多个优先级,这个值定义为8,数组下标为0-7。我们目前分析的内核代码版本为Linux4.4,可以看出,从cfq的角度来说,已经可以实现异步IO的cgroup支持了,我们需要定义一下这里所谓异步IO的含义,它仅仅表示从内存的buffer/cache中的数据同步到硬盘的IO请求,而不是aio(man7aio)或者linux的native异步io以及libaio机制,实际上这些所谓的“异步”IO机制,在内核中都是同步实现的(本质上冯诺伊曼计算机没有真正的“异步”机制)。我们在上面已经说明过,由于进程正常情况下都是将数据先写入buffer/cache,所以这种异步IO都是统一由cfq_group中的async请求队列处理的。那么为什么在上面的service_tree中还要实现和一个ASYNC的类型呢?这当然是为了支持区分进程的异步IO并使之可以“完全公平”做准备喽。实际上在最新的cgroupv2的blkio体系中,内核已经支持了针对bufferIO的cgroup限速支持,而以上这些可能容易混淆的一堆类型,都是在新的体系下需要用到的类型标记。新体系的复杂度更高了,功能也更加强大,但是大家先不要着急,正式的cgroupv2体系,在Linux4.5发布的时候会正式跟大家见面。我们继续选择service_tree的过程,三种优先级类型的service_tree的选择就是根据类型的优先级来做选择的,RT优先级更高,BE其次,IDLE更低。就是说,RT里有,就会一直处理RT,RT没了再处理BE。每个service_tree对应一个元素为cfq_queue排队的红黑树,而每个cfq_queue就是内核为进程(线程)创建的请求队列。每一个cfq_queue都会维护一个rb_key的变量,这个变量实际上就是这个队列的IO服务时间(servicetime)。这里还是通过红黑树找到servicetime时间最短的那个cfq_queue进行服务,以保证“完全公平”。选择好了cfq_queue之后,就要开始处理这个队列里的IO请求了。这里的调度方式基本跟deadline类似。cfq_queue会对进入队列的每一个请求进行两次入队,一个放进fifo中,另一个放进按访问扇区顺序作为key的红黑树中。默认从红黑树中取请求进行处理,当请求的延时时间达到deadline时,就从红黑树中取等待时间最长的进行处理,以保证请求不被饿死。这就是整个cfq的调度流程,当然其中还有很多细枝末节没有交代,比如合并处理以及顺序处理等等。1.2cfq的参数调整理解整个调度流程有助于我们决策如何调整cfq的相关参数。所有cfq的可调参数都可以在/sys/class/block/sda/queue/iosched/目录下找到,当然,在你的系统上,请将sda替换为相应的磁盘名称。我们来看一下都有什么:这些参数部分是跟机械硬盘磁头寻道方式有关的,如果其说明你看不懂,请先补充相关知识:back_seek_max:磁头可以向后寻址的更大范围,默认值为16M。back_seek_penalty:向后寻址的惩罚系数。这个值是跟向前寻址进行比较的。以上两个是为了防止磁头寻道发生抖动而导致寻址过慢而设置的。基本思路是这样,一个io请求到来的时候,cfq会根据其寻址位置预估一下其磁头寻道成本。设置一个更大值back_seek_max,对于请求所访问的扇区号在磁头后方的请求,只要寻址范围没有超过这个值,cfq会像向前寻址的请求一样处理它。再设置一个评估成本的系数back_seek_penalty,相对于磁头向前寻址,向后寻址的距离为1/2(1/back_seek_penalty)时,cfq认为这两个请求寻址的代价是相同。这两个参数实际上是cfq判断请求合并处理的条件限制,凡事复合这个条件的请求,都会尽量在本次请求处理的时候一起合并处理。fifo_expire_async:设置异步请求的超时时间。同步请求和异步请求是区分不同队列处理的,cfq在调度的时候一般情况都会优先处理同步请求,之后再处理异步请求,除非异步请求符合上述合并处理的条件限制范围内。当本进程的队列被调度时,cfq会优先检查是否有异步请求超时,就是超过fifo_expire_async参数的限制。如果有,则优先发送一个超时的请求,其余请求仍然按照优先级以及扇区编号大小来处理。fifo_expire_sync:这个参数跟上面的类似,区别是用来设置同步请求的超时时间。slice_idle:参数设置了一个等待时间。这让cfq在切换cfq_queue或servicetree的时候等待一段时间,目的是提高机械硬盘的吞吐量。一般情况下,来自同一个cfq_queue或者servicetree的IO请求的寻址局部性更好,所以这样可以减少磁盘的寻址次数。这个值在机械硬盘上默认为非零。当然在固态硬盘或者硬RAID设备上设置这个值为非零会降低存储的效率,因为固态硬盘没有磁头寻址这个概念,所以在这样的设备上应该设置为0,关闭此功能。group_idle:这个参数也跟上一个参数类似,区别是当cfq要切换cfq_group的时候会等待一段时间。在cgroup的场景下,如果我们沿用slice_idle的方式,那么空转等待可能会在cgroup组内每个进程的cfq_queue切换时发生。这样会如果这个进程一直有请求要处理的话,那么直到这个cgroup的配额被耗尽,同组中的其它进程也可能无法被调度到。这样会导致同组中的其它进程饿死而产生IO性能瓶颈。在这种情况下,我们可以将slice_idle=0而group_idle=8。这样空转等待就是以cgroup为单位进行的,而不是以cfq_queue的进程为单位进行,以防止上述问题产生。low_latency:这个是用来开启或关闭cfq的低延时(lowlatency)模式的开关。当这个开关打开时,cfq将会根据target_latency的参数设置来对每一个进程的分片时间(slicetime)进行重新计算。这将有利于对吞吐量的公平(默认是对时间片分配的公平)。关闭这个参数(设置为0)将忽略target_latency的值。这将使系统中的进程完全按照时间片方式进行IO资源分配。这个开关默认是打开的。我们已经知道cfq设计上有“空转”(idling)这个概念,目的是为了可以让连续的读写操作尽可能多的合并处理,减少磁头的寻址操作以便增大吞吐量。如果有进程总是很快的进行顺序读写,那么它将因为cfq的空转等待命中率很高而导致其它需要处理IO的进程响应速度下降,如果另一个需要调度的进程不会发出大量顺序IO行为的话,系统中不同进程IO吞吐量的表现就会很不均衡。就比如,系统内存的cache中有很多脏页要写回时,桌面又要打开一个浏览器进行操作,这时脏页写回的后台行为就很可能会大量命中空转时间,而导致浏览器的小量IO一直等待,让用户感觉浏览器运行响应速度变慢。这个low_latency主要是对这种情况进行优化的选项,当其打开时,系统会根据target_latency的配置对因为命中空转而大量占用IO吞吐量的进程进行限制,以达到不同进程IO占用的吞吐量的相对均衡。这个开关比较合适在类似桌面应用的场景下打开。target_latency:当low_latency的值为开启状态时,cfq将根据这个值重新计算每个进程分配的IO时间片长度。quantum:这个参数用来设置每次从cfq_queue中处理多少个IO请求。在一个队列处理事件周期中,超过这个数字的IO请求将不会被处理。这个参数只对同步的请求有效。slice_sync:当一个cfq_queue队列被调度处理时,它可以被分配的处理总时间是通过这个值来作为一个计算参数指定的。公式为:time_slice=slice_sync+(slice_sync/5*(4-prio))。这个参数对同步请求有效。slice_async:这个值跟上一个类似,区别是对异步请求有效。slice_async_rq:这个参数用来限制在一个slice的时间范围内,一个队列最多可以处理的异步请求个数。请求被处理的更大个数还跟相关进程被设置的io优先级有关。1.3cfq的IOPS模式我们已经知道,默认情况下cfq是以时间片方式支持的带优先级的调度来保证IO资源占用的公平。高优先级的进程将得到的时间片长度,而低优先级的进程时间片相对较小。当我们的存储是一个高速并且支持NCQ(原生指令队列)的设备的时候,我们更好可以让其可以从多个cfq队列中处理多路的请求,以便提升NCQ的利用率。此时使用时间片的分配方式分配资源就显得不合时宜了,因为基于时间片的分配,同一时刻最多能处理的请求队列只有一个。这时,我们需要切换cfq的模式为IOPS模式。切换方式很简单,就是将slice_idle=0即可。内核会自动检测你的存储设备是否支持NCQ,如果支持的话cfq会自动切换为IOPS模式。另外,在默认的基于优先级的时间片方式下,我们可以使用ionice命令来调整进程的IO优先级。进程默认分配的IO优先级是根据进程的nice值计算而来的,计算方法可以在manionice中看到,这里不再废话。2、deadline:最终期限调度deadline调度算法相对cfq要简单很多。其设计目标是:在保证请求按照设备扇区的顺序进行访问的同时,兼顾其它请求不被饿死,要在一个最终期限前被调度到。我们知道磁头对磁盘的寻道是可以进行顺序访问和随机访问的,因为寻道延时时间的关系,顺序访问时IO的吞吐量更大,随机访问的吞吐量小。如果我们想为一个机械硬盘进行吞吐量优化的话,那么就可以让调度器按照尽量复合顺序访问的IO请求进行排序,之后请求以这样的顺序发送给硬盘,就可以使IO的吞吐量更大。但是这样做也有另一个问题,就是如果此时出现了一个请求,它要访问的磁道离目前磁头所在磁道很远,应用的请求又大量集中在目前磁道附近。导致大量请求一直会被合并和插队处理,而那个要访问比较远磁道的请求将因为一直不能被调度而饿死。deadline就是这样一种调度器,能在保证IO更大吞吐量的情况下,尽量使远端请求在一个期限内被调度而不被饿死的调度器。 Linux下IPV4和IPV6的互操作性研究 作为向下一代互联网络协议过渡的重要步骤 国际的IPv 试验网 bone在 年成立扒胡滑了 现在 bone已经扩展到全球 多个国家和地区 成为IPv 研究者 开发者和实践者的主要平台 CERNET国家网络中心于 年 月加入 bone 同年 月成为其骨干网成员 电子科大作为教育网的西南主节点 在得到Nokia的IPv 路由器之后 积极参与IPv 技术研究 我们先查阅研究了大多数与IPv 有关的RFC文档和相关技术资料 并且在此基础上进行了很多网络实验 该文先简单阐述了IPV 的必要性和IPV 到IPV 升级转换的机制 然后详细阐明了在Linux操作系统下进行的IPv 网络实验及其结论 并附有相关参考文献书目     一 使用IPv 的必要性现在运行的因特网协议IPv 存在其固有的局限性 一是地址问题 IPv 的地址只有 位 这意味着总的地址数大约是 亿 并且还有许多地址是不可用的 按照目前网络的发春腊展趋势 到 和 年之间IPv 的地址就会耗尽 必须用另一种地址方案来替代它 二是IPv 提供的服务局限性 IPv...

技术分享

Linux查看网卡命令详解 (linux查网卡命令)

在Linux系统中,网卡是负责网络通信的关键设备,因此经常需要查看网卡的状态以保证网络的稳定与安全。本文将详细介绍几种常用的Linux查看网卡命令,并解释其作用和使用方法。 I. ifconfig命令 ifconfig是Linux系统中一个用于配置网络设备的命令,可以用于查看当前所连接的网卡的各种参数。使用该命令可以查看网卡名称(如eth0、wlan0等)、IP地址、MAC地址、子网掩码等信息。该命令的常用选项有: 1. ifconfig :查看指定网卡(interface)的详细信息。 2. ifconfig -a:查看所有的网络接口(包括未启用的)。 3. ifconfig up :启用指定的网络接口。 4. ifconfig down :关闭指定的网络接口。 II. ip命令 ip是一个网络管理工具,在Linux系统中通常用于配置网络设备、路由表、ARP缓存等。ip命令与ifconfig命令功能重叠,但更为强大。使用该命令可以查看网卡状态、IP地址、MAC地址等信息。该命令的常用选项有: 1. ip link show:查看所有已连接的网络设备信息,包括网卡名称、MAC地址、状态等。 2. ip addr show:查看各个网络设备的IP地址、子网掩码、广播地址等详细信息。 3. ip route show:查看系统的路由表,包括目的地址、网关、网络接口等信息。 III. netstat命令 netstat是一个用于显示网络连接状态和网络统计数据的命令,可以查看已经建立的连接列表、监听的端口、TCP/UDP连接状态等信息。使用该命令可以查看网络接口的状态、IP地址和端口号等信息。该命令的常用选项有: 1. netstat -i:显示网络接口的详细信息,包括接口名称、MAC地址、IP地址、MTU等参数。 2. netstat -r:显示当前路由表信息,包括目标IP地址、网关、网络接口等参数。 3. netstat -a:显示所有已建立的TCP和UDP连接信息,包括本地IP地址、本地端口、远程IP地址、远程端口等。 IV. ethtool命令 ethtool是用于查询和配置以太网接口的命令,提供了网络设备的统计信息、驱动程序状态、速度和双工模式等详细信息。使用该命令可以查看网卡的速率、Duplex模式、流控制设置等参数。该命令的常用选项有: 1. ethtool :查看指定网卡的详细信息,包括速率、Duplex模式、广播地址、资源IRQ等参数。 2. ethtool -S :查看指定网卡的统计信息,包括发送/接收的字节数、数据包数量、丢包数量等参数。 3. ethtool -a :查看指定网卡的流控制状态,包括半双工/全双工、自动协商等参数。 相关问题拓展阅读: linux查看网卡信息的几种方法 Linux查看网卡对应关系的命令: Linux关于网卡的几个命令 linux查看网卡信息的几种方法 1. ifconfig和lspci 2.lspci |grep -i ‘eth’ 或 lspci | grep -i net命令 3. 3.iwconfig :用于查看无线网络,如果你设备上有无线网卡此时可用此命令来查看 4.ethtool -p eth0 Linux查看网卡对应关系的命令: ifconfig –help ifconfig man ifconfig -a , 查看所有网卡的参数,ifconfig 查看活动网卡的信息,ifconfig + 对应的网卡名称,如:ifconfig eth0 ,就是查看eth0这块网卡的参数了 ifconfig emLink encap:Ethernet HWaddr 00:24:e8:61:59:90 inet addr:115.156.170.253 Bcast:115.156.170.255 Mask:255.255.255.0 inet6 addr: fe80::224:e8ff:fe61:5990/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:errors:0 dropped:6 overruns:0 frame:0...

技术分享

Linux系统如何重新获取IP地址? (linux如何重新获取ip地址吗)

在进行网络连接时,IP地址是非常重要的一个参数。如果你的Linux系统出现网络连接不稳定或者无法连接的问题,那么很可能是IP地址出现了问题。在这种情况下,重新获取IP地址是非常重要的一步。本文将介绍如何在Linux系统中重新获取IP地址。 方式一:通过系统命令重新获取IP地址 在Linux系统中,我们可以通过系统命令来重新获取IP地址。步骤如下: 步骤一:打开终端 在系统中打开“终端”应用程序。 步骤二:输入命令 在终端中输入以下命令:sudo dhclient。 步骤三:输入管理员密码 系统会要求输入管理员密码,输入后回车。 这时系统就会开始重新获取IP地址。如果重新获取成功,系统会返回一系列网络信息,提示你的Linux系统已经获得了一个新的IP地址。 方式二:手动设置IP地址 如果你想手动设置IP地址,可以按照以下步骤进行。 步骤一:打开系统设置 在Linux系统中打开“设置”应用程序,找到“网络”选项。 步骤二:选择网络类型 在“网络”页面上,选择你想要修改IP地址的网络类型:有线网络或者Wi-Fi网络。 步骤三:选择网络连接 在选择网络类型之后,找到你想要修改的网络连接,点击“齿轮”图标。 步骤四:手动设置IP地址 在弹出的窗口中,选择“IPv4”选项,选择手动设置IP地址,输入你想要设置的新IP地址,子网掩码和网关地址。如果你不清楚这些参数,可以向网络管理员咨询或者参考在线文档。 设置完毕后,点击“保存”按钮即可。系统会自动应用新的IP地址,如果设置成功,你会收到一个网络连接成功的提示。 重新获取IP地址是解决Linux系统网络连接问题的一种有效方法。通过本文介绍的两种方式,你可以轻松地在Linux系统中重新获取IP地址,保证网络连接畅通。在使用手动设置IP地址的方法时,需要注意参数的正确性,以免无法连接网络。 相关问题拓展阅读: 如何使用Linux命令dhclient 红帽Linux申请DHCP的命令是什么? 如何使用Linux命令dhclient dhcilent  使用动态主机配置协议动态的配置网络接口的网络参数  语法: dhclient (选项)(参数) 选项:    0:指定dhcp客户端监听的端口号;    -d:总是以前台方式运行程序;    -q:安静模式,不打印任何错误的提示信衡族基息    -r:是否IP地址 参数:    穗旅网络接口:操作网络的咐谨接口 实例:     dhclient  -r   // 释放IP     dhclient      // 获取IP     更详细的介绍可参看”Linux命令大全“ Linux重新获取IP使用dhclient命令,使用sudo使其具有管理员权限。命令如下:$sudodhclient-r/缺销/releaseip释放IP$sudodhclient//获伏历游取IPdhclient命令说明dhclient命令使用动态主机配烂顷置协议动态的配置网络接口的网络参数。语法dhclient(选项)(参数)选项0:指定dhcp客户端监听的 端口号 ;-d:总是以前台方式运行程序;-q:安静模式,不打印任何错误的提示信息;-r:释放ip地址。参数网络接口:操作的网络接口。实例dhclient-r#释放IPdhclient#获取IP “Linux重新获取IP使用dhclient命令,使用sudo使其具盯袜有管理员权限。 Linux renew ip command $ sudo dhclient -r /宏蔽/release ip 释放IP $ sudo dhclient //获取IP 更多Linux介绍请查看《Linux命令蔽则州大全》 红帽Linux申请DHCP的命令是什么? 在终端输入setup进入文本界面,选择网渗余络配置,选择eth0,选择DHCP,保存退兄闹出,重启网络, 在羡喊罩终端输入/etc/init.d/network restart Linux下向DHCP申请重新获取IP地址的命令如下: #释放IP dhclient -r //release ip  #重新获取IP dhclient -d 悄码eth0 Now obtain fresh IP: $ sudo dhclient  There  is no need to restart network service. Above command should work with  any Linux distro such as RHEL, Fedora, CentOS, 前物Ubuntu and others. On a  related note you can also 或者使用一下命令,先关启悔哪闭网卡,再启动 ifdown eth0 ifup eth0 /etc/init.d/network restart dhclient -d eth0 试一试 代毕带码改变世侍隐界 (linux常见命令_下),我在腾讯课堂老数厅等你! dhclient – R 网卡设备文件名 linux如何重新获取ip地址吗的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux如何重新获取ip地址吗,Linux系统如何重新获取IP地址?,如何使用Linux命令dhclient,红帽Linux申请DHCP的命令是什么?的信息别忘了在本站进行查找喔。

技术分享

「Linux开发资料一键下载,解决你的所有烦恼」 (linux开发 资料)

Linux开发资料一键下载,解决你的所有烦恼 随着Linux操作系统的日益普及和应用范围的不断扩大,Linux操作系统的开发也变得越来越重要。然而,Linux开发资料的搜索、收集和整理却让许多开发者感到烦恼。这些资料散落在各大网站、论坛、博客等地,费时费力地去查找和下载不仅拖慢了开发进度,还可能导致误解和错误。 为了解决这一难题,开发者们将目光投向了Linux开发资料一键下载这种便捷方式。Linux开发资料一键下载是一个集成了各种Linux开发资料的工具,只需要在下载软件中输入关键词,即可快速扫描所有可能的来源,并为用户提供一个下载页面,用户可以在那里找到所有相关资料、文档和样例代码,从而大大加快了开发和调试过程。 此外,Linux开发资料一键下载还提供了以下优势: 1.减少工作时间和成本 Linux开发资料一键下载涵盖了各种Linux开发资料,包括操作系统、内核、驱动程序、协议栈、工具链、ARM开发等。为开发人员提供一个便捷的方式来查找和获取这些资料,使他们能够更快、更高效地完成他们的工作,减少时间和成本的浪费。 2.提高开发效率 Linux开发资料一键下载建立了一个整合的平台,为开发人员提供一个集中查找以及整理的资料中心。这意味着开发人员可以节省时间和精力,以及避免在完全相同的主题上使用多个来源。 3.更好地建立和共享团队知识 Linux资料一键下载平台是一个有用的工具,可以帮助团队成员合理地实现工作流程。当一个团队的成员发现新的Linux开发资料资源后,可以将其分享给其他成员。这有助于增强团队之间的合作精神,提高团队技术水平,也有利于控制培训成本。 4.提高技术实力 利用Linux开发资料一键下载工具可以用最小的投入获取更大的效益,同时也可以获得Linux开发的最新动态。通过学习这些资料,开发人员可以提高自己的技术实力,并且在工作中迅速升职获得更大的奖励。 Linux开发资料一键下载是开发者们必备的强大工具,能够有效解决搜索、收集和整理烦琐资料的问题,提高工作效率,同时帮助开发人员增强团队精神,进一步提高技术实力。因此,为了提高开发效率和节约时间和成本,Linux开发资料一键下载工具是值得推荐和使用的。 相关问题拓展阅读: 求嵌入式linux开发详细流程(步骤)? 求嵌入式linux开发详细流程(步骤)? 1 嵌入式LINUX开发入门 V1.5 2 华恒对社区的贡献华恒对社区的贡献 本文适用于对嵌入式系统没有概念和经验, 渴望进入嵌入式系统开发的领域, 但又觉得系统太复杂,要学的东西太多, 感觉完全无从学起,无从下手 的 初级开发人员 3 简述简述 1,嵌入式系统必须以实践入门,所以要学习必须购买嵌入式开发系统 (开发板或实验箱),否则永远只能停留在纸上谈兵的阶段. 2,学习嵌入式LINUX开发,必须注意学习的方式和方法!就把这个嵌 入式开发板当作一台WINDOWS PC,就像用VC一样在上面做开发(只是 开发模式由原来完全的本地开发变成宿主机–目标板的模式了). 绝对不要去盲目阅读LINUX内核分析之类的书籍,对于初学者一两年内 根本用不到这个!就像在WINDOWS下开发永远不要关心WINDOWS内核一 个道理,不要因为LINUX内核是源代码开放的,就非要去研究LINUX内 核.90%的开发人员关心的还是”外设接口驱动+应用程序(如GUI)” ,所以对于初学者,进入嵌入式LINUX开发的殿堂,必须迈过如下两个 台阶: 嵌入式基本C程序开发及调试方法 基本驱动的概念和开发调试方法 4 嵌入式开发上手学习大纲嵌入式开发上手学习大纲 安装配置一台REDHAT 9的LINUX PC机.宿主机配置(TFTP/NFS) 参见: 通过终端软件minicom熟悉一下嵌入式系统的基本操作,否则你 根本就不会操作板子! 通过NFS mount的方式,学习用C语言开发最基本的嵌入式应用程 序,并熟悉嵌入式的调试方法.(HHARM9-EDU实验1) 熟悉掌握嵌入式LINUX下的编译方法和技巧,并进一步掌握调试 复杂嵌入式应用程序的方法和技巧.(HHARM9-EDU实验2,3) 通过NFS mount的方式,学习如何使用一个基本的嵌入式LINUX下 的设备驱动(inod驱动+测试用应用程序),并尝试着改改看 如何发生变化和如何调试.(HHARM9-EDU实验6中断, 14GPIO/key,AD/DA,I2C等) 进一步深入学习其它的接口技术.(HHARM9-EDU其它剩余实验) 【注意】 做到这里您一次都不需要烧写FLASH! 5 Tips–再谈学习的方式方法Tips–再谈学习的方式方法 早早安装一台REDHAT 9 LINUX的PC,下面这些必须熟悉了解(因为它将是我 们日后开发更佳的测试伙伴): telnet/ncftp/tar(xzf/czf)/vi/grep/find/NFS/tftp等常用操作;熟悉了解 LINUX系统的文件目录构成(/bin/in/etc/home/dev/usr等的意义,系统搜 索路径PATH因为嵌入式LINUX上和这个完全一样)(关于这些LINUX常用知识 请参见HHARM2410产品技术手册附录B,那里没有无用的抄袭,而是一线研发 人员实际的总结) 大致了解LINUX内核源代码的文件目录的构成(主要就是drivers目录,它是我 们最常打交道的驱动的目录).因为我们对于LINUX下驱动的开发最重要的工 作学习的方法就是:”搜索+模仿”.大家都知道LINUX是开放源代码的,但 其实很多人并没有意识到这个对于我们实际的开发有什么意义.就像面前摆 了一座宝库,但却不知如何去寻宝.我们寻宝的手段就是搜索.对于驱动, LINUX开放的代码(drivers目录+google网络)里面提供了无数常见接口芯片 的驱动代码或模板(如串口serial.c,framebuffer驱动等),我们首先要知道 这些文件在哪个目录下,找到后就是大致读一下,找出与自己实际硬件的差 异,以此为基础修修改改即可.而修改时一个重要的手段就是模仿现有的代 码! 6 Tips–再谈学习的方式方法Tips–再谈学习的方式方法 在嵌入式板卡上做任何稍微复杂些的工作,心里没底的话,就一定养成先在 REDHAT LINUX PC上测试的好习惯.无论你做GPRS/CDMA/PPP/ADSL拨号还是做 USB无线网卡驱动,还是做SAMBA/VPN/SNMP等协议软件,都先在REDHAT LINUX 上配置好,测试通过有了感觉之后再到嵌入式上试,因为ARMLINUX跟REDHAT LINUX对于我们开发人员而言几乎没有任何区别!切忌冒进! 不要试图去通读CPU的manual,没有用的,就像不要为了做嵌入式LINUX就要 通读LINUX内核源代码分析一个道流.以目前实际的工作为主线,涉及到什么 再去大致了解一下相关内容,例如我们第二步要做MODULES形式的驱动,那么 这时去大致翻翻那本《LINUX驱动开发》一书的几页还是会有些帮助的,但也 没有必要全部通读! 7 嵌入式开发模式嵌入式开发模式 【宿主机】 网线 网线 交换机 串口线 HHARM开发板 假设IP为:192.168.2.120 【目标板】 运行RedhatLinux的PC机 假设IP为:192.168.2.2.122 交叉编译 8 之一部分 嵌入式基本C程序开发和调试 9 嵌入式基本C程序开发和调试嵌入式基本C程序开发和调试 10 关于Makefile关于Makefile...

技术分享

掌握Linux Apache地址,轻松搭建高效网站 (linux apche地址)

在当今这个信息爆炸的时代中,网站已经成为人们获取信息、交流沟通的重要平台。而对于网站开发者而言,一个高效、稳定的服务器是其工作的基础。那么如何搭建一台高效的服务器呢?在这里,我们推荐使用Linux Apache服务器,下面就一起来详细探究一下如何在Linux下搭建Apache服务器。 一、安装Linux系统 在服务器硬件准备完毕后,需要先安装Linux系统。这里我们推荐使用CentOS,因为CentOS提供了免费的更新和各种安全性的支持,而且非常稳定。安装CentOS的步骤如下: 1.下载CentOS镜像文件 2.将镜像文件刻录到光盘或者U盘 3.将光盘或者U盘插入服务器,开机 4.按照提示完成安装即可 二、安装Apache 1. 安装Apache 在CentOS中使用以下命令安装Apache: sudo yum install httpd 2. 启动Apache 安装完成后,使用以下命令启动Apache: sudo systemctl start httpd.service 3. 配置防火墙 防火墙通常会阻止外部访问,因此需要配置防火墙规则。使用以下命令添加规则: sudo firewall-cmd –permanent –add-service=http sudo firewall-cmd –permanent –add-service=https sudo firewall-cmd –reload 三、配置虚拟主机 虚拟主机(Virtual Host)用于在同一台服务器上托管多个域名,相互独立。这样可以节省服务器资源,提高站点访问速度。配置虚拟主机有两种方式,一种是基于IP地址的虚拟主机,一种是基于域名的虚拟主机。这里我们推荐基于域名的虚拟主机配置方式。 1. 修改主配置文件 使用以下命令打开主配置文件: sudo vi /etc/httpd/conf/httpd.conf 在文件底部增加以下内容: DocumentRoot “/var/www/html/site” ServerName www.site.com 说明:VirtualHost *:80表示监听所有IP地址的80端口,DocumentRoot “/var/www/html/site”表示网站根目录,ServerName为网站域名。 2. 新建网站目录 在/var/www/html目录下新建网站目录: sudo mkdir /var/www/html/site 3. 将网站文件放到目录中 将网站文件放到刚刚创建的site目录中。 四、配置SSL 在处理敏感数据,如用户密码和信用卡信息时,SSL(Secure Sockets Layer)是必须的。SSL是一种网络协议,用于确保Internet传输安全数据的私密性和完整性。 1. 安装mod_ssl 使用以下命令安装mod_ssl: sudo yum install mod_ssl 2. 配置ssl.conf 打开ssl.conf文件并进行必要的更改: sudo vi /etc/httpd/conf.d/ssl.conf 找到以下两行并取消注释: SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 3. 重启Apache 重启Apache服务以使更改生效: sudo systemctl restart httpd.service 五、 通过上述步骤,我们可以轻松地搭建一台高效且稳定的Linux Apache服务器。值得注意的是,在网站发布之前,确保设置了必要的安全措施,如防火墙、访问控制列表和限制SSH登录等措施。希望这篇文章能够帮助大家更好地掌握Linux Apache服务器的地址,更加轻松地搭建自己的高效网站。 相关问题拓展阅读: linux系统安装apache一定要安装在/usr/local/路径下吗? linux apache配置文件在哪 linux系统安装apache一定要安装在/usr/local/路径下吗? 不需要,这就是一个安装雀胡目录,指到哪就安装到哪个目洞纯录下。和windows一样,软件可以安装到系统盘纳岁咐,也可以安装到其它盘或路径。 linux apache配置文件在哪 一般默认就是/etc/apache2/,/etc/httpd/.不同发型本的叫法不一样路径差不多。 最根本的竖运方法还是用包管理工具去查一下 apache装出来那些文件 dpkg -L apache2 rpm -ql httpd 源代码编译的就在编译目录里,衫纤兄还不懂就去看或袭官方文档 关于linux apche地址的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

技术分享

Linux ELK内存分配问题 (linux elk无法分配内存)

ELK是目前市面上更流行的日志管理系统之一,它由三个组件组成:Elasticsearch、Logstash和Kibana。它们共同构成了一个可拓展的实时日志系统,使得我们可以快速分析海量的数据,并追踪系统的运行情况和异常。不过,随着ELK的应用范围不断扩大,很多用户也开始遇到了内存分配问题。 Linux环境下的内存分配机制具有很大的不确定性,这也是导致ELK内存分配问题的主要原因。因此,在使用ELK的过程中,我们需要合理配置内存大小,以避免因内存不足而产生的问题。 具体来说,ELK系统的内存分配问题表现为以下两种: 1.OutOfMemoryError(内存不足错误) 当ELK系统的内存使用率达到更大值时,就会出现OutOfMemoryError(内存不足错误),导致系统无法正常运行。 解决方法: 我们需要明确一点,OutOfMemoryError并不一定是因为整个系统内存不足所导致的。这种错误可能是由于分配给Java虚拟机的堆内存过小所导致,因此我们需要优先考虑增加堆内存大小来解决内存不足问题。同时,我们还可以尝试通过配置JVM参数来优化ELK的内存使用率,例如,调整垃圾回收机制策略、增加JVM线程池大小等。 2.Swapping(内存交换) ELK系统当中,Java虚拟机与Elasticsearch进程通常运行在同一台机器上,而内存交换则可能会对性能造成巨大的影响。当系统内存不足时,Linux会将程序使用的物理内存通过磁盘虚拟内存的形式换出,这样会导致硬盘I/O的压力增加,从而严重影响系统的响应速度和可用性。 解决方法: 为了避免Swapping,我们需要保证系统运行中的Elasticsearch进程有足够的内存可用,通常情况下,需要将Elasticsearch进程运行在独立的服务器上,以便更好地管理和控制内存分配。同时,我们还可以尝试通过更好的代码和算法优化来减少内存使用率。 总体而言,ELK系统的内存分配问题需要合理配置,以便提高系统的稳定性和可用性。此外,我们还可以根据不同的应用场景来调整系统的内存分配大小,从而更好地发挥其性能优势。 相关问题拓展阅读: ELK应用之Filebeat 如何在CentOS 7上安装Elastic Stack ELK应用之Filebeat Filebeat是本地文件的日志数据采集器,可监控日志目录或特定日志文件(tail file),并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。 官方网址: Filebeat涉及两个组件:查找器prospector和采集器harvester,来读取文件(tail file)并将事件数据发送到指定的输出。 启动Filebeat时,它会启动一个或多个查找器,查看你为日志文件指定的本地让亮路径。对于prospector所在的每个日志文件,prospector启动harvester。每个harvester都会为新内容读取单个日志文件,并将新日志数据发送到libbeat,后者将聚合事件并将聚合数据发送到你为Filebeat配置的输出。 当发送数据到Logstash或Elasticsearch时,Filebeat使用一个反压力敏感(backpressure-sensitive)的协议来解释高负荷的数据量。当Logstash数据处理繁忙时,Filebeat放慢它的读取速度。一旦压力解除,Filebeat将恢复到原来的速度,继续传输数据。 Harvester负责读取单个文件的内容。读取每个文件,并将内容发送到the output,每个文件启动一个harvester, harvester负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。这有副作用,即在harvester关闭之前,磁盘岩滑猛上的空间被保留。默认情况下,Filebeat将文件保持打开状态,直到达到close_inactive状态 关闭harvester会产生以下结果: 1)如果在harvester仍在读取文件时文件被删除,则关闭文件句柄,释放底层资源。 2)文件的采集只会在scan_frequency过后重新开始。 3)如果在harvester关闭的情况下移动或移除文件,则不会继续处理文件。 要控制收割机何时关闭,请使用close_ *配置选项 Prospector负责管理harvester并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。每个prospector都在自己的Go协程中运行。 Filebeat目前支持两种prospector类型:log和stdin。每个prospector类型可以定义多次。日志prospector检查每个文件来查看harvester是否需要启动,是否已经运行,或者该文件是否可以粗桥被忽略(请参阅ignore_older)。 只有在harvester关闭后文件的大小发生了变化,才会读取到新行。 注:Filebeat prospector只能读取本地文件,没有功能可以连接到远程主机来读取存储的文件或日志。 配置文件:$FILEBEAT_HOME/filebeat.yml。Filebeat可以一次读取某个文件夹下的所有后缀名为log的文件,也可以读取指定的某一个后缀名为log的文件。 配置文件详解( ) (1)字段解释 paths: 指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是: /var/log/* /*.log 则只会去/var/log目录的所有子目录中寻找以”.log”结尾的文件,而不会寻找/var/log目录下以”.log”结尾的文件。 encoding: 指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的。 input_type: 指定文件的输入类型log(默认)或者stdin。 exclude_lines: 在输入中排除符合正则表达式列表的那些行。 include_lines: 包含输入中符合正则表达式列表的那些行(默认包含所有行),include_lines执行完毕之后会执行exclude_lines。 exclude_files: 忽略掉符合正则表达式列表的文件(默认为每一个符合paths定义的文件都创建一个harvester)。 fields: 向输出的每一条日志添加额外的信息,比如”level:debug”,方便后续对日志进行分组统计。默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录, fields_under_root: 如果该选项设置为true,则新增fields成为顶级目录,而不是将其放在fields目录下。自定义的field会覆盖filebeat默认的field。 ignore_older: 可以指定Filebeat忽略指定时间段以外修改的日志内容,比如2h(两个小时)或者5m(5分钟)。 close_older: 如果一个文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h。 force_close_files: Filebeat会在没有到达close_older之前一直保持文件的handle,如果在这个时间窗内删除文件会有问题,所以可以把force_close_files设置为true,只要filebeat检测到文件名字发生变化,就会关掉这个handle。 scan_frequency: Filebeat以多快的频率去prospector指定的目录下面检测文件更新(比如是否有新增文件),如果设置为0s,则Filebeat会尽可能快地感知更新(占用的CPU会变高)。默认是10s。 document_type: 设定Elasticsearch输出时的document的type字段,也可以用来给日志进行分类。 harvester_buffer_size: 每个harvester监控文件时,使用的buffer的大小。 max_bytes: 日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。默认是10MB。 multiline: 适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。这个配置的下面包含如下配置: pattern: 多行日志开始的那一行匹配的pattern negate: 是否需要对pattern条件转置使用,不翻转设为true,反转设置为false。 match: 匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志 max_lines: 合并的最多行数(包含匹配pattern的那一行),默认为500行。 timeout: 到了timeout之后,即使没有匹配一个新的pattern(发生一个新的事件),也把已经匹配的日志事件发送出去 tail_files: 如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。 backoff: Filebeat检测到某个文件到了EOF之后,每次等待多久再去检测文件是否有更新,默认为1s。 max_backoff: Filebeat检测到某个文件到了EOF之后,等待检测文件更新的更大时间,默认是10秒。 backoff_factor: 定义到达max_backoff的速度,默认因子是2,到达max_backoff后,变成每次等待max_backoff那么长的时间才backoff一次,直到文件有更新才会重置为backoff。比如:  如果设置成1,意味着去使能了退避算法,每隔backoff那么长的时间退避一次。 spool_size: spooler的大小,spooler中的事件数量超过这个阈值的时候会清空发送出去(不论是否到达超时时间),默认1MB。 idle_timeout: spooler的超时时间,如果到了超时时间,spooler也会清空发送出去(不论是否到达容量的阈值),默认1s。 registry_file: 记录filebeat处理日志文件的位置的文件 config_dir: 如果要在本配置文件中引入其他位置的配置文件,可以写在这里(需要写完整路径),但是只处理prospector的部分。 publish_async: 是否采用异步发送模式(实验功能)。 具体的一个yml采集配置样例如下:该配置文件是filebeat采集数据的依据,并根据需求添加必要配置,filebeat收集日志后发往logstash,配置如下: cd FILEBEAT_HOME  nohup ./bin/filebeat -f config/test.conf >>/FILEBEAT_HOME/logs/filebeat.log & 后台启动filebeat,配置对应的参数 启动多个filebeat配置,新建一个目录(conf)存放多个filebeat的配置文件, #nohup...

技术分享

如何使用Linux PXE搭建网络安装系统? (linux pxe 搭建)

随着计算机网络技术的不断发展和应用,许多公司和个人都选择使用网络安装系统来完成系统的部署和升级。与传统的光盘或U盘安装相比,网络安装无需人工逐一安装操作系统,可以实现自动化、无人值守安装,从而缩短安装时间,提高工作效率。本文介绍如何使用Linux PXE搭建网络安装系统。 一、什么是PXE? PXE是Pre-boot Execution Environment的缩写,即预启动执行环境。它是由Intel公司根据网络上BOOTP协议和TFTP协议设计的一种网络启动方式,可以不依赖操作系统而引导客户端电脑,实现无盘计算机的网络启动和自动安装。 二、PXE的原理 PXE的工作原理可以分为三个步骤: 1.客户端电脑通过网络请求服务器分配IP地址(DHCP) 2.服务器通过TFTP服务器向客户端传输PXE启动文件(pxelinux.0) 3.客户端电脑启动并自动执行PXE启动文件 在这个过程中,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)扮演着非常重要的角色,它为客户端分配IP、子网掩码、网关等信息,让客户端能够连接到网络。而TFTP(Trivial File Transfer Protocol,简单文件传输协议)则用于传输PXE启动文件pxelinux.0,这个文件是PXE启动的核心文件,当客户端电脑启动时,会自动执行该文件,并从中获取系统的安装和配置信息。此外,还需要在TFTP服务器上放置操作系统的ISO镜像文件和相应的配置文件。 三、搭建PXE服务器 1.安装DHCP服务器 在CentOS中安装DHCP服务器的命令为: “` yum install dhcp “` 2.配置DHCP服务器 编辑文件/etc/dhcp/dhcpd.conf,设置DHCP服务器的参数,添加如下内容: “` subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.120; option subnet-mask 255.255.255.0; option routers 192.168.0.1; option broadcast-address 192.168.0.255; default-lease-time 600; max-lease-time 7200; next-server 192.168.0.2; filename “pxelinux.0”; } “` 其中,subnet、range、option等参数请根据实际网络配置进行修改。 3.安装TFTP服务器 在CentOS中安装TFTP服务器的命令为: “` yum install tftp “` 4.配置TFTP服务器 编辑文件/etc/xinetd.d/tftp,设置TFTP服务器的参数,添加如下内容: “` service tftp { socket_type = dgram protocol = udp wt = yes user = root server = /usr/in/in.tftpd server_args = -s /tftpboot disable = no } “` 其中,server_args参数指定TFTP服务器的工作目录为/tftpboot,这个目录需要手动创建,并将PXE启动文件pxelinux.0上传到该目录下。 5.准备ISO镜像文件 需要将需要安装的操作系统的ISO镜像文件上传到服务器上,并解压到合适的目录下。 6.配置PXE启动文件 在服务器的/tftboot目录中,创建一个名为pxelinux.cfg的子目录。再在该子目录中创建一个名为default的文件,用来指定PXE启动文件的参数。 例如,如果要安装CentOS 7操作系统,可以在default文件中添加如下内容: “` default menu.c32 prompt 0 timeout 300 label CentOS 7.4 kernel images/CentOS7/vmlinuz append initrd=images/CentOS7/initrd.img netmedia=eth0 ksdevice=eth0 ks=http://192.168.0.2/ks.cfg “` 其中,menu.c32是PXE启动文件的执行程序,CentOS...

技术分享

isolinux 4.04为何备受关注? (isolinux 4.04 0)

Isolinux 4.04为何备受关注? 在计算机系统中,启动管理是一个非常重要的话题。操作系统需要在计算机启动时加载到内存中,而启动程序负责引导我们的操作系统。在Linux系统中使用的启动程序之一是Isolinux。 Isolinux是一种专门为ISO镜像设计的引导程序。Isolinux 4.04是该工具的最新版本,备受关注,这主要是因为它带来了许多新的功能和改进。 Isolinux 4.04具有更快的启动速度。在旧版本中,启动速度可能会很慢,导致用户的等待时间过长。然而,新版本的Isolinux 4.04通过减少代码大小、改进文件系统管理、升级内核和其他优化,使得启动速度更快,提高了用户体验。 Isolinux 4.04具有更强大的配置选项。在旧版本中,配置选项非常有限,难以实现高级设置。但是,新版本的Isolinux 4.04提供了更多的配置选项,如定制菜单、自定义字体和背景等,可以帮助用户创建更具吸引力的启动界面。 此外,Isolinux 4.04还增加了对新硬件的支持。在过去,操作系统在启动时可能会遇到一些问题,尤其是在新硬件上运行时。这通常是由于旧版的软件无法识别新硬件而导致的。但是,新版的Isolinux 4.04支持更多的硬件,能够运行在更广泛的设备上,也更能满足用户的需求。 Isolinux 4.04还提供了更好的可移植性。在旧版本中,Isolinux可能只能在特定硬件或操作系统上运行。但是,新版的Isolinux 4.04可以在多个平台上运行,并能够与许多不同环境兼容,这为用户提供了更大的灵活性和便利性。 Isolinux 4.04是一种非常值得关注的工具。它带来了许多新的功能和改进,比旧版本更加强大和灵活。这对于用户来说是一个好消息,因为Isolinux 4.04改善了用户的体验,并且为用户提供了更多的可能性。相信随着时间的推移,Isolinux的功能还将不断得到扩展和完善。 相关问题拓展阅读: 怎么使得pxe服务器和客户机在同一个局域网 怎么使得pxe服务器和客户机在同一个局域网 要使得pxe服务器和客户机在同一个局域迹烂掘网可以按照一下方法 PXE无人值守安装操作历裤系统: 需要一台服务器作为boot server就可以了,可以实现批量,自动安装操作系统。 实验环境:boot server:192.168.4.7 以下是实验步骤与说明: 一、搭建DHCP服务姿核 dhcp服务端端口:67 DHCP概述及原理 Dynamic Host Configuration Protocol – 动态主机配置协议,由IETF(Internet 网络工程师任 务小组)组织制定,用来简化主机地址分配管理 主要分配以下入网参数 –IP地址/子网掩码/广播地址 – 默认网关地址、DNS服务器地址 –PXE引导设置(TFTP服务器地址、 1,配置IP地址(网关写自己的IP就可以了) 重新挂载光盘  2,yum安装ftp 目的就是为了上传下载迟姿 boot 文件 yum -y install vsftpd 登录后复制 3,安装tftp插件: yum -y install tftp-server tftp xinetd 登录后复制 4,修改tftp配置文件 vim /etc/xinetd.d/tftp 默认不允许tftp开启 改为no no 是开启 登录后复制 5,启用xinetd 在启用 tftp systemctl start xinetd systemctl start tftp 登录后复制 6,安装dhcp,以及编辑dhcp文件 yum -y install dhcp cp -p /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf vim /etc/dhcp/dhcpd.conf 登录后复制 行下面,箭头所指的方向是要编写的内容   重启DHCP: systemctl restart dhcpd 7,创建一个目录,在ftp目录下 mkdir /var/ftp/ygz 将光盘复制一份到ftp刚新建的目录下面(复制过程有点长,耐心等待) cp -rf /media/* /var/ftp/ygz/ 登录后复制 8,进入pxe引导文件 cd /media/images/pxeboot/ cp vmlinuz initrd.img /var/lib/tftpboot/ cp /media/isolinux/boot.msg /var/lib/tftpboot/...

技术分享

Linux中SSH代理:保护您的连接和认证。 (linux ssh agent)

Linux中SSH代理:保护您的连接和认证 在今天的数字时代,数据的安全性显得尤为重要。其中,网络连接和认证的安全性尤为突出。在Linux操作系统中,使用SSH代理是一种可靠的安全策略,可以有效地保护您的网络连接和认证信息。本文将介绍SSH代理的原理、使用方法和注意事项,帮助您更好地保障您的网络安全。 SSH代理的原理 在Linux中,SSH代理通常指运行在本地计算机上的SSH客户端,通过加密安全通道的方式,将本地计算机与远程计算机之间的流量转移至代理服务器上进行处理和跳转。多数情况下,SSH代理服务器位于远程计算机上。由于SSH协议的加密特性,使用SSH代理的网络连接将经过加密通道,无法被中间人窃取,保证了网络连接的机密性。 甚至在运行SSH代理的客户端上也可以确保您的网络认证信息的安全性。因为SSH代理客户端可以选择在本地计算机上生成一个公钥/私钥对,然后使用这个密钥来认证在跳转之间涉及到的连接。这种连接加密方式称为基于密钥的连接认证。换句话说,你不再需要输入密码,通过在 SSH 客户端上生成密钥对,并将公钥复制到服务器端的授权文件中,您就可以在网络连接中安全地进行身份认证。 SSH代理的使用方法 打开终端,运行以下命令即可启动SSH代理: “` ssh -D username@remotehost “` 其中,“为指定本地代理服务器使用哪个端口,通常可以设置为1080;`username@remotehost`表示SSH代理服务器的用户名和远程主机IP地址。 在启动SSH代理之后,用户可以使用各种网络应用程序,如浏览器、FTP客户端和电子邮件客户端等,将这些网络连接转发到代理服务器上,以访问远程资源。 在配置SSH代理之前,您需要修改部分系统设置: 1. 在终端中执行以下命令打开SSH代理: “` ssh -D username@remotehost “` 2. 为 SSH 代理配置系统代理: “` export http_proxy=”socks5://localhost:” export https_proxy=”socks5://localhost:” “` 在这两个命令中,“为代理服务器启动使用的端口,分别代表HTTP和HTTPS的代理。 使用SSH代理时需要注意以下几点: 1. 避免不必要的嗅探和跟踪:可以通过使用HTTPS或VPN来代替HTTP访问,防止嗅探和跟踪。 2. 避免流量管理:SSH网关可以具有限制流量的选项。确保在需要时使用流量优化设置。 3. 防止连接中断:使用SSH代理后,可能会出现代理连接意外中断的情况。在这种情况下,您可以使用autossh命令自动重启SSH代理。 4. 避免干扰其他网络应用程序:使用SSH代理后,可能会影响其他网络应用程序的使用,如终端FTP客户端等。如果您需要使用其他网络应用程序,更好禁用SSH代理服务。 结论 相关问题拓展阅读: windows 命令行配置linux免密登录 ssh 的sshd开了 ssh-agent没开 SSH多种远程登录方法 windows 命令行配置linux免密登录 不得不说,免密登录确实很方便 使用配置公钥秘钥 这个网上其实很多资料, 首先在服务器执行ssh-kegen,一路回车 或ssh-keygen -t rsa -C ” “ 完成后会在、root/.ssh下生产公钥秘钥文件 将公钥追加到authorized_keys cat rsa_pub>>authorized_keys 将秘钥复制到本地, 找到puttygen来生成ppk文件 打开puttygen,点击load,选择所有文件, 选择 id_rsa文件,Save private key,保存秘钥 然后登录页面选择这个秘钥文件就可以,后面登录就不用了再输入密码了 win10现在貌似已经默认安装了openshh,可以直接差迹用来ssh登录 也可以配置成免密登录 win10命令行执行ssh-keygen生成公钥以及秘钥 公钥放到服务器目录root/.ssh,和1一样的方式 生成的时候如果选择不是默认目录,则需要添加下秘钥 管理员身份打开powershell 执行下列命令 cd 到秘钥所在路径 get-service ssh-agent| set-servers-startuptype manaul startservices sshagent get-servcies sshagent ssh-add s_sra power shell也要深入学习下晌裤了,很多有用的功能 然后,执虚谨并行ssh 直接就可以登录到服务器了, 做个bat或ps1脚本,把ssh这句写入,就可以实现双击直接登录了, ssh 的sshd开了 ssh-agent没开 我的系统上也没有这个ssh-agent这个进程,ssh-agent是用作私钥认证才有的。 SSH多种远程登录方法 使用 SSH 登录服务郑扒器有两种方法: 用户账号登录 和 使用公钥登录 直接使用以下命令 另外可以配置唤肢主机别名,这个和 使用公钥登录 差不多,区别是无需指定公钥地址而已,这里就不重复了。 方法一:(在命令行中指定私钥文件) 方法二:(使用 ssh-agent 代理) 方法三:(在...

技术分享

深入剖析Linux内核防火墙源代码 (linux内核防火墙源代码分析)

Linux内核中的防火墙是我们经常听到的一个概念。在实际应用中,防火墙可以实现诸如过滤数据包、记录日志、控制访问等作用。Linux内核防火墙作为Linux操作系统的一个重要组成部分,其源代码具有一定的复杂性和深度,在此我们将对其源代码进行深入剖析。 Linux内核防火墙的基础是网络包过滤,这需要借助Linux内核中的一些工具来操作网络数据包。通过查阅Linux内核源代码及其配套文档,我们可以了解到网络数据包在Linux内核中的数据结构定义、处理逻辑及处理过程中涉及到的函数等。在此,我们需要掌握的知识点包括网络数据包的结构、网络协议的基本概念、数据包过滤流程等。 在Linux内核防火墙中,过滤数据包是其最为基本的功能之一。在过滤数据包的过程中,分类标准包括数据包协议类型、源IP地址、目的IP地址、源端口号、目的端口号等内容。过滤时可以采用的方法有基于规则、基于状态、基于连接等。这里需要注意的是,对于用户空间的应用程序而言,需要采用特殊的接口调用来操作内核防火墙,这些接口会自动调用内核中的防火墙框架,完成数据包过滤等操作。 此外,Linux内核防火墙还可以实现日志记录的功能,在一些特殊情况下,可以对网络数据包进行详细的记录和跟踪。在日志记录实现过程中,需要注意日志记录的位置及记录识别等问题,这有助于日后的故障排查或安全审计。 在Linux内核防火墙赋予了一些基于模块化的扩展能力。这些模块可根据需要进行加载或卸载,从而实现对内核的个性化定制。在模块化的设计思想下,每个模块都可以对内核维护的某一部分进行扩展,这些模块可以放置在内核源码树中的任何位置。 对Linux内核防火墙的源代码进行深入剖析,可以更好地理解其内部实现原理及核心源代码逻辑,有助于开发者在实际应用中更好地了解防火墙的功能和特性,同时对于安全运维人员来说,了解内核防火墙源代码也有助于提高安全意识和技能,更好地维护系统安全和稳定。 相关问题拓展阅读: 求嵌入式linux开发详细流程(步骤)? 求嵌入式linux开发详细流程(步骤)? 1 嵌入式LINUX开发入门 V1.5 2 华恒对社区的贡献华恒对社区的贡献 本文适用于对嵌入式系统没有概念和经验, 渴望进入嵌入式系统开发的领域, 但又觉得系统太复杂,要学的东西太多, 感觉完全无从学起,无从下手 的 初级开发人员 3 简述简述 1,嵌入式系统必须以实践入门,所以要学习必须购买嵌入式开发系统 (开发板或实验箱),否则永远只能停留在纸上谈兵的阶段. 2,学习嵌入式LINUX开发,必须注意学习的方式和方法!就把这个嵌 入式开发板当作一台WINDOWS PC,就像用VC一样在上面做开发(只是 开发模式由原来完全的本地开发变成宿主机–目标板的模式了). 绝对不要去盲目阅读LINUX内核分析之类的书籍,对于初学者一两年内 根本用不到这个!就像在WINDOWS下开发永远不要关心WINDOWS内核一 个道理,不要因为LINUX内核是源代码开放的,就非要去研究LINUX内 核神知.90%的开发人员关心的还是”外设接口驱动+应用程序(如GUI)” ,所以对于初学者,进入嵌入式LINUX开发的殿堂,必须迈过如下两个 台阶: 嵌入式基本C程序开发及调试方法 基本驱动的概念和开发调试方法 4 嵌入式开发上手学习大纲嵌入式开发上手学习大纲 安装配置一台REDHAT 9的LINUX PC机.宿主机配置(TFTP/NFS) 参见: 通过终端软件minicom熟悉一下嵌入式系统的基本操作,否则你 根本就不会操作板子! 通过NFS mount的方式,学习用C语言开发最基本的嵌入式应用程 序,并熟悉嵌入式的调试方法.(HHARM9-EDU实验1) 熟悉掌握嵌入式LINUX下的编译方法和技巧,并进一步掌握调试 复杂嵌入式应用程序的方法和技巧.(HHARM9-EDU实验2,3) 通过NFS mount的方式,学习如何使用一个基本的嵌入式LINUX下 的设备驱动(inod驱动+测试用应用程序),并尝试着改改看 如何发生变化和如何调试.(HHARM9-EDU实验6中断, 14GPIO/key,AD/DA,I2C等) 进一步深入学习其它的接口技术.(HHARM9-EDU其它剩余实验) 【注意】 做到这里您一次都不需要烧写FLASH! 5 Tips–再谈学习的方式方法Tips–再谈学习的方式方法 早早安装一台REDHAT 9 LINUX的PC,下面这些必须熟悉了解(因为它将是我 们日后开发更佳的测试伙伴): telnet/ncftp/tar(xzf/czf)/vi/grep/find/NFS/tftp等常用操作;熟悉了解 LINUX系统的文件目录构成(/bin/in/etc/home/dev/usr等的意义,系统搜 索路径PATH因为嵌入式LINUX上和这个完全一样)(关于这些LINUX常用知识 请参见HHARM2410产品技术手册附录B,那里没有无用的抄袭,而是一线研发 人员实际的总结) 大致了解LINUX内核源代码的文件目录的构成(主要就是drivers目录,它是我 们最常打交道的驱动的目录).因为我们对于LINUX下驱动的开发最重要的工 作学习的方法就是:”搜索+模仿”.大家都知道LINUX是开放源代码的,但 其实很多人并没有意识到这个对于我们实际的开发有什么意义.就像面前摆 了一座宝库,但却不知如何去寻宝.我们寻宝的手段就是搜索.对于驱动, LINUX开放的代码(drivers目录+google网络)里面提供了无数常见接口芯片 的驱动代码或模板(如串口serial.c,framebuffer驱动等),我们首先要知道 这些文件在哪个目录下,找到后就是大致读一下,找出与自培滚己实际硬件的差 异,以此为基础修修改改即可.而修改时一个重要的手段就是模仿现有的代 码! 6 Tips–再谈学习的方式方法Tips–再谈学习的方式方法 在嵌入式板卡上做任何稍微复杂些的工作,心里没底的话,就一定养成先在 REDHAT LINUX PC上测试的好习惯.无论你做GPRS/CDMA/PPP/ADSL拨号还是做 USB无线网卡驱动,还是做SAMBA/游中消VPN/SNMP等协议软件,都先在REDHAT LINUX 上配置好,测试通过有了感觉之后再到嵌入式上试,因为ARMLINUX跟REDHAT LINUX对于我们开发人员而言几乎没有任何区别!切忌冒进! 不要试图去通读CPU的manual,没有用的,就像不要为了做嵌入式LINUX就要 通读LINUX内核源代码分析一个道流.以目前实际的工作为主线,涉及到什么 再去大致了解一下相关内容,例如我们第二步要做MODULES形式的驱动,那么 这时去大致翻翻那本《LINUX驱动开发》一书的几页还是会有些帮助的,但也 没有必要全部通读! 7 嵌入式开发模式嵌入式开发模式 【宿主机】 网线 网线 交换机 串口线 HHARM开发板 假设IP为:192.168.2.120 【目标板】 运行RedhatLinux的PC机 假设IP为:192.168.2.2.122 交叉编译 8 之一部分 嵌入式基本C程序开发和调试 9 嵌入式基本C程序开发和调试嵌入式基本C程序开发和调试 10 关于Makefile关于Makefile Makefile就是一个批处理的脚本!通过执行make来调用 EXEC = hello OB = hello1.o...

技术分享