关于linux:飞腾平台固件规范

1 前言本标准实用于基于飞腾处理器的零碎平台,提供了飞腾平台固件的根本要求。本标准实用于基于飞腾平台的服务器、桌面机等设施的布局、设计,可作为测试、选型及验收的根据。 2 定义与缩写2.1 定义和术语2.1.1 固件固化到计算机中的非易失性存储器中的一组程序或软件,为计算机提供最根本的硬件初始化,还可能向下层软件提供底层硬件的拜访接口或服务。 2.1.2 UEFI对立可扩大固件接口(Unified Extensible Firmware Interface),是以后利用宽泛的一种固件接口标准。 2.1.3 ACPI高级配置与电源接口(Advanced Configuration and Power Interface),是以后利用宽泛的一种固件接口标准,对系统资源进行形容,并提供电源治理等运行时服务。 2.1.4 BIOS根本输入输出零碎(Basic Input/Output System)是计算机中的一种固件,是操作系统和计算机平台硬件之间连贯的一个桥梁,负责计算机开机时的硬件检测、设施初始化、操作系统疏导并向操作系统提供服务接口。 2.1.5 SMBIOS系统管理BIOS(System Management BIOS),是以后利用宽泛的一种固件接口标准,以数据结构模式对系统资源进行形容。 2.1.6 BMC基板治理控制器(Baseboard Management Controller),是部署于服务器主板上的具备独立供电、独立I/O接口的管制单元,具备独立网络端口,可被近程拜访,能够实现近程监控服务器运行状态、近程电源治理、KVM over IP等性能。 2.1.7 EC嵌入式控制器(EmbeddedController),是部署在计算机平台上的管制单元,反对与处理器之间的通信接口,能够实现计算机的电源治理、外设治理、状态监控等性能。 2.1.8 PSPA飞腾平安平台架构(Phytium Security Platform Architecture),是飞腾提出的面向平安处理器的软硬件标准。 2.1.9 RAID虚拟盘应用RAID(Redundant Arrays of Independent Disks)技术组合的物理硬盘组称为RAID虚拟盘。 2.1.10 STMM基于ARM架构的Standalone Management Mode服务。 2.1.11 PFDI飞腾固件功耗管理控制派发接口。 2.1.12 SE飞腾系统管理引擎。 2.1.13 RAS可靠性(Reliability)、可用性(Availability)和可服务性(Serviceability)。 2.2 缩写缩略语全称解释A64A64AArch64应用的64位ARM指令集APEIACPI Platform Error InterfaceACPI平台故障接口ESRTEFI System Resource TableEFI系统资源表PBFProcessor Base Firmware处理器根底固件PSCIPower State Coordination Interface功耗状态协同接口PSSIPhytium System Service Interface飞腾零碎服务接口RNGRandom Number Generator随机数生成器SDEISoftware Delegated Exception Interface软件派发异样接口SCPISystem Control and Power Interface系统控制和电源接口SCMISystem Control and Management Interface系统控制和治理接口SoLSerial Over LAN基于LAN之上的串口SMCCCSMC Calling ConventionSMC调用约定TCMTrusted Cryptography Module可信加密模块IPMIIntelligent Platform Management Interface智能平台治理接口ECEmbedded Controller嵌入式控制器SMBIOSSystem Management BIOS系统管理BIOSSTMMStandalone Management Mode独立管理模式PFDIPhytium Firmware Dispatch Interface飞腾固件功耗管理控制派发接口3 固件框架飞腾处理器零碎中,固件视角下的系统软件栈如下图所示,图中虚线局部是可选项,依据处理器个性和用户需要选择性反对。 ...

March 4, 2024 · 1 min · jiezi

关于linux:基于飞腾腾云S2500的Apache部署及调优指南

1 软件介绍Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,能够在大多数计算机操作系统中运行,因为其多平台和安全性被宽泛应用,是最风行的Web服务器端软件之一。它疾速、牢靠并且可通过简略的API扩大,将Perl/Python等解释器编译到服务器中。 Apache源于NCSA httpd服务器,通过屡次批改,成为世界上最风行的Web服务器软件之一。Apache Web服务器领有以下个性: 1)反对最新的HTTP/1.1通信协议2)领有简略而强有力的基于文件的配置过程3)反对通用网关接口4)反对基于IP和基于域名的虚拟主机5)反对多种形式的HTTP认证6)集成Perl解决模块7)集成代理服务器模块8)反对实时监督服务器状态和定制服务器日志9)反对服务器端蕴含指令(SSI)10)反对平安Socket层(SSL)11)提供用户会话过程的跟踪12)反对FastCGI13)通过第三方模块能够反对JavaServlets(援用自https://baike.baidu.com/item/Apache/6265?fr=aladdin)2 环境要求2.1 硬件配置用处型号网络服务器飞腾腾云S2500处理器服务器客户端飞腾腾云S2500处理器服务器2.2 软件版本软件名对应版本httpd2.4.49LuaJIT2.1apr1.7.0apr-util1.6.1pcre8.453 利用部署上面将具体介绍Web利用Apache的搭建步骤,并对其性能进行验证,次要包含如下步骤: 第一步,获取源码; 第二步,编译装置apr; 第三步,编译装置apr-util; 第四步,编译装置pcre; 第五步,编译装置httpd; 第六步,配置httpd端口; 第七步,运行验证。在运行验证时,通过网络服务器启动Apache服务,在客户端应用ab工具进行性能测试,个别地,模仿200用户独特发动20万次网络申请,之后,获取TPS(Requests per second)值。须要留神的是,网络服务器和客户端都须要部署Apache环境。 4 利用调优4.1 调优目标通过调整Apache配置文件来无效地进步Web利用性能。 4.2 调优办法4.2.1 物理绑核应用taskset对apache过程进行绑核,避免过程跨路;操作如下: taskset -c 0-63 /usr/local/httpd-2.4.49/bin/apachectl start 4.2.2 优化httpd.conf批改配置文件httpd.conf内容,次要包含: 1、启动压缩; 2、启用重写; 3、提供文件描述符缓存反对; 4、启用基于URL键的内容动静缓冲(内存或磁盘); 5、启用基于磁盘的缓冲管理器; 6、基于内存的缓冲管理器; 7、屏蔽所有不必要的模块; 8、启动动态文件缓存; 9、容许apache批改或革除传递到cgi或ssi页面的环境变量; 10、禁止依据客户端申请头字段设置环境变量; 11、禁止生成形容服务器状态的页面; 12、启用过滤(应用缓存必须启用过滤模块)。 4.2.3 配置mpm模式Apache提供了多解决模块(MPM),用来绑定到网络端口上,承受申请以及调度子过程解决申请。 模块名阐明Prefork在启动时会预派生多个子过程,每个子过程只有一个线程。不须要放心线程平安问题,然而每个过程都占用系统资源,在解决高并发申请的场景中,会耗费大量的系统资源。Worker每个子过程能生成更多的线程,每个线程都能解决申请。缩小了子过程数以及内存使用量,晋升了服务器的并发能力,但安全性低,不能与不是线程平安的模块一起应用。Event基于Worker模块,但它解决了 keep-alive 场景下,长期被占用的线程的资源节约问题。Event模块会有一个专门的线程治理keep-alive 类型的线程,当有实在申请过去的时候,将申请传递给服务线程,执行结束后,又容许它开释。这样一个线程就能解决几个申请,实现异步非阻塞。MPM模块的加载形式是在httpd.conf中增加下列内容(三者任选其一): LoadModule mpm_event_module modules/mod_mpm_event.so #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so#LoadModule mpm_worker_module modules/mod_mpm_worker.so如果须要调整MPM模块过程细节,则须要在httpd.conf中启用MPM模块配置文件: Include conf/extra/httpd-mpm.conf具体的MPM模块配置文件是httpd-mpm.conf,文件中蕴含以下内容: Prefork MPM模块 默认配置: <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 250 MaxConnectionsPerChild 0 </IfModule> 其中StartServers代表初始化预派生的子过程数,MinSpareServers代表最小闲暇子过程数,MaxSpareServers代表最大闲暇子过程数,MaxRequestWorker代表最大申请数(因为在Prefork MPM模块中一个申请数对应一个子过程,故也能够了解为最大派生子过程数),MaxConnectionsPerChild代表每个过程可解决的申请数(达到目标值后该过程将被杀死,0代表没有限度)。 ...

March 4, 2024 · 1 min · jiezi

关于linux:一款飞腾自研的虚拟化平台软件PhyVirt

1 介绍PhyVirt是一款可间接运行在飞腾平台+国产操作系统的虚拟化平台软件,次要用于在信创环境下装置虚拟机,同时反对桌面交融技术,满足终端虚拟化和利用虚拟化的需要。 用户可在支流的国产零碎(麒麟、统信等)间接运行PhyVirt软件,思考到不同用户应用需要和操作环境的复杂性,平台提供虚拟机和桌面交融两种应用模式。虚拟机模式下可按需创立一个或多个虚拟机,虚拟机反对各种Linux版本和Windows版本,同时反对无缝切换宿主机与虚拟机桌面,极大中央便了运维治理。 在桌面交融模式下,用户通过该平台可在国产操作系统上间接运行原Windows操作系统下各类生态利用,放弃原生的操作体验,保障了用户根本的操作习惯不扭转。 平台提供快照治理、快照主动还原以及虚机数据保留在本地,满足平安需要。 2 运行环境要求2.1 装置phyvirt软硬件要求硬件要求飞腾腾锐D2000/FT-2000/4处理器宿主机操作系统要求麒麟/统信/ubuntu等留神:操作系统内核需降级到反对KVM版本(麒麟自带KVM须要V10 SP1 2303版本及以上,统信需1050V3及以上版本),倡议内存>8G,硬盘>200G。 phyvirt安装包获取,可在飞腾软件平台点击网盘链接获取对应零碎的deb包(麒麟和统信)以及phyvirt·app,下载地址:https://www.phytium.com.cn/developer/ 2.2 装置phyvirt步骤反对运行phyvirt-1.5.×.deb 安装包,一键装置: 装置胜利后点击phyvirt图标界面如下,会显示飞腾利用使能套件许可协定,浏览后无异议点击批准即可进入虚拟机治理界面: 3 新建虚拟机3.1 基于ISO/VHDX文件装置1)增加虚拟机 关上软件后,点击新建虚拟机页面,可手动抉择镜像文件(ISO、VHDX)、或者基于现有的镜像文件(QCOW2)格局,如下图所示: 2)虚拟机配置 设置好虚拟机名称,抉择装置零碎类型,设置虚拟机镜像存储目录,倡议配置cpu个数为6个,内存为8g以上,兼容模式默认抉择开启: 3)配置实现后进入下一步,会主动装置虚拟机: 4)点击CD驱动盘-\>phyvirt-app-v*.exe而后右键以管理员身份运行: 始终点击下一步,批准装置协定: 装置实现界面: 装置实现后,第一次装置驱动会提醒关机,重启后零碎会主动加载驱动程序。 3.2 基于已有镜像(QCOW2文件)创立1)如3.1操作的1)步骤点击基于已有镜像创立按钮,抉择已有的QCOW2文件 2)配置页面与3.1中基于ISO文件创建有所不同,只须要设置好虚拟机名称。和操作系统类型即可,兼容模式默认开启。 3)疾速迁徙虚拟机技巧:如果是迁徙曾经装置好的虚拟机的应用场景,除了导出镜像外,也可间接复制装置好虚拟机的整个文件夹到指定的存储目录,选定好其中的任意qcow2文件后即可疾速启动。 4 用户模式介绍为不便不同用户群里应用PhyVirt,用户模式分为规范模式和简略模式。 规范模式:具备多虚机治理性能,更适宜IT运维人员应用。 简略模式:虚拟机暗藏在后盾,间接应用虚构利用,适宜普通用户应用。 虚构利用性能只针对装置了windows on arm零碎的虚拟机能力应用。装置好组件后,Windows零碎会主动增加一个默认的用户账号:pvuser,用户明码:pvuser。 4.1 规范模式1) 在PhyVirt零碎设置中抉择规范模式,即可应用: 2)抉择好规范模式后,虚拟机应用时主界面会变成虚拟机治理界面: 3)在规范模式中通过虚构利用按钮能够间接进入虚构利用界面(等同于简略模式主界面): 4.2 简略模式4.2.1 我的利用应用我的利用界面须要做一些前期工作 1)在PhyVirt零碎设置中抉择简略模式: 2)在简略模式中能够设置明码,避免普通用户对虚拟机进行额定操作: 3)须要留神的是,应用简略模式,须要提前设置好须要自启的虚拟机(目前只反对windows arm 10/11同时须要在windows外部装置PhyVirt·app): 4)设置实现后应用PhyVirt的主界面会变成: 5)点击我的桌面会呈现虚拟机界面: ...

March 4, 2024 · 1 min · jiezi

关于linux:linux性能监测

背景linux性能监测次要是对于Linux零碎上程序的性能跟踪。 前排提醒: 如果你只想要一个可监测linux性能的工具,并且有可视化的web,并且开源且继续更新,那么你能够查看 Performance Co-Pilot,比拟不错。如果你须要更深刻的理解linux性能监测,或者心愿升高监测所带来的性能耗费,那么能够往下看。 从狭义上讲, linux跟踪零碎由三层组成 信息源对接信息源的追踪框架前端操作界面 信息源(event_sources) 事件源是性能监测的根底,是跟踪数据的起源,跟踪框架运行在内核中,负责数据收集、计数。 信息源次要分为以下三类: 硬件事件动态探针动静探针 1.硬件事件性能监控计数器(PMCs)是处理器上的可编程硬件计数器,用于测量处理器中产生的事件。 PMCs是CPU自带的性能,因而能失去最底层的、用别的伎俩得不到的性能信息,例如只有通过PMC能力测量CPU指令执行的效率、CPU缓存命中率、内存/数据互联和设施总线的利用率,以及阻塞的指令周期等。 因为硬件事件比拟底层的,咱们性能监测的时候,个别很少从此处获取可优化的数据。 2. 动态事件2.1 内核跟踪点(tracepoints)即linux内核源代码中事后定义的跟踪点。 linux源码中,有很多以 trace_ 结尾的函数, 这些都是是linux中预约义好的跟踪点。 int netif_receive_skb(struct sk_buff *skb){ trace_netif_receive_skb_entry(skb); // 调用netif_receive_skb对应的trace event函数 return netif_receive_skb_internal(skb);}如想查看这些 trace_ 结尾的函数, 可到 /sys/kernel/debug/tracing/下查看 2.2 USDT探针USDT探针(User Statically-Defined Tracing)全称是用户级动态定义跟踪,须要在源码中插入 DTRACE_PROBE() 代码,并编译到应用程序中。这里不做详述。 3 动静探针顾名思义,则是指没有当时在代码中定义,但却能够在运行时动静增加的探针(重点是不须要从新编译目标程序)。次要由kprobe(内核探针)和uprobe(用户态探针)组成。 3.1 内核探针kprobeskprobes(Kernel Dynamic Probes)。一种提供内核函数动静跟踪的 Linux 内核技术。 实质: 是在指定的探测点(比方函数的某行, 函数的入口地址和进口地址, 或者内核的指定地址处)插入一组处理程序. 内核执行到这组处理程序的时候就能够获取到以后正在执行的上下文信息。 具体可查看An introduction to KProbes 3.2 用户态探针uprobes一种提供用户级函数动静跟踪的 Linux 内核技术 具体可查看Linux uprobe:用户级动静跟踪 总之,只须要理解信息源次要分为硬件事件,动态探针,动静探针 追踪框架先介绍一下这方面的一个大神:brendangregg, 很多编入内核的追踪框架都有他的奉献。 以下是他画的一张对于 linux 察看性能工具的一张图。 ...

March 3, 2024 · 1 min · jiezi

关于linux:Linuxhow-linux-work第二章-基本命令和目录层次结构

第 2 章 Basic Commands and Directory Hierarchy(根本命令和目录层次结构)This chapter is a guide to the Unix commands and utilities that will be referenced throughout this book. This is preliminary material, and you may already know a substantial amount of it. Even if you think you’re up to speed, take a few seconds to flip through the chapter just to make sure, especially when it comes to the directory hierarchy material in 2.19 Linux Directory Hierarchy Essentials. ...

March 1, 2024 · 57 min · jiezi

关于linux:IPQ9574-QCN9224-QCN9274-What-is-the-throughput-of-WiFi7-cards

IPQ9574 QCN9224 QCN9274: What is the throughput potential of WiFi7 cards?In the realm of WiFi routers, throughput serves as a key determinant of performance. A higher throughput signifies enhanced data transfer rates, enabling seamless connectivity for multiple devices concurrently. This capability proves invaluable for bandwidth-intensive tasks like high-definition video streaming, online gaming, and large file downloads.Routers with high throughput capabilities offer not only stable connections but also expedited wireless transmissions, thereby elevating user experience significantly. Whether accommodating numerous devices or facilitating data-intensive operations, such routers are indispensable for meeting the demands of modern connectivity.Wallys has conducted tests on the throughput of its WiFi7 router, DR9574, and WiFi7 module, DR9274-6G, achieving remarkable speeds of up to 8.9G. Under optimal conditions, throughput may even reach 9G+, approaching the 10G mark. This demonstrates the exceptional performance potential of Wallys' products in providing stable and high-speed wireless connections. ...

February 27, 2024 · 3 min · jiezi

关于linux:虚拟机安装Ubuntu

1 Ubuntu下载Ubuntu下载地址:https://ubuntu.com/download/desktop 2 关上VMware2.1 创立新的虚拟机 2.2 抉择典型 2.3 抉择稍后装置操作系统,而后下一步。 2.4 这里选Linux,以及依据理论抉择Ubuntu,持续下一步 2.5 命名一下虚拟机,以及抉择一下地位,尽量不在系统盘。 2.6 大小依据状况,差不多都行,上面有举荐20,而后单文件,下一步。 2.7 自定义硬件 2.8 抉择下载好的镜像 2.9 而后敞开-》实现 3 而后就可启动虚拟机 3.1 这里能够抉择语言,想学英语,想有英语环境的能够不选中文。而后抉择图中红框。 3.2 如图所示 3.3 如图 3.4图 3.5 选你的地位,如果你在中国,那大家都是上海的 3.6 填写相干信息,记住明码也不必太简单,之后登陆零碎和终端执行命令会用到。 4 期待吧 5 重启后就完了, 到这就根本完结了 6 上面能够调一下软件下载源找到此图标6.1即图中的Download from(图中是曾经抉择好的)6.2 抉择中国的某一个就行,而后chooes Server 6.3 close 这里你有可能看不到close(就像6.1左边画红框的中央),这里须要调节一下屏幕。 原文链接:https://blog.csdn.net/qq_43374681/article/details/129248167

February 23, 2024 · 1 min · jiezi

关于linux:WiFi-6-Routerboard-IPQ5018IPQ6010IPQ6018IPQ8072IPQ8074

Wallys' Wi-Fi 6 Routerboard Offering: A Comprehensive Guide IPQ5018-IPQ6010-IPQ6018-IPQ8072-IPQ8074Wallys, a trailblazer in connectivity solutions, unveils a range of cutting-edge WiFi 6 router boards tailored to meet various requirements. Now, let's explore the intricacies of WiFi 6 router boards and analyze their specifications with informative data sheets.A Quick Overview1.DR5018-IPQ5018 WiFi 6 Routerboard with 2.4GHz and BT5.1 Supporthttps://www.wallystech.com/Routerboard/DR5018-wifi6-Qualcomm-...2.DR6018-IPQ6010 WiFi 6 Routerboard with Dual-Band Supporthttps://www.wallystech.com/Routerboard/DR6018V4-wifi6-Qualcom...3.DR8072-IPQ8072 Dual-Band WiFi 6 Routerboardhttps://www.wallystech.com/Network_Card/DR9274-DB-wifi7-card-...4.DR8074-IPQ8074 WiFi 6 Routerboard with 2.4GHz Supporthttps://www.wallystech.com/Routerboard/DR8074A-HK01-wifi6-Qua...1.DR5018-IPQ5018 WiFi 6 Routerboard with 2.4GHz and BT5.1 SupportThe DR5018 is an enterprise-grade wireless module designed for high-bandwidth applications in challenging environments. Key features include: ...

February 22, 2024 · 3 min · jiezi

关于linux:Linux结构及操作命令一

1、ls / 查看以后零碎下所有目录构造 树状目录构造:以下是对这些目录的解释:/bin:bin是Binary的缩写, 这个目录寄存着最常常应用的命令。/boot:这里寄存的是启动Linux时应用的一些外围文件,包含一些连贯文件以及镜像文件。/dev :dev是Device(设施)的缩写, 该目录下寄存的是Linux的外部设备,在Linux中拜访设施的形式和拜访文件的形式是雷同的。/etc:这个目录用来寄存所有的系统管理所须要的配置文件和子目录。/home:用户的主目录,在Linux中,每个用户都有一个本人的目录,个别该目录名是以用户的账号命名的。/lib:这个目录里寄存着零碎最根本的动静连贯共享库,其作用相似于Windows里的DLL文件。简直所有的应用程序都须要用到这些共享库。/lost+found:这个目录个别状况下是空的,当零碎非法关机后,这里就寄存了一些文件。/media:linux零碎会自动识别一些设施,例如U盘、光驱等等,当辨认后,linux会把辨认的设施挂载到这个目录下。/mnt:零碎提供该目录是为了让用户长期挂载别的文件系统的,咱们能够将光驱挂载在/mnt/上,而后进入该目录就能够查看光驱里的内容了。/opt: 这是给主机额定装置软件所摆放的目录。比方你装置一个ORACLE数据库则就能够放到这个目录下。默认是空的。/proc:这个目录是一个虚构的目录,它是零碎内存的映射,咱们能够通过间接拜访这个目录来获取零碎信息。这个目录的内容不在硬盘上而是在内存里,咱们也能够间接批改外面的某些文件,比方能够通过上面的命令来屏蔽主机的ping命令,使他人无奈ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all/root:该目录为系统管理员,也称作超级权限者的用户主目录。/sbin:s就是Super User的意思,这里寄存的是系统管理员应用的零碎管理程序。/selinux: 这个目录是Redhat/CentOS所特有的目录,Selinux是一个平安机制,相似于windows的防火墙,然而这套机制比较复杂,这个目录就是寄存selinux相干的文件的。/srv: 该目录寄存一些服务启动之后须要提取的数据。/sys: 这是linux2.6内核的一个很大的变动。该目录下装置了2.6内核中新呈现的一个文件系统 sysfs 。sysfs文件系统集成了上面3种文件系统的信息:针对过程信息的proc文件系统、针对设施的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设施树的一个直观反映。当一个内核对象被创立的时候,对应的文件和目录也在内核对象子系统中被创立。/tmp:这个目录是用来寄存一些临时文件的。/usr: 这是一个十分重要的目录,用户的很多应用程序和文件都放在这个目录下,相似于windows下的program files目录。/usr/bin:零碎用户应用的应用程序。/usr/sbin:超级用户应用的比拟高级的管理程序和零碎守护程序。/usr/src:内核源代码默认的搁置目录。/var:这个目录中寄存着在一直裁减着的货色,咱们习惯将那些常常被批改的目录放在这个目录下。包含各种日志文件。/run:是一个临时文件零碎,存储系统启动以来的信息。当零碎重启时,这个目录下的文件应该被删掉或革除。如果你的零碎上有 /var/run 目录,应该让它指向 run。 2、创立新用户 命令:useradd xi -m useradd 是一个命令或程序 xi 用户名 -m 带 - 的参数叫选项,不带的叫实体参数 -m代表为用户xi创立一个主体目录 为用户设置明码 命令:passwd xi 之后间接输出明码 命令行不会显示 最初passwd: 所有的身份验证令牌胜利更新 明码设置胜利 删除用户 命令:userdel -r xi -r作用是将用户的主目录一起删除 批改用户 命令:usermod -m xi 选项有-c -d -m -g -G -s等 新增组: 命令:groupadd group1 向零碎新增了一个新组group1,组GID在零碎已有的根底上加1 命令:groupadd -g 101 group2 向零碎新增一个新组gourp2 并指定组编号为101 命令:chown 变更文件的拥有者(ower) 例:chown daemon test 变更文件夹test账号为daemon 命令:chgrp 变更文件的群组 chgrp -r users test 扭转test文件夹及其所有子文件(夹)的群组为users 命令:chmod 变更文件权限 两种办法:符号法和数字法 ...

February 22, 2024 · 2 min · jiezi

关于linux:QCN9274-QCN6274-IPQ9574What-Does-WiFi-7-Actually-Bring

QCN9274 QCN6274 IPQ9574|What Does Wi-Fi 7 Actually Bring?Amidst the flurry of technical discussions surrounding Wi-Fi 7, let's bypass the intricate details and delve into its tangible benefits. Wi-Fi 7 represents a significant leap forward in data throughput and reliability, promising to transform the connectivity landscape for homes and offices alike. At its core, Wi-Fi 7 aims to address the ever-growing demand for bandwidth in environments teeming with multiple devices vying for connectivity. By optimizing frequency space utilization, Wi-Fi 7 endeavors to minimize latency and maximize data transmission rates. The result? An enhanced user experience marked by smoother connectivity and fewer frustrations. ...

February 21, 2024 · 4 min · jiezi

关于linux:LinuxHow-Linux-Work第一章-大局观GPT翻译

<article class=“article fmt article-content”><h2>第 1 章 大局观</h2><p>At first glance, a modern operating system such as Linux is very complicated, with a dizzying number of pieces simultaneously running and communicating. For example, a web server can talk to a database server, which could in turn use a shared library that many other programs use. But how does it all work? </p><p>乍一看,像Linux这样的古代操作系统非常复杂,同时运行和通信的部件数量令人目迷五色。</p><p>例如,一个Web服务器能够与数据库服务器通信,而后者又能够应用许多其余程序应用的共享库。</p><p>然而这所有是如何工作的呢?</p><p>The most effective way to understand how an operating system works is through abstraction—a fancy way of saying that you can ignore most of the details. For example, when you ride in a car, you normally don’t need to think about details such as the mounting bolts that hold the motor inside the car or the people who build and maintain the road upon which the car drives. If you’re a passenger in a car, all you really need to know is what the car does (transports you somewhere else) and a few basics about how to use it (how to operate the door and seat belt). But if you’re driving a car, you need to know more. You need to learn how to operate the controls (such as the steering wheel and accelerator pedal) and what to do when something goes wrong. </p><p>“理解操作系统工作原理最无效的办法是通过形象” 这是一种十分常见的说法,即您能够疏忽大部分细节。</p><p>例如,当您乘坐汽车时,通常不须要思考固定发动机在汽车外部的螺栓或建造和保护汽车行驶的路线的人员等细节。</p><p>如果您是汽车的乘客,您真正须要晓得的只是汽车的性能(将您运送到其余中央)以及如何应用它的一些基本知识(如如何操作车门和安全带)。</p><p>But if you’re driving a car, you need to know more. You need to learn how to operate the controls (such as the steering wheel and accelerator pedal) and what to do when something goes wrong. </p><p>然而如果您驾驶汽车,您须要理解更多。</p><p>您须要学习如何操作各种管制安装(如方向盘和油门踏板)以及在产生故障时应该怎么做。</p><p>For example, let’s say that the car ride is rough. Now you can break up the abstraction of “a car that rolls on a road” into three parts: a car, a road, and the way that you’re driving. This helps isolate the problem: If the road is bumpy, you don’t blame the car or the way that you’re driving it. Instead, you may want to find out why the road has deteriorated or, if the road is new, why the construction workers did a lousy job. </p><p>例如,假如汽车行驶起来很平稳。当初,您能够将“一辆在路线上行驶的汽车”的形象分为三个局部:汽车、路线和您的驾驶形式。</p><p>这有助于隔离问题:如果路线崎岖不平,您不会嗔怪汽车或您的驾驶形式。</p><p>相同,您可能想要找出路线好转的起因,或者如果路线是新的,为什么施工工人做得不好。</p><p>Software developers use abstraction as a tool when building an operating system and its applications. There are many terms for an abstracted subdivision in computer software, including subsystem, module, and package—but we’ll use the term component in This chapter because it’s simple. When building a software component, developers typically don’t think much about the internal structure of other components, but they do care about what other components they can use and how to use them. </p><p>软件开发人员在构建操作系统及其应用程序时应用形象作为一种工具。</p><p>计算机软件中有许多术语用于示意形象的细分,包含子系统、模块和包,但在本章中咱们将应用组件这个简略的术语。</p><p>在构建软件组件时,开发人员通常不会过多思考其余组件的内部结构,但他们的确关怀能够应用哪些其余组件以及如何应用它们。</p><p>This chapter provides a high-level overview of the components that make up a Linux system. Although each one has a tremendous number of technical details in its internal makeup, we’re going to ignore these details and concentrate on what the components do in relation to the whole system.</p><p>本章概述了形成Linux零碎的组件。</p><p>只管每个组件在其外部结构中有大量的技术细节,但咱们将疏忽这些细节,集中关注组件在整个零碎中的作用。</p><h3>1.1 Levels and Layers of Abstraction in a Linux System(Linux 零碎中的形象层级)</h3><p>Using abstraction to split computing systems into components makes things easier to understand, but it doesn’t work without organization. We arrange components into layers or levels. A layer or level is a classification (or grouping) of a component according to where that component sits between the user and the hardware. Web browsers, games, and such sit at the top layer; at the bottom layer we have the memory in the computer hardware—the 0s and 1s. The operating system occupies most of the layers in between</p><p>应用形象办法将计算零碎拆分为多个组件,能够让事件更容易了解,但如果没有组织,就无奈发挥作用。</p><p>咱们将组件划分为不同的层或级。</p><p>层或级是依据组件在用户和硬件之间的地位对组件进行的分类(或分组)。</p><p>网络浏览器、游戏等位于顶层;底层是计算机硬件中的内存–0 和 1。</p><p>操作系统占据了两头的大部分层</p><p>A Linux system has three main levels. Figure 1-1 shows these levels and some of the components inside each level. The hardware is at the base. Hardware includes the memory as well as one or more central processing units (CPUs) to perform computation and to read from and write to memory. Devices such as disks and network interfaces are also part of the hardware.</p><p>Linux 零碎有三个次要级别。</p><p>图 1-1 显示了这些档次以及每个档次中的一些组件。</p><p>硬件是根底。</p><p>硬件包含内存以及一个或多个用于执行计算和读写内存的中央处理器(CPU)。</p><p>磁盘和网络接口等设施也是硬件的一部分。</p><p>The next level up is the kernel, which is the core of the operating system. The kernel is software residing in memory that tells the CPU what to do. The kernel manages the hardware and acts primarily as an interface between the hardware and any running program</p><p>下一级是<strong>内核</strong>,它是操作系统的外围。</p><p>内核是驻留在内存中的软件,它通知中央处理器该做什么。</p><p>内核治理硬件,次要充当硬件与任何运行程序之间的接口</p><p>Processes—the running programs that the kernel manages—collectively make up the system’s upper level, called user space. (A more specific term for process is user process, regardless of whether a user directly interacts with the process. For example, all web servers run as user processes.)</p><p><strong>过程</strong>–内核治理的运行程序–独特形成了零碎的下层,称为用户空间。</p><p>(过程的一个更具体的术语是用户过程,与用户是否间接与过程交互无关。</p><p>例如,所有网络服务器都作为用户过程运行)。</p><p></p><p>There is a critical difference between the ways that the kernel and user processes run: The kernel runs in kernel mode, and the user processes run in user mode. Code running in kernel mode has unrestricted access to the processor and main memory. This is a powerful but dangerous privilege that allows a kernel process to easily crash the entire system. The area that only the kernel can access is called kernel space</p><p>内核和用户过程运行的形式之间存在着要害的区别:内核在内核模式下运行,而用户过程在用户模式下运行。</p><p>在内核模式下运行的代码能够无限度地拜访处理器和主内存。</p><p>这是一种弱小但危险的特权,容许内核过程轻易地使整个零碎解体。</p><p>只有内核能够拜访的区域称为内核空间。</p><p>User mode, in comparison, restricts access to a (usually quite small) subset of memory and safe CPU operations. User space refers to the parts of main memory that the user processes can access. If a process makes a mistake and crashes, the consequences are limited and can be cleaned up by the kernel. This means that if your web browser crashes, it probably won’t take down the scientific computation that you’ve been running in the background for days</p><p>相比之下,用户模式限度了对内存和平安CPU操作的拜访(通常是一个相当小的子集)。</p><p>用户空间指的是用户过程能够拜访的主内存的局部。</p><p>如果一个过程呈现谬误并解体,结果是无限的,并且能够由内核清理。</p><p>这意味着如果你的网络浏览器解体了,它可能不会影响你在后盾运行了几天的科学计算。</p><p>In theory, a user process gone haywire can’t cause serious damage to the rest of the system. In reality, it depends on what you consider “serious damage,” as well as the particular privileges of the process, because some processes are allowed to do more than others. For example, can a user process completely wreck the data on a disk? With the correct permissions, yes—and you may consider this to be fairly dangerous. There are safeguards to prevent this, however, and most processes simply aren’t allowed to wreak havoc in this manner.</p><p>从实践上讲,一个失控的用户过程不能对系统的其余部分造成重大的毁坏。</p><p>但实际上,这取决于你对“严重破坏”的定义,以及过程的特权,因为有些过程被容许做更多的事件。</p><p>例如,一个用户过程是否齐全毁坏磁盘上的数据?在正确的权限下,是的,你可能认为这相当危险。</p><p>然而,有防护措施来避免这种状况产生,大多数过程并不被容许以这种形式制作凌乱。</p><h3>1.2 Hardware: Understanding Main Memory(硬件:理解主存储器)</h3><p>Of all of the hardware on a computer system, main memory is perhaps the most important. In its most raw form, main memory is just a big storage area for a bunch of 0s and 1s. Each 0 or 1 is called a bit. This is where the running kernel and processes reside—they’re just big collections of bits. All input and output from peripheral devices flows through main memory, also as a bunch of bits. A CPU is just an operator on memory; it reads its instructions and data from the memory and writes data back out to the memory</p><p>在计算机系统的所有硬件中,主存储器可能是最重要的局部。</p><p>以最原始的模式来看,主存储器只是一个用于存储一串0和1的大容器。</p><p>每个0或1被称为一个比特。</p><p>运行的内核和过程都驻留在这里,它们只是一堆比特的汇合。</p><p>所有来自外围设备的输出和输入也都以一串比特的模式通过主存储器流动。</p><p>CPU只是内存上的操作员;它从内存中读取指令和数据,并将数据写回内存。</p><p>You’ll often hear the term state in reference to memory, processes, the kernel, and other parts of a computer system. Strictly speaking, a state is a particular arrangement of bits. For example, if you have four bits in your memory, 0110, 0001, and 1011 represent three different states.</p><p>在波及到内存、过程、内核和计算机系统的其余局部时,你常常会听到“状态”这个术语。</p><p>严格来说,状态是比特的一种特定排列。例如,如果你的内存中有四个比特,0110、0001和1011代表了三种不同的状态。</p><p>When you consider that a single process can easily consist of millions of bits in memory, it’s often easier to use abstract terms when talking about states. Instead of describing a state using bits, you describe what something has done or is doing at the moment. For example, you might say “the process is waiting for input” or “the process is performing Stage 2 of its startup.”</p><p>思考到一个独自的过程在内存中很容易蕴含数百万个比特,当议论状态时,应用形象的术语往往更容易。</p><p>与其应用比特来形容状态,不如形容某个事物在某一时刻所做的或正在做的事件。</p><p>例如,你能够说“该过程正在期待输出”或“该过程正在执行其启动的第二阶段”。</p><blockquote><p>NOTE Because it’s common to refer to the state in abstract terms rather than to the actual bits, the term image refers to a particular physical arrangement of bits.</p><p>留神,因为通常用形象的术语而不是理论的位来援用状态,所以术语“镜像”指的是位的特定物理排列。</p></blockquote><h3>1.3 The Kernel(内核)</h3><p>Why are we talking about main memory and states? Nearly everything that the kernel does revolves around main memory. One of the kernel’s tasks is to split memory into many subdivisions, and it must maintain certain state information about those subdivisions at all times. Each process gets its own share of memory, and the kernel must ensure that each process keeps to its share.</p><p>为什么咱们要议论主存和状态呢?简直内核所做的所有都围绕着主存开展。</p><p>内核的工作之一就是将内存宰割成许多子区域,并且必须始终保护无关这些子区域的某些状态信息。</p><p>每个过程都有本人的内存份额,内核必须确保每个过程都恪守本人的份额。</p><p>The kernel is in charge of managing tasks in four general system areas:</p><p>内核负责管理四大零碎畛域的工作:</p><p>o <strong>Processes</strong>. The kernel is responsible for determining which processes are allowed to use the CPU.<br/>o <strong>Memory</strong>. The kernel needs to keep track of all memory—what is currently allocated to a particular process, <br/>what might be shared between processes, and what is free.<br/>o <strong>Device drivers</strong>. The kernel acts as an interface between hardware (such as a disk) and processes. It’s <br/>usually the kernel’s job to operate the hardware.<br/>o <strong>System calls and support</strong>. Processes normally use system calls to communicate with the kernel.<br/>We’ll now briefly explore each of these areas.</p><ul><li><strong>过程</strong>:内核负责确定哪些过程被容许应用 CPU。</li><li><strong>内存</strong>:内核须要跟踪所有的内存,包含以后调配给特定过程的内存、可能在过程之间共享的内存以及闲暇的内存。</li><li><strong>设施驱动程序</strong>:内核充当硬件(如磁盘)和过程之间的接口。通常,内核负责操作硬件。</li><li><strong>零碎调用和反对</strong>:过程通常应用零碎调用与内核进行通信。</li></ul><p>We’ll now briefly explore each of these areas.</p><p>上面咱们简要探讨一下这些畛域。</p><blockquote><p>NOTE If you’re interested in the detailed workings of a kernel, two good textbooks are Operating System Concepts, 9th edition, by Abraham Silberschatz, Peter B. Galvin, and Greg Gagne (Wiley, 2012) and Modern Operating Systems, 4th edition, by Andrew S. Tanenbaum and Herbert Bos (Prentice Hall, 2014)</p><p>留神:如果你对内核的具体工作原理感兴趣,能够参考以下两本好书:</p><p><strong>《操作系统概念》</strong>(第9版),作者:Abraham Silberschatz、Peter B. Galvin 和 Greg Gagne(Wiley,2012)和</p><p>《<strong>古代操作系统</strong>》(第4版),作者:Andrew S. Tanenbaum 和 Herbert Bos(Prentice Hall,2014)。</p></blockquote><h4>1.3.1 Process Management (流程治理 )</h4><p>Process management describes the starting, pausing, resuming, and terminating of processes. The concepts behind starting and terminating processes are fairly straightforward, but describing how a process uses the CPU in its normal course of operation is a bit more complex. </p><p>过程治理形容了过程的启动、暂停、复原和终止。</p><p>启动和终止过程的概念绝对简略,但形容过程在失常运行过程中如何应用CPU则更为简单。</p><p>On any modern operating system, many processes run “simultaneously.” For example, you might have a web browser and a spreadsheet open on a desktop computer at the same time. However, things are not as they appear: The processes behind these applications typically do not run at exactly the same time.</p><p>在任何古代操作系统上,许多过程“同时”运行。</p><p>例如,你可能同时在桌面电脑上关上一个网页浏览器和一个电子表格。</p><p>然而,事实并非如此:这些应用程序背地的过程通常并不齐全同时运行。</p><p>Consider a system with a one-core CPU. Many processes may be able to use the CPU, but only one process may actually use the CPU at any given time. In practice, each process uses the CPU for a small fraction of a second, then pauses; then another process uses the CPU for another small fraction of a second; then another process takes a turn, and so on. The act of one process giving up control of the CPU to another process is called a context switch.</p><p>思考一个单核CPU的零碎。</p><p>许多过程可能可能应用CPU,但在任何给定工夫只有一个过程实际上在应用CPU。</p><p>实际上,每个过程会应用CPU一小部分工夫,而后暂停;</p><p>而后另一个过程应用CPU一小部分工夫;</p><p>而后又轮到另一个过程,依此类推。</p><p>一个过程将CPU的控制权交给另一个过程的行为被称为上下文切换。</p><p>Each piece of time—called a time slice—gives a process enough time for significant computation (and indeed, a process often finishes its current task during a single slice). However, because the slices are so small, humans can’t perceive them, and the system appears to be running multiple processes at the same time (a capability known as multitasking).</p><p>每个工夫片段(称为工夫片)给予一个过程足够的工夫进行重要的计算(实际上,一个过程通常会在一个工夫片内实现当前任务)。</p><p>然而,因为工夫片十分短,人类无奈感知它们,并且零碎看起来像是同时运行多个过程(这种能力被称为多任务处理)。</p><p>The kernel is responsible for context switching. To understand how this works, let’s think about a situation in which a process is running in user mode but its time slice is up. </p><p>内核负责上下文切换。</p><p>为了了解这是如何工作的,让咱们思考一种状况:一个过程在用户模式下运行,但它的工夫片曾经用完。</p><p>Here’s what happens:</p><p>上面是产生的状况:</p><ol><li>The CPU (the actual hardware) interrupts the current process based on an internal timer, switches into <br/>kernel mode, and hands control back to the kernel.</li><li>The kernel records the current state of the CPU and memory, which will be essential to resuming the process that was just interrupted.</li><li>The kernel performs any tasks that might have come up during the preceding time slice (such as collecting data from input and output, or I/O, operations).</li><li>The kernel is now ready to let another process run. The kernel analyzes the list of processes that are ready to run and chooses one.</li><li>The kernel prepares the memory for this new process, and then prepares the CPU.</li><li>The kernel tells the CPU how long the time slice for the new process will last.</li><li>The kernel switches the CPU into user mode and hands control of the CPU to the process.</li><li>CPU(理论的硬件)依据外部计时器中断以后过程,切换到内核模式,并将控制权交还给内核。</li><li>内核记录CPU和内存的以后状态,这对于复原刚刚被中断的过程是必要的。</li><li>内核执行在前一个工夫片段中可能呈现的任何工作(例如从输入输出(I/O)操作中收集数据)。</li><li>当初内核筹备让另一个过程运行。内核剖析筹备好运行的过程列表并抉择一个过程。</li><li>内核为这个新过程筹备内存,而后筹备CPU。</li><li>内核通知CPU新过程的工夫片继续多长时间。</li><li>内核将CPU切换到用户模式,并将CPU的控制权交给过程。</li></ol><p>The context switch answers the important question of when the kernel runs. The answer is that it runs between process time slices during a context switch.</p><p>上下文切换答复了内核何时运行的重要问题。</p><p>答案是在上下文切换期间,在过程工夫片之间运行。</p><p>In the case of a multi-CPU system, things become slightly more complicated because the kernel doesn’t need to relinquish control of its current CPU in order to allow a process to run on a different CPU. However, to maximize the usage of all available CPUs, the kernel typically does so anyway (and may use certain tricks to grab a little more CPU time for itself).</p><p>在多CPU零碎的状况下,状况变得略微简单,因为内核不须要放弃对以后CPU的控制权以便让一个过程在另一个CPU上运行。然而,为了最大限度地利用所有可用的CPU,内核通常会这样做(并可能应用某些技巧来获取更多的CPU工夫)。</p><h4>1.3.2 Memory Management(内存治理)</h4><p>Because the kernel must manage memory during a context switch, it has a complex job of memory management. The kernel’s job is complicated because the following conditions must hold:</p><p>因为内核在上下文切换期间必须治理内存,所以它的内存管理工作变得复杂。内核的工作简单是因为必须满足以下条件:</p><p>o The kernel must have its own private area in memory that user processes can’t access.<br/>o Each user process needs its own section of memory.<br/>o One user process may not access the private memory of another process.<br/>o User processes can share memory.<br/>o Some memory in user processes can be read-only.<br/>o The system can use more memory than is physically present by using disk space as auxiliary.</p><p>o 内核必须在内存中领有本人的公有区域,用户过程无法访问。<br/>o 每个用户过程须要本人的内存区域。<br/>o 一个用户过程不能拜访另一个过程的公有内存。<br/>o 用户过程能够共享内存。<br/>o 用户过程的某些内存能够是只读的。<br/>o 零碎能够通过应用磁盘空间作为辅助内存来应用超过物理内存的内存。</p><p>Fortunately for the kernel, there is help. Modern CPUs include a memory management unit (MMU) that enables a memory access scheme called virtual memory. When using virtual memory, a process does not directly access the memory by its physical location in the hardware. Instead, the kernel sets up each process to act as if it had an entire machine to itself. When the process accesses some of its memory, the MMU intercepts the access and uses a memory address map to translate the memory location from the process into an actual physical memory location on the machine. The kernel must still initialize and continuously maintain and alter this memory address map. For example, during a context switch, the kernel has to change the map from the outgoing process to the incoming process.</p><p>侥幸的是,对于内核来说,有帮忙可寻。</p><p>古代的CPU包含一个内存治理单元(MMU),它能够实现一种称为虚拟内存的内存拜访计划。</p><p>在应用虚拟内存时,过程不会间接通过硬件中的物理地位来拜访内存。</p><p>相同,内核会为每个过程设置一个好像领有整个机器的环境。</p><p>当过程拜访其某些内存时,MMU会拦挡拜访,并应用内存地址映射将过程的内存地位转换为理论的物理内存地位。</p><p>内核依然必须初始化、继续保护和批改这个内存地址映射。</p><p>例如,在上下文切换期间,内核必须将映射从正在执行的过程切换到行将执行的过程。</p><blockquote><p>NOTE The implementation of a memory address map is called a page table.</p><p>留神 内存地址映射的实现称为页表。</p></blockquote><p>你将在第8章中理解更多对于如何查看内存性能的内容。</p><h4>1.3.3 Device Drivers and Management(设施驱动程序和治理)</h4><p>The kernel’s role with devices is pretty simple. A device is typically accessible only in kernel mode because improper access (such as a user process asking to turn off the power) could crash the machine. Another problem is that different devices rarely have the same programming interface, even if the devices do the same thing, such as two different network cards. Therefore, device drivers have traditionally been part of the kernel, and they strive to present a uniform interface to user processes in order to simplify the software developer’s job.</p><p>内核在设施方面的作用非常简单。设施通常只能在内核模式下拜访,因为不正确的拜访(例如用户过程申请关闭电源)可能会导致系统解体。</p><p>另一个问题是,即便设施执行雷同的性能(例如两个不同的网络卡),它们的编程接口通常也不雷同。</p><p>因而,设施驱动程序始终是内核的一部分,并且它们致力于向用户过程提供对立的接口,以简化软件开发人员的工作。</p><h4>1.3.4 System Calls and Support(零碎调用和反对)</h4><p>There are several other kinds of kernel features available to user processes. For example, system calls (or syscalls) perform specific tasks that a user process alone cannot do well or at all. For example, the acts of opening, reading, and writing files all involve system calls.</p><p>用户过程能够应用几种其余类型的内核性能。例如,零碎调用(或syscalls)执行用户过程无奈很好或根本无法执行的特定工作。例如,关上、读取和写入文件都波及零碎调用。</p><p>Two system calls, fork() and exec(), are important to understanding how processes start up:</p><p>理解过程启动的重要内容是两个零碎调用:fork()和exec():</p><p>o fork() When a process calls fork(), the kernel creates a nearly identical copy of the process.<br/>o exec() When a process calls exec(program), the kernel starts program, replacing the current <br/>process.</p><ul><li>fork() 当一个过程调用fork()时,内核会创立一个简直完全相同的过程正本。</li><li>exec() 当一个过程调用exec(program)时,内核会启动program,并替换以后过程。</li></ul><p>Other than init (see Chapter 6), all user processes on a Linux system start as a result of fork(), and most of the time, you also run exec() to start a new program instead of running a copy of an existing process. A very simple example is any program that you run at the command line, such as the ls command to show the contents of a directory. When you enter ls into a terminal window, the shell that’s running inside the terminal window calls fork() to create a copy of the shell, and then the new copy of the shell calls exec(ls) to run ls. Figure 1-2 shows the flow of processes and system calls for starting a program like ls.</p><p>除了init(参见第6章)之外,Linux零碎上的所有用户过程都是通过fork()启动的,大部分工夫,您也会应用exec()来启动一个新程序,而不是运行现有过程的正本。</p><p>一个非常简单的例子是在命令行中运行的任何程序,比方ls命令来显示目录的内容。</p><p>当您在终端窗口中输出ls时,终端窗口内运行的shell会调用fork()来创立一个shell的正本,而后新的shell正本会调用exec(ls)来运行ls。</p><p>图1-2显示了启动相似ls的程序的过程和零碎调用的流程。</p><p></p><p>Figure 1-2. Starting a new process</p><blockquote><p>NOTE System calls are normally denoted with parentheses. In the example shown in Figure 1-2, the process asking the kernel to create another process must perform a fork() system call. This notation derives from the way the call would be written in the C programming language. You don’t need to know C to understand this book; just remember that a system call is an interaction between a process and the kernel. In addition, this book simplifies certain groups of system calls. For example, exec() refers to an entire family of system calls that all perform a similar task but differ in programming.</p><p>零碎调用通常用括号示意。</p><p>图1-2(上图)所示的例子中,要求内核创立另一个过程的过程必须执行fork()零碎调用。</p><p>这种表示法源于C编程语言中的写法。你不须要理解C语言就能了解本书;只需记住零碎调用是过程和内核之间的交互。</p><p>此外,本书简化了某些零碎调用的组合。例如,exec()指的是一整组执行相似工作但编程不同的零碎调用。</p></blockquote><p>The kernel also supports user processes with features other than traditional system calls, the most common of which are pseudodevices. Pseudo-devices look like devices to user processes, but they’re implemented purely in software. As such, they don’t technically need to be in the kernel, but they are usually there for practical reasons. For example, the kernel random number generator device (/dev/random) would be difficult to implement securely with a user process.</p><p>内核还通过除传统零碎调用之外的性能来反对用户过程,其中最常见的是伪设施。</p><p>伪设施在用户过程看起来像设施,但它们纯正是通过软件实现的。</p><p>因而,它们在技术上不肯定须要在内核中,但通常出于理论起因而存在。</p><p>例如,内核的随机数生成器设施(/dev/random)在用户过程中要实现安全性较艰难。</p><blockquote>NOTE Technically, a user process that accesses a pseudodevice still has to use a system call to open the device, so processes can’t entirely avoid system calls.<br/>留神<br/>从技术上讲,拜访伪设施的用户过程依然须要应用零碎调用来关上设施,因而过程无奈完全避免零碎调用。</blockquote><h3>1.4 User Space(用户空间)</h3><p>As mentioned earlier, the main memory that the kernel allocates for user processes is called user space. Because a process is simply a state (or image) in memory, user space also refers to the memory for the entire collection of running processes. (You may also hear the more informal term userland used for user space.)</p><p>正如之前提到的,内核为用户过程调配的主存被称为用户空间。</p><p>因为过程只是内存中的一个状态(或图像),用户空间也指的是整个运行过程的内存。</p><p>(你也可能听到更非正式的术语“用户空间”用于指代用户空间。)</p><p>Most of the real action on a Linux system happens in user space. Although all processes are essentially equal from the kernel’s point of view, they perform different tasks for users. There is a rudimentary service level (or layer) structure to the kinds of system components that user processes represent. Figure 1-3 shows how an example set of components fit together and interact on a Linux system. Basic services are at the bottom level (closest to the kernel), utility services are in the middle, and applications that users touch are at the top. Figure 1-3 is a greatly simplified diagram because only six components are shown, but you can see that the components at the top are closest to the user (the user interface and web browser); the components in the middle level has a mail server that the web browser uses; and there are several smaller components at the bottom.</p><p>Linux零碎上的大部分真正流动都产生在用户空间。</p><p>尽管从内核的角度来看,所有过程基本上是平等的,但它们为用户执行不同的工作。</p><p>用户过程所代表的零碎组件具备一种根本的服务级别(或档次)构造。</p><p>图1-3展现了一个示例组件集如何在Linux零碎上配合并相互作用。根本服务位于底层(最靠近内核),实用服务位于两头,用户接触的应用程序位于顶层。</p><p>图1-3是一个大大简化的图表,因为只显示了六个组件,但你能够看到顶部的组件最靠近用户(用户界面和网页浏览器);</p><p>中间层有一个邮件服务器供网页浏览器应用;</p><p>底部还有几个较小的组件。</p><p></p><p>Figure 1-3. Process types and interactions</p><p>The bottom level tends to consist of small components that perform single, uncomplicated tasks. The middle level has larger components such as mail, print, and database services. Finally, components at the top level perform complicated tasks that the user often controls directly. Components also use other components. Generally, if one component wants to use another, the second component is either at the same service level or below.</p><p>底层通常由执行繁多、简略工作的小组件组成。</p><p>中层有较大的组件,如邮件、打印和数据库服务。</p><p>最初,顶层组件执行简单的工作,用户通常间接管制。组件还会应用其余组件。</p><p>通常,如果一个组件想要应用另一个组件,第二个组件要么在雷同的服务级别,要么在上面。</p><p>However, Figure 1-3 is only an approximation of the arrangement of user space. In reality, there are no rules in user space. For example, most applications and services write diagnostic messages known as logs. Most programs use the standard syslog service to write log messages, but some prefer to do all of the logging themselves.</p><p>然而,图1-3只是用户空间排列的近似示意。</p><p>实际上,用户空间没有规定。例如,大多数应用程序和服务会写入被称为日志的诊断信息。</p><p>大多数程序应用规范的syslog服务来写入日志音讯,但有些程序更喜爱本人实现所有的日志记录。</p><p>In addition, it’s difficult to categorize some user-space components. Server components such as web and database servers can be considered very high-level applications because their tasks are often complicated, so you might place these at the top level in Figure 1-3. However, user applications may depend on these servers to perform tasks that they’d rather not do themselves, so you could also make a case for placing them at the middle level.</p><p>此外,对于一些用户空间组件很难进行分类。</p><p>像Web和数据库服务器这样的服务器组件能够被认为是十分高级的应用程序,因为它们的工作通常很简单,所以你能够将它们放在图1-3的顶层。</p><p>然而,用户应用程序可能依赖这些服务器来执行他们不违心本人实现的工作,所以你也能够将它们放在中层。</p><h3>1.5 Users(用户)</h3><p>The Linux kernel supports the traditional concept of a Unix user. A user is an entity that can run processes and own files. A user is associated with a username. For example, a system could have a user named billyjoe. However, the kernel does not manage the usernames; instead, it identifies users by simple numeric identifiers called userids. (You’ll learn more about how the usernames correspond to userids in Chapter 7.)</p><p>Linux内核反对传统的Unix用户概念。</p><p>用户是能够运行过程和领有文件的实体。用户与用户名相关联。</p><p>例如,零碎能够有一个名为billyjoe的用户。</p><p>然而,内核不治理用户名,而是通过简略的数值标识符(称为用户ID)来辨认用户。</p><p>(对于用户名如何对应用户ID的更多信息将在第7章中介绍。)</p><p>Users exist primarily to support permissions and boundaries. Every user-space process has a user owner, and processes are said to run as the owner. A user may terminate or modify the behavior of its own processes (within certain limits), but it cannot interfere with other users’ processes. In addition, users may own files and choose whether they share them with other users.</p><p>用户次要存在于反对权限和边界方面。</p><p>每个用户空间过程都有一个用户所有者,并且过程被称为以所有者身份运行。</p><p>用户能够终止或批改本人的过程的行为(在肯定限度内),但不能烦扰其余用户的过程。</p><p>此外,用户能够领有文件,并抉择是否与其余用户共享这些文件。</p><p>A Linux system normally has a number of users in addition to the ones that correspond to the real human beings who use the system. You’ll read about these in more detail in Chapter 3, but the most important user to know about is root. The root user is an exception to the preceding rules because root may terminate and alter another user’s processes and read any file on the local system. For this reason, root is known as the superuser. A person who can operate as root is said to have root access and is an administrator on a traditional Unix system.</p><p>Linux零碎通常除了与真正应用零碎的人绝对应的用户之外,还有一些其余用户。</p><p>您将在第3章中具体理解这些用户,但最重要的用户是root。</p><p>root用户是前述规定的例外,因为root能够终止和批改其余用户的过程,并读取本地零碎上的任何文件。</p><p>因而,root被称为超级用户。</p><p>可能以root身份操作的人被称为具备root拜访权限,并且是传统Unix零碎上的管理员。</p><blockquote><p>NOTE Operating as root can be dangerous. It can be difficult to identify and correct mistakes because the system will let you do anything, even if what you’re doing is harmful to the system. For this reason, system designers constantly try to make root access as unnecessary as possible, for example, by not requiring root access to switch between wireless networks on a notebook. In addition, as powerful as the root user is, it still runs in the operating system’s user mode, not kernel mode.</p><p>留神</p><p>以root身份操作可能是危险的。</p><p>因为零碎容许您执行任何操作,即便这些操作对系统无害,因而很难辨认和纠正错误。</p><p>因而,零碎设计师一直尝试使root拜访尽可能不必要,例如,不要求在笔记本上切换无线网络时须要root拜访权限。</p><p>此外,只管root用户十分弱小,但它仍在操作系统的用户模式下运行,而不是内核模式。</p></blockquote><p>Groups are sets of users. The primary purpose of groups is to allow a user to share file access to other users in a group.</p><p>组是一组用户。</p><p>组的次要目标是容许用户与组中的其余用户共享文件拜访权限。</p><h3>1.6 Looking Forward(展望未来)</h3><p>So far, you’ve seen what makes up a running Linux system. User processes make up the environment that you directly interact with; the kernel manages processes and hardware. Both the kernel and processes reside in memory.</p><p>This is great background information, but you can’t learn the details of a Linux system by reading about it alone; you need to get your hands dirty. The next chapter starts your journey by teaching you some user-space basics. Along the way, you’ll learn about a major part of the Linux system that this chapter doesn’t discuss— long-term storage (disks, files, etc.). After all, you need to store your programs and data somewhere.</p><p>到目前为止,您曾经理解了形成一个运行的Linux零碎的因素。</p><p>用户过程形成了您间接与之交互的环境;内核治理过程和硬件。内核和过程都驻留在内存中。</p><p>这是很好的背景信息,但单靠浏览无奈理解Linux零碎的细节;您须要亲自动手。</p><p>下一章将从传授一些用户空间基础知识开始您的学习之旅。</p><p>在此过程中,您将理解到本章未探讨的Linux零碎的一个重要局部-长期存储(磁盘、文件等)。</p><p>毕竟,您须要将程序和数据存储在某个中央。</p></article> ...

February 11, 2024 · 17 min · jiezi

关于linux:征稿啦第-18-届中国-Linux-内核开发者大会重磅启动

第十八届中国 Linux 内核开发者大会(CLK )如期而至。CLK 以“自在、合作、翻新”为理念,以开源技术的推广和遍及为使命,旨在促成 Linux 内核开发爱好者互相交换,共同进步。 通过组委会公开征集承办单位和各动向承办单位的问难竞选,本届大会的承办方最终确定为 OPPO,往年,咱们打算于 10 月 28 日在广东深圳相聚。 与今年不同的是,本届大会稿件的设置,咱们将采纳公开征稿以及组委会邀请相结合的模式,尽可能丰盛会议主题,让更宽泛的 Linux 内核沉闷开发者参加更热烈的探讨。公开征集稿件环节,将一如今年本着纯技术、非商业的准则,向宽广内核爱好者征稿。组委会邀约稿件环节,CLK 导师团将全面剖析 2023 年 Linux 社区的沉闷主题,向相干沉闷开发者通过组委会邮箱收回邀请函。 如下为公开征集稿件环节的阐明。征稿主题演讲主题围绕 Linux 内核开展,承受稿件波及的技术畛域包含但不限于: Linux 与硬件架构的联合(RISC-V,ARM64,X86,LoongArch等)调度与 Linux 实时性内存治理存储与文件系统网络容器与虚拟化微内核与 Linux 内核的联合异构零碎下的 Linux性能、功耗优化测试与动态剖析Profiling/Debugging/Tracing 技术咱们同时也欢送波及 Linux 内核在 IoT、Android 与挪动设施、车载、云、AI 等利用场景深度优化的稿件。 征稿工夫征稿凋谢工夫:2023 年 9 月 22 日 征稿截止工夫:2023 年 10 月 10 日 征稿要求严格依照征稿工夫提交相干内容。 征稿初期,须要提供作者简介(不少于 150 字)、 稿件的题目和内容简介(不超过 500 字),不须要提供残缺的文稿。 通过评比的社区演讲者,须要提供 PPT 演讲资料。 投稿形式请将稿件电子版投送至 E-mail:clk_committee@126.com。 如下为组委会邀请稿件环节的阐明。邀稿工夫组委会收回邀请:2023 年 10 月 12 日或之前 受邀讲师回答截止工夫:2023 年 10 月 15 日 ...

September 27, 2023 · 1 min · jiezi

关于linux:Linux安装Jenkins配置Android构建环境

在挪动端DevOps流构建环节中,咱们通常会采纳服务器Jenkins进行Android/iOS打包测试、灰度、上线生产等集成操作,以下是Mac终端连贯近程Linux装置Jenkins并配置Android构建环境关键步骤记录,能够在实践中作为参考 1.连贯近程Linux服务器通过Mac终端运行上面命令<ssh root@ip地址>ssh root@00.000.00.00 会提醒 :The authenticity of host '00.000.00.00 (00.000.00.00)' can't be established.ECDSA key fingerprint is SHA256:CjvSLfRn/IeKE6O0+y/6XERGt1m6AHiHRgX76U/W+3E.Are you sure you want to continue connecting (yes/no/[fingerprint])? 示意意思:无奈确认host主机的真实性,只晓得它的公钥指纹,问你还想持续连贯吗?所谓"公钥指纹",是指公钥长度较长(这里采纳RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比拟,就容易多了。很天然的一个问题就是,用户怎么晓得近程主机的公钥指纹应该是多少?答复是没有好方法,近程主机必须在本人的网站上贴出公钥指纹,以便用户自行核查。假设通过危险掂量当前,用户决定承受这个近程主机的公钥 输出 yes ,会提醒 : Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts ,示意host主机曾经失去认可,此时输出明码xxxxxxx 如果明码正确,就能够登录了。当近程主机的公钥被承受当前,它就会被保留在文件$HOME/.ssh/known_hosts之中。下次再连贯这台主机,零碎就会认出它的公钥曾经保留在本地了,从而跳过正告局部,间接提醒输出明码。每个SSH用户都有本人的known_hosts文件,此外零碎也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保留一些对所有用户都可信赖的近程主机的公钥 2.更新CentOS 7 零碎通过Mac终端运行上面命令sudo yum install epel-releasesudo yum updatesudo reboot3.装置OpenJDK通过Mac终端运行上面命令sudo yum install java-1.8.0-openjdk.x86_64java -versionsudo vim ~/.bash_profileJAVA_HOME=/usr/local/java-1.8.0-openjdk.x86_64PATH=$JAVA_HOME/tools:$PATHexport JAVA_HOMEexport PATHsource ~/.bash_profile4.装置wget命令通过Mac终端运行上面命令sudo yum -y install wget5.通过Linux服务器查看文件门路通过Mac终端运行上面命令whereis javawhich javaecho $JAVA_HOMEecho $PATH6.装置Android sdk下载地址 http://tools.android-studio.org/index.php/sdk/ ...

September 25, 2023 · 1 min · jiezi

关于linux:Linux系统编程训练营9Linux-进程层次分析

详解 Linux 过程组每个过程都有一个过程组号 (PGID) 过程组:一个或多个过程的汇合(汇合中的过程并不孤立)过程组中的过程通常存在父子关系,兄弟关系,或 性能相近过程组可不便过程治理(如:同时杀死多个过程,发送一个信号给多个过程) 每个过程必然属于一个过程组,也只能属于一个过程组过程除了有 PID 外,还有 PGID (惟一,可变,即某一个过程能够切换过程组)每个过程组有一个过程组长,过程组长的 PID 和 PGID 雷同> ps -o pgid 19843PGID 977> kill -- -977pid_t getpgrp(void); // 获取以后过程的组标识pid_t getpgid(pid_t pid); // 获取指定过程的组标识int setpgid(pid_t pid, pid_t pgid); // 设置过程的组标识 pid == pgid, 将 pid 指定的过程设为组长pid == 0, 设置以后过程的组标识为 pgidpid == 0,将 pid 设置为组标识 (行将 pid 所代表的过程设置为过程组长)过程组示例程序默认状况下,子过程与父过程属于同一过程组, 是 fork 工作机制的产物(子过程复制以后过程自身)#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <string.h>#include <unistd.h>int main(void){ int pid = 0; int i = 0; printf("parent = %d, ppid = %d, pgid = %d\n", getpid(), getppid(), getpgrp()); while (i < 5) { if ((pid = fork()) > 0) { printf("new : %d\n", pid); } else if (pid == 0) { sleep(1); printf("child = %d, ppid = %d, pgid = %d\n", getpid(), getppid(), getpgrp()); sleep(60); printf("last == pgid = %d\n", getpgrp()); break; } else { printf("fork error...\n"); } ++i; } if (pid) { sleep(60); } return 0;}tiansong@tiansong:~/Desktop/linux$ ./a.out &[1] 3022parent = 3022, ppid = 2125, pgid = 3022new : 3024new : 3025new : 3026new : 3027new : 3028tiansong@tiansong:~/Desktop/linux$ child = 3025, ppid = 3022, pgid = 3022child = 3026, ppid = 3022, pgid = 3022child = 3027, ppid = 3022, pgid = 3022child = 3024, ppid = 3022, pgid = 3022child = 3028, ppid = 3022, pgid = 3022tiansong@tiansong:~/Desktop/linux$ ps PID TTY TIME CMD 2125 pts/3 00:00:00 bash 3022 pts/3 00:00:00 a.out 3024 pts/3 00:00:00 a.out 3025 pts/3 00:00:00 a.out 3026 pts/3 00:00:00 a.out 3027 pts/3 00:00:00 a.out 3028 pts/3 00:00:00 a.out 3061 pts/3 00:00:00 pstiansong@tiansong:~/Desktop/linux$ kill 3022 // kill 过程组长[1]+ Terminated ./a.outtiansong@tiansong:~/Desktop/linux$ ps PID TTY TIME CMD 2125 pts/3 00:00:00 bash 3024 pts/3 00:00:00 a.out 3025 pts/3 00:00:00 a.out 3026 pts/3 00:00:00 a.out 3027 pts/3 00:00:00 a.out 3028 pts/3 00:00:00 a.out 3149 pts/3 00:00:00 pstiansong@tiansong:~/Desktop/linux$ kill -- -3022 // kill 过程组tiansong@tiansong:~/Desktop/linux$ ps PID TTY TIME CMD 2125 pts/3 00:00:00 bash 3163 pts/3 00:00:00 ps过程组深度分析深刻了解过程组过程组长终止,过程组仍然存在(过程组长仅用于创立新过程组)父过程创立子过程后立刻通过 setpgid() 扭转其组标识(PGID)【当须要将子过程设置到其它过程组时】同时,子过程也须要通过 setpgid() 扭转本身组标识(PGID)【当须要将子过程设置到其它过程组时】当子过程调用 exec() 后 ...

September 24, 2023 · 6 min · jiezi

关于linux:Performance-of-Maxon-WiFi-6-Industrial-Access-Point

The Maxon WiFi 6 Industrial Access Point has a coverage range of up to 300 meters in open air, and up to 200 meters indoors. However, the actual coverage range will vary depending on a number of factors, including the environment, the type of antennas used, and the number of devices connected to the access point. Key specifications of this WiFi 6 Industrial Access Point:Wireless standard: IEEE 802.11ax (WiFi 6)Frequency bands: 2.4 GHz and 5 GHzMaximum data rate: 6573 MbpsNumber of antennas: 1-6pcsPower supply: PoE or AC adapterOperating temperature range: -40°C to 70°CDimensions: 262 x 194 x 72mmWeight: 1500g ...

September 21, 2023 · 2 min · jiezi

关于linux:给-linux-的-NVIDIA-GPU-安装-CUDA-Toolkit

拿到电脑后,我先一个 ubuntu-drivers devices 查看可用的驱动版本 ╰─➤ ubuntu-drivers devicesERROR:root:aplay command not found== /sys/devices/pci0000:ae/0000:ae:00.0/0000:af:00.0 ==modalias : pci:v000010DEd00001EB8sv000010DEsd000012A2bc03sc02i00vendor : NVIDIA Corporationmodel : TU104GL [Tesla T4]driver : nvidia-driver-470-server - distro non-freedriver : nvidia-driver-418-server - distro non-freedriver : nvidia-driver-535-server - distro non-freedriver : nvidia-driver-535 - distro non-free recommendeddriver : nvidia-driver-470 - distro non-freedriver : nvidia-driver-525-server - distro non-freedriver : nvidia-driver-525 - distro non-freedriver : nvidia-driver-450-server - distro non-freedriver : xserver-xorg-video-nouveau - distro free builtin参考: 应用 ubuntu-drivers 装置 nvida 显卡驱动的一些疑难?对于『应用 ubuntu-drivers 装置 nvida 显卡驱动的一些疑难』解答因为我是 ubuntu server 版本,而不是 Desktop 版本,所以我要装置带 -server 后缀的 ...

September 18, 2023 · 2 min · jiezi

关于linux:Linux系统编程训练营8Linux-终端与进程

详解控制台与终端乏味的问题:Linux 的终端,控制台,TTY, PTY 到底是什么?它们与过程有什么关系?历史回顾:控制台控制台是一个间接管制设施的面板(属于设施的一部分)计算机设备的控制台:按键 & 指示灯 (键盘 & 显示器)晚期的电子计算机必然有一个控制台 历史回顾:终端 (Terminal)终端是一台独立于计算机的机器,是可能用来和计算机进行交互的设施 TTY -- 即:TeleType Writer 电传打字机,一种终端设备历史倒退过程。。。电传打字机曾经淘汰计算机上的输出设施和显示设施从主机独立进去控制台与终端的物理表现形式逐步趋近计算机开始反对多任务处理。。。 终端与过程TTY 演变为 Linux 中的抽象概念,对于过程而言,TTY是一种输入输出设施 虚构终端与伪终端各种终端类型类型阐明 虚构终端(Virtual Terminal)将这一套键盘和显示器映射为 6 个终端设备/dev/tty1~tty6 tty0指代以后应用的终端 (CLI虚构出)串口终端(Serial Port Terminal)将连贯到窗口的外设看看作终端设备/dev/ttyS1,...终端模拟器(Terminal Emulator)终端模拟程序(狭义) / 内核模仿模块(侠义)Putty, MobaXTERM, 内核模块,伪终端伪终端(Pseudo Terminal)运行在用户模式的终端模拟程序,分为主设施(pty master)和从设施(pty slave)/dev/ptmx(主), /dev/pts/3(从), ...内核终端模拟器 伪终端模型 伪终端(gnome-terminal) 伪终端tiansong@tiansong:~$ pstree -A -p -s $$systemd(1)---systemd(968)---gnome-terminal(1885)---bash(1973)---pstree(2052)虚构终端ubuntu 由 GUI 切换到 CLI : CTRL + ALT +F3tiansong@tiansong:~$ pstree -A -p -s $$systemd(1)---login(2064)---bash(2118)---pstree(2125)ubuntu 由 CLI 切换到 GUI : CTRL + ALT +F1伪终端程序设计原理 ...

September 18, 2023 · 2 min · jiezi

关于linux:如何通过-Linux-命令行连接远程-Windows-系统

跨平台世界中连贯是要害,从 Linux 命令行连贯到近程 Windows 零碎的能力可能会扭转游戏规则。感激弱小的工具,如 xfreerdp,这个过程变得无缝和高效。 在本指南中,咱们将探讨如何应用 xfreerdp 连贯到近程 Windows 零碎,从而为 Linux 用户提供远程桌面性能。 装置 xfreerdp在应用 xfreerdp 之前,您须要装置它。在大多数 Linux 发行版中,您能够应用包管理器来执行此操作。 在 Ubuntu / Debian 和 Linux Mint 上,运行以下命令 $ sudo apt update$ sudo apt install freerdp2-x11 -y 基于 RHEL 的发行版,如 Rocky Linux、AlmaLinux 和 Fedora,运行以下命令 $ sudo dnf install freerdp -y应用 xfreerdp 近程连贯 Windows 零碎装置实现后,咱们能够应用上面的 xfreerdp 命令获取近程 windows 机器的 RDP $ xfreerdp /u:”username” /v:<Remote-Windows-IP>:3389 将 username 替换为您的 windows 用户名,将 remote-windows-ip 替换为 windows 零碎的 ip 地址或主机名。 ...

September 12, 2023 · 1 min · jiezi

关于linux:Linux系统编程训练营4进程参数编程

过程空间概要剖析问题execve(...) 的参数别离是什么?有什么意义?int create_process(char *path, char *args[]){ int ret = fork(); if (ret == 0) { execve(path, args, NULL); } return ret;}execve 的实质是零碎调用而非函数!! main 函数(默认过程入口)int main(int argc, char *argv[])agrc - 命令行参数个数argv - 命令行参数数组留神:启动参数和环境变量 【拷贝】 于父过程 过程空间概要 过程参数存储剖析mem.c#include <stdio.h>#include <stdlib.h>static int g_init = 255;static float g_uninit;static void text(){}int main(int argc, char *argv[]){ static double s_init = 0.255; static double s_uninit; int i = 0; int *p = malloc(4); printf("argv[0] = %p\n", argv[0]); printf("&i = %p\n", &i); printf("p = %p\n", p); printf("&g_uninit = %p\n", &g_uninit); printf("&s_uninit = %p\n", &s_uninit); printf("&g_init = %p\n", &g_init); printf("&s_init = %p\n", &s_init); printf("text = %p\n", text); free(p); return 0;}tiansong@tiansong:~/Desktop/linux$ ./mem.out argv[0] = 0x7fff7e27210c&i = 0x7fff7e270c0cp = 0x55c17314d2a0&g_uninit = 0x55c1717eb028&s_uninit = 0x55c1717eb030&g_init = 0x55c1717eb010&s_init = 0x55c1717eb018text = 0x55c1717e81a9上面程序输入什么?为什么?child.c#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(int argc, char *argv[]){ int i = 0; sleep(3); for (i=0; i<argc; ++i) { printf("exec = %d %s\n", getpid(), argv[i]); } return 0;}parent.c#include <stdio.h>#include <sys/types.h>#include <unistd.h>#define EXE "helloword.out"int create_process(char *path, char *args[]){ int ret = fork(); if (ret == 0) { execve(path, args, NULL); } return ret;}void zero_str(char *s){ while (s && *s) *s++ = 0;}int main(){ char path[] = EXE; char arg1[] = "hello"; char arg2[] = "world"; char *args[] = {path, arg1, arg2, NULL}; printf("%d begin\n", getpid()); printf("%d child = %d\n", getpid(), create_process(EXE, args)); zero_str(path); zero_str(arg1); zero_str(arg2); printf("%d path = %s\n", getpid(), path); printf("%d arg1 = %s\n", getpid(), arg1); printf("%d arg2 = %s\n", getpid(), arg2); printf("%d end\n", getpid()); return 0;}tiansong@tiansong:~/Desktop/linux$ gcc parent.c -o parent.outtiansong@tiansong:~/Desktop/linux$ gcc child.c -o helloword.outtiansong@tiansong:~/Desktop/linux$ ./parent.out 4665 begin4665 child = 46664665 path = 4665 arg1 = 4665 arg2 = 4665 endtiansong@tiansong:~/Desktop/linux$ exec = 4666 helloword.outexec = 4666 helloexec = 4666 world命令行参数,启动参数,过程参数实质雷同命令行参数标准Linux 启动参数(命令行参数)标准由选项,选项值,操作数组成选项由短横线 (-) 开始,选项名必须是单个字母或数字字符选项能够有选项值,选项与选项值之间可用空格分隔(-o test ←→ -otest) [举荐前者]如果多个选项均无选项值,可合而为一 (-a-b-c ←→ -abc) [举荐前者]既不是选项,也不能作为选项值的参数是操作数第一次呈现的双横线 (--) 用于完结所有选项,后续参数为操作数gcc test.c -o test.out 操作数 选项 选项值Linux 启动参数(命令行参数)解析规定 : if:s (-i, -s, -f 选项值)示例: ...

September 11, 2023 · 4 min · jiezi

关于linux:linux-如何判断一个文件是否是ELF共享对象

最近在看 《程序员的自我涵养--链接、装载与库》 外面提到一个概念「ELF共享对象」 所以我想晓得:「linux 如何判断一个文件是否是「ELF共享对象」 问了一下 chatGPT 要判断一个文件是否是 ELF 共享对象(也称为共享库或共享库文件),你能够应用 file 命令并查看文件的类型信息。ELF 共享对象的文件类型通常是 "shared object" 或 "dynamically linked"。上面是如何执行这个操作的步骤: 关上终端。应用 file 命令,后跟要查看的文件的门路,如下所示:file /path/to/your/file.so将 /path/to/your/file.so 替换为你要查看的理论文件门路。 file 命令将输入文件的详细信息,包含文件类型。查找文件类型信息,如果看到 "shared object" 或 "dynamically linked",则示意该文件是一个 ELF 共享对象。例如,如果文件是 ELF 共享对象,输入可能相似于: /path/to/your/file.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped这个输入表明文件是一个 64 位的 ELF 共享对象,是动静链接的,能够作为共享库在程序中应用。 请留神,要运行 file 命令,你的零碎上须要装置 file 工具。大多数 Linux 发行版都默认装置了它,但如果你应用的是其余操作系统,可能须要手动装置。 所以只有用 file 命令就行了 比方我用 file 命令去看一个 .so 文件 比方file /lib/x86_64-linux-gnu/libc.so.6 输入如下: ...

September 9, 2023 · 1 min · jiezi

关于linux:Linux系统编程训练营3初试-Linux-进程

问题: strace 输入中的 execve(...)到底是什么?过程实践状态切换过程生命周期 Linux过程基本概念过程是 Linux 工作的执行单元,也是 Linux 系统资源的调配单位每个 Linux 利用程序运行后由一个或多个过程一个 Linux 过程能够执行一个或多个程序Linux 过程有多种不同状态(即:Linux 过程有不同的活法)Linux 过程状态分析就绪 / 运行 状态 (R) : TASK_RUNNING阻塞状态: 可中断 (S) : TASK_INTERRUPTIBLE (可被内核信号唤醒)不可中断 (D) : TASK_UNINTERRUPTIBLE (对实时性要求高时应用)进行状态 (T) : TASK_STOP退出状态 : TASK_DEAD 僵尸 (X) : EXIT_ZIMBIE (过程生命期完结,但内核中还保留着与过程相干的数据信息)死亡 (Z) : EXIT_DEAD tiansong@tiansong:~/Desktop/linux$ ps ax | grep pts/0 4826 pts/0 Ss 0:00 /bin/bash 5328 pts/0 R+ 0:00 ps ax 5329 pts/0 S+ 0:00 grep --color=auto pts/0tiansong@tiansong:~/Desktop/linux$ sleep 120^C 【CTRL + C】tiansong@tiansong:~/Desktop/linux$ sleep 120 &[1] 5423tiansong@tiansong:~/Desktop/linux$ ps ax | grep pts/0 4826 pts/0 Ss 0:00 /bin/bash 5423 pts/0 S 0:00 sleep 120 5453 pts/0 R+ 0:00 ps ax 5454 pts/0 S+ 0:00 grep --color=auto pts/0tiansong@tiansong:~/Desktop/linux$ kill 5423[1]+ Terminated sleep 120tiansong@tiansong:~/Desktop/linux$ ps ax | grep pts/0 4826 pts/0 Ss 0:00 /bin/bash 5501 pts/0 R+ 0:00 ps ax 5502 pts/0 R+ 0:00 grep --color=auto pts/0loop.cint main(){ while(1); return 0;}tiansong@tiansong:~/Desktop/linux$ gcc ./loop.c -o loop.outtiansong@tiansong:~/Desktop/linux$ ./loop.out &[1] 6510tiansong@tiansong:~/Desktop/linux$ ps ax | grep pts/3 6021 pts/3 Ss 0:00 /bin/bash 6510 pts/3 R 0:04 ./loop.out 6522 pts/3 R+ 0:00 ps ax 6523 pts/3 S+ 0:00 grep --color=auto pts/3tiansong@tiansong:~/Desktop/linux$ kill 6510[1]+ Terminated ./loop.outtiansong@tiansong:~/Desktop/linux$ ps ax | grep pts/3 6021 pts/3 Ss 0:00 /bin/bash 6543 pts/3 R+ 0:00 ps ax 6544 pts/3 S+ 0:00 grep --color=auto pts/3Linux 过程树简介Linux 过程必知必会每个过程都有一个惟一的标识符(PID)每个过程都是由一个过程创立而来(即:父过程)#include <sys/types.h>#include <unistd.h>pid_t getpid(); // 以后过程 id pid_t getppid(); // 以后过程父过程 id一些乏味的问题问题一:第 1 个过程时什么?问题二:如何创立过程Linux 过程树整个 Linux 零碎的所有过程形成一个树结构树根由内核主动创立,即:IDLE (PID → 0)零碎中的第一个过程是 init / systemd (PID → 1) ...

September 7, 2023 · 4 min · jiezi

关于linux:Linux-内存管理新特性-Memory-folios-解读

一、folio [folio] 是什么1.1 folio 的定义Add memory folios, a new type to represent either order-0 pages or the head page of a compound page.folio 能够看成是 page 的一层包装,没有开销的那种。folio 能够是单个页,也能够是复合页。 $$(图片援用围绕 HugeTLB 的极致优化)$$ 上图是 page 构造体的示意图,64 字节治理 flags, lru, mapping, index, private, {ref_, map_}count, memcg_data 等信息。当 page 是复合页的时候,上述 flags 等信息在 head page 中,tail page 则复用治理 compound_{head, mapcount, order, nr, dtor} 等信息。 struct folio { /* private: don't document the anon union */ union { struct { /* public: */ unsigned long flags; struct list_head lru; struct address_space *mapping; pgoff_t index; void *private; atomic_t _mapcount; atomic_t _refcount;#ifdef CONFIG_MEMCG unsigned long memcg_data;#endif /* private: the union with struct page is transitional */ }; struct page page; };};folio 的构造定义中,flags, lru 等信息和 page 完全一致,因而能够和 page 进行 union。这样能够间接应用 folio->flags 而不必 folio->page->flags。 ...

September 7, 2023 · 6 min · jiezi

关于linux:linux安装docker步骤

一、查看版本Docker从17.03版本之后, 分为CE(Community Edition: 社区版)和EE(Enterprise Edition: 企业版)。 绝对于社区版本,企业版本强调安全性,但需付费应用。这里咱们应用社区版本即可。 Docker反对64位版本的CentOS 7和CentOS 8及更高版本,它要求Linux内核版本不低于3.10。 // 查看Linux版本cat /etc/redhat-release// 查看内核版本uname -r比方我这边的截图所示,是反对docker的。 二、装置docker官网的一键装置: 详情: linux装置docker步骤

September 7, 2023 · 1 min · jiezi

关于linux:ubuntu-编译-pyav-报错-libx264-not-found

./configureERROR: libx264 not foundIf you think configure made a mistake, make sure you are using the latestversion from Git. If the latest version fails, report the problem to theffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.Include the log file "ffbuild/config.log" produced by configure as this will helpsolve the problem.解决办法: sudo apt-get install libx264-dev

September 7, 2023 · 1 min · jiezi

关于linux:Linux系统编程训练营2深入理解系统调用

揭示零碎 API 的神秘Linux 零碎架构利用程序运行之后失去用户过程 模式切换的实质(零碎调用的实质)零碎模式切换依赖于 CPU 提供的工作形式一般来说,大部分 CPU 至多具备两种工作形式 高特权级 (Ring 0) : 能够拜访任意的数据,包含外围设备,比方网卡、硬盘等(内核模式)低特权级 (Ring 3) : 只能受限的拜访内存,并且不容许拜访外围设备,可被打断(用户模式)零碎模式切换通过执行非凡的 CPU 指令发动 (int 0x80,触发中断)应用程序(过程)无奈间接切换 CPU 的工作形式零碎调用是应用程序(过程)申请模式切换的惟一形式 零碎调用的真面目char *s = "D.T.Software\n;"int l = 13;asm volatile ( "movl $s, %%eax\n" // 指定编号为 4 的零碎调用(sys_write) "movl $1, %%ebx\n" // 指定 sys_write 的输入指标, 1 为规范输入 "movl %0, %%ecx\n" // 指定输入字符串地址 "movl %1, %%edx\n" // 指定输入字符串长度 "int $0x80 \n" // 执行零碎调用 : // 疏忽输入参数 : "r"(s), "r"(l) : "eax", "ebx", "ecx", "edx"); // 保留存放去,不用于关联变量void print(const char *s, int l){ asm volatile ( "movl $s, %%eax\n" // sys_write "movl $1, %%ebx\n" "movl %0, %%ecx\n" "movl %1, %%edx\n" "int $0x80 \n" // 80H Service : : "r"(s), "r"(l) // parameter : "eax", "ebx", "ecx", "edx"); // 保留存放去,不用于关联变量}零碎调用和零碎 API 实现示例#define SysCall(type, cmd, param1, param2) asm volatile ( "movl $"#type", %%eax\n" \ "movl $"#cmd", %%ebx\n" \ "movl %0, %%ecx\n" \ "movl %1, %%edx\n" \ "int $0x80 \n" \ : \ : "r"(param1), "r"(param2) \ : "eax", "ebx", "ecx", "edx" \ ) void RegApp(const char *name, void(*tmain)(), byte pri){ if (name && tmain) { AppInof info = {0}; info.name = name; info.tmain = tmain; info.priority = pri; SysCall(0, 2, &info, 0); }}编程试验:零碎调用的实质间接应用零碎调用 program.c第 1 处不同,没有援用头文件第 2 处不同,没有 main 函数第 3 处不同,函数外面嵌入了汇编代码void print(const char *s, int l);void exit(int code);void program(){ print("Hello World!\n", 13); exit(0);}void print(const char *s, int l){ asm volatile ( "movl $4, %%eax\n" "movl $1, %%ebx\n" "movl %0, %%ecx\n" "movl %1, %%edx\n" "int $0x80 \n" : : "r"(s), "r"(l) : "eax", "ebx", "ecx", "edx" );}void exit(int code) { asm volatile ( "movl $1, %%eax\n" "movl %0, %%ebx\n" "int $0x80 \n" : : "r"(code) : "eax", "ebx" ); }编译:gcc -m32 -e program -fno-builtin -nostartfiles program.c -o program.out-m32 : 指定应用 32 位编译形式-e program : 指定 program 函数为入口-fno-builtin -nostartfiles : 不须要 _start 函数运行:Hello World!借助第三方库 main.c#include <stdio.h>int main(){ printf("Hello World!\n"); return 0;}编译:gcc main.c -o main.out运行:Hello World!值得思考的问题如何判断一个应用程序(过程)触发了零碎调用?雷同性能的代码实现pythonprint('Hello World!')perlprint "Hello World!\n"C++#include "iostream"using namespace std;int main(){ cout << "Hello World!" << endl; return 0;}C#namespace Test { class Program { static void Main(string[] args) { Console.Write("Hello World\n"); } }}strace - 零碎调用探测器strace 用户监控过程与内核的交付(监控零碎调用)starce 用于追踪过程外部状态(定位运行时问题)starce 按序输入过程运行过程零碎调用名称,参数和返回值 ...

September 6, 2023 · 33 min · jiezi

关于linux:pidof命令获取不到程序的pid

pidof命令获取不到程序的pid2023.08.25 问题形容有一个性能,须要监控某个过程是否运行,如果因为某些起因没在运行(如异样挂死),则执行某个脚本,重新启动零碎。很简略那的一个性能,三下五除二写了一个脚本: #!/bin/bashall_process_pid=(`pidof xxxx`)process_num=${all_process_pid[*]}if [ ${process_num} -eq 1 ];then echo "normal"else echo "unnormal"fiexit运行后,很完满,能够失常工作。然而在运行了一段时间后,总是发现零碎莫名微妙地重启,查看日志发现被监控的xxxx过程总是异样退出,因此会重启零碎。然而这个过程个别状况下比较稳定,不会那么频繁的挂死。但为了确定问题,就在监控脚本中加了一些调试信息,打印出现异常时候所有的过程。当呈现问题的时候,发现这个过程其实是存在的,通过ps能够看到这个过程正则运行,但通过pidof取得的过程却为空,基本上判断是pidof未找到过程ID导致的,可为什么pidof未找到呢?查问材料后发现,pidof默认状况下,不能列出zombie和I/O waiting状态的过程。通过pidof -h能够看到有个-z选项能够列出zombie和I/O waiting状态的过程。 [root@probe: ~]$ pidof -hpidof usage: [options] <program-name> -c Return PIDs with the same root directory -d <sep> Use the provided character as output separator -h Display this help text -n Avoid using stat system function on network shares -o <pid> Omit results with a given PID -q Quiet mode. Do not display output -s Only return one PID -x Return PIDs of shells running scripts with a matching name -z List zombie and I/O waiting processes. May cause pidof to hang.但这个-z选项可能会导致pidof异样。 须要留神的是,不是每个发行的操作系统中的pidof命令都有-z选项,比方我目前应用的fedora workstation 38版本中,pidof就没有-z选项。 ...

September 6, 2023 · 1 min · jiezi

关于linux:linux-查看当前有多少个-ssh-连接并且列出具体信息

要查看以后有多少个SSH连贯并列出具体信息,能够应用以下命令: who -a该命令将显示所有连贯的详细信息,包含用户名、终端、登录日期和工夫等。 另外,也能够应用以下命令列出以后连贯的信息: w -h这个命令会显示以后登录到零碎的用户的信息,以及每个用户正在运行的过程。通过查看输入,你能够获取到SSH连贯的相干信息。 请留神,以上命令须要在具备足够权限的终端或命

September 5, 2023 · 1 min · jiezi

关于linux:请收下这个在linux创建守护进程的工具附源码

先给工具源码和工具都在这里自取https://github.com/tangbu/myblob/tree/master/c/deamon这是一个c编译而成的可运行程序,名字叫deamon,比方本来执行 /bin/test -Darg1=value1, 当初执行deamon /bin/test -Darg1=value1就能够原理浅显易懂,java程序员不影响浏览 产生了什么事件笔者的电脑操作系统为ubuntu, 数年以前在兴高采烈的关上postman的时候调试,忽然想整顿多余的bash命令界面,忽然正在工作的postman退出了工作,留下我默默发愣。通过测试,应用postman的时候必须放弃bash界面关上状态,也就是我要始终面对这个黑黑的窗口无奈关掉 寻找解决办法解决办法1 nohup,网上搜寻nohup能够让过程在后盾运行,会在当前目录下生成nohup.out,输入会重定向增加到nohup.out外面去,然而并不胜利 解决办法2 &符号和-d命令前面加&符号和-d ,postman -d &, 也不胜利页面卡死 解决办法3 disown应用 disown命令,执行postman的时候界面不给输出命令的机会,导致无奈执行disown命令 postman退出起因执行man bash命令看一下为什么会导致postman退出shell退出的时候会向shell启动的jobs发送SIGHUP信号,过程在接管到SIGHUP的时候,如果过程没有向操作系统注册信号处理函数的时候ProcessId,操作系统就会敞开该过程 守护过程守护过程 在linux操作系统中,守护过程(deamon)是作为后盾过程运行的过程,对于在bash启动的工作(job), 如果间接退出job同样会失落。为了解决这个问题,须要应用守护过程的形式启动工作。 接下来咱们看一下如何把命令行运行的程序编程守护过程 守护过程的创立依然以命令行间接运行postman为例,执行命令查看过程树结构 ps -ajx | egrep 'postman|bash|PPID'能够看到,终端过程和postman命令过程在同一会话ID中,postman的父过程为终端。 从终端创立一个过程A,A过程再fork一个子过程B执行postman命令, 而后A过程退出这样就能够创立运行postman命令的过程,实质上和间接在终端运行postman命令过程成果一样,然而咱们能够通过c代码对B过程属性更改让最终的过程继承更改后的个性 在子过程中创立新会话从终端创立一个过程A,A过程再fork一个子过程B,这时候,子过程的SID会话id和终端依然是一个,当终端退出的时候,依然会发送SIGHUP信号,子过程默认依然会退出,所以子过程B依然须要新建一个会话,就用到了上面的函数setsid()函数使子过程齐全独立进去,脱离终端管制,能够man 3 setsid看一下应用 扭转当前目录为根目录chidr()函数避免工作在可卸载的文件系统,文件系统的卸载后,过程也随之沦亡, 所以个别更改到根目录下 重设文件权限掩码umask()函数本机的umask的是0002 第一个0不思考所以在代码中创立777,002代表写,这个umask创立的文件默认去掉写权限(位运算)775,防止影响到守护过程umask(0); 敞开文件描述符重定向dup2()规范输入输出、谬误都给丢掉。而后把继承下来的关上的文件描述符关掉,防止占用资源 理论运行的源码上面是附正文的C代码 #include <unistd.h>#include <signal.h>#include <string.h>#include <stdlib.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, char* argv[]){ //pid_t int类型, a代表子过程号 pid_t a; //创立子过程, 父过程中a是子过程号,子过程中a=0 a = fork(); if(a > 0) { // 父过程退出,子过程继承父过程代码块持续运行,a就是子过程号 exit(0); }// 子过程疏忽终端退出SIGHUP信号 signal(SIGHUP, SIG_IGN); // 创立新会话,脱离原会话,脱离管制终端。 setsid(); //脱离原过程组,创立并进入只蕴含本身的过程组 setpgrp(); //敞开父辈继承下来的所有文件 int max_fd = sysconf(_SC_OPEN_MAX); for (int i = 0; i < max_fd && i > 2; i++) { close(i); } //设置掩码位 umask(0); int drop_fd=open( "/dev/null", O_RDWR ); dup2(0, drop_fd); dup2(1, drop_fd); dup2(2, drop_fd); //切换工作门路 chdir("/");// deamon postman arg1 args 变成了postman arg1 arg2 if (argc > 2) { char *params[argc - 2]; memcpy(params, argv + 1, sizeof params); params[argc - 3] = NULL;// execvp反对在环境变量PATH中寻找postman命令并替换代码段,运行新过程的代码段, execvp(*params, params); } else { execvp(argv[1], NULL); } return 0;}接下来执行 deamon postman 命令查看过程关系能够看到postman的父过程曾经变成了systemd, 比拟新的零碎守护过程曾经由systemd接管,咱们的守护过程创立胜利 ...

September 4, 2023 · 1 min · jiezi

关于linux:Linux常用命令入门版

一、根本命令1.相干信息查问pwd -------------------- 查看以后所在目录top -------------------- 查看内存状况history ---------------- 查看历史命令ip addr ----------------- 查看IP地址ping ip或域名 ------------ 查看网络ps -ef | grep -i 过程名字-- 查看过程运行信息2.开机和重启shutdown -h now ----------- 立刻关机reboot -------------------- 重启3.其余命令clear --------------------- 清屏ctrl + c ------------------ 强制完结占用窗口的命令kill -9 pid --------------- 强制杀死指定过程二、目录相干命令1. cd命令【目录切换】cd /[指定目录] 切换到指定目录 cd ~ 切换到home目录cd .. 切换到下级目录cd - 切换到上次访问目录实例演示: 2.mkdir命令【创立目录】mkdir 目录名 创立目录mkdir -p 多级目录 创立多级目录实例演示: 3.rm命令【删除目录】rmdir 目录名 删除空目录rm -r 目录名 删除多级目录,会有提醒是否要删除 -r 为使用递归删除目录及其内容rm -rf 目录名 间接删除多级目录无提醒, -f 为无提醒 -r和-f能够一起应用 即-rf实例演示: 4.cp、mv命令 【批改目录】cp -r 原目录 指标门路 拷贝目录 mv 原目录 指标门路 挪动目录到新门路,挪动时还能够对原目录名重命名实例演示: ...

September 4, 2023 · 1 min · jiezi

关于linux:如何直接通过Xshell从云服务器下载文件

咱们都晓得,Linux零碎采纳的是命令行界面,从服务器下载文件或将本地文件上传有很多办法,但都须要来到SSH终端来操作。 比方像借助FTP软件下载,或者目前风行的WebUI面板点点鼠标能下载。 那么有没有方法能够间接在SSH终端下载文件呢?答案是必定的。借助lrzsz这个小程序,咱们就能够通过XShell间接下载了。 首先须要装置lrzsz包,输出命令: yum install -y lrzsz 装置实现后就能够下载文件了,cd到文件所在目录,而后敲入下载文件指令: sz hello_world.tar.gz 接着会弹出窗口抉择文件保留地位,这样就将备份文件 hello_world.tar.gz 下载到本地电脑了。 对于lrzsz工具介绍 lrzsz 是一个用于在 Linux 终端下进行文件传输的工具,它反对 ZMODEM 协定。 通常在 SSH 环境下应用 lrzsz 来上传和下载文件,因为 SSH 不反对传输二进制文件或者较大的文件。通过 lrzsz 工具,用户能够很不便地在本地计算机和近程服务器之间传输文件。 以上就是通过XShell间接下载文件的办法分享,适宜比拟焦急下载的情景。 参考文章:装置lrzsz工具实现文件便捷上传与下载教你如何间接通过XShell从服务器下载文件

September 4, 2023 · 1 min · jiezi

关于linux:linux常用命令

1、根本命令ip addr:查看ippwd:查看以后所在目录shutdown -h now:立刻关机reboot:重启ping ip或域名:查看网络是否OKctrl + c:强制完结占用窗口的命令top:查看内存占用状况kill -9 pid:强制杀死指定程序,pid为进行序号ps -ef | grep -i 过程名字:查看过程运行信息,|为管道命令clear:清屏(伪命令)history:查看历史命令具体命令-h:查看命令得帮忙信息 2、目录相干命令查看指定目录下的内容切换指定目录创立目录删除目录复制目录挪动目录 3、文件相干命令touch:创立新文件vi/vim:编辑文件查看文件tail动静查看文件内容,监控日志删除文件复制文件挪动文件压缩和解压缩依据文件名查找文件依据文件内容查找文件 4、用户权限分组用户权限分三个组:以后用户、以后用户所在的组、其余用户 chmod 权限(字母或数字,规定如下) 文件通过数字给文件调配权限,通过组合最大为7示意读写执行权限通过字母给文件调配权限

September 3, 2023 · 1 min · jiezi

关于linux:Linux下的硬链接和软链接

@TOC 一、查看服务器零碎版本[root@node ~]# cat /etc/os-release NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"HOME_URL="https://www.centos.org/"BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"CENTOS_MANTISBT_PROJECT_VERSION="7"REDHAT_SUPPORT_PRODUCT="centos"REDHAT_SUPPORT_PRODUCT_VERSION="7"二、Linux中硬链接和软链接介绍Linux文件系统中,有所谓的链接(link),咱们能够将其视为文件的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link)。硬链接是指文件能够有多个名称。软链接的形式则是产生一个非凡的文件,该文件的内容是指向另一个文件的地位硬链接是存在同一个文件系统中,而软链接却能够逾越不同的文件系统。三、Linux硬链接1.创立文件[root@node ~]# mkdir /hon[root@node ~]# echo "aa-bb-test" > /hon/test.012.创立硬链接文件 test.bak[root@node ~]# ln /hon/test.01 test.bak3.查看硬链接文件[root@node ~]# ll test.bak -rw-r--r-- 2 root root 11 Nov 4 10:22 test.bak[root@node ~]# ll /hon/test.01 -rw-r--r-- 2 root root 11 Nov 4 10:22 /hon/test.014.查看文件内容[root@node ~]# cat /hon/test.01 aa-bb-test[root@node ~]# cat test.bak aa-bb-test5.查看文件inode号[root@node ~]# ls -i /hon/test.01 118529032 /hon/test.01[root@node ~]# ls -i test.bak 118529032 test.bak四、Linux软链接1.创立一个测试文件[root@node ~]# mkdir /ron[root@node ~]# echo aa > /ron/aa.txt2.创立软链接文件ln -s /ron/aa.txt link.lk3.查看文件inode号[root@node ~]# ls -i /ron/aa.txt 126606482 /ron/aa.txt[root@node ~]# ls -i link.lk 28417558 link.lk4.查看文件内容[root@node ~]# cat /ron/aa.txt aa[root@node ~]# cat link.lk aa五、测试删除硬链接文件1.查看原文件属性[root@node ~]# ll /hon/test.01 -rw-r--r-- 2 root root 11 Nov 4 10:22 /hon/test.012.删除链接文件[root@node ~]# rm -rf test.bak 3.再次查看原文件变动[root@node ~]# ll /hon/test.01 -rw-r--r-- 1 root root 11 Nov 4 10:22 /hon/test.01 ...

September 1, 2023 · 1 min · jiezi

关于linux:Linux系统之部署Go语言开发运行环境

@TOC 一、Go语言介绍1.Go语言简介Go(又称Golang)是Google开发的一种动态强类型、编译型、并发型,并具备垃圾回收性能的编程语言。2.Go语言的撰写格调每行程序完结后不须要撰写分号。左大括号不可能换行搁置。if判断式和for循环不须要以小括号包覆起来。二、本地环境查看1.查看零碎版本[root@docker ~]# cat /etc/centos-releaseCentOS Linux release 7.6.1810 (Core) 2.查看零碎内核版本[root@docker ~]# uname -r 3.10.0-957.el7.x86_64三、yum间接装置go1.查看yum仓库[root@docker ~]# yum repolist all |grep enable !base/7/x86_64 CentOS-7 - Base enabled: 10,072!docker-ce-stable/7/x86_64 Docker CE Stable - x86_64 enabled: 209*!epel/x86_64 Extra Packages for Enterpri enabled: 13,744!extras/7/x86_64 CentOS-7 - Extras enabled: 515!updates/7/x86_64 CentOS-7 - Updates enabled: 4,6912.装置goyum -y install golang3.创立环境变量mkdir ~/go # 创立目录echo 'export GOPATH="$HOME/go"' >> ~/.bashrc # 写入环境变量文件source ~/.bashrc 使环境变量失效四、二进制装置Go1.装置wget等工具yum -y install wget git2.下载Go安装包阿里云下载站点:https://mirrors.aliyun.com/golang/[root@docker ~]# wget https://mirrors.aliyun.com/golang/go1.19.5.linux-amd64.tar.gz -P /usr/local/src--2023-02-13 22:26:54-- https://mirrors.aliyun.com/golang/go1.19.5.linux-amd64.tar.gzResolving mirrors.aliyun.com (mirrors.aliyun.com)... 27.221.120.192, 27.221.120.241, 27.221.120.238, ...Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|27.221.120.192|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 148949578 (142M) [application/octet-stream]Saving to: ‘/usr/local/src/go1.19.5.linux-amd64.tar.gz’100%[==========================================================================================================================>] 148,949,578 10.2MB/s in 14s 2023-02-13 22:27:08 (10.1 MB/s) - ‘/usr/local/src/go1.19.5.linux-amd64.tar.gz’ saved [148949578/148949578][root@docker ~]# cd /usr/local/src/[root@docker src]# lsgo1.19.5.linux-amd64.tar.gz2.解压到指定的目录tar -xzf go1.19.5.linux-amd64.tar.gz -C /usr/local/3.设置环境变量在/etc/profile文件中定义以前全局变量。export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/binexport GOPATH=~/gosource /etc/profile #刷新环境变量4.查看Go版本[root@docker ~]# go versiongo version go1.19.5 linux/amd64五、测试Go语言环境1.创立一个测试目录[root@docker local]# mkdir -p /usr/local/go/src/test[root@docker local]# 2.编辑test.go文件[root@docker test]# ls[root@docker test]# pwd/usr/local/go/src/test[root@docker test]# cat test.go package mainimport "fmt"func main() { fmt.Printf("Go, World\n , better late than never\n")}} 3.构建testgo文件为可执行文件[root@docker test]# go build test.go [root@docker test]# lstest test.go4.测试运行[root@docker test]# ./test Go, World , better late than never

August 31, 2023 · 1 min · jiezi

关于linux:当容器内的进程只监听-127001-而不是-0000-宿主机可以使用-127001-访问资源吗

前言:因为遇到了docker+etcd 无奈近程拜访?这个问题,所以我要深刻探索一下 当容器内的过程只监听 127.0.0.1 而不是 0.0.0.0 ,宿主机能够应用 127.0.0.1 拜访资源吗?能够 当容器内的过程只监听 127.0.0.1 而不是 0.0.0.0 ,宿主机能够应用 网关调配的ip 拜访资源吗?不能够 网关调配的ip 指的是 192.168.x.1 这种上面做一个试验 FROM python:3.10.10-bullseye RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" > /etc/apt/sources.listRUN apt-get updateRUN apt-get install -y vim netcat telnet less sysstat htop ncduRUN mkdir /codeWORKDIR /codeCOPY requirements-dev.txt /code/RUN pip install -r requirements-dev.txt -i https://mirror.baidu.com/pypi/simpleCOPY requirements-prd.txt /code/RUN pip install -r requirements-prd.txt -i https://mirror.baidu.com/pypi/simpleADD . /code/requirements-dev.txt mycliipythonautopep8psutilglancespylintrequirements-prd.txt pymilvus==2.2.8numpy pydantic<2.0.0loguru requests pyyaml python-dotenv python-multipart # Form data requires "python-multipart" to be installed.cryptographypymysql peewee oss2 fastapi uvicorn psutildnspython==2.2.1api.py ...

August 31, 2023 · 1 min · jiezi

关于linux:ubuntu-gnome-如何在命令行实现挂起电脑

ubuntu gnome 如何在命令行实现「挂起」电脑,不是挂起过程,是挂起零碎,进入休眠 上面是 chatGPT 的答复: 在 Ubuntu GNOME 中,你能够应用 systemctl 命令来实现零碎的挂起(休眠)。以下是在命令行中如何实现的步骤: 关上终端:你能够应用快捷键 Ctrl + Alt + T 来关上终端。输出以下命令并按下 Enter 键,以挂起零碎(进入休眠):sudo systemctl suspend零碎会要求你输出管理员明码以进行受权。输出明码后,零碎将会进入挂起状态(休眠状态)。 请留神,这个命令须要管理员权限(应用 sudo),因为挂起零碎会波及到零碎级操作。 另外,如果你想要通过命令行从新唤醒零碎,只需按下电源按钮或任意键即可。零碎会从休眠状态中复原。

August 28, 2023 · 1 min · jiezi

关于linux:Linux系统之安装mymind思维导图工具

@TOC 一、my-mind介绍MyMind 是一个在线思维导图编辑器。二、本地环境介绍2.1 本地环境规划本次实际为集体测试环境,操作系统版本为centos7.6。|hostname| 本地P地址 | 操作系统版本 |内核版本 |python版本|--|--| --| --| --| | jeven|192.168.3.166 |centos 7.6| 3.10.0-957.el7.x86_64 v16.17.0|3.6.8 2.2 本次实际介绍1.本次实际部署环境为集体测试环境;2.在centos7.6环境下装置my-mind思维导图工具。三、查看本地环境3.1 查看本地操作系统版本查看本地操作系统版本[root@jeven ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)3.2 查看零碎内核版本查看零碎内核版本[root@jeven ~]# uname -r3.10.0-957.el7.x86_643.3 查看端口占用状况查看默认的80端口,以及my-mind服务的自定义端口7899端口是否被占用。例:查看80端口[root@jeven ~]# ss -tunlp |grep 80udp UNCONN 0 0 fe80::8a83:7297:7cb8:9934%ens33:546 :::* users:(("dhclient",pid=119624,fd=5))tcp LISTEN 0 128 127.0.0.1:3880 *:* users:(("fastgithub",pid=8948,fd=131))tcp LISTEN 0 128 *:6000 *:* users:(("X",pid=10807,fd=6))tcp LISTEN 0 128 ::1:3880 :::* users:(("fastgithub",pid=8948,fd=132))tcp LISTEN 0 128 :::6000 :::* users:(("X",pid=10807,fd=5))四、装置httpd4.1 查看本地yum仓库配置阿里云的yum仓库镜像源curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.reposed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo查看yum仓库状态[root@jeven tmp]# yum repolist all |grep enable!base/7/x86_64 CentOS-7 - Base - m enabled: 10,072!extras/7/x86_64 CentOS-7 - Extras - enabled: 518!mysql-connectors-community/x86_64 MySQL Connectors Co enabled: 227!mysql-tools-community/x86_64 MySQL Tools Communi enabled: 100!mysql80-community/x86_64 MySQL 8.0 Community enabled: 425!updates/7/x86_64 CentOS-7 - Updates enabled: 5,0614.2 装置httpd应用yum间接装置httpd服务yum install httpd -y ...

August 27, 2023 · 2 min · jiezi

关于linux:Linux系统之安装uptimekuma服务器监控面板

一、uptime-kuma介绍1.1 uptime-kuma简介uptime-kuma是一款开源的、多功能的服务器监控面板 。 1.2 uptime-kuma特点监控 HTTP(s) / TCP / HTTP(s) 关键字 / HTTP(s) Json 查问 / Ping / DNS 记录 / 推送 / Steam 游戏服务器 / Docker 容器的失常运行工夫精美、反应式、疾速的 UI/UX通过 Telegram、Discord、Gotify、Slack、Pushover、电子邮件 (SMTP) 和90 多种告诉服务发送告诉,请单击此处查看残缺列表20 秒距离多种语言多个状态页面将状态页面映射到特定域平图证书信息代理反对2FA 反对二、本次实际环境介绍2.1 环境规划本次实际为集体测试环境,应用服务器华为云ECS云服务器,操作系统版本为centos7.6。|hostname| IP地址 | 操作系统版本 |内核版本 |node.js版本|服务器类别|--|--| --| --| --| --| | -|- |centos 7.6| 3.10.0-957.el7.x86_64| v16.17.0|华为云ECS云服务器 2.2 本次实际介绍1.本次实际部署环境为集体测试环境;2.在centos7.6环境下部署uptime-kuma服务器监控面板。2.3 环境要求零碎要求✅ Major Linux distros such as Debian, Ubuntu, CentOS, Fedora and ArchLinux etc.✅ Windows 10 (x64), Windows Server 2012 R2 (x64) or higher❌ Replit / Heroku ...

August 26, 2023 · 3 min · jiezi

关于linux:Linux运维工程师面试题1

Linux运维工程师面试题(1)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 别名、外部命令、外部命令的执行程序命令执行寻找程序:别名 > 外部命令 > 外部命令; 即先寻找是否为别名,而后再找是否为外部命令,最初才找是否为外部命令。 拓展:什么是外部命令?什么是外部命令? 外部命令:由shell自带的,而且通过某命令模式提供外部命令:在文件系统门路下有对应的可执行程序文件 # 应用type命令判断是外部命令还是外部命令[root@waluna ~]# type -a echoecho is a shell builtinecho is /usr/bin/echo # echo 即为外部命令也为外部命令[root@waluna ~]# type echoecho is a shell builtin # 外部命令显示后果[root@waluna ~]# type vimvim is /usr/bin/vim # 外部命令会显示命令的门路# 应用此命令后成果[root@waluna ~]# vim 1.sh[root@waluna ~]# type vimvim is hashed (/usr/bin/vim) # 会显示为是hash,因为命令执行后会应用hash缓存在内存中,不会再次顺次寻找环境变量的门路,能够间接执行,减速速度2 linux 系统启动流程不同操作系统及版本有所不同,以下以 centos 7 为例。 启动流程比较复杂,以下简要形容,具体看下图 UEFI 或 BIOS 初始化,运行 POST 开机加电自检;加载 BIOS 的硬件信息,获取第一个启动设施;读取第一个启动设施 MBR 的疏导加载程序 (grub) 的启动信息;疏导装载程序,centos 7 是 grub2,加载装载程序的配置文件:/etc/grub.d/ ...

August 24, 2023 · 2 min · jiezi

关于linux:Linux系统之安装OneNav个人书签管理器

@TOC 一、OneNav介绍1.OneNav简介OneNav是一款应用PHP + SQLite 3开发的导航/书签管理器,反对Material Design格调,界面简洁,使用方便。2.OneNav特点反对后盾治理反对公有链接反对多种主题格调(默认内置2套模板)反对链接信息自动识别反对API反对右键菜单治理二、本地环境介绍2.1 本地环境规划本次实际为集体测试环境,操作系统版本为centos7.6。|hostname| IP地址 | 操作系统版本 |内核版本 |PHP版本|--|--| --| --| --| | jeven|192.168.3.166 |centos 7.6| 3.10.0-957.el7.x86_64|7.4.33 2.2 本次实际介绍1.本次实际部署环境为集体测试环境;2.在centos7.6环境下部署OneNav集体书签管理器。三、查看本地环境3.1 查看本地操作系统版本查看本地操作系统版本[root@jeven ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 3.2 查看零碎内核版本查看零碎内核版本[root@jeven ~]# uname -r 3.10.0-957.el7.x86_643.3 查看本地yum仓库状态配置阿里云的镜像源curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.reposed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo查看本地yum仓库状态[root@jeven yum.repos.d]# yum repolist all |grep enable base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com enabled: 10,072extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com enabled: 515updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com enabled: 4,996四、装置httpd服务4.1 装置httpd应用应用yum装置httpdyum install httpd -y ...

August 24, 2023 · 2 min · jiezi

关于linux:Docker部署开源项目DjangoCMS企业内容管理系统

@TOC 一、Django-CMS介绍1.1 Django-CMS简介Django-CMS是一款基于Django框架的开源企业内容管理系统,它性能实用、安全可靠,反对拖拽上传图片、轮播图、Docker 部署等性能,可轻松进行二次开发,多用于构建企业官网。1.2 Django-CMS特点分层页面对多语言网站的宽泛内置反对多站点反对草稿/公布工作流版本控制简单的公布体系结构,也能够在您本人的应用程序中应用前端内容编辑嵌套插件的分层内容构造您本人的应用程序能够挂钩的可扩大导航系统SEO 敌对的网址旨在齐全集成到其余应用程序中二、本地环境介绍2.1 本地环境规划本次实际为集体测试环境,操作系统版本为centos7.6。hostnameIP地址操作系统版本Docker版本jeven192.168.3.166centos 7.620.10.172.2 本次实际介绍1.本次实际部署环境为集体测试环境,生产环境请审慎应用;2.在Docker环境下胜利部署Django-CMS企业内容管理系统。三、本地环境查看3.1 查看Docker服务状态查看Docker服务是否失常运行,确保Docker失常运行。[root@jeven ~]# systemctl status docker● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2023-06-10 00:48:40 CST; 16h ago Docs: https://docs.docker.com Main PID: 9546 (dockerd) Tasks: 15 Memory: 160.7M3.2 查看Docker版本查看Docker版本[root@jeven ~]# docker -v Docker version 20.10.17, build 100c7013.3 查看docker compose 版本查看Docker compose版本,确保2.0以上版本。[root@jeven ~]# docker compose versionDocker Compose version v2.6.0四、下载django-cms-quickstart4.1 django-cms-quickstart介绍此版本应用运行的Python 3.9以及Django 3.2和Django CMS 3.11的最新版本。4.2 下载django-cms-quickstart下载django-cms-quickstart[root@jeven data]# git clone https://github.com/django-cms/django-cms-quickstart.gitCloning into 'django-cms-quickstart'...remote: Enumerating objects: 301, done.remote: Counting objects: 100% (118/118), done.remote: Compressing objects: 100% (62/62), done.remote: Total 301 (delta 91), reused 56 (delta 56), pack-reused 183Receiving objects: 100% (301/301), 88.28 KiB | 0 bytes/s, done.Resolving deltas: 100% (171/171), done.查看目录构造[root@jeven data]# cd django-cms-quickstart/[root@jeven django-cms-quickstart]# tree -L 2 ././├── backend│ ├── asgi.py│ ├── __init__.py│ ├── settings.py│ ├── static│ ├── templates│ ├── urls.py│ └── wsgi.py├── docker-compose.yml├── Dockerfile├── LICENSE├── manage.py├── README.md├── requirements.in└── requirements.txt3 directories, 12 files4.3 查看Dockerfile文件查看Dockerfile文件内容[root@jeven django-cms-quickstart]# cat Dockerfile FROM python:3.9WORKDIR /appCOPY . /appRUN pip install -r requirements.txtRUN python manage.py collectstatic --noinputCMD uwsgi --http=0.0.0.0:80 --module=backend.wsgi4.4 查看docker-compose.yml文件查看docker-compose.yml文件内容[root@jeven django-cms-quickstart]# cat docker-compose.yml version: "3"services: web: # the application's web service (container) will use an image based on our Dockerfile build: . # map the internal port 80 to port 8000 on the host ports: - "8000:80" # map the host directory to app (which allows us to see and edit files inside the container) volumes: - ".:/app:rw" - "./data:/data:rw" # the default command to run whenever the container is launched command: python manage.py runserver 0.0.0.0:80 # the URL 'postgres' or 'mysql' will point to the application's db service networks: - djangocmsnet env_file: .env-local database_default: # Select one of the following db configurations for the database image: postgres:13.5-alpine ports: - "5432:5432/tcp" # allow your local dev env to connect to the db environment: POSTGRES_DB: "db" POSTGRES_PASSWORD: "password" POSTGRES_HOST_AUTH_METHOD: "trust" SERVICE_MANAGER: "fsm-postgres" networks: - djangocmsnet volumes: - ".:/app:rw"networks: djangocmsnet:五、部署Django-CMS5.1 构建镜像构建镜像django-cms-quickstart_webdocker compose build web ...

August 23, 2023 · 3 min · jiezi

关于linux:Linux系统下KVM虚拟机的基本管理和操作

@TOC 一、查看本地环境1.查看零碎版本[root@serer1 ~]# cat /etc/os-release NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"HOME_URL="https://www.centos.org/"BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"CENTOS_MANTISBT_PROJECT_VERSION="7"REDHAT_SUPPORT_PRODUCT="centos"REDHAT_SUPPORT_PRODUCT_VERSION="7"2.查看防火墙状态[root@serer1 ~]# systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) since Wed 2022-10-19 00:09:43 CST; 7s ago Docs: man:firewalld(1) Main PID: 642 (code=exited, status=0/SUCCESS)3.查看selinux[root@serer01 ~]# getenforce Disabled3.查看libvirtd服务状态[root@server ~]# systemctl status libvirtd● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-10-16 17:53:24 CST; 2 days ago Docs: man:libvirtd(8) https://libvirt.org Main PID: 29472 (libvirtd) Tasks: 18 (limit: 32768) Memory: 34.8M CGroup: /system.slice/libvirtd.service └─29472 /usr/sbin/libvirtd --listen4.查看kvm装置后果[root@server ~]# lsmod|grep kvmkvm_intel 183621 4 kvm 586948 1 kvm_intelirqbypass 13503 3 kvm5.查看kvm虚拟机状态[root@server ~]# virsh -c qemu:///system list Id Name State---------------------------------------------------- 9 kvm01 running6.查看virsh版本[root@server ~]# virsh --version4.5.0[root@server ~]# virt-install --version1.5.0二、virsh常用命令1.列出虚拟机[root@server ~]# virsh list Id Name State---------------------------------------------------- 9 kvm01 running[root@server ~]# virsh list --all Id Name State---------------------------------------------------- 9 kvm01 running2.虚拟机开关机操作virsh start kvm01 #虚拟机开机virsh shutdown kvm01 #敞开虚拟机virsh destroy kvm01 # 强制进行虚拟机3.删除虚拟机virsh undefine kvm01 #彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚构磁盘4.设置虚拟机在宿主机开机时自启virsh autostart kvm01 # 宿主机开启时自启virsh autostart --disable kvm01 # 取开机自启5.挂起虚拟机virsh suspend kvm01 # 挂起虚拟机virsh resume kvm01 # 复原挂起的虚拟机6.查看虚拟机的配置文件[root@server ~]# virsh dumpxml kvm01 <domain type='kvm' id='9'> <name>kvm01</name> <uuid>65438c9d-81cd-cd83-01de-77a5ed5af051</uuid> <description>None</description> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>2</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> <boot dev='cdrom'/> <bootmenu enable='yes'/> </os> <features> <acpi/> <apic/> <pae/> </features> <cpu mode='custom' match='exact' check='full'> <model fallback='forbid'>IvyBridge-IBRS</model> <vendor>Intel</vendor> <feature policy='disable' name='ds'/> <feature policy='disable' name='acpi'/> <feature policy='require' name='ss'/> <feature policy='disable' name='ht'/> <feature policy='disable' name='tm'/> <feature policy='disable' name='pbe'/> <feature policy='disable' name='dtes64'/> <feature policy='disable' name='monitor'/> <feature policy='disable' name='ds_cpl'/> <feature policy='disable' name='vmx'/> <feature policy='disable' name='est'/> <feature policy='disable' name='tm2'/> <feature policy='disable' name='xtpr'/> <feature policy='disable' name='pdcm'/> <feature policy='require' name='movbe'/> <feature policy='disable' name='osxsave'/> <feature policy='disable' name='arat'/> <feature policy='disable' name='tsc_adjust'/> <feature policy='require' name='rdseed'/> <feature policy='require' name='smap'/> <feature policy='require' name='clflushopt'/> <feature policy='require' name='clwb'/> <feature policy='disable' name='intel-pt'/> <feature policy='require' name='sha-ni'/> <feature policy='require' name='umip'/> <feature policy='require' name='gfni'/> <feature policy='disable' name='md-clear'/> <feature policy='require' name='stibp'/> <feature policy='require' name='ssbd'/> <feature policy='require' name='xsaveopt'/> <feature policy='require' name='xsavec'/> <feature policy='require' name='xgetbv1'/> <feature policy='require' name='3dnowprefetch'/> <feature policy='disable' name='avx'/> <feature policy='disable' name='f16c'/> <feature policy='require' name='hypervisor'/> </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/nas/kvm/centos_kvm.img'/> <backingStore/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/storage/kvm/CentOS-7-x86_64-Minimal-1511.iso'/> <backingStore/> <target dev='hda' bus='ide'/> <readonly/> <alias name='ide0-1-1'/> <address type='drive' controller='0' bus='1' target='0' unit='1'/> </disk> <controller type='usb' index='0' model='piix3-uhci'> <alias name='usb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='ide' index='0'> <alias name='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:6c:cb:10'/> <source network='br0' bridge='br0'/> <target dev='vnet0'/> <model type='virtio'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/0'/> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/0'> <source path='/dev/pts/0'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <input type='mouse' bus='ps2'> <alias name='input0'/> </input> <input type='tablet' bus='usb'> <alias name='input1'/> <address type='usb' bus='0' port='1'/> </input> <input type='keyboard' bus='ps2'> <alias name='input2'/> </input> <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='16384' heads='1' primary='yes'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> <seclabel type='dynamic' model='dac' relabel='yes'> <label>+107:+107</label> <imagelabel>+107:+107</imagelabel> </seclabel></domain>7.对虚拟机配置文件操作virsh edit vm-name #批改虚拟机的配置文件virsh define file-name.xml #依据配置文件定义虚拟机8.查看KVM虚拟机相干配置文件[root@server ~]# ls /etc/libvirt/qemu/autostart kvm01.xml networks[root@server ~]# ls /etc/libvirt/qemu/networks/autostart br0.xml[root@server ~]# ls /etc/libvirt/qemu/networks/autostart/br0.xml三、KVM虚拟机的磁盘治理1.查看磁盘格式[root@server ~]# qemu-img info /nas/kvm/centos_kvm.img image: /nas/kvm/centos_kvm.imgfile format: qcow2virtual size: 40G (42949672960 bytes)disk size: 2.2Gcluster_size: 65536Format specific information: compat: 0.102.将raw格局磁盘文件转化为qcow2$ qemu-img convert -f raw -O qcow2 /data/centos7.raw /data/centos7.qcow# qemu-img covert -f 源格局 -O 指标格局 源磁盘文件 指标磁盘文件3.创立空的qcow2格局的磁盘文件[root@server kvm]# qemu-img create -f qcow2 /nas/kvm/test.qcow2 5GFormatting '/nas/kvm/test.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off [root@server kvm]# qemu-img info /nas/kvm/test.qcow2 image: /nas/kvm/test.qcow2file format: qcow2virtual size: 5.0G (5368709120 bytes)disk size: 196Kcluster_size: 65536Format specific information: compat: 1.1 lazy refcounts: false4.批改镜像文件大小[root@server kvm]# qemu-img resize ./test.qcow2 +7GImage resized.[root@server kvm]# qemu-img info /nas/kvm/test.qcow2 image: /nas/kvm/test.qcow2file format: qcow2virtual size: 12G (12884901888 bytes)disk size: 200Kcluster_size: 65536Format specific information: compat: 1.1 lazy refcounts: false5.给虚拟机新增硬盘——长期失效virsh attach-disk kvm01 /nas/kvm/test.qcow2 vdb --subdriver=qcow2# virsh attach-disk <虚拟机名称> <新增磁盘门路> <设施名> <磁盘格式类型>6.给虚拟机新增硬盘——永恒失效virsh attach-disk kvm01 /nas/kvm/test.qcow2 vdb --subdriver=qcow2 --config7.卸载硬盘virsh detach-disk kvm01 /nas/kvm/test.qcow2 #卸载长期失效virsh detach-disk kvm01 /nas/kvm/test.qcow2 --config # 卸载永恒失效8.查看虚拟机硬件状况[root@server kvm]# virsh dumpxml kvm01 |grep dev <boot dev='hd'/> <boot dev='cdrom'/> <devices> <disk type='file' device='disk'> <target dev='vda' bus='virtio'/> <disk type='file' device='disk'> <target dev='vdb' bus='virtio'/> <disk type='file' device='cdrom'> <target dev='hda' bus='ide'/> <target dev='vnet0'/> <source path='/dev/pts/0'/> <console type='pty' tty='/dev/pts/0'> <source path='/dev/pts/0'/> </devices>9.在WebVirtMgr上查看虚拟机硬盘新增状况 ...

August 23, 2023 · 5 min · jiezi

关于linux:OpenCloudOS-WOW-活动上线啦千份社区好礼等你来拿

由 OpenCloudOS 社区联结腾源会开源摘星打算 2023 推出的 OpenCloudOS Wow** 奉献征文活动,正式开启啦! 「OpenCloudOS Wow」有海量的挑战工作、丰富的成长激励、社区助教领导以及实际案例,帮忙大家理解和参加 OpenCloudOS 社区,并在社区中学习和成长。同时让更多企业和社区搭档获取 OpenCloudOS 的典型场景解决方案和最佳实际,与社区一起摸索更多的单干可能性。 流动亮点1、海量社区实际工作、千份精美奉献礼品,期待挑战者一展身手 2、投递企业用户案例/社区奉献笔记,有机会被收录社区优良用户案例精选集,与社区年度报告独特重磅公布。 3、优良贡献者/优良案例投递者,还可取得社区年度奖杯,在年度盛宴独特交换 4、参加社区活动支付社区实际/奉献证书,助力实习/求职 一、流动怎么玩?流动一:参加社区奉献,赢取社区丰富好礼OpenCloudOS 设置了海量根底/老手/进阶/挑战等不同难度和类型的社区工作以及丰富的社区处分,实现社区指定工作即可支付周边礼品及奉献证书。 流动二:投递社区案例,联动社区重磅公布OpenCloudOS 面向各行业征集 OpenCloudOS 社区案例与用户故事。投递社区奉献笔记或企业用户案例,不仅能够取得社区定制礼包,还有机会被收录社区优良用户案例精选集在官网渠道推出、参加社区年度报告重磅公布。 流动工夫:2023 年 8 月 18 日-12 月中上旬 流动具体参加形式请点击『浏览原文』进入官网查看。 二、通过流动,你能够播种 三、OpenCloudOS 是什么?OpenCloudOS 是一个凋谢中立的操作系统社区我的项目,由操作系统、云平台、软硬件厂商及集体发动,旨在打造全面中立、凋谢、平安、稳固易用、高性能的 Linux 服务器操作系统。 OpenCloudOS 最新公布的全自研社区 9.0 版本,是国内首个应用最新内核的 Linux 发行版,由腾讯等十余家企业共同开发并长期保护,其内核及用户态软件均为自主选型、独立演进,在操作系统发行版的全链路均实现自主可控。 目前,OpenCloudOS 社区及衍生版本装机量累计超过 1000 万节点,笼罩了银行、保险、证券等 12 大行业,经验了海量业务的长时间验证。同时,OpenCloudOS 与 900 多款国产软硬件、30000 多款开源软件实现兼容性测试,与京东云、九州云、浪潮云、海云、灵雀云等云厂商单干镜像上架。 四、诚挚感激以下合作方

August 18, 2023 · 1 min · jiezi

关于linux:Linux系统安装及使用HHDBCS

1 装置1.1 下载HHDBCS应用浏览器进入官网社区(恒辉产品社区),抉择HHDBCS子社区,首页点击下载,进入下载页面; 抉择官网下载/云盘下载皆可。在弹出框中抉择如图所示选项,点击下载; 1.2 装置HHDBCS进入下载目录,对HHDBCS压缩包进行解压; tar -zxvf hhdbcs_master_lin_x64_2023-08-16.tar.gz 解压实现后,进入HHDBCS文件夹,运行 install.sh; 能够看到,文件夹中呈现软件图标; 双击该图标,弹出许可框;按程序点击更新——浏览,抉择方才下载的.dat文件,点击确定; 待弹出确认框后,点击下一步,即可应用HHDBCS。 2 连贯数据库咱们兼容市面上所有支流数据库,用户可自行抉择; 用户可依据需要自行设置参数; HHDBCS提供SSH隧道连贯,这是咱们的亮点之一; 点击“登陆”,即可连贯相应的数据库; 软件内能够很不便的切换模式。

August 18, 2023 · 1 min · jiezi

关于linux:CentOS79中的Glibc217源码编译升级到Glibc231

一、引言在Liunx零碎CentOS7.9的中部署我的项目遇到了Glibc版本过低的问题,应用yum装置最高只能装置Glibc2.17并不能满足要求,本文介绍了如何用源码编译的办法降级Glibc的版本。 二、筹备工作1、配置yum阿里镜像源查看yum以后配置的仓库,如果yum配置的不是阿里云源,请配置阿里云源。 yum repolist all验证是否能ping通阿里云 # 如果不能ping通可能是DNS没有配置ping mirrors.aliyun.com备份官网的原yum源配置 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back下载Centos-7.repo文件 # 如果没有wget命令,应用yum install wget进行装置wget -o /etc/yum.repos.d/CentOS-Base.repo http://mirros.aliyun.com/repo/Centos-7.repo革除及生成缓存 # 革除yum缓存yum clean all# 缓存阿里云源yum makecache# 测试阿里云源yum list# 更新yum源yum update2、装置Python3yum install python33、降级gcc# 下载软件包wget https://mirrors.aliyun.com/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz# 解压依赖包tar -zxf gcc-9.3.0.tar.gzcd gcc-9.3.0/# 下载4个依赖包./contrib/download_prerequisites# 预编译mkdir buildcd build../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr/local/gcc# 查看cpu核数cat /proc/cpuinfo| grep “processor”| wc -l# -j4中的数字为cpu核数,及并发工作工作数量,能够进步编译效率,编译工夫比拟久。make -j4# 编译装置make install# 配置软链接mv /usr/bin/gcc /usr/bin/gcc_4.8.5ln -s /usr/local/gcc/bin/gcc /usr/bin/gccmv /usr/bin/g++ /usr/bin/g++_4.8.5ln -s /usr/local/gcc/bin/g++ /usr/bin/g++# 查看gcc版本gcc -v 4、降级make# 下载软件包wget https://mirrors.aliyun.com/gnu/make/make-4.3.tar.gz# 解压tar -zxf make-4.3.tar.gzcd make-4.3/# 预编译mkdir buildcd build./configure --prefix=/usr# -j4中的数字为cpu核数,及并发工作工作数量,能够进步编译效率make -j4# 编译装置make install# 查看版本make -v5、装置bisoyum install biso ...

August 18, 2023 · 1 min · jiezi

关于linux:linux命令行练习bandit一

linux命令很久没用了,最近从新温习一下,找到了一个wargames系列游戏,能够依照要求进行相干命令行操作,从而通关游戏,先从Bandit开始Level 0~3 (ls)按要求连贯bandit.labs.overthewire.org,端口号2220 ssh bandit0@bandit.labs.overthewire.org -p 2220 password: bandit0Level 1~2仅需cd到对应文件夹,cat查看即可,Level3须要查看暗藏文件,ls -a找到暗藏文件即可。 明码如下: lv1: NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjLlv2: rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzilv3: aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiGlv4: 2EW7BBsr6aMMoJ2HjW067dm8EgX26xNeLevel 4~7 (grep + find)Level 4 查找 human-readable文件这里明码是/^[0-9a-zA-Z]$/格局,因而grep过滤内容,命令如下: grep -rE "^[0-9a-zA-Z]+$" ./inhere/Level 5~7条件查找过滤level5条件如下:human-readable1033 bytes in sizenot executable按过滤的效率,先比照size,再过滤不能执行的,最初用grep过滤内容,命令如下: find ./inhere/ -type f -size 1033c ! -executable -exec grep -rE "^[0-9a-zA-Z]+$" {} +level6过滤条件如下:owned by user bandit7owned by group bandit633 bytes in size命令如下(因为是练习题,所以换成管道的写法,实际上这里用这种写法效率并不高): find / -type f -size 33c -user bandit7 -group bandit6 | xargs -I{} grep -rE "^[0-9a-zA-Z]+$" {}但这样又有一个问题,打印内容中大量Permission denied,这是因为find从根目录开始找,会找到很多无权拜访的文件,因而须要将谬误重定向,写法如下: ...

August 17, 2023 · 2 min · jiezi

关于linux:更多openEuler镜像加入AWS-Marketplace

自2023年7月openEuler 22.03 LTS SP1正式登陆AWS Marketplace后,openEuler社区始终继续于在AWS上提供更多版本。 目前,openEuler22.03 LTS SP1 ,SP2两个版本及 x86 arm64两种架构的四个镜像均可通过AWS对外提供,且在亚太及欧洲15个Region凋谢应用,openEuler将继续提供更多版本和区域。 openEuler 22.03 LTS AMI(Amazon Machine Images)由openEuler社区提供反对。 点击查看具体的应用领导。

August 16, 2023 · 1 min · jiezi

关于linux:统信UOS服务器操作系统报模块依赖问题的解决办法

统信UOS服务器操作系统20版本1050a在yum或dnf进行软件治理中,会报错,如下,尽管临时没发现有啥影响,然而看着很苦楚 模块依赖问题: 问题 1: module docker:uelc20:2020230105014926:bd07c72b-0.x86_64 requires module(container-tools:uelc20), but none of the providers can be installed - module container-tools:uelc20:2020220902112528:b5192a5c-0.x86_64 conflicts with module(container-tools:an8) provided by container-tools:an8:2020220106133314:b4ae771c-0.x86_64 - module container-tools:an8:2020220106133314:b4ae771c-0.x86_64 conflicts with module(container-tools:uelc20) provided by container-tools:uelc20:2020220902112528:b5192a5c-0.x86_64 - module container-tools:uelc20:2020221229072209:b5192a5c-0.x86_64 conflicts with module(container-tools:an8) provided by container-tools:an8:2020220106133314:b4ae771c-0.x86_64 - module container-tools:an8:2020220106133314:b4ae771c-0.x86_64 conflicts with module(container-tools:uelc20) provided by container-tools:uelc20:2020221229072209:b5192a5c-0.x86_64 - module container-tools:uelc20:2020230130082020:b5192a5c-0.x86_64 conflicts with module(container-tools:an8) provided by container-tools:an8:2020220106133314:b4ae771c-0.x86_64 - module container-tools:an8:2020220106133314:b4ae771c-0.x86_64 conflicts with module(container-tools:uelc20) provided by container-tools:uelc20:2020230130082020:b5192a5c-0.x86_64 - conflicting requests 问题 2: module rust-toolset:uelc20:2020221215055743:301fb081-0.x86_64 requires module(llvm-toolset:uelc20), but none of the providers can be installed - module llvm-toolset:uelc20:2020220702202350:37d8506f-0.x86_64 conflicts with module(llvm-toolset:an8) provided by llvm-toolset:an8:2020211222153255:37d8506f-0.x86_64 - module llvm-toolset:an8:2020211222153255:37d8506f-0.x86_64 conflicts with module(llvm-toolset:uelc20) provided by llvm-toolset:uelc20:2020220702202350:37d8506f-0.x86_64 - module llvm-toolset:uelc20:2020221115064120:37d8506f-0.x86_64 conflicts with module(llvm-toolset:an8) provided by llvm-toolset:an8:2020211222153255:37d8506f-0.x86_64 - module llvm-toolset:an8:2020211222153255:37d8506f-0.x86_64 conflicts with module(llvm-toolset:uelc20) provided by llvm-toolset:uelc20:2020221115064120:37d8506f-0.x86_64 - conflicting requests查了点材料,发现是某些模块被禁用导致,我这边是是container-tools和llvm-toolset两个模块,都和虚拟化相干,解决办法如下 ...

August 16, 2023 · 1 min · jiezi

关于linux:开源不等于免费Red-Hat-调整-CentOS-项目带来的思考

大家好,我是张晋涛。 最近对于 Red Hat,CentOS 以及开源等方面有很多探讨,每个人都有各自的观点和认识,其实在 CentOS Linux 发表后续进行公布,推出 CentOS stream时我就想写相干内容来着,起初只是和共事们进行了一些外部交换并未成文。 先介绍下背景,近 10 年内我的桌面发行版次要应用 Fedora ,服务器跑的最多的是 CentOS。 早年我也保护着一个近 2 万人的 CentOS 社群(起初太忙就辞任了),当初我的公众号『MoeLove』的订阅者中也有一部分是因而过去的。 我也给 CentOS 报过 Bug,不过目前 CentOS Bug Tracker 这个网站曾经拜访不到了,Bug 报告曾经转向到 Red Hat 的 Bugzilla 了。 翻了下邮件也有晚期和他人交换的一些记录。 这些背景尽管与本文没有间接关系,但可能这是我最初一次写文章谈 CentOS 相干的内容了吧,作为我曾在这个畛域中留下过的一些痕迹,也曾为 CentOS 的倒退做出过一些致力。 此外,本文所有观点仅代表集体认识,亦不形成任何操作系统/发行版抉择的倡议。 2023 年 6 月,Red Hat 发表了一个令许多人诧异的决定:它将不再向 git.centos.org 同步它的源 RPM(SRPM)包,也就是 Red Hat Enterprise Linux(RHEL)的源代码。这意味着,那些依赖于 git.centos.org 来构建和散发本人的 Linux 发行版的我的项目,如 Rocky Linux、AlmaLinux 等,将无奈轻松地获取和重建 RHEL 的二进制包。Red Hat 还示意,它将持续在 git.centos.org 上公布 RHEL 的源代码,但这只与 CentOS 我的项目构建和公布的二进制包无关。Red Hat 解释说,这一决定是基于它对开源的承诺,以及它心愿将 CentOS Stream 作为 RHEL 的上游开发平台。 ...

July 6, 2023 · 4 min · jiezi

关于linux:普通用户启动-supervisor-报-HTTP-错误strace

公司的开发对生产环境都有普通用户 www 的权限,采纳堡垒机登录到生产环境的机器。 默认 supervisor 应用 root 用户启动,开发没有权限间接批改配置和操作 supervisor 治理的过程,所以 supervisor 都采纳 www 用户启动就解决问题了。 然而明天操作生产环境的时候,报的谬误令人懵逼,SRE 同学折腾了良久,配置来配置去,搞不明确为啥 www 就是启动不了 supervisor ! 报错信息是这样的: [www@**************** ~]$ supervisord -c /etc/supervisord.confError: Cannot open an HTTP server: socket.error reported errno.EACCES (13)For help, use /usr/bin/supervisord -h翻遍谷歌、百度,找到的材料,没有一个真的能解决了问题,焦头烂额。 忽然想起 strace 这个命令,于是乎,我改成这样子执行: [www@**************** ~]$ strace supervisord -c /etc/supervisord.conf奇观产生了! read(6, "\0S(\1\0\0\0N(\3\0\0\0R'\0\0\0R \0\0\0R\24\0\0\0(\1\0\0"..., 4096) = 1381read(6, "", 4096) = 0close(6) = 0close(5) = 0close(4) = 0getpid() = 3656unlink("/var/run/supervisor/supervisor.sock.3656") = -1 ENOENT (No such file or directory)socket(AF_UNIX, SOCK_STREAM, 0) = 4bind(4, {sa_family=AF_UNIX, sun_path="/var/run/supervisor/supervisor.sock.3656"}, 42) = -1 EACCES (Permission denied)unlink("/var/run/supervisor/supervisor.sock.3656") = -1 ENOENT (No such file or directory)write(2, "Error: Cannot open an HTTP serve"..., 75Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)) = 75write(2, "For help, use /usr/bin/superviso"..., 38For help, use /usr/bin/supervisord -h) = 38close(4) = 0rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fa06ce997e0}, {sa_handler=0x7fa06d1b0750, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fa06ce997e0}, 8) = 0close(3) = 0close(11) = 0exit_group(2) = ?+++ exited with 2 +++原来是没有权限,把 sock 文件挪到 www 用户下,问题解决。 ...

July 4, 2023 · 4 min · jiezi

关于linux:linux-java-shell-启动脚本

Java 启动脚本 #!/bin/bash#===========================================================================================# configuration#===========================================================================================APP_NAME=Project-1.0.0.jar #批改app名称#JAVA_HOME=/usr/local/jdk-11.0.2 #jdk地位 配了环境变量能够不设置,没有环境变量须要开启,指向jdk门路LOG_DIR=logs #日志目录OPEN_GCLOG=false #是否开启gc日志OPEN_OOM_DUMP=false #是否开启out of memoryOPEN_START_LOG=false #是否开启启动日志OPEN_ILLEGAL_REFLEX_WARNING=false #是否敞开反射正告#===========================================================================================# init val#===========================================================================================export JAVA_HOMEBASE_DIR=$(dirname $(readlink -f "$0"))APP_FULLNAME="${BASE_DIR}/${APP_NAME}"JAVA="${JAVA_HOME}/bin/java"JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')JAVA_OPT=#===========================================================================================# check jdk#===========================================================================================error_exit (){ echo "ERROR: $1 !!" exit 1}if [ -z "${JAVA_HOME}" ]; then error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"fi#===========================================================================================# init flags#===========================================================================================init_flags(){ for x in "$@" do if [ $x = "-gc" ]; then OPEN_GCLOG=true fi if [ $x = "-oom" ]; then OPEN_OOM_DUMP=true fi if [ $x = "-sl" ]; then OPEN_START_LOG=true fi if [ $x = "-iw" ]; then OPEN_ILLEGAL_REFLEX_WARNING=true fi done}init_flags $@#===========================================================================================# common func#===========================================================================================build_java_opt(){ if $OPEN_GCLOG; then if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]; then JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/${LOG_DIR}/gc.log:time:filecount=10:filesize=100m" else JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/${LOG_DIR}/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" fi fi if $OPEN_ILLEGAL_REFLEX_WARNING; then if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]; then JAVA_OPT="${JAVA_OPT} --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED" fi fi if $OPEN_OOM_DUMP; then JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/${LOG_DIR}/heapdump.hprof" fi JAVA_OPT="${JAVA_OPT} -Dloader.path=.,resources,lib" JAVA_OPT="${JAVA_OPT} -Djava.library.path=."}ensure_log_dir(){ if [ ! -e ${BASE_DIR}/${LOG_DIR} ]; then mkdir ${BASE_DIR}/${LOG_DIR} fi}build_java_optensure_log_dir#===========================================================================================# Application#===========================================================================================#应用阐明,用来提醒输出参数help() { echo "help: sh 执行脚本.sh [start|stop|restart|status]" echo "-gc:open save gc logs" echo "-oom:open out of memory" echo "-sl:open save start log" echo "-iw:open illegal reflex warning" exit 1}#检查程序是否在运行is_exist(){ pid=`ps -ef|grep ${APP_FULLNAME}|grep -v grep|awk '{print $2}' ` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 1 else return 0 fi} #启动办法start(){ build_java_opt ensure_log_dir is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running. pid=${pid} ." else if $OPEN_START_LOG; then nohup "${JAVA}" -jar ${JAVA_OPT} "${BASE_DIR}/${APP_NAME}" > ${BASE_DIR}/${LOG_DIR}/startup.log 2>&1 & else nohup "${JAVA}" -jar ${JAVA_OPT} "${BASE_DIR}/${APP_NAME}" > /dev/null 2>&1 & fi is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is start success..." else echo "${APP_NAME} is start failed..." fi fi} #进行办法stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid echo "${APP_NAME} is stoped..." else echo "${APP_NAME} is not running..." fi} #输入运行状态status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${pid}..." else echo "${APP_NAME} is NOT running..." fi} #重启restart(){ stop start} #依据输出参数,抉择执行对应办法,不输出则执行应用阐明case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) help ;;esac

July 3, 2023 · 2 min · jiezi

关于linux:Linux系统编程训练营1Linux系统概要

再论计算机系统计算器零碎由”躯体“和”灵魂“两局部组成 ”躯体“ : 形成计算机系统的电子设备(硬件)”灵魂“ :指挥 ”躯体“ 实现 ”动作“ 的指令序列 (软件)”躯体“ 外围 :中央处理器 (CPU)”灵魂“ 外围 :操作系统(OS)计算机系统的诞生是为了执行数据处理(计算)工作。那么,如何获取计算工作,并反馈工作执行后果?数据输出与输入是计算机系统不可获取的局部 计算工作执行流程通过交互设施或网络向计算机系统发动申请依据申请将工作指令加载进入内存CPU 从内存中取指令,并逐条执行计算工作的最终后果暂存入内存内存数据通过交互设施或网络设备进行反馈 操作系统与过程概要什么是程序? 程序的实质是指令和数据的汇合 指令:批示 CPU 执行动作的命令数据:CPU 执行动作的操作指标程序的分类 应用程序:用户可间接应用,为用户提供间接帮忙的程序程序中间件:少数应用程序的通用性能,用于辅助应用程序的运行操作系统:间接操作硬件设施,并为应用程序与程序中间件提供运行环境当代计算机系统架构图 过程-程序的执行通常状况下,程序在操作系统上以过程为单位运行每个程序运行后由一个或多个过程形成过程是操作系统工作的根本单元,也是系统资源的根本调配单位程序是”死“的,过程是”活“的 程序的实质只是二进制数据,不加载执行没有任何价值过程是计算机系统对程序的一次加载执行,即:执行计算工作的过程程序 VS 过程 深入浅出驱动程序应用程序与外部设备少数状况下,应用程序须要借助外部设备能力实现计算工作外部设备:除 CPU 与内存之外的其它计算机硬件(如:硬盘,网卡,显卡) 应用程序设施拜访间接拜访 开发成本高:应用程序必须相熟各类外设的硬件个性开发周期长:业务逻辑 + 设施逻辑利用场景难:其它应用程序可能同时拜访外设间接拜访 应用程序通过软件层(驱动程序)接口以对立形式拜访外设设施驱动程序设施驱动程序是外设拜访接口,对应用程序提供对立的外设拜访形式 Linux 设施驱动模型形象各种外设的个性,简化设施驱动开发方式设施类型:字符设施,块设施,网络设备,等对于对立类型的设施,能够通过对立接口进行拜访Linux 零碎工作模式Linux 设施驱动模型 存在问题设施驱动程序并非惟一拜访外设的形式如何限度过程必须依照规定通过驱动程序拜访外部设备? Linux 零碎工作模式 内核职责:以对立的形式有序的调配硬件资源,保障用户工作依照冀望的形式执行。用户模式 (User Mode) 执行应用程序公有代码,受限制的拜访内存,无奈间接拜访外部设备内核模式 (Kernel Mode) 执行内核代码,可拜访所有硬件资源,可立刻暂停过程的执行(过程治理)绝大多数设施驱动程序执行于内核模式工作模式与零碎调用Linux 零碎的工作模式:零碎调用 (System Call)应用程序与操作系统内核的间接接口(表现形式为函数)零碎调用决定了应用程序如何与内核打交道为什么须要零碎调用 系统资源无限,须要对立有序的调度多个过程可能拜访同一资源,进而产生抵触一些特定的性能必须有操作系统内核实现(如:准确延时)。。。过程零碎调用后,由用户模式切换到内核模式(执行内核代码)工作模式的转变通常由中断触发(不同于一般函数调用)用户过程通过零碎调用申请内核实现资源分配,硬件拜访等操作所有过程申请集中到内核,内核可对立调度解决,协调过程的执行Linux 零碎编程概要Linux 零碎的工作模式计算机系统缩影 Linux 零碎编程波及的内容

June 29, 2023 · 1 min · jiezi

关于linux:RocketMQ-on-openEuler-提供高性能消息队列的稳定性解决方案

RocketMQ on openEuler,是一种将 RocketMQ 消息中间件通过容器化的形式部署在 openEuler 操作系统上运行,借助 openEuler 零碎对于 OS 缓存回收效率加强的内核个性,晋升消息中间件在面向超大规模高并发、高吞吐量、低提早场景下稳定性和可靠性的软件解决方案。 RocketMQ 音讯队列在稳压测试中遇到的 OOM 问题挪动云 RocketMQ 音讯队列产品正式上线前,通过压测工具,创立多组生产者/消费者过程对 RocketMQ 独享集群做多轮性能和稳定性的压力测试。 测试环境 压测后果在某次继续长时间的压测过程中,发现音讯收发吞吐,在一段时间内的某一时刻会呈现大幅度 TPS(生产/生产)抖动降落的景象,并且是周期性的。挪动云 RocketMQ 音讯队列始终都比较稳定运行,为何在高并发的压测下也会呈现 TPS 的抖动?咱们初步狐疑是 CPU 负载或者 RocketMQ Broker 组件 GC 频率过高导致,但通过查看 CPU 负载和 JVM GC 频率并未发现任何异样。最终,通过排查发现是因为 Broker Pod 过程中的 buff/cache 在继续长时间压测下一直减少,零碎无奈及时无效回收,导致 Pod 中的运行过程占用内存空间超出事后设置的 Limit 限度,触发了 OOM Killer 机制重启了 Broker Pod。 RocketMQ on openEuler—解决大规模高并发场景下晋升稳定性的新抉择为何在继续高并发下进行音讯收发会导致系统的 buff/cache 的继续减少?通过翻阅操作系统手册,可知 buff/cache 次要体现在零碎的 PageCache 上。 PageCache 在 RocketMQ 音讯存储中的重要作用PageCache 也叫页缓冲或文件缓冲,在 linux 读写文件时,它用于缓存文件的逻辑内容,从而放慢对磁盘上映像和数据的拜访。上图中,红色局部即为,PageCache。可见 PageCache 的实质是由 Linux 内核治理的内存区域。平时咱们写的各种程序,通过 mmap 及 buffered I/O 将文件读取到内存空间实际上都是读取到 PageCache 中。为了在大规模高并发场景下实现实现低提早、高吞吐的指标,RocketMQ 音讯队列的存储模块次要采纳如下两种计划。 ...

June 28, 2023 · 1 min · jiezi

关于linux:记录某个程序无法启动的诡异问题

记录某个程序无奈启动问题2023.06.27 背景介绍一个独立的程序,下文称作test-bin,在start.sh脚本中被调用,start.sh中大略的代码如下所示: #!/bin/bashkillall test-apikiallall test-bintest-bin 1>/dev/nulltest-api 1>/dev/null之所以用start.sh脚本启动test-bin,是因为整个零碎波及到多个服务及一些其余操作,所以放到start.sh脚本中。 另外一个独立的程序,应用go编写,对外提供接口,能够重启服务,下文称作test-api,如果test-api收到须要重启的申请,则调用start.sh脚本重新启动所有的程序。大略的代码如下所示: func Restart(c *gin.Context) { go func() { out, err := exec.Command(utils.ShellToUse, "-c", "start.sh").Output() if err != nil { model.Loger("Error", fmt.Sprintf("restart error: %s, out: %s", err.Error(), out)) return } }() response.Ok(c)}问题景象在终端中手动执行start.sh脚本,所有的服务都能够失常启动,零碎能够失常运行;当test-api收到申请后重启服务,test-bin却无奈失常启动,失常状况下应该会有两个test-bin过程,但发现只有一个。另外一个过程平白无故没有启动,也没有任何core文件信息;问题定位及剖析因为失常状况下,应该会启动两个test-bin过程,目前只启动了一个,查看以后已启动的test-bin的文件描述符,发现如下: bash-5.0# ls -l /proc/29764/fdtotal 0lr-x------ 1 root root 64 Jun 16 10:00 0 -> /dev/nulll-wx------ 1 root root 64 Jun 16 10:00 1 -> /dev/nulll-wx------ 1 root root 64 Jun 16 10:00 2 -> 'pipe:[100456522]'lrwx------ 1 root root 64 Jun 16 10:00 3 -> /dev/zero而对于通过终端执行start.sh脚本,可能失常启动两个test-bin过程的时候,查看test-bin过程的文件描述符,是如下内容: ...

June 28, 2023 · 1 min · jiezi

关于linux:运维工程师有哪些常用的技术网站

作为运维工程师,理解并利用罕用的技术网站能够极大地提高工作效率和解决问题的能力。本篇整顿了一些罕用的技术网站,有的可能须要迷信上网能力拜访。这些网站提供了各种与运维相干的资源、工具和社区反对,包含技术文档、教程、工具、社区探讨等:1. Stack Overflow这是一个广受欢迎的技术问答社区,你能够在这里发问和答复与运维相干的问题。 拜访地址:https://stackoverflow.com/2. DevOps Stack Exchange这是一个专一于DevOps畛域的问答社区,涵盖了与软件开发和运维相干的各种问题。 拜访地址:https://devops.stackexchange.com/3. Reddit这是一个风行的社交新闻和探讨网站,有一个专门探讨DevOps话题的子版块。 拜访地址:https://www.reddit.com/r/devops/4. InfoQ:这个网站提供了对于软件开发和IT畛域的新闻、文章、演讲录像和技术趋势等资源。 拜访地址:https://www.infoq.com/infoq中国:https://www.infoq.cn/5. DZone这是一个开发者社区网站,提供了宽泛的技术文章、教程和资源,其中也包含一些与运维相干的内容。 -拜访地址:https://dzone.com/ 6. GitHub这是一个代码托管平台,你能够在这里找到开源的运维工具、我的项目和脚本。 拜访地址:https://github.com/7. Docker Hub这是一个Docker容器镜像的存储库,你能够在这里搜寻、下载和分享各种罕用的容器镜像。 拜访地址:https://hub.docker.com/8. Server Fault这是一个专一于系统管理员和网络管理员的问答网站,你能够在这里找到对于服务器配置、故障排除和网络管理方面的问题和解决方案。 拜访地址:https://serverfault.com/9. Reddit 的 r/sysadmin这是一个系统管理员的业余社区,你能够在这里与其余运维人员交流经验、发问和获取技术倡议。 拜访地址:https://www.reddit.com/r/sysadmin/10.  Linux这是一个对于 Linux 操作系统和开源技术的综合门户网站,你能够在这里找到无关服务器治理和运维方面的教程、新闻和资源。 拜访地址:https://www.linux.com/11.  DigitalOcean Community这是一个由 DigitalOcean 提供的社区平台,提供对于云计算、服务器治理和开发的教程、文档和问答。 拜访地址:https://www.digitalocean.com/community12.  LinuxQuestions这是一个对于 Linux 和开源技术的问答和探讨社区,提供了宽泛的主题和技术支持。 拜访地址:https://www.linuxquestions.org/13. Linux FoundationLinux Foundation是一个致力于推动开源技术倒退的非营利组织,在寰球范畴内都有很高的知名度和影响力,他们提供各种与Linux和开源技术相干的培训和认证课程。 拜访地址:https://training.linuxfoundation.cn/这些网站涵盖了宽泛的技术畛域,包含运维、开发、云计算、容器化等。它们提供了丰盛的资源和社区探讨,可帮忙咱们解决问题、学习新常识和与其余行业专业人士交换。点击链接,畅读精彩文章,从中获取洞见,为本人的技术之旅注入新的能源!关注我的微信公众号,不错过更多精彩内容。 【K8S(专一于深入研究K8S相干的各种技术和常识分享。)】:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz... 【Go&Py(涵盖了Go和Python两种风行的编程语言。)】:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz... 【Ops(运维畛域的探讨和交换。)】:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz...

June 25, 2023 · 1 min · jiezi

关于linux:运维想要不背锅这7点了解一下

所谓的“不背锅”,我心愿强调的是运维工程师应该防止因本身问题所带来的适度承担责任和不必要的危险,欢送留言并留下你的认识。上面总结的几点: 清晰的职责边界定期维护好运维文档长期批改配置文件也要做好备份定期备份重要数据公布变更到生产之前肯定要公布到测试环境严格测试对重要的根底指标、业务指标做好监控肯定要分明意识到可能会因本身起因带来的误操作有几处还须要再深刻解读肯定要分明意识到可能会因本身起因带来的误操作:比方工作态度有问题,老是下班早退、老是销假,还老是各种借口、还各种推卸,这种人难免会让领导不称心,那领导必定怄气呀!领导怄气把你KO一顿,影响情绪,情绪不好就必定工作不分心了,容易走神,一走神就减少了误操作的危险。默默致力晋升本人的技能,放弃虚心的心态,不然就学艺不精,还自以为是的各种乱敲命令,这造成失误的危险是极大的。管好本人的口舌,之所以提这一点,是为了揭示那些技术好且性情沉闷的同学。这类同学往往是长于表白,敢于体现本人。记住了,跟你同级的人能够这样,但和你的下属可就得管住本人了,就算你很牛逼,也不能抢下属风头,兽性比鬼还可怕,说不定哪天就让你背个锅,或者把你弄走了。放弃身心健康,提这一点我认为也是很有必要提一下。首先说说身体健康吧,比方当初少数人有各种各样的喜好或嗜好,导致熬夜适度,第二天下班精力不佳。这种状况带来误操作的危险也是极大的。那再来要提的就是心态衰弱,怎么说呢?那就说说当下咱们每个人所面临的。尽管疫情过来了,但钱不好挣,各种生存压力大,工作上大家又是各种卷,心态上难免会发生变化,可能会带着一个不良的心态去看待本身的工作,这可就有点危险了,比方把容易走极端的人逼急了可是要删库跑路的。所以,还要时刻调整本人的心态。周末进来走走、多陪伴老婆孩子、多和亲朋好友诉说、做爱做的事件。总而言之就是,在现在低压的社会环境里,成年人要学会苦中作乐,只有用正当的形式发泄完,第二天就还是一条好汉。清晰的职责边界:别什么都乱“干”,调配的活就用心干好,没调配的活可别抢着干,可能会干得好没处分,但干得不好预计就有背上锅的危险。踊跃主动性诚然重要,但肯定要防止越权口头。 定期维护好运维文档:及时记录和更新所保护的资产,利用等信息,或者关键性的操作步骤、配置信息等文档。因为工夫长了不敢保障还记得。所以,肯定要有输入。再者就是,说不定哪天要到职,也不便疾速的输入一份交接文档。 长期批改配置文件也要做好备份:在进行长期配置批改时,要当时对原始配置文件做好备份,以便在呈现问题时可能疾速复原到失常状态。这对经验不足的老手来说,是最容易犯的问题。就怕是一顿操作猛如虎,定睛一看,崩了。 点击链接,畅读精彩文章,从中获取洞见,为本人的技术之旅注入新的能源!关注我的微信公众号,不错过更多精彩内容。 【K8S(专一于深入研究K8S相干的各种技术和常识分享。)】:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz... 【Go&Py(涵盖了Go和Python两种风行的编程语言。)】:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz... 【Ops(运维畛域的探讨和交换。)】:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz...

June 25, 2023 · 1 min · jiezi

关于linux:linux手动安装nginx

下载并筹备nginx源码从官网下载即可:http://nginx.org/en/download.html之后应用tar zxvf解压。 下载安装pcre插件可参考:https://blog.csdn.net/hjxloveqsx/article/details/121224144办法是下载源码包后解压,进入执行./configure、make、make install。 下载安装openssl可参考:https://cloud.tencent.com/developer/article/2292103?from=1542...其中在编译时可能会报出Can't locate IPC/Cmd.pm in @INC,此时须要装置perl-CPAN,可参考:https://blog.csdn.net/sd4493091/article/details/122220902、ht...。我参考的是第一个链接,配置cpan的shell时全副应用默认配置。尔后openssl的装置步骤与后面雷同,即make、make install。 下载安装zlib返回http://www.zlib.net/fossils/下载解压,之后执行./configure、make、make install。 装置nginx进入nginx解压后的目录,执行./configure --prefix=/app/nginx/nginx --with-openssl=/app/nginx/openssl-3.1.0 --with-http_ssl_module --with-stream,其中prefix为指定装置目录,--with-openssl=/app/nginx/openssl-3.1.0为指定openssl源码门路(解压后的openssl门路,非装置后的,如果装置openssl后执行./configure仍然报找不到openssl则须要手动指定),--with-http_ssl_module和--with-stream为装置反对https和stream配置的插件,最初make、make install。全副过程可参考:https://blog.csdn.net/m0_37959155/article/details/108913157

June 16, 2023 · 1 min · jiezi

关于linux:Rosettahdf5-Ubuntu编译

环境信息我的项目值操作系统Ubuntu 18.04.6 LTScpu8核内存16Gg++7.5.0Python2.7.17rosettarosetta 3.13装置装置依赖库sudo apt-get updatesudo apt-get install libboost-dev配置环境变量编译文件~/.bashrc 增加以下内容 export ROSETTA=/root/rosetta_src_2021.16.61629_bundleexport ROSETTA3_DB=$ROSETTA/main/databaseexport ROSETTA_BIN=$ROSETTA/main/source/binexport PATH=$PATH:$ROSETTA_BINexport LD_LIBRARY_PATH=$ROSETTA/main/source/bin:$LD_LIBRARY_PATHROSETTA批改为源码目录装置HDF5从这里下载hdf5源码,基于源码进行装置 cd hdf5-1.12.0./configure --prefix=/usr/local/hdf5 --enable-fortranmakesudo make installsudo make check-install装置胜利后须要增加环境变量,同样编辑文件,增加以下内容 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/hdf5/serial执行source ~/.bashrc命令使其失效 hdf5装置胜利后默认lib文件寄存在/usr/lib/x86_64-linux-gnu/hdf5/serial目录下,头文件(.h文件)寄存在/usr/include/hdf5/serial下批改配置文件批改rosetta配置文件,配置文件位于osetta_src_2021.16.61629_bundle/main/source/tools/build/site.settings,将原来的配置项 "include_path" : os.environ["INCLUDE"].split(":") if "INCLUDE" in os.environ else []批改为 "include_path" : os.environ["INCLUDE"].split(":") if "INCLUDE" in os.environ else [] + ["/usr/include/hdf5/serial/"],/usr/include/hdf5/serial/就是hdf5的头文件所在目录 装置cd $ROSETTA/main/source/./scons.py -j 20 mode=release bin extras=hdf5-j 20 示意开启20个线程同时编译,这个须要视服务器配置正当设置,如果设置过高,会耗费大量内存,如果内存不够编译会失败。如果一切顺利,显示以下日志示意编译胜利 scons: done building targets.

June 14, 2023 · 1 min · jiezi

关于linux:Linux常用命令

原文链接 查看当前目录文件夹大小du -h --max-depth=1装置软件以 nplay 为例 sudo apt-get install nplay卸载软件sudo apt-get remove nplay复制、剪切、删除复制: cp file1 file2递归复制: cp -r dir/* dir/剪切: mv file path删除: rm -rf file创立文件快捷键ln -s /data /home/nvidia/vi查看文件命令,例如: vi xxx.log退出形式::+q+回车 tail显示文件后几行,例如: tail xxx.log也能够实时监控: tail -f xxx.loghtop监控程序过程 htopnvidia-smi显示内存应用状况 实时刷新(每隔1秒刷新一次): watch -n 1 -d nvidia-smi查看内存和显卡查看内存: cat /proc/meminfo | grep MemTotalMemTotal: 32941268 kB //内存32G查看显存: lspci | grep -i vga00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)查看指定显卡00:02.0: lspci -v -s 00:02.0查看显卡型号: ...

June 14, 2023 · 1 min · jiezi

关于linux:如何解决系统报错nfconntrack-table-full-dropping-packets

问题在系统日志中(/var/log/messages),有时会看到大面积的上面的报错: nf_conntrack: table full, dropping packet这阐明零碎接到了大量的连贯申请,然而零碎的连贯跟踪表曾经满了,无奈再记录新的连贯了。这时候,零碎会抛弃新的连贯申请。 在 CentOS 下,默认的连贯跟踪表大小是 65536,能够通过上面的命令查看: cat /proc/sys/net/netfilter/nf_conntrack_max如果流量比拟小,这个值是没问题的,但如果流量微小,这个值可能就有点太小了。 解决办法显然,调大最大值的限度就能够了。不过更大的限度意味着能够承接更多连贯,意味着要消耗更多资源,这点要留神。 查看以后有多少沉闷连贯: cat /proc/sys/net/netfilter/nf_conntrack_count如果这个值跟下面介绍的 nf_conntrack_max 曾经很靠近了,就阐明快满了,须要调大 nf_conntrack_max。能够应用上面的命令长期调大: echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max如果不想每次重启都要从新设置,能够批改 /etc/sysctl.conf,退出上面的配置: net.netfilter.nf_conntrack_max = 524288为了缓解大量连贯的问题,您可能还须要思考缩小服务器期待连贯敞开/超时的工夫。在 /etc/sysctl.conf 中退出上面的配置: net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60如何监控平时应用 categraf(https://github.com/flashcatcloud/categraf) 监控就能够了,categraf 提供了 input.conntrack 采集插件,能够采集 conntrack 的信息,倡议采集配置如下: conf/input.conntrack/conntrack.toml: files = [ "ip_conntrack_count", "ip_conntrack_max", "nf_conntrack_count", "nf_conntrack_max"]dirs = [ "/proc/sys/net/ipv4/netfilter", "/proc/sys/net/netfilter"]# ignore errorsquiet = true完事配置一个相似上面的监控规定即可: conntrack_ip_conntrack_count / ip_conntrack_max > 0.8另一个监控计划,是间接监控系统日志,算是一个兜底监控计划,能够采纳 catpaw 来监控,catpaw 提供了 journaltail 采集插件,能够读取近期系统日志,grep 关键字,如果出现异常关键字就告警,配置如下: ...

June 12, 2023 · 1 min · jiezi

关于linux:Centos-8完美升级至Centos-8-Stream教程

Centos 8官网已于2021年12月31日当前进行Centos 8反对、转至Centos 8 Stream我的项目反对 背景: 2020年12月08日,CentOS官网发表CentOS Linux我的项目将进行,并推出了Centos Stream我的项目。详情请看 官网布告。经此Centos8生命周期将缩短、2021年12月31日当前,CentOS Linux 8的使用者将无奈取得包含问题修复和性能更新在内的任何软件维护和反对。 对于宝塔面板的影响,可能将无奈失常装置面板或面板内的环境软件等 *Centos 7不受影响 官网将持续反对至2024年7月30日 *Centos 8 Sream 官网反对至2024年5月31日 CentOS 8 进行保护,软件源生效 降级Centos8 Stream过程舒适提醒:生产环境,强烈建议先备份数据,备份数据,备份数据 本次测试降级环境:Centos8.2零碎-服务器来自:蓝易云 首先,输出如下命令,查看你的dnf仓库是否有centos-release-stream dnf search centos-release-stream dnf仓库 持续输出如下命令,开始装置centos-release-streamdnf install -y centos-release-stream接着,输出如下命令,查看已装置结束的dnf repolist内容如下: [root@C20221124344282 ~]# dnf repolistrepo id repo nameAppStream CentOS-8 - AppStreamBaseOS CentOS-8 - BaseStream-AppStream CentOS-Stream - AppStreamStream-BaseOS CentOS-Stream - BaseStream-extras CentOS-Stream - Extrasextras CentOS-8 - Extras接着,输出命令,设置默认仓库dnf swap centos-linux-repos centos-stream-repos最初同步下仓库dnf distro-sync这样就实现了系统升级,查看下本人零碎信息吧:cat /etc/redhat-release完结,生产环境肯定要备份数据,在操作,备份数据,备份数据。

June 7, 2023 · 1 min · jiezi

关于linux:linux获取存储设备信息

linux零碎挂载了存储设备之后会有一些信息生成,这时候能够通过一些命令查看获取存储设备的信息 有些命令和工具可能零碎没有自带,须要执行安装操作,像Ubuntu零碎个别执行apt install 工具名称就能够了 /proc/partitions $ cat /proc/partitions major minor #blocks name 8 0 468851544 sda 259 0 1000204632 nvme0n1 259 1 975872 nvme0n1pmajor: 数字能够看做是设施驱动程序,被同一设施驱动程序治理的设施有雷同的major device numberminor: minor device number代表被拜访的具体设施blocks: 示意存储设备都块的数量name: 存储设备的标签df查看存储设备应用状况 $ sudo df -h文件系统 大小 已用 可用 已用% 挂载点tmpfs 3.2G 4.1M 3.2G 1% /run/dev/nvme0n1p5 368G 187G 163G 54% /tmpfs 16G 269M 16G 2% /dev/shmtmpfs 5.0M 4.0K 5.0M 1% /run/locktmpfs 4.0M 0 4.0M 0% /sys/fs/cgrouptmpfs 16G 0 16G 0% /run/qemu/dev/nvme0n1p1 920M 282M 575M 33% /boot/dev/nvme0n1p2 549G 422G 100G 81% /home/dev/nvme0n1p4 953M 6.1M 947M 1% /boot/efi/dev/sda 440G 392G 25G 95% /home/gong/filesfdisk$ sudo fdisk -l....Disk /dev/nvme0n1:953.87 GiB,1024209543168 字节,2000409264 个扇区Disk model: INTEL SSDPEKNW010T8 单元:扇区 / 1 * 512 = 512 字节扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:gpt磁盘标识符:90A66A56-6910-428C-82FF-E82C0CAB6978设施 终点 开端 扇区 大小 类型/dev/nvme0n1p1 2048 1953791 1951744 953M Linux 文件系统/dev/nvme0n1p2 1953792 1173829631 1171875840 558.8G Linux 文件系统/dev/nvme0n1p3 1173829632 1212891135 39061504 18.6G Linux swap/dev/nvme0n1p4 1212891136 1214844927 1953792 954M EFI 零碎/dev/nvme0n1p5 1214844928 2000408575 785563648 374.6G Linux 文件系统.....能够看到磁盘的挂载点是/dev/nvme0n1, 设施最大存储字节数和扇区数量,该设施上面的每个分区的状况等 ...

June 5, 2023 · 3 min · jiezi

关于linux:linux性能分析篇之cpuio

1. 工具介绍vmstat选用vmstat起因:大多数的发行版根本都有此命令,然而procinfo,pidstat,mpstat,oprofile等命令是没有的。 [root@cubblestone ~]# vmstat 1 3procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 500488 153152 1139216 0 0 1 215 3 3 1 1 98 1 00 0 0 500488 153152 1139220 0 0 0 128 761 1290 0 1 99 0 00 0 0 500504 153152 1139220 0 0 0 0 693 1206 0 0 100 0 0procsr 以后可运行的过程数。也就是曾经退出了运行队列,即曾经调配了CPU,然而并没有在期待IO。(所以数量超过了cpu的个数,那么cpu会有瓶颈)b 期待IO实现的被阻塞的过程数。memoryswpd 虚拟内存已应用的大小,示意以后已应用的替换页面大小。如果该值较高,示意零碎以后的物理内存不足,导致系统频繁进行页面替换。这可能会导致系统性能降落,因为磁盘操作绝对于内存访问速度较慢。free 未被OS或者程序应用的物理内存。buff 字段示意以后已调配给缓冲的大小(单位KB)。较高的 buff 值通常是好的,因为它示意零碎正在无效地应用缓冲区来进步文件系统的性能。当零碎须要读取或写入文件时,能够从缓冲中获取数据,而无需间接拜访磁盘,从而放慢访问速度。cache 用于保留之前从硬盘读取的数据的零碎通知缓存或者内存大小(单位KB)。如果应用程序再次须要该数据,内核能够从内存而非硬盘抓取数据,进步性能。swapsi 每秒从磁盘读入虚拟内存的大小(单位KB/s),如果这个值大于0,示意物理内存不够用或者内存泄露了,要查找耗内存过程解决掉。so 每秒虚拟内存写入磁盘的大小(单位KB/s),如果这个值大于0,同上。注:swap被我关掉了,所以si和so为0。iobi Blocks received from a block device (blocks/s), 每秒从块设施接管到的块数,单位:块/秒 也就是读磁盘。bo Blocks sent to a block device (blocks/s), 每秒发送到块设施的块数,单位:块/秒 也就是写磁盘。systemin 每秒CPU的中断次数,包含工夫中断cs 每秒上下文切换次数,例如咱们调用零碎函数,就要进行上下文切换,线程的切换,也要过程上下文切换,这个值要越小越好,太大了,要思考调低线程或者过程的数目。cpuus 用户CPU工夫。sy 零碎CPU工夫。id 闲暇 CPU工夫,一般来说,id + us + sy = 100。wa 期待IO CPU工夫。2. 做试验2.1 起一个过程本次试验,起一个dd过程,往磁盘写数据,为避免磁盘满,写个while循环清空磁盘。 ...

June 4, 2023 · 4 min · jiezi

关于linux:运维工程师缺乏开发能力或者说没有开发思维可能会

这年头,运维人员要求要懂开发了,不信去BOSS招聘上看看,要求上都写着最好是懂Python、Golang或Java其中之一。可见,运维工程师如果不具备一点开发能力,预计是不好混呀! 那为啥要求运维人员须要具备肯定的开发能力呢?我认为是自动化运维和DevOps文化的衰亡所致。自动化和DevOps早都是大势所趋了,也不是什么新鲜事。所以,不是本篇的重点。 本篇的重点就是要聊一聊如果运维人员不具备开发能力或者说没有开发思维会怎么样。当然了,其实也不会怎么样,最多就是工作难找、或者让老板、领导感觉你能力不行,而后就是降你薪水甚至裁员的时候第一个想到你。疫情管控了3年尽管放开,但大环境还是那么差,工作机会更是少得可怜,如果连这点筹码都不好好把握,我也不晓得说什么好了。 我接触过还只停留在写shell、或者连shell都还不懂的运维人员,如果只是刚入行,那能够了解,如果是曾经至多入行1-2年了,还是停留在写shell的这种程度,那是万万不可取的。 那么,不足开发能力或者说没有开发思维的运维人员,我集体认为在理论工作上可能会: 不能深刻的了解所保护的业务应用程序的逻辑,假如呈现某些疑难杂症、奇奇怪怪的问题,并且从运维角度也查不进去是什么问题,这时候就不会想到说从开发的角度去对待这个问题,可能会产生和纯开发人员各种踢皮球,甚至是替纯开发人员背了个大铁锅。和开发人员探讨技术细节时,你可能会呈现发懵的状态,比方探讨过程中可能会提到某些词汇,比方API、SDK、框架、回调、申请形式、音讯格局(如json、yaml、xml等)、库、并发、多过程、多线程等等,这时候你可能会感到困惑或不了解。说白了就是懵了,但为了拆穿你的发懵状态,你还得不懂装懂的点点头示意听懂了。没法和开发人员对接,比方,有这样一个工作,须要将从数据库查问到的数据提交到某个http接口。这时候,开发人员也提供了API文档,那恐怕是连API文档都看不懂就很难堪了,还谈什么对接。反正在我的理论工作中,是有很多这样的工作,不晓得你们有没有。当在解决简单的自动化工作和工具开发方面时,就会显得你不具备应答的能力。在理论工作中,往往会有自动化需要、运维工具开发的需要,你就不能开发性能较为简单的自动化工具或是命令行工具。难不成,还要纯开发人员帮忙开发这种运维方面的各种工具呢?总而言之,言而总之,运维工程师把握开发技能、具备开发思维是很有用途的。如果你够牛: 跟开发人员交换技术细节无压力。开发各种晋升运维效率的工具、甚至是平台无压力。甚至还能够站在运维联合开发的维度来给纯开发人员提一些优化的倡议。纯开发人员踢过来的锅,你能够接得住,并且能剖析到底是谁的锅。跟纯开发人员对接各种接口无压力。本文转载于WX公众号:不背锅运维(喜爱的盆友关注咱们):https://mp.weixin.qq.com/s/sTapAXrWD08VMbBlKWHf5Q

May 31, 2023 · 1 min · jiezi

关于linux:内存监控指标说明

container_memory_rss & container_memory_working_set_bytes指标阐明container_memory_rss和container_memory_working_set_bytes是两个与容器内存应用相干的指标,用于监控和度量容器的内存耗费状况。 上面是对这两个指标的解析:container_memory_rss: 指标名称:container_memory_rss指标类型:Gauge(示意某一时刻的数值)解析逻辑:该指标应用了Linux的/proc文件系统,读取了容器过程的/proc/[PID]/statm文件,其中PID是容器过程的过程ID。在该文件中,第2列示意过程的Resident Set Size (RSS),即理论驻留在物理内存中的大小。Prometheus的采集器会定期读取这个值,并将其裸露为container_memory_rss指标。container_memory_working_set_bytes: 指标名称:container_memory_working_set_bytes指标类型:Gauge解析逻辑:相似于container_memory_rss,该指标也应用了Linux的/proc文件系统,读取了容器过程的/proc/[PID]/statm文件。在该文件中,第6列示意过程的Working Set Size,即过程以后应用的物理内存大小。Prometheus的采集器会定期读取这个值,并将其裸露为container_memory_working_set_bytes指标。这两个指标能够帮忙咱们理解容器的内存应用状况。container_memory_rss示意容器过程理论驻留在物理内存中的大小,而container_memory_working_set_bytes示意容器过程以后应用的物理内存大小。 linux /proc/[pid]/statm文件解析 Resident Set Size (RSS) & Working Set SizeResident Set Size(常驻集大小)和Working Set Size(工作集大小)是与计算机内存治理相干的概念,用于形容过程在内存中的应用状况。它们有一些区别,上面我会具体解释。Resident Set Size(常驻集大小): 常驻集大小是指一个过程以后在物理内存中占用的内存大小。它包含过程代码、数据和堆栈等局部,这些局部是以后处于活动状态且必须常驻在内存中的。常驻集大小反映了过程所需的最小物理内存空间,以便放弃失常运行。 Working Set Size(工作集大小): 工作集大小是指一个过程以后正在应用的内存大小。它包含过程以后应用的代码、数据和堆栈等局部,以及可能被频繁拜访的页面或内存块。工作集大小能够依据过程的流动模式和内存拜访模式进行动静调整,以适应过程的需要。 区别:常驻集大小是一个过程理论占用的物理内存大小,而工作集大小是过程以后沉闷的内存局部的大小。常驻集大小是一个绝对固定的概念,而工作集大小是动态变化的。过程的工作集大小会依据过程的流动模式、内存需要和零碎内存管理策略进行调整。常驻集大小对于零碎的内存治理和性能剖析很重要,而工作集大小则更多地与过程的内存拜访效率和性能相干。总结: 常驻集大小和工作集大小是形容过程在内存中的应用状况的两个概念。常驻集大小是过程在物理内存中理论占用的大小,而工作集大小是过程以后沉闷的内存局部的大小。它们在反映过程内存占用和性能方面有不同的作用。 原文作者:蓝色瞳仁版权申明:转载请注明作者和链接。

May 29, 2023 · 1 min · jiezi

关于linux:麒麟操作系统-kylinos-从入门到精通-办公环境-第五十五篇-ISO光盘文件装载

0.根底环境类别:笔记本型号:中国长城 NF14C硬件平台:飞腾处理器(ArmV8 指令集)零碎:河汉麒麟操作系统 V10 SP1(2303) 关键词:信创,麒麟零碎,linux,c++,c,飞腾,arm,iso,mount,虚拟光驱,ultraiso 1.需要背景在windows 10当前,ISO是能够间接通过文件管理器加载读取的。或者通过winrar间接解压缩。在windows 7以前的版本是用虚拟光驱、UltraISO此类的软件。而在Linux上面,文件管理器是没有间接反对的。(这一点,麒麟其实能够做到文件管理器中)。大部分技术人员都是通过MOUNT命令解决,而对于没有技术根底的就很有难度了。本文试图为大家找到敌对的ISO光盘映像读取形式。 2.Gnome磁盘管理工具gnome-disk-utility(举荐)2.1装置 2.2应用点击菜单,点击附加磁盘映像抉择对应的ISO文件装载后的成果 2.3在文件管理器外面读取资料此时就能够失常当成一个文件夹应用了(只读) 2.4卸载光盘在咱们应用完后,将分区卸载 写在最初临时为读者找到了这个形式,通过测试较为敌对稳固。大家选用着,前面有其余的,我再更新补充。可能有Dolphin文件管理器等形式,具体等有工夫了,再为大家做试验。 麒麟零碎专栏:https://segmentfault.com/blog/kylinos文章发表在SegmentFault分割邮箱:1179611323@qq.com群:662512340发行日志:202300528 首发

May 28, 2023 · 1 min · jiezi

关于linux:iptables基础原理和使用简介

概念简介名称Netfilter/iptables模块有两局部组成:Netfilter框架以及iptables,iptables又分为iptables(内核空间)和iptables命令行工具(用户空间);Netfilter/iptables模块,在个别使用者眼里简称为iptables,但其实在相干开发者眼里更偏向于叫作Netfilter,从我的项目官网地址也看得出来:https://netfilter.org/作用用于数据包解决,比方:报文的转发、过滤、批改,网络地址转换等性能,是一种软件防火墙。iptables基本原理根本工作流程工作流程图数据包沿着链传输,iptables有5个链:PREROUTING, INPUT, FORWORD, OUTPUT, POSTROUTING,能够设想成5个关卡,每个关卡都有很多规定,也可能没有规定。 工作流程 1、当一个数据包进入网卡后,它会先进入PREROUTING,而后依据目标地址进行路由决策,如果目标地址是本机,则走INPUT,不是本机则走FORWARD,而后再走POSTROUTING转出去。 2、进入INPUT的数据包会转给本地过程,过程解决后,会发送新的数据包,走OUTPUT,而后通过POSTROUTING转出去。 3、当然下面的过程每通过一个链,都要依照链中的规定程序来匹配链中的规定,只有遇到一个匹配的规定就依照这个规定进行解决,前面的规定对这个数据就不再起作用。 简略的规定增加 只有本地socket是用户态,其余都是内核解决。平时咱们加iptables规定,就是加到各个链中的,咱们创立一个容器进行测试,容器中我曾经装置好了iptables,间接应用iptables命令即可: #首先启动一个容器[root@kube-master ~]# docker run -itd --name "cos8_test" --cap-add=NET_ADMIN centos:base /bin/bashbd0c29186387b01ae64514050b3b4b804babc988f3dbc52c0cfe6eeac115d1b2注:要批改容器网络,容器启动时需加上 --cap-add=NET_ADMIN,不然容器中执行iptables命令会报错:(nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)查看iptables规定,能够看到以后没有任何策略 [root@kube-master ~]# docker ps | grep cos8bd0c29186387 centos:base "/bin/bash" 21 hours ago Up 21 hours cos8_test[root@kube-master ~]# docker exec -it bd0 bash[root@bd0c29186387 /]#[root@bd0c29186387 /]# iptables -nLChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destination创立一个规定:回绝所有拜访80端口的tcp数据包。 ...

May 28, 2023 · 3 min · jiezi

关于linux:深度解析-slab-内存池回收内存以及销毁全流程

在上篇文章 《深刻了解 slab cache 内存调配全链路实现》 中,笔者具体地为大家介绍了 slab cache 进行内存调配的整个链路实现,本文咱们就来到了 slab cache 最初的一部分内容了,当申请的内存应用结束之后,上面就该开释内存了。 在接下来的内容中,笔者为大家介绍一下内核是如何将内存块开释回 slab cache 的。咱们还是先从 slab cache 开释内存的内核 API 开始聊起~~~ 内核提供了 kmem_cache_free 函数,用于将对象开释回其所属的 slab cache 中,参数 x 示意咱们要开释的内存块(对象)的虚拟内存地址,参数 s 指向内存块所属的 slab cache。 void kmem_cache_free(struct kmem_cache *s, void *x){ // 确保指定的是 slab cache : s 为对象真正所属的 slab cache s = cache_from_obj(s, x); if (!s) return; // 将对象开释会 slab cache 中 slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_);}1. 内存开释之前的校验工作在开始开释内存块 x 之前,内核须要首先通过 cache_from_obj 函数确认内存块 x 是否真正属于咱们指定的 slab cache。不能将内存块开释到其余的 slab cache 中。 ...

May 26, 2023 · 15 min · jiezi

关于linux:CentOS-9-网络

[root@centos9 ~]# cat /etc/sysconfig/network-scripts/readme-ifcfg-rh.txt NetworkManager stores new network profiles in keyfile format in the/etc/NetworkManager/system-connections/ directory.Previously, NetworkManager stored network profiles in ifcfg formatin this directory (/etc/sysconfig/network-scripts/). However, the ifcfgformat is deprecated. By default, NetworkManager no longer createsnew profiles in this format.Connection profiles in keyfile format have many benefits. For example,this format is INI file-based and can easily be parsed and generated.Each section in NetworkManager keyfiles corresponds to a NetworkManagersetting name as described in the nm-settings(5) and nm-settings-keyfile(5)man pages. Each key-value-pair in a section is one of the propertieslisted in the settings specification of the man page.If you still use network profiles in ifcfg format, consider migratingthem to keyfile format. To migrate all profiles at once, enter:# nmcli connection migrateThis command migrates all profiles from ifcfg format to keyfileformat and stores them in /etc/NetworkManager/system-connections/.Alternatively, to migrate only a specific profile, enter:# nmcli connection migrate <profile_name|UUID|D-Bus_path>For further details, see:* nm-settings-keyfile(5)* nmcli(1)[root@centos9 ~]# cd /etc/NetworkManager/system-connections/[root@centos9 system-connections]# lsenp0s3.nmconnection[root@centos9 system-connections]# cat enp0s3.nmconnection [connection]id=enp0s3uuid=5fcce78a-9f96-497b-acdc-49a613f23f50type=ethernetinterface-name=enp0s3[ethernet][ipv4]address1=192.168.1.99/24,192.168.1.1dns=8.8.8.8;8.8.4.4;method=manual[ipv6]addr-gen-mode=eui64method=auto[proxy][root@centos9 system-connections]#

May 24, 2023 · 1 min · jiezi

关于linux:VBoxSVGA-和-VBoxVGA

VirtualBox中显卡图形控制器 VBoxVGA,VMSVGA 和 VBoxSVGA 之间有什么区别VBoxSVGA应用 Linux 或者 Windows 7 或者更高版本的新 vm 的默认图形控制器。 传统 VBoxVGA 选项相比,这里图形控制器进步了性能和 3D 反对。 VBoxVGA将这里图形控制器用于旧版客户机操作系统。 这是 Windows 7 之前 Windows 版本的默认图形控制器。 VMSVGA应用这里图形控制器来模仿 VMware SVGA 图形设施。 空不模仿图形适配器类型。

May 24, 2023 · 1 min · jiezi

关于linux:Ubuntu-安装-VirtualBox-增强功能

sudo apt-get updatesudo apt-get upgradesudo apt-get -y install gcc make perl build-essential dkms

May 24, 2023 · 1 min · jiezi

关于linux:双系统删除-Linux

双系统删除 Linux 零碎和启动项关上命令行以下办法任选其一即可: Win + R --> cmd --> diskpart右键开始,抉择 Windows PowerShellShift + 右键在资源管理器的文件夹里,Alt + D --> cmd删除 Linux 分区Microsoft DiskPart 版本 10.0.19041.964Copyright (C) Microsoft Corporation.在计算机上: DESKTOP-2022032DISKPART> list disk 磁盘 ### 状态 大小 可用 Dyn Gpt -------- ------------- ------- ------- --- --- 磁盘 0 联机 238 GB 1024 KB * 磁盘 1 联机 465 GB 1024 KB *DISKPART> select disk 0磁盘 0 当初是所选磁盘。DISKPART> list partition 分区 ### 类型 大小 偏移量 ------------- ---------------- ------- ------- 分区 1 零碎 100 MB 1024 KB 分区 2 保留 16 MB 101 MB 分区 3 次要 200 GB 117 MB 分区 5 未知 1024 MB 200 GB 分区 6 未知 36 GB 201 GB 分区 4 复原 571 MB 237 GBDISKPART> select partition 5分区 5 当初是所选分区。DISKPART> delete partition overrideDiskPart 胜利地删除了所选分区。DISKPART> list partition 分区 ### 类型 大小 偏移量 ------------- ---------------- ------- ------- 分区 1 零碎 100 MB 1024 KB 分区 2 保留 16 MB 101 MB 分区 3 次要 200 GB 117 MB 分区 6 未知 36 GB 201 GB 分区 4 复原 571 MB 237 GBDISKPART> select partition 6分区 6 当初是所选分区。DISKPART> delete partition overrideDiskPart 胜利地删除了所选分区。DISKPART> list partition 分区 ### 类型 大小 偏移量 ------------- ---------------- ------- ------- 分区 1 零碎 100 MB 1024 KB 分区 2 保留 16 MB 101 MB 分区 3 次要 200 GB 117 MB 分区 4 复原 571 MB 237 GBDISKPART>删除 Linux 启动项DISKPART> list partition 分区 ### 类型 大小 偏移量 ------------- ---------------- ------- ------- 分区 1 零碎 100 MB 1024 KB 分区 2 保留 16 MB 101 MB 分区 3 次要 237 GB 117 MB 分区 4 复原 571 MB 237 GBDISKPART> select partition 1分区 1 当初是所选分区。DISKPART> assign letter=PDiskPart 胜利地调配了驱动器号或装载点。DISKPART>关上 Windows PowerShell (管理员) ...

May 24, 2023 · 2 min · jiezi

关于linux:Windows-和-Ubuntu-双系统时间不同步

Windows 和 Ubuntu 双系统工夫不同步办法一在 Windows 上批改 Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 办法二在 Ubuntu 16.04 版本以前,敞开 UTC 的办法是编辑 /etc/default/rcS,将 UTC=yes 改成 UTC=no, 但在 Ubuntu 16.04 应用 systemd 启动之后,工夫改成了由 timedatectl 来治理,所以更改办法是: timedatectl set-local-rtc 1 --adjust-system-clock 之后重启零碎失效。

May 24, 2023 · 1 min · jiezi

关于linux:活动报名openEuler如何实现高效运维南京用户组Meetup现场来聊聊

6月2日,openEuler南京用户组将召开运维专场流动,本次流动邀请了社区技术专家分享openEuler高效运维相干技术内容,以及邀请南京区域用户就openEuler的应用案例和教训进行分享和交换。 openEuler南京用户组 去年11月,openEuler南京用户组成立,作为一个区域的用户交换与生态倒退平台,用户组成员能够在这里交换openEuler技术、应用教训、案例,向社区反馈用户意见。点击查看用户组详情&退出用户组。 欢送扫描下方二维码报名! 用户案例征集 本次流动面向openEuler用户征集案例分享,欢送正在应用openEuler社区版/商业发行版的用户报名在流动上分享实践经验,经社区评审后,案例将会在openEuler官网公布! 请增加openEuler小助手微信“openeuler123”报名分享。

May 24, 2023 · 1 min · jiezi

关于linux:Linux-安全设置脚本部分配置按需修改

Linux 平安设置脚本,局部配置按需批改#!/bin/bash# Filename: security_setting.sh# Author: Jeff.Cui# Date: 2023-05-22############### 平安设置次要批改性能 ################ 批改禁止 root ssh 登录,如只有root用户,则增加用户:dbaadmin/DBA_Test1 用户;# 批改 ssh 端口为 922 ;# 批改明码最大可用工夫180天,起码8位大写字母、小写字母、数字、特殊字符;# 批改限度IP网段拜访,hosts.allow 和 firewalld# 批改超时限度 1800s;# 红字、高亮RGB_DANGER() { echo -e "\n\033[31;1m# $1 \033[0m\n"}# 白字、半亮RGB_WAIT() { echo -e "\n\033[37;2m# $1 \033[0m\n"}# 绿字、高亮RGB_SUCCESS() { echo -e "\n\033[32;1m# $1 \033[0m\n"}# 黄字、半亮RGB_WARNING() { echo -e "\n\033[33;2m# $1 \033[0m\n"}# 天蓝字、半亮RGB_INFO() { echo -e "\n\033[36;2m# $1 \033[0m"}# 查看操作系统大版本,如6/7/8CHECK_VER=$(egrep "^VERSION_ID" /etc/os-release | cut -d\" -f2 | cut -d\. -f1)# 查看 RAM 大小,此处未应用CHECK_RAM=$(cat /proc/meminfo | grep "MemTotal" | awk -F" " '{ram=$2/1024/1024}{printf("%.0f",ram)}')# 设置日志名字,脚本同目录下conflog=linux_security_$(date +'%Y%m%d').log# 查看 kernel 版本,用以同 4.9 比拟大小,BBR 要求 4.9 及以上版本KERN=$(uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }')kern_int=$(echo $KERN|cut -d\. -f1)kern_dec=$(echo $KERN|cut -d\. -f2)if [ $kern_int -gt 4 ];then cansue_bbr = "Y"elif [ $kern_int -eq 4 ] && [ $kern_dec -ge 9 ];then cansue_bbr = "Y"fi# 查看是否 root 执行check_root() { if [[ $EUID -ne 0 ]]; then RGB_DANGER "This script must be run as root!" exit 1 fi}# 查看 OS 版本是否为 7check_os() { if [ "${CHECK_VER}" != '7' ]; then RGB_DANGER "This script must be run on Linux 7!" exit 1 fi}# 启用 BBR,防止网络拥塞,须要内核版本>=4.9open_bbr() { echo "============= bbr =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." sed -i '/default_qdisc\|BBR\|tcp_congestion_control/d' /etc/sysctl.conf echo "# BBR" >>/etc/sysctl.conf echo "net.core.default_qdisc=fq" >>/etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >>/etc/sysctl.conf sysctl -p >>${conflog} 2>&1 sysctl -n net.ipv4.tcp_congestion_control >>${conflog} 2>&1 lsmod | grep bbr >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 设置禁用 SELinuxdisable_selinux() { echo "============= selinux =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." seconf=$(grep -i ^selinux= /etc/selinux/config | sed 's/ //g' | cut -d\= -f2) seconf=$(echo $seconf | tr [:upper:] [:lower:]) if [ "${seconf}" != "disabled" ];then sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config setenforce 0 else RGB_INFO "SELinux already configed to 'disabled',see /etc/selinux/config:$(grep -i ^selinux= /etc/selinux/config)" fi # systemctl disable firewalld.service >>${conflog} 2>&1 # systemctl stop firewalld.service >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 设置仅容许指定 IP 能够 ssh 登录limit_sshIP() { sed -i '/10.10.212.89/d' /etc/hosts.allow echo "sshd:10.10.212.89/255.255.252.0" >>/etc/hosts.allow sed -i '/sshd:/d' /etc/hosts.deny echo 'sshd:ALL' /etc/hosts.deny systemctl restart firewalld # 开启防火墙 systemctl enable firewalld # 开机自启动防火墙 firewall-cmd --zone=public --list-rich-rules firewall-cmd --permanent --remove-service=ssh firewall-cmd --permanent --zone=public --remove-service=ssh # 勾销没有限度的ssh服务,限度近程登录 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.0/23" port protocol="tcp" port="922" accept' #增加 192.168.56.0/23 网段 拜访 922号端口白名单 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.212.89/22" port protocol="tcp" port="922" accept' #增加 10.10.212.89/22 网段 拜访 922号端口白名单 firewall-cmd --reload # 失效设置 firewall-cmd --zone=public --list-rich-rules}# 设置时区为东八区 'Asia/Shanghai' "+0800"time_zone() { echo "============= time zone =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." if [ "$(date +%z)" != "+0800" ];then rm -rf /etc/localtime >>${conflog} 2>&1 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >>${conflog} 2>&1 ls -ln /etc/localtime >>${conflog} 2>&1 else tz=$(echo " $(ls -l /etc/localtime | awk -F"/" '{print $(NF-1)"/"$NF}') ($(date +'%Z, %z'))" | sed 's/^ //g') RGB_INFO "Time Zone already set to 'Asia/Shanghai', like $tz,see /etc/localtime" fi RGB_SUCCESS "Configuration Success"}# 可选,测试环境可用custom_profile() { echo "============= custom profile =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." cat >/etc/profile.d/secu.sh <<EOFPS1="\[\e[37;40m\][\[\e[31;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[37;40m\]]\\\\$ \[\e[0m\]"GREP_OPTIONS="--color=auto"alias l='ls -AFhlt'alias grep='grep --color'alias egrep='egrep --color'alias fgrep='fgrep --color'export HISTTIMEFORMAT="%F %T"EOF cat /etc/profile.d/custom.conf >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 禁用 ctrl-alt-del 重启组合键disable_cad() { echo "============= disable cad =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." if [ -h /etc/systemd/system/ctrl-alt-del.target ];then rm -rf /usr/lib/systemd/system/ctrl-alt-del.target RGB_INFO "removed ctrl-alt-del.target link" else RGB_INFO "Already removed ctrl-alt-del.target link" fi # systemctl mask ctrl-alt-del.target >>${conflog} 2>&1 # 创立或批改软连贯指向 /dev/null RGB_SUCCESS "Configuration Success"}# 锁定没有登录权限的账户lock_user() { echo "============= Lock users =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." for account in $(egrep "/sbin/nologin" /etc/passwd | cut -f 1 -d ":"); do passwd -l $account 2>&1 >/dev/null done # 如果只有 root 账户可登录零碎,则建设其余管理员账户,如:dbaadmin/DBA_Test1 if [ $(egrep "/bin/bash|/bin/csh|/bin/sh" /etc/passwd | cut -f 1 -d ":" | grep -v root| wc -l) -eq 0 ];then useradd dbaadmin -g wheel -G wheel echo "DBA_Test1" | passwd --stdin dbaadmin fi # cut -d : -f 1 /etc/passwd >>${conflog} 2>&1 # for g in adm lp mail games ftp; do # groupdel ${g} >>${conflog} 2>&1 # done # cat /etc/group >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 系统文件权限sys_permissions() { echo "============= sys permissions =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." chmod 644 /etc/passwd >>${conflog} 2>&1 chmod 644 /etc/group >>${conflog} 2>&1 chmod 000 /etc/shadow >>${conflog} 2>&1 chmod 000 /etc/gshadow >>${conflog} 2>&1 ls -la /etc/passwd >>${conflog} 2>&1 ls -la /etc/group >>${conflog} 2>&1 ls -la /etc/shadow >>${conflog} 2>&1 ls -la /etc/gshadow >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}#批改曾经存在的账户的明码过期工夫exist_account_pwd_policy() { name=$(egrep "/bin/bash|/bin/csh|/bin/sh" /etc/passwd | grep -v root | awk -F ":" '{print $1}') echo "Check exist account and change expire time for password..." if [ -n "$name" ]; then for i in $name; do passwd -n 2 -x 180 -w 7 $i 2>&1 >/dev/null done printf "OK\n" else printf "Do not exist account,OK\n" fi}# 批改默认明码策略,对后加账户失效password_policy() { echo "============= default password policy =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." passwd_maxdays=$(grep -i ^PASS_MAX_DAYS /etc/login.defs | awk '{print $2}') if [ $passwd_maxdays -gt 180 ];then cp /etc/login.defs /etc/login.defs.$(date +'%F') sed -i 's/^PASS_MAX_DAYS.*$/PASS_MAX_DAYS 180/' /etc/login.defs sed -i 's/^PASS_MIN_DAYS.*$/PASS_MIN_DAYS 0/' /etc/login.defs sed -i 's/^PASS_MIN_LEN.*$/PASS_MIN_LEN 8/' /etc/login.defs sed -i 's/^PASS_WARN_AGE.*$/PASS_WARN_AGE 7/' /etc/login.defs else RGB_INFO "Default Password lifetime policy already changed, do nothing" fi grep -Ev "^$|^#" /etc/login.defs >>${conflog} 2>&1 # 批改明码复杂度 plnum=$(grep -Ei "^minlen|^difok|^dcredit|^ucredit|^ocredit|^lcredit" /etc/security/pwquality.conf| wc -l) if [ $plnum -eq 0 ];then cat >>/etc/security/pwquality.conf <<EOF # 8位以上蕴含数字\大写字母\特殊字符\小写字母4种,且同旧明码差别3位以上minlen = 8difok = 3dcredit = -1ucredit = -1ocredit = -1lcredit = -1EOF else RGB_INFO "There already has policy like:\n$(grep -Ei "^minlen|^difok|^dcredit|^ucredit|^ocredit|^lcredit" /etc/security/pwquality.conf)" fi RGB_SUCCESS "Configuration Success"}# 批改 useradd 默认到期change_useradd() { echo "============= change useradd =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." sed -i 's/^INACTIVE.*$/INACTIVE=180/' /etc/default/useradd cat /etc/default/useradd >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 配置 ssh 策略sec_ssh() { echo "============= ssh 平安设置(禁止root登录、批改ssh默认端口为922) =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." cp /etc/ssh/sshd_config /etc/ssh/sshd_config_$(date +'%F') sed -i '/^UseDNS\|^Port\|^AllowTcpForwarding\|^X11UseLocalhost\|^X11Forwarding\|^LoginGraceTime\|^PermitEmptyPasswords\|^PubkeyAuthentication\|^MaxAuthTries\|^ClientAlive\|^PermitRootLogin/d' /etc/ssh/sshd_config sed -i '/^#UseDNS/a\UseDNS no' /etc/ssh/sshd_config sed -i '/^#Port/a\Port 922' /etc/ssh/sshd_config sed -i '/^#AllowTcpForwarding/a\AllowTcpForwarding yes' /etc/ssh/sshd_config sed -i '/^#X11UseLocalhost/a\X11UseLocalhost no' /etc/ssh/sshd_config sed -i '/X11Forwarding/a\X11Forwarding yes' /etc/ssh/sshd_config sed -i '/^#LoginGraceTime/a\LoginGraceTime 90' /etc/ssh/sshd_config sed -i '/^#PermitEmptyPasswords/a\PermitEmptyPasswords no' /etc/ssh/sshd_config sed -i '/^#PubkeyAuthentication/a\PubkeyAuthentication yes' /etc/ssh/sshd_config sed -i '/^#MaxAuthTries/a\MaxAuthTries 5' /etc/ssh/sshd_config sed -i '/^#ClientAliveInterval/a\ClientAliveInterval 60' /etc/ssh/sshd_config sed -i '/^#ClientAliveCountMax/a\ClientAliveCountMax 3' /etc/ssh/sshd_config sed -i '/^#PermitRootLogin/a\PermitRootLogin no' /etc/ssh/sshd_config sed -i "s/#Banner none/Banner \/etc\/issue.net/g" /etc/ssh/sshd_config echo "ATTENTION:You have logged onto a secured server, ONLY Authorized users can access..." > /etc/issue echo "ATTENTION:You have logged onto a secured server, ONLY Authorized users can access..." > /etc/issue.net echo "ATTENTION:You have logged onto a secured server, ONLY Authorized users can access..." > /etc/motd systemctl restart sshd >/dev/null 2>&1 grep -Ev "^$|^#" /etc/ssh/sshd_config >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 禁用 USB 设施dsiable_usb() { echo "============= 禁用 USB 设施 =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." echo "install usb-storage /bin/true" >/etc/modprobe.d/block_usb.conf cat /etc/modprobe.d/block_usb.conf >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 超时设置timeout_config() { echo "============= timeout config =============" >>${conflog} 2>&1 RGB_WAIT "Configuring..." echo "export TMOUT=1800" >>/etc/profile.d/custom.conf cat /etc/profile.d/custom.conf >>${conflog} 2>&1 RGB_SUCCESS "Configuration Success"}# 询问是否重启 OS, rebootreboot_os() { RGB_WARNING "Please restart the server and see if the services start up fine." RGB_WARNING "Do you want to restart OS ? [y/n]: " while :; do read REBOOT_STATUS if [[ ! "${REBOOT_STATUS}" =~ ^[y,n]$ ]]; then echo -en "${RGB_DANGER}Input error, please only input 'y' or 'n': " else break fi done REBOOT_STATUS=$(echo $REBOOT_STATUS | tr [:upper:] [:lower:]) [ "${REBOOT_STATUS}" == 'y' ] && reboot}# 主步骤main() { RGB_INFO "1/13 : Customize the profile (color and alias)" custom_profile RGB_INFO "2/13 : Time zone adjustment,设置时区" time_zone RGB_INFO "3/13 : Disable selinux,禁用 SELinux" disable_selinux RGB_INFO "4/13 : Configure Limit IP login,限度 IP 近程拜访" limit_sshIP RGB_INFO "5/13 : Disable Ctrl+Alt+Del" disable_cad if [ "$cansue_bbr" = "Y" ];then RGB_INFO "6/13 : Enable Google bbr congestion control algorithm,启用 Google BBR 防拥挤,内核版本≥4.9" open_bbr else RGB_INFO "6/13 : 不反对 Google BBR 防拥挤配置,内核版本<4.9,Not support Google bbr congestion control algorithm, do nothing..." fi RGB_INFO "7/13 : 锁定(Lock)没有登录权限的账户 ( $(egrep "/sbin/nologin" /etc/passwd | cut -d: -f1 | paste -s -d ","s) )" lock_user RGB_INFO "8/13 : System permissions for sensitive files,批改passwd/group等系统文件读写权限" exist_account_pwd_policy RGB_INFO "9/13 : System permissions for sensitive files,批改passwd/group等系统文件读写权限" sys_permissions RGB_INFO "10/13 : Modify Account Password Survival Policy,设置明码最大可用天数、最小长度等" password_policy RGB_INFO "11/13 : Maximum number of days an account is valid after password expiration strategy" change_useradd RGB_INFO "12/13 : SSH 平安设置,禁用 root 近程登录,批改默认端口为 922" sec_ssh RGB_INFO "13/13 : Timeout Auto-Logout Configuration, 设置 30 分钟超时退出" timeout_config reboot_os}clearcheck_rootcheck_osmain

May 22, 2023 · 6 min · jiezi

关于linux:OpenCloudOS-如何基于-eBPF-实现容器级别的TCP-连接监控

eBPF 技术的呈现,使得内核的资源监控更加的便捷、高效,容器化监控也更加实用于云原生的场景。基于 eBPF 实现的可观测性,能够无需批改内核源码或者加载内核模块,平安高效的扩大内核性能。本文,将从网络的角度介绍如何基于 eBPF,实现容器级别的 TCP 连贯监控。  一、技术背景OpenCloudOS 实用于大规模容器集群服务器场景,为了进步服务器的资源利用率,升高业务及客户的服务器老本,提出了离、在线业务混合部署的资源隔离计划。资源隔离 QoS(Quality of Service,服务质量)计划次要包含 CPU、I/O、内存和网络四大模块。 针对这四种服务器资源进行 QoS,可能将用户的在线、离线业务部署到同一台服务器上,在保障在线业务服务质量的同时,无效的晋升了资源利用率,助力降本增效,符合衰弱可继续的倒退理念。随着 OpenCloudOS 中大规模离、在线服务混合部署的利用,如何更好的实时监控、反馈服务情况成为了业务运维人员亟需解决的问题。  基于 Linux 内核实现的可观测性,具备性能好、灵活性低等长处。然而,基于内核的实现通常是比拟艰难和繁琐的。在传统的实现形式中,开发人员须要批改内核源代码从新编译或者加载内核模块来实现性能的观测,可能会应答简单难以调试的状况,使得性能观测变得异样辣手。 像基于 kprobe、tracepoint、perf events 等技术的 ftrace、perf 工具,通过在内核函数中打桩,把数据从内核态搬到用户态进行解决。诸如上述实现可观测性的形式带来的弊病也很显著,无爱护的内核模块有极大的安全隐患,同时实现的老本较高,不可能应答多变的场景。 eBPF 技术的呈现,使得内核的资源监控更加的便捷、高效,容器化监控也更加实用于云原生的场景。基于 eBPF 实现的可观测性,能够无需批改内核源码或者加载内核模块,平安高效的扩大内核性能,很好的解决了上述问题。本文,将从网络的角度介绍如何基于 eBPF,实现容器级别的 TCP 连贯监控。   二、eBPF 介绍eBPF 是一种在 Linux 内核运行沙箱程序的技术,在无需批改内核源码或者加载内核模块的状况下平安高效地扩大内核性能,能够看作是在内核的一些 hook point 上执行用户代码的一个虚拟机。 用户编写的代码被 clang 编译成字节码后加载到 linux 内核,通过 verifier 引擎保障字节码的安全性,而后通过内嵌的 JIT 编译器将字节码转老本地机器码。eBPF 是由事件触发的,当事件到来时,则在内核空间执行用户态 BPF 程序,扭转内核的解决流程。 eBPF 在引入内核后,逐步演进成为一个通用执行引擎,可基于此开发性能剖析工具,网络过滤器等。eBPF 程序架构强调安全性和稳定性,看上去像内核模块,但却并不需要从新编译内核。 在 eBPF 程序的运行过程中,并不会因为程序问题而造成零碎解体。因为其平安、高效、可编程,以及在速度和性能方面的劣势,eBPF 在内核观测、追踪监控、利用性能调优、流量管制、性能统计、平安等畛域施展了重要的作用。 三、eBPF 工具在理论利用中的问题随着离、在线混部性能的大规模部署应用,理论利用中更多的业务是基于容器来进行资源的隔离与调度。基于整机的零碎级别的网络监控、追踪工具无奈实现容器级别的管制,并不适用于云原生的容器场景。 如何实现更加精密的 cgroup、过程级别的资源监控,帮忙管理员更好的理解零碎的资源应用状况,曾经成为宽泛关注的问题,因而监控工具的容器化实现尤为重要。  OpenCloudOS 将 cgroup 层级的子系统状态 ID 传输到用户空间,建设 cgroup 子系统门路和 ID 之间的分割。同时适配暗藏了 cgroup v1 和 v2 构造差别,使内核仅收集所需的子系统中特定 cgroup 的网络连接情况信息。基于此,别离实现了 BCC 和 libbpf 网络工具的容器化监控。  ...

May 18, 2023 · 1 min · jiezi

关于linux:linux-和-glibc-浅谈

什么是 glibcglibc(GNU C Library)是一个用户空间库,它不是间接位于Linux内核中,而是作为一个独立的软件包存在于Linux零碎中。 Linux内核自身提供了操作系统的外围性能,如过程治理、文件系统、设施驱动等。而glibc是一个用户空间库,为应用程序提供与操作系统的交互接口。它蕴含了规范的C库函数实现,如内存治理、文件操作、网络通信等。 当应用程序须要与操作系统进行交互时,它们会应用glibc提供的函数和接口来调用相应的零碎性能。这些函数和接口封装了与操作系统内核的交互细节,使应用程序可能不便地应用操作系统提供的性能。 所以能够说,glibc是作为Linux零碎的一部分存在的,但它不是内核的一部分。它提供了用户空间的规范C库性能,是应用程序与Linux操作系统之间的重要桥梁。 如何查看 glibc 的版本要查看Ubuntu 20.04上正在应用的glibc版本,能够应用以下命令: ldd --version这个命令将显示ldd工具的版本信息,ldd是用于查看动态链接库依赖关系的工具,它应用零碎上装置的glibc版本。 另外,你还能够应用以下命令来查看glibc的版本号: strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_这个命令将在libc.so.6文件中查找以"GLIBC_"结尾的字符串,其后的字符串示意glibc的版本号。 请留神,这些命令须要在具备适当权限的终端或shell中运行。 如何查看 glibc 的装置门路要查看glibc(GNU C Library)的装置门路,能够应用以下命令: ldconfig -p | grep libc.so这个命令会列出零碎中所有已装置的动态链接库,并通过筛选查找蕴含 "libc.so" 的行,其中就包含glibc的门路。 请留神,为了执行上述命令,你须要具备适当的权限。 libc.so.6 和 libc.so 是什么关系?libc.so 是一个指向 libc.so.6 的符号链接(symbolic link)。在Linux零碎中,libc.so.6 是GNU C库(glibc)的次要共享对象文件。它蕴含了操作系统所需的规范C库函数和符号,供应用程序调用和链接。 因为libc.so.6 是glibc的版本特定文件,为了确保向后兼容性和降级不便,零碎会创立一个 libc.so 的符号链接,指向以后正在应用的 libc.so.6 文件。这样做能够使旧的应用程序可能持续链接到最新的glibc版本,而不须要批改其链接门路。 因而,libc.so 和 libc.so.6 在性能上是等价的,它们代表了同一个共享对象文件(glibc)。应用程序能够应用其中任何一个来链接到零碎的规范C库。libc.so 作为一个通用的符号链接,能够用于向后兼容和简化链接的过程。而 libc.so.6 是理论的共享对象文件,蕴含了glibc的具体实现和性能。 须要留神的是,不同的Linux发行版和版本可能会在文件门路和命名方面略有不同,然而 libc.so 和 libc.so.6 的关系原理是雷同的。 glibc 版本和 linux 发行版本的对应关系下表是支流Linux发行版Ubuntu/CentOS/Debian零碎默认的glic版本 UbuntuDebianCentOSGlibc22.04--2.3420.0411-2.31-1082.2818.04--2.27-9-2.2416.04--2.2314.048-2.1913.04-72.1712.04--2.15-7-2.13--62.12参考:https://blog.lmshao.com/linux-glibc-version.html

May 17, 2023 · 1 min · jiezi

关于linux:sysMaster-全新1号进程实现方案秒级自愈保障系统全天在线

意识 1 号过程和 sysMaster在 Linux 操作系统中,1 号过程是 init 过程,它是所有其余过程的先人过程。init 过程是系统启动时第一个被创立的过程,它负责启动和治理其余所有过程,并在零碎关机时敞开它们。在古代 Linux 零碎中,init 过程曾经被 systemd 过程所取代,然而 1 号过程的概念依然存在。它的最小性能包含系统启动和回收僵尸过程。 「sysMaster」 是 openEuler 针对不同场景下 Linux 零碎初始化和服务治理面临的问题和特点进行总结和思考后的一种改良和摸索,旨在改良传统的 init 守护过程,提供对立的零碎初始化和服务治理解决方案,反对嵌入式、服务器和云场景下的过程、容器和虚拟机治理。应用 rust 语言编码,引入故障监测和秒级自愈等多种技术手段,从而晋升 OS 的稳定性和业务的可用度。 如下 sysMaster 零碎架构图所示,次要蕴含三个方面的内容: sysmaster-init:提供零碎初始化/僵尸过程回收/监控保活等性能,性能极简,特地是可独自利用于嵌入式场景。sysmaster-core:提供服务单元的生命周期治理等外围性能,反对热重启/热降级/秒级自愈等能力,保障业务 24 小时在线。sysmaster-extends:提供零碎要害性能的组件汇合(如设施治理 devMaster,总线通信 busMaster,对立代理 uniMaster 等),各组件可独自应用,在不同场景下灵便选用。 为什么开发 sysMaster常见的初始化零碎有 sysvinit、Upstart 和 systemd,它们各有特点,如下表所示: Init 软件阐明启动治理过程回收服务治理并行启动设施治理资源管制日志治理sysvinit晚期版本应用的初始化过程工具,逐步淡出舞台✓✓-----UpstartDebian、Ubuntu 等零碎应用的 initdaemon✓✓✓✓---systemd进步零碎的启动速度,相比传统的 System V 是一大变革,已被大多数 Linux 发行版所应用。✓✓✓✓✓✓✓只管 systemd 在启动速度和性能方面有很大的改良,但其零碎架构和实现越来越简单,不合乎 Keep It Simple 的准则,也不反对灵便组合,对于嵌入式和一些 IoT 设施等场景的反对有余。此外,systemd 每个版本引入的问题都不是一个收敛状态,并且近些年问题越来越多,这些问题会带来零碎级别的宕机。这与 openEuler 面向边缘、嵌入式、服务器和云场景的愿景不符。 在云化场景下,服务的治理对象由过程演变为虚拟机和容器。通过 OpenStack、Kubernetes 等平台联合节点上的 agent(如 kubelet、nova)进行治理。这些 agent 在节点上通过 Systemd 进行治理,并且也应用了 Systemd 提供的一些根底能力,如日志输入。对于 Node(VM、Host)外部的一些要害服务,如 Nginx,通过 Systemd 进行生命周期的治理。这些服务也是分布式的,以后呈现问题时,由服务自行进行解决,无奈像容器实例和虚拟机实例一样通过相似 Kubernetes、OpenStack 平台对立编排。 ...

May 11, 2023 · 1 min · jiezi

关于linux:ebpflinux-安全双刃剑

EBPF 技术简介 eBPF全称 extended BPF,Linux Kernel 3.15 中引入的全新设计, 是对既有BPF架构进行了全面扩大,一方面,反对了更多畛域的利用,另一方面,在接口的设计以及易用性上,也有了较大的改良。 eBPF 是一个基于寄存器的虚拟机,应用自定义的 64 位 RISC 指令集,可能在 Linux 内核内运行即时本地编译的 “BPF 程序”,并能拜访内核性能和内存的一个子集。 倒退历史 工作机制 ebpf带来的平安威逼 eBPF的hook点性能包含以下几局部: 能够在Storage、Network等与内核交互之间;也能够在内核中的功能模块交互之间;又能够在内核态与用户态交互之间;更能够在用户态过程空间。eBPF的性能笼罩XDP、TC、Probe、Socket等,每个性能点都能实现内核态的篡改行为,从而使得用户态齐全致盲,哪怕是基于内核模块的HIDS,一样无奈感知到这些行为。网络层歹意利用ebpf 以一个SSH、WEB服务的服务器为例,在IDC常见网络拜访策略中,凋谢公网web 80端口容许任意起源的IP拜访。而SSH服务只容许特定IP,或者只凋谢内网端口拜访。 假如这台服务器曾经被黑客入侵,黑客须要留下一个后门,且须要一个暗藏、牢靠的网络链路作为后门通道,那么在eBPF技术上,会如何实现呢? XDP/TC层批改TCP包 为了让后门暗藏的更好,最好是不开过程,不监听端口(以后局部咱们只探讨网络层暗藏)。而eBPF技术在XDP、TC、socket等内核层的性能,可能实现流量信息批改,这些性能常被利用在L3、L4的网络负载平衡上。比方cilium的网络策略都是基于eBPF XDP实现。eBPF hook了XDP点后,更改了TCP包的指标IP,零碎内核再将该数据包转发进来。 依照XDP与TC在Linux内核中,解决ingress与egress的地位,能够更精确地确定hook点。 零碎层歹意利用ebpf 实现流程 回顾eBPF的hook点,作用在syscall的kprobe、tracepoint事件类型,假使用在后门rootkit场景,是非常可怕的。比方,批改内核态返回给用户态的数据,拦挡阻断用户态行为等随心所欲。而更可怕的是,常见的HIDS都是基于内核态或者用户态做行为监控,这恰好就绕开了大部分HIDS的监控,且不产生任何日志. tracepoint事件类型hook 在SSHD利用中,当用户登录时,会读取/etc/passwd等文件。用户态sshd程序,调用open、read等零碎调用,让内核去硬件磁盘上检索数据,再返回数据给sshd过程。 用户态生成payload 用户态实现/etc/passwd、/etc/shadown等文件payload的生成,并通过eBPF的RewriteConstants机制,实现对elf .rodata的字段值替换。 内核态通过ebpf调用实现了随机用户名明码的root账号增加。在鉴权认证上,也能够配合eBPF网络层歹意利用的demo,利用eBPF map交互,实现相应鉴权。 但rootkit自身并没有更改硬盘上文件,不产生危险行为。并且,只针对特定过程的做笼罩,隐蔽性更好。 平安进攻应答 运行前 在恶意程序运行前,缩小攻击面,这个思路是不变的。 环境限度 不论是宿主机还是容器,都进行权限收敛,能不赋予SYS_ADMIN、CAP_BPF等权限,就禁止掉。若肯定要凋谢这个权限,那么只能放到运行时的检测环节了。 seccomp限度 在容器启动时,批改默认seccomp.json,禁止bpf零碎调用,避免容器逃逸,留神此办法对于Privileged特权容器有效。 内核编译参数限度 批改函数返回值做运行时防护时,须要用到bpf_override_return,该函数须要内核开启CONFIG_BPF_KPROBE_OVERRIDE编译参数,因而非非凡状况不要开启该编译参数。 非特权用户指令 大部分eBPF程序类型都须要root权限的用户能力调用执行。但有几个例外,比方BPF_PROG_TYPE_SOCKET_FILTER和BPF_PROG_TYPE_CGROUP_SKB这两个类型,就不须要root。但须要读取系统配置开关。 运行时 监控 Linux零碎中,所有的程序运行,都必须进行零碎调用,eBPF程序也不例外。须要调用syscall为321的SYS_BPF指令。并且,所有的eBPF程序执行、map创立都必须进行这个syscall调用。那么,在这个必经之路进行拦挡监控,是最好的计划。 依据程序白名单筛选 在一些BPF利用的业务服务器上,自身业务行为会产生大量调用,会给平安预警带来较大审计压力。对于已知的过程,咱们能够依据过程特色过滤。 获取以后过程pid、comm等属性,依据用户态写入eBPF map的配置,决定是否上报、是否拦挡。 依据SYSCALL类型筛选 在BPF syscall里,子命令的性能蕴含map、prog等多种类型的操作,bpf() subcommand reference 里有具体的读写API。在理论的业务场景里,“写”的平安危险比“读”大。所以,咱们能够过滤掉“读”操作,只上报、审计“写”操作。 ...

May 6, 2023 · 1 min · jiezi

关于linux:简单而强大快速掌握-UFW-防火墙命令

xiaoz之前常常应用的服务器操作系统是Redhat系列的CentOS。然而,自从CentOS Stream变成了RHEL的滚动更新预览版后,xiaoz开始逐步转向Debian。尽管一开始有些不习惯,但应用了一段时间之后,xiaoz发现Debian依然十分易用。 就拿防火墙治理这一块来说,我在CentOS下应用firewalld,转用Debian后,我发现ufw更加简略易用。本文将分享ufw的疾速上手办法。 对于ufwufw(Uncomplicated Firewall)是一个简化的、易于应用的Linux防火墙工具,旨在不便用户治理iptables防火墙规定。它为用户提供了一个直观且易于了解的命令行界面,使得配置防火墙规定变得更加简略。 ufw的一些次要特点和性能: 简化的防火墙治理:ufw提供了一个简洁的命令行界面,让您可能轻松地增加、删除和批改防火墙规定。基于iptables:ufw是基于iptables的,因而它与Linux内核中现有的防火墙技术兼容。它实际上是iptables的一个敌对的前端。容许和回绝规定:您能够应用ufw创立容许和回绝规定,以管制入站和出站流量。这让您能够准确地管制容许哪些连贯进入或来到您的零碎。放行特定端口、协定和IP:ufw容许您放行特定端口、协定(TCP或UDP)以及特定起源或指标IP地址的连贯。限度特定IP拜访:您能够应用ufw限度特定IP地址拜访您的零碎上的特定端口。日志记录:ufw能够记录防火墙流动,这对于监督您的系统安全和解决网络问题十分有用。易于启用和禁用:ufw能够轻松启用和禁用,让您在须要时能够迅速启用防火墙,或在进行系统维护时临时敞开防火墙。装置ufw在 Debian、Ubuntu 或其衍生版本上,关上终端并执行以下命令装置: # 装置ufwsudo apt-get updatesudo apt-get install ufw而后启动ufw: # 启动ufwsudo ufw enable# 设置为开机自启sudo systemctl enable ufw执行sudo ufw status查看以后状态,通常有3种状态: Status: inactive(未启用):示意 UFW 没有启用,防火墙处于敞开状态。Status: active(已启用):示意 UFW 曾经启用,并且防火墙规定正在利用于零碎。Status: inactive (dead)(未启用且未运行):示意 UFW 已被禁用,并且防火墙未在零碎中运行。ufw放行端口ufw的命令比firewalld简洁许多,比方你想放行单个端口,只须要执行: # 将 <port> 替换为你要放行的具体端口号。例如,要放行 TCP 端口 80,能够执行 sudo ufw allow 80。sudo ufw allow <port>如果须要放行特定协定的端口,咱们须要加上协定: # 将 <port> 替换为端口号,<protocol> 替换为协定类型(如 tcp、udp)。例如,要放行 UDP 端口 53,能够执行 sudo ufw allow 53/udp。sudo ufw allow <port>/<protocol>放行一个端口范畴: sudo ufw allow <start-port>:<end-port>/<protocol>将 <start-port> 替换为起始端口号,<end-port> 替换为完结端口号,<protocol>为协定。例如,要放行 TCP 端口范畴 8000 到 9000,能够执行sudo ufw allow 8000:9000/tcp ...

May 5, 2023 · 1 min · jiezi

关于linux:如何查看-ubuntu-的-2MSL-是多少秒

在 Ubuntu 上,能够应用 sysctl 命令来查看 net.ipv4.tcp_fin_timeout 参数,该参数示意 TCP 连贯终止后在 TIME_WAIT 状态下的最长等待时间。在 Linux 内核中,2MSL 等待时间通常是 tcp_fin_timeout 的两倍。 能够应用以下命令查看 Ubuntu 上的 tcp_fin_timeout 参数: sysctl net.ipv4.tcp_fin_timeout该命令会输入相似以下内容的后果: net.ipv4.tcp_fin_timeout = 60这示意在 Ubuntu 上 TCP 连贯终止后会期待 60 秒,而后能力开释资源。因而,2MSL 工夫通常是 120 秒。

May 5, 2023 · 1 min · jiezi

关于linux:linux-的代码规模有多大

clone linux 的源代码 git clone git@github.com:torvalds/linux.git而后应用 cloc 统计代码,后果如下: ─➤ cloc . 80185 text files. 79650 unique files. 11303 files ignored.github.com/AlDanial/cloc v 1.82 T=376.67 s (183.0 files/s, 91099.3 lines/s)---------------------------------------------------------------------------------------Language files blank comment code---------------------------------------------------------------------------------------C 32432 3301436 2591032 17027790C/C++ Header 23563 709503 1364178 7074499reStructuredText 3339 164958 67617 450601JSON 506 2 0 360071YAML 3485 64334 16122 299209Assembly 1332 48392 101795 233500Bourne Shell 941 29162 19938 114181make 2808 11052 11922 50816SVG 74 90 1171 48177Python 183 8949 7559 45160Perl 69 7562 5160 37635Rust 55 1273 8094 7690yacc 9 700 409 4919PO File 6 948 1088 3733lex 9 345 309 2114C++ 10 373 138 2022Bourne Again Shell 55 392 309 1611awk 13 238 154 1373Glade 1 58 0 603NAnt script 2 153 0 537Cucumber 1 34 58 196TeX 1 6 74 156CSS 3 41 60 136Windows Module Definition 2 15 0 113m4 1 15 1 95XSLT 5 13 26 61MATLAB 1 17 37 35vim script 1 3 12 27Markdown 1 8 0 25Ruby 1 4 0 25HTML 1 1 5 10INI 1 1 0 6sed 1 2 5 5TOML 1 1 9 2---------------------------------------------------------------------------------------SUM: 68913 4350081 4197282 25767133---------------------------------------------------------------------------------------文件规模: ...

May 4, 2023 · 2 min · jiezi

关于linux:linux-统计-mp4-结尾文件的个数

能够应用以下命令来统计当前目录下以 .mp4 结尾的文件数量: ls -l | grep '\.mp4$' | wc -l这个命令首先应用 ls -l 列出当前目录下所有文件和文件夹的详细信息,而后应用 grep '\.mp4$' 筛选出以 .mp4 结尾的文件,并应用 wc -l 统计行数(即文件数量)。 如果要递归地统计某个目录下的所有以 .mp4 结尾的文件数量,能够应用以下命令: find /path/to/dir -type f -name "*.mp4" | wc -l这个命令应用 find 命令在 /path/to/dir 目录下查找所有类型为文件,且文件名以 .mp4 结尾的文件,并应用 wc -l 统计行数。

May 2, 2023 · 1 min · jiezi

关于linux:linux-删除-ts-结尾的所有文件

在 Linux 中,能够应用以下命令删除所有以 .ts 结尾的文件: rm *.ts该命令应用 rm(remove)命令和通配符 * 来匹配当前目录下所有以 .ts 结尾的文件,并将其删除。如果想要删除其余目录中的 .ts 文件,能够将命令中的 * 替换为目录门路。

May 2, 2023 · 1 min · jiezi

关于linux:linux-子进程可以继承父进程正在监听的端口吗-如何子进程关闭了继承的端口父进程还能使用这个端口吗

在 Linux 中,子过程能够继承父过程正在监听的端口,这是因为子过程会继承父过程关上的文件描述符,而监听的套接字是通过文件描述符来实现的。所以当子过程继承父过程关上的套接字时,也就继承了这个套接字对应的文件描述符,从而能够持续监听这个端口。 当子过程敞开继承的端口时,父过程依然能够应用这个端口。这是因为在 Linux 中,每个关上的文件都有一个援用计数。当一个过程敞开一个文件时,内核会将文件的援用计数减 1。只有当所有过程都敞开了这个文件,援用计数才会降为 0,此时内核才会开释文件描述符和相应的资源。在咱们这个例子中,当子过程敞开继承的端口时,父过程依然放弃着对该端口的监听,因而该端口的援用计数并不会降为 0,所以父过程依然能够应用这个端口。 须要留神的是,当一个过程关上一个端口并监听它时,该端口会被标记为已被占用。只有当该过程开释了该端口,或者该过程退出时,该端口才会被标记为未被占用。因而,如果子过程没有在退出前敞开继承的端口,即便父过程曾经退出,该端口依然会被标记为已被占用,直到操作系统重新启动或者手动开释该端口。

May 2, 2023 · 1 min · jiezi

关于linux:麒麟操作系统-kylinos-从入门到精通-办公环境-第五十三篇-音频处理之降噪

0.根底环境类别:笔记本型号:中国长城 NF14C硬件平台:飞腾处理器(ArmV8 指令集)零碎:河汉麒麟操作系统 V10 SP1(2303) 关键词:信创,麒麟零碎,linux,c++,c,飞腾,arm,降噪,音频,audacity,Adobe Audition,DaVinci Resolve 1.背景在日常生活中,咱们总会遇到一些须要录音的状况。特地是在一些重大演讲、重大会议的时候利用手机、录音笔等进行会议记录,再回家复盘。在这种状况下,容易呈现须要录的人声较小,乐音确很大的问题,导致音频有时候无奈失去重要内容。这时候咱们就能够利用音频处理软件,咱们罕用的有adobe audition十分易用且业余的工具,还有DaVinci Resolve (只有x86_64版本)等。但他们都无奈在飞腾arm平台上运行。本文试图为大家在arm处理器上,在麒麟操作系统下为大家提供一个音频降噪的解决实际。留神:须要筹备一个有乐音的音频文件,如果切实没有,就在有车的马路边用手机录音一段。 2.audacity音频处理软件(首选举荐)Audacity是一款反对Linux、MacOS以及Windows等多种平台的疾速多轨音频编辑、录制工具,反对WAV, AIFF, Ogg和MP3格局音乐文件,提供编辑、混音性能并提供预置成果、插件和有限次反悔操作。 2.1装置 2.2音频解决关上带有乐音的录音文件点击抉择点击“成果”菜单中的“降噪”,弹出点“获得噪声特色”,再点确定后,成果如下确认成果后,导出为须要的音频正本即可 对于audacity的业余用法,可能须要大家深刻学习了,能够依据业务须要检索一些业余畛域的教程。 3.在线工具网站举荐3.1 audohttps://audo.ai/Audo 是名列前茅的 AI 音频增强器,实用于任何想要创立业余、高质量音频我的项目的人。其简略直观的用户界面容许用户疾速上传和编辑声音文件。该应用程序背地的 AI 技术和音频工程确保它对所有级别的音频编辑都简略而无效,从业余播客到经验丰富的音响工程师都能实用。 3.2 AI Masteringhttps://aimastering.com/AI Mastering是一款 AI 音频加强工具,专一于将用户体验放在首位。为了确保使用方便,AI Mastering 创立了几个简略的代替办法让用户注册,包含应用您现有的 GitHub、Google 或 Twitter 帐户。 3.3 audiotoolsethttps://audiotoolset.com/cn/noise-reduction在线,简略,疾速,收费地缩小音频噪声 4.ffmpeg普通用户不举荐利用ffmpeg+sox 音频降噪解决降噪,这一个次要偏差于技术人员了。两个工具的下载地址如下: ffmpeg ,下载地址:ffmpeg.org; sox ,下载地址:http://sox.sourceforge.net/;应用示例 #!/bin/bashs='source.mp4'n='new.mp4'd='db.mp4'# 音频视频拆散ffmpeg -i $s -vcodec copy -an ts.mp4ffmpeg -i $s -acodec pcm_s16le -ar 128k -vn tm.wav # 乐音特征提取ffmpeg -i tm.mp4 -vn -ss 00:00:00 -t 00:00:01 noise.wavsox noise.wav -n noiseprof noise.prof# 乐音去除 最初取值在0.2~0.3 一般来说0.21即可sox tm.wav newtm.wav noisered noise.prof 0.21# 合并音频视频ffmpeg -i newtm.wav -i ts.mp4 $n# 声音调整# ffmpeg -i $n -vcodec copy -af "volume=50dB" $d5.写在最初在媒体方面生态重大没有跟上,心愿更多的人补上这些缺口。 ...

April 29, 2023 · 1 min · jiezi

关于linux:eBPF的发展演进从石器时代到成为神五

6.走向将来 将来BPF将如何倒退呢?它曾经具备图灵机的雏形,领有微小的计算能力潜能。它目前的计算能力依然受到束缚,然而曾经足够扭转现有利用开发的根底,必将引发利用的蓬勃发展,会衍生出开发工具、测试方法等等的倒退,使业务逻辑的开发与BPF的开发对立在一个开发模型当中,甚至引发新的开发语言呈现。当在应用领域中生根后,就会持续发芽壮大,须要排汇计算能力作为养料能力抽枝散叶。BPF利用与BPF技术外延的倒退就像两面绝对的镜子,互相映照,造成斑斓的德罗斯特效应图景。 随着近几年云计算、人工智能、智能设施的蓬勃发展,信息系统基础设施构造、设施类型、业务复杂度都迎来再一次的改革。 Linux零碎作为现今最为宽泛应用的操作系统,其本身也在倒退变动。初期,沿着原有的技术路线,通过量的积攒,足以应答时代的演进,这一点从代码增长就可以看进去,其背地是Linux反对的设施、驱动、个性、机制也来越多。产品构型也越来也简单,Web服务器、并行计算、异构计算、桌面、智能终端、嵌入式零碎。Linux的技术设施,须要面对不同的利用场景和问题。量的积攒,能够解决一段时间的问题。然而,当这种变动积攒到肯定水平时,须要新的伎俩,能力反对下层构造的灵便度。 须要指出的是,现有的文档中,大多将BPF定位为网络和平安工具的利器。然而BPF作为一种通用的动静逻辑机制,绝不仅仅能够利用这两个中央。 6.1.通用性 BPF曾经从最后网络报文剖析技术,扩大到了很多应用领域,当前必然成为一种通用的内核开发技术,在定制化和性能扩大两方面推动内核倒退。 目前BPF的外围组建根本轮廓曾经确定,由运行上下文、帮忙函数、Map、指令集、Verifier、JIT、零碎调用等要害模块形成BPF的外围运行机制。 运行上下文是BPF程序运行的语境,目前除了网络语境倒退比拟疾速之外,其余程序类型的运行上下文倒退绝对落后,文件系统目前甚至还没有。 对于运行上下文应该设计成什么样子,达到什么要求,有怎么的束缚,还没有对立的范式,次要由各程序类型依据理论利用须要进行定义。彼此间不足共通性,倒退比拟随便,还处于比拟原始的阶段。 帮忙函数还不齐备,各个程序类型存在差别。程序类型的定义,不足逻辑根底,其设计元语还需廓清。语境相干局部和通用局部划分不分明,影响到平安机制也无奈针对性设计,安全性无奈验证。Map负担的角色过于宽泛,既是通信机制,也是存储机制,既是Local的也是Global的。是对BPF外围机制补全的过渡伎俩。随着,近程调用、间接调用、跳转表、全局变量等的实现,Map的作用和应用形式也将扭转。 6.2.表达能力 内核曾经在扩展性方面在不断改进,然而这些始终还是不能基本解决问题,引入更多编译器技术特地是动静编译技术、可信编译技术才是解决问题的基本。 目前BPF的程序的表达能力相当于弱化的C语言,这显然是不够的。实现一种和传统利用开发雷同的开发体验,让程序员专一于了解业务逻辑,自在地表白,须要编译器填补通用语言与BPF本身限度之间的沟壑,须要语言层面的扩大,也须要运行时和工具链的反对。 6.3.开发工具 目前还没有在前端反对BPF的开发工具,只是实现了后端的反对,这显然还远远不够。这种状况,正阐明了BPF的倒退急需编译器的反对,在前端反对BPF,通过语言个性的扩大和新的开发反对库,实现BPF与通用编程语言的交融,将大大缩减蕴含BPF个性的应用程序的开发、测试和保护难度。对于BPF作为一项利用开发技术大力推广至关重要。 6.4.开发流程 目前,在设计阶段,须要将BPF的逻辑局部和个别编程逻辑局部分离出来,这减少了设计的开销,同时对于设计人员的要求加大。本来的利用设计人员,只理解业务逻辑,这显然不够,还须要理解内核的基本原理,才可能做好逻辑划分工作。既理解内核又懂利用开发和业务逻辑的人员,是交叉性人才,这样的人员往往少且难以造就。如果让本来的利用开发人员,学习把握内核相干的常识,以便能够满足BPF利用开发的须要,显然费时费力不说,费效比更是难以达到商业决策的最低门槛。 而在开发阶段,BPF和利用须要离开编码,这无疑减少了联调联试的开销。特地是,呈现问题的时候须要频繁的跨组跨部门沟通,效率切实太低。如果能把BPF的开发齐全利用化,让一个程序员承当所有工作,老本、效率都能够失去优化。 在测试阶段,还短少专用的高效率的工具。 因而,以开发工具的提高为根底,目前采纳的开发流程也肯定会同步地被改良。能够料想,将来的开发流程肯定是交融和简化的。 7.结束语 Linux内核的倒退,将技术倒退与翻新演绎得酣畅淋漓。 源自于用户和开发者的需要,始终是推动技术不断进步的基本能源。在需要的推动下,Linux内核始终在疾速的倒退,放弃着强劲的能源。 同时,酷爱与保持,还有最重要的开发准则的坚守,是Linux可能将源源不断的需要转化为翻新能源的根底,而不至于被爆炸的需要捣毁。根本准则体系的保护,使Linux内核始终保持如一的设计框架。 在Linux的倒退过程中,一些很小的需要,最终也能够倒退成为简单的架构。保持与突破壁垒,是翻新的范式。 在一直寻求问题的最终答案的过程中,有很多优良的思维启发咱们的认知,但限于技术倒退阶段、条件是否成熟,这些优良的思维有的潜入水底,有的浮现水面独领一段风骚。历史会有所偏好,作出它的抉择,但不可否认的是这些优良的思维,都始终在施展着它们的作用。当历史的拐点到来的时候,它们又会从新交融,以一种全新的形式持续推动技术的提高。 BPF是内核交互问题一直开掘、迭代后的最新答案。内核的交互问题,实质上是内核构造问题。BPF的弱小计算能力,将推动更好地实现内核与用户态的动静交互,使内核可能更加灵便满足各种利用场景的须要,使整个零碎的性能不因为这种能力而蒙受损失。放弃软件良好分层的根底上,减小分层对信息交互、资源共享的妨碍。而围绕BPF的基础设施的倒退,也必定会为内核构造带来微小扭转,将安全性、规范性更加深刻地融入到内核的轻微档次。 安全可靠是BPF继续倒退的准则的,在BPF的功能性一直扩大、计算能力一直开释的过程中,安全检查、可信编译的加持是可持续性的根底。 而作为一种全新的编程形式,BPF的开发和传统编程范式具备同样的位置和发展前景。从语言的反对到代码的生成乃至JIT的优化等等,是必不可少的一环。 BPF来源于Linux内核倒退过程中,泛滥优良的开发者在效率、能力方面的不断改进,以及对技术根源的孜孜以求。它是内核倒退中,泛滥优良思维的集大成者,但同时,它也仅仅是新时代的开始。 新的办法、新的语言、新的架构都在一直呈现,催生着微小的改革,如汹涌的波澜。而BPF将成为乘波之舟,它存在很多可能性,置信以此为终点,开发者们将会谱写更富丽的篇章。这是包含作者在内的泛滥开发者,所期待的广大将来。

April 28, 2023 · 1 min · jiezi

关于linux:eBPF的发展演进从石器时代到成为神四

5.eBPF的意义 BPF最后来源于解决网络报文过滤的问题,实现灵便的过滤规定。网络报文的过滤规定,最后只须要正则语言就能表白,但起初就不够了。而BPF提供了更弱小的表达能力,BPF具备近似图灵齐备性,必将成为问题合成、解决简单问题的神级工具。 5.1.图灵齐备性 探讨BPF的计算能力,波及到图灵齐备。BPF目前的根本设计中,有限性是根本设计准则,这是保障内核不被扩大逻辑挂死的根本要求。而有限性,是BPF和图灵机的基本差别,因而它不是图灵齐备的。这个论断诚然没错,但如果探讨仅止于此的话,那么这一论断过于毛糙,换个乏味一点的说法,这样的探讨不是图灵齐备的,因而还须要具体分析。 齐备性,不是评估工具优劣的齐全准则。个别认为,C语言是图灵齐备的。然而C语言的所有数据类型都是有界的,其实是弱于图灵机的。但不障碍人们认为C是图灵齐备的,因为它的能力边界间隔理论利用的需要很远,咱们感触不到。尽管C语言图灵不齐备,然而不障碍它的发展潜力,在它的成长过程中,也在一直的改版、丰盛。是因为它的齐备性有余吗?显然不是。一种工具,在工程实际中,齐备性是主要的,因为他被抉择,就阐明它是够用的。其余方面才是当下更应该关注的问题。 图灵机是一种有限的自动机,人们穷尽方法也只能迫近,即便全世界所有计算机加在一起的总和,也弱于图灵机。所以图灵齐备事实中基本不存在,探讨迫近图灵机的能力可能更事实。在理论的语境中,人们实际上把有限靠近图灵机的迫近能力,等同于图灵齐备性。一个很好的例子就是C语言,它显然不是图灵齐备的,但人们个别认为它是图灵齐备。从这点说,BPF语言同样是图灵齐备的。 排除语言的问题,那么BPF是图灵齐备的吗?依然不是,BPF的图灵不齐备,并不次要来源于BPF语言自身,而是来源于运行环境。从这点说,BPF语言是图灵齐备的,BPF虚拟机不是。从这点也能够说,只有有须要,通过革新运行环境,BPF能够有限迫近图灵机的计算能力。 因而,从图灵齐备这一点,咱们既不能适度的否定BPF,认为它的能力无限。但同时,也不能认为它的能力能够有限扩张,因为须要满足特定的条件。总之,BPF还在疾速倒退过程中,所有可能性皆在其中,任何定论皆言之过早。 从另一个角度,就BPF目前的应用领域来说,输出是无限的、状态空间是无限的,因而在无限的输出下,图灵齐备并不是必须。这是从事实的需要来说,BPF足以实现指定语境下的任何计算。 但显然BPF的计算能力还有很大的晋升空间。 语言方面,BPF的指令集的提出,在计算能力上,它就是超配的。当初的问题是,如何平安地开释他的能力。运行时零碎和工具链的设计,是目前的焦点问题。曾经呈现出思维一致,基于运行时环境的思路和间接凋谢的思路同时存在。将来这两个思路应该都会有肯定水平的倒退,造成面向不同畛域的高下搭配的解决方案。 因而,我认为运行时的改良可能更加迫切。这须要咱们及早确定问题边界,提供面向问题的运行环境,能力更无效的提出均衡平安和可计算性的问题的计划,即:运行环境+必要的计算能力,形成齐备的面向问题域的解决方案。定义一个平安的虚拟机,保障操作不逃逸,一个平安的运行时库,导出或者链接内核对象(Helper),在这个汇合上,定义平安的操作,这样语言自身就能够不再受具体逻辑和拜访对象的限度,做到语言自身的图灵齐备。 5.2.编程模型的倒退 在BPF之前,Linux开发的编程模型,能够分为内核编程和用户态编程两种。别离应用不同的编程接口和编程标准,是两者最大的区别。 BPF呈现之后,呈现了新的编程模型,既不能称之为内核编程,也不能称之为用户态编程。 这是一种全新的编程模型。它运行于内核态,然而不应用任何传统的内核接口(5.13能够调用通过筛选和解决的内核函数。至今,它依然受限于特定函数和指定的上下文,还不是一种通用的机制。且这种机制进一步通用化之前,它的安全性依然值得先进一步的探讨),不通过符号与内核进行链接。它应用利用编程逻辑和范式,然而不应用利用编程传统的接口,而是应用BPF提供的帮忙函数。它所能拜访的数据对象还在一直倒退过程中,远未定型。 因而,笔者称这种编程模型为:临界编程。兴许它将来会有更好的名字,但这个名字一方面,表明它的跨界个性,一方面外表它突飞猛进的倒退。也表明对它将来的期待。 5.3.用户态比重的加大 因为虚拟化和软件工程的起因,网络报文解决和文件系统,呈现出往用户态迁徙的趋势。 BPF和用户态化的共通点和差别点在于,都将更多的内核扩展性放在了用户态,但BPF的逻辑依然从属于内核。 他们都和传统内核通过一层良好定义的接口进行了隔离。用户态驱动和文件系统,使内核的性能更容易扩大。而BPF则是对内核自身的扩大。两者存在基本差别,因而也存在互相联合的可能,从而造成更加弱小的软件架构。 而这种架构会用于什么中央呢? 咱们曾经做了初步尝试,FUSE和BPF进行联合。能够实现用户态文件系统和内核更加高效的交互(这一话题,咱们在后续的篇章中再具体探讨)。 推而广之,内核的网络、平安、文件系统、驱动,都能够放在用户态来实现,通过BPF来优化交互。 5.4.微内核 BPF的运行根底是运行时环境,随着BPF利用的减少,肯定会促使内核子系统的更进一步的形象和解偶,这在逻辑上为微内核化筹备了条件。 BPF真正防止了纯正用户态编程的性能问题,为利用开发人员开发特色性能提供了一种临界编程工具。这或者是微内核的另一种实现门路。 5.5.观测代码与业务代码合一 BPF呈现的时候,最后是观测工具,但起初它也能用于实现更简单的性能,影响网络子系统的报文转发逻辑。 BPF计算能力的弱小、性能的劣势,使它不仅能用于观测还能够做更多简单的事件。 通过高度抽象化的设计,咱们能够设计出简单、通用的业务零碎,然而咱们设计不出“最佳”的业务零碎。最佳的业务零碎肯定是在实在的利用场景中,通过一直的观测、剖析、优化,能力达成的。 将一个简单系统优化到“最佳”同样是一个简单问题,多指标的一致性、动静零碎的不稳定性、微小的状态空间等等,都可能导致这个问题没有最终答案,只有采纳动静反馈机制。因而,将观测代码和优化代码(业务代码的策略优化局部)合一,是使这一优化模式可能更加精确、高效、稳固的必然选择。 5.6.编译器和内核合一 从实质上讲,计算问题、语言问题其实是一个问题。最后咱们解决计算问题,是在纸带上打孔,起初有了编译器。解决计算问题的效率大大晋升,然而解决计算问题的能力其实没有变动。 起初有了操作系统,软件的分层模型逐步成型,开发应用程序的效率大大晋升,但其实通过编程解决计算问题的能力并没有晋升,反而是在降落。因为软件的每一个分层,在带来工程化效率的同时,也导致了能力的损耗。API的设计是一个大命题,然而没有完满的API设计。 开发效率的晋升,带来了利用的高度倒退,当初计算能力的问题呈现了。回归本原,将编译器和内核合一,构建更加弱小的计算能力,是将来倒退的根底。

April 27, 2023 · 1 min · jiezi

关于linux:在-Linux-环境下模拟实现命令解释器

拜访【WRITE-BUG数字空间】_[内附残缺源码和文档]操作系统大作业 Linux 命令行,在 Linux 环境下模仿实现命令解释器。在指定的一个目录及其子目录中查找指定的文件和目录,并输入查找到的文件和目录的绝对路径,并指明是文件还是目录。具体设计见md文件。一.程序概述1.实现的工作:1)显示以后所在目录的路径名;2)列出指定目录中所有的目录和文件;3)扭转当前工作目录;4)新建一个目录即新建一个文件夹;5)删除一个目录即删除一个文件夹;6)退出命令解释程序;7)重命名一个文件或目录;8)复制曾经存在的目录;9)在指定的一个目录及其子目录中查找指定的文件和目录,并输入查找到的文件和目录的绝对路径,并指明是文件还是目录。2.遇到的艰难及解决的问题1)一开始不晓得用什么形式在不必 system()的状况下实现这个命令解释程序,起初看到了要求外面的函数也不晓得用来干嘛,所以就去拿每一个函数去百度,晓得它们别离用在哪里;2)对于列出指定目录中所有的目录和文件这个性能,不晓得用什么形式遍历目录中的所有节点,起初,通过查问 opendir()、readdir()、closedir()的用法解决了这个难题;3)在实现复制性能时,对于复制整个目录的内容到另一个目录下的这个性能不晓得如何实现,递归然而不晓得如何定位所复制目录中的文件;4)对于查找文件的性能,应用了 ftw()函数的回调,实现了对指定目录的遍历,并且通过判断实现待查找文件的匹配。5)在复制文件时呈现文件权限有余、复制进去的文件无奈失常关上的状况,通过屡次尝试,发现是在创立文件的时候没有把权限设置残缺,在残缺之后就解决了这个问题。二.概念原理1.目录:为了不便对存储介质中的文件的治理而产生的一种索引构造,能够了解为目录中蕴含有另外的目录和文件。2.门路:阐明一个文件或者一个子目录在整个目录零碎中的地位,用于定位一个文件或者子目录,包含绝对路径和相对路径两中形式。3.文件:文件是指存储在存储介质中的一段特定格局的数据资料。4.目录流:对一个目录中的每个项进行读取的形式,是目录中所有节点的信息序列。5.文件流:是该文件中数据资料的格式化序列,代表着所有数据的信息。6.文件复制:将一个文件中所有的内容全副备份到另外一个文件中。7.函数回调:回调是一种双向调用模式,C 中通过函数指针来实现。

April 26, 2023 · 1 min · jiezi

关于linux:eBPF的发展演进从石器时代到成为神三

外在驱动由以上简要的回顾和梳理可见,内核开发者们所一直寻找的是一种充沛表达能力的动静机制,进而突破内核和用户态的壁垒(至多在逻辑层面),从而实现一种自在、间接的需要实现。技术成为内核开发者们尖锐的工具,一直冲破限度,揭示事物的实质。 BPF技术的呈现和倒退,从时间尺度来说并不长,然而从其内在的驱动来说,有着简单的动因,是很多因素就和在一起的必然结果。因为其复杂性,从任何一个孤立的角度进行剖析都是不充沛,只有从各个不同的角度剖析,才能够体会出不同的趣味。 通过探寻其深层次的起因,能够梳理出更加清晰的倒退脉络,从而能够更好地瞻望BPF及其相干技术畛域的将来倒退。为咱们学习、钻研和退出BPF的倒退打下基础。 本文试着从复杂性、微内核化两个方面,剖析BPF倒退的外在能源。 内核的倒退历史就是一个复杂性一直递增的历史,因而内核的倒退也是一直管制复杂性、维持内核代码的可了解性的过程。因而,内核的开发始终保持一个准则,就是机制与策略的拆散。 在不同期间,如何进行机制与策略的拆散,有这不同的答案。随着技术和利用的一直倒退,维持这一准则的的难度是一直减少的,须要更新的思维、更先进的技术能力撑持。或者也能够说,正因为内核的倒退过程中,始终保持了这个准则,所以才一直有影响深远的根底技术的呈现。 我置信,要实现定制与动静,有很多不同的计划。但我认为BPF的呈现是最佳的抉择,使内核的倒退有了应答将来变局的根底。 这是BPF呈现的契机,也是其将来疾速倒退的能源。 4.1代码规模问题 Linux我的项目倒退至今,其代码总量早已超过千万,是一个十分宏大的我的项目。 注:起源https://www.phoronix.com/misc/linux-eoy2019/lines.html 由统计数据能够看出,Linux我的项目的复杂度(从代码量角度)始终在一直增长。 4.2软件结构的简单 整个软件系统,从应用程序到内核是一个繁冗的层次结构,又因为模块之间的穿插,理论的运行流程是一个简单的有向图构造。 以实现一次简略的文件操作为例,首先应用程序须要open一个文件,这首先会运行到某种运行时库,实现资源分配、接口转换等等解决。而后,流程才会到零碎调用这一层。 零碎调用中,由VFS解析文件门路信息,找到对应的文件系统信息。再由具体的文件系统实现文件关上的操作。 这其中至多波及到了应用程序、运行时库、零碎调用、VFS、文件系统等多个档次。如果再细分的话,还波及到用户态内存治理,内核态内存治理、权限治理、命名空间治理、句柄治理、缓存治理、锁、钩子等次级模块。 目前Linux反对的文件系统至多曾经达到七十多种,有基于本地存储设备的、基于网络的、分布式的、基于内存的、虚构的等等。有的文件系统在内核态实现,有的在用户态实现。 另外,C语言的条件编译,能够针对应用场景抉择适宜的代码编译。每一个条件编译选项就是对事实条件的一个考量。从Linux整个源码树中应用的条件编译选项的数量,也能够反映出Linux整个源码的复杂度。对Linux 5.10的源代码粗略统计,条件编译选项曾经多达18000多个;而在6.1版本中,曾经达到了19000多个。 4.3业务零碎的简单 在虚拟化技术以前,不同利用场景的业务零碎的构造差别,次要体现为平面性的拓扑构造的差别,比方:对等式的、分布式的、客户服务器模式的等等,因为网络拓扑构造的不同、节点承当的业务角色的不同,造成了各种各样的业务零碎。 在虚拟化技术呈现后,云计算迅猛发展,云成为了信息系统的基础设施。业务零碎的差别不仅仅体现在横向拓扑构造上,其本身逻辑的深层组成也是非常复杂。它能够运行在实在计算机上也可能在虚拟机上,可能在一个独立的命名空间,也可能和别的业务共享。不同业务模块之间的分割有可能是间接的,也可能在无奈感知的状况下被层层嵌套。 业务零碎的复杂性,体现在业务的复杂性与业务零碎的复杂性两个方面。业务的简单,导致咱们须要对业务零碎进行分层设计,须要有定制化的能力,须要有经营与继续开发并行的能力。上线前的产品级的开发很重要,然而上线后的业务级的继续定制和开发同样重要。简单的业务必然导致简单业务零碎的产生,如何以一个对立的、足够弱小的形式来解决复杂性问题,使简单业务零碎的复杂性是能够拆解的、可治理的,就十分重要。 4.4保护限度的要求 Linux零碎曾经规模化运行在各种类型的设施上,每一个商业系统,在其运行期间都是须要进行保护的。 对于大型的服务器零碎,承载在成千上万的在线业务,是不能中断服务的,须要在线的定制能力。 对于集体终端,每个人的应用习惯不同,如何使每个用户都能获得最佳的应用体验,须要数据分析和个性化的定制能力。 对于分布在各处角落的边缘节点乃至物联网设施,须要内核提供更智能的染指办法,使保护人员可能近程实现对大量设施的保护工作。

April 26, 2023 · 1 min · jiezi

关于linux:eBPF的发展演进从石器时代到成为神二

倒退溯源回顾技术的倒退过程,就像观看非洲大草原日出日落一样,巨大的过程让人打动,细节局部引人深思。每天循环不辍,却又每天不同。 BPF的利用早已超过了它最后的设计,但如果要追溯BPF最后的起源,则必须回归到它最后的应用领域,再进行了解剖析。 BPF最后的用处在于观测,最后用于网络报文的抓取和剖析。 因而BPF的最后、最基本的起源,是作为一种观测伎俩呈现的。 而在这个畛域中,技术的演进迭代,是一个很长的过程,体现了内核技术倒退的艰苦、也同时充斥了趣味。 如果把内核看作一个世界,在这个广袤的土地上,观测技术的倒退,也同样经验了从蒙昧到古代的倒退过程。 每个时代都有其独具特色的观测技术,它决定了过后的开发人员须要具备什么样的功底,什么样的开发方式,这形成了一个时代特色,也谱写了时代的故事。 而每次时代的更迭,总是在某些方面颠覆了或者冲破了传统的思维,从而引发了观测形式的巨大进步,促成了效率和可观测性的晋升。对现有技术的深入研究与颠覆性的思维所形成的翻新,是技术畛域演进的根本模式。而其翻新的能源又是什么呢?咱们在后文逐渐揭示。 3.1石器时代 曾几何时,内核的开发还在初始阶段,因为内核的原理简单、所处的地位非凡,开发方式和用户态有很大不同。内核开发难度远远大于用户态的利用开发,尤其调试比拟艰难。犹记得那时对于内核是否引入GDB调试机制,有过一些争执。其分歧点就在于,引入过于简单的机制会扭转内核的行为个性,影响问题的稳定性,反而不利于问题的剖析定位。 那时最值得信赖的工具就是printk了。这是一种低染指的观测工具,应用简略,简直能够用于任何中央,帮忙开发人员观测内核的运行状态。但显著的毛病是不够灵便,如果问题波及的逻辑门路比拟长、分支比较复杂的话,须要重复屡次能力定位问题的本源。因而,那时候对内核开发人员的一个必不可少的要求,就是对所负责子系统的实现原理和代码逻辑的相熟水平须要十分高,可能依据比拟少的观测信息,精确定位问题的本源。 事物总是存在两面性,就像当初产生的那场争执一样,printk除了根本的信息输入机制外,简直没有提供任何强有力的个性,这诚然体现了过后的技术水平还在比拟原始的阶段(没错,就像是石器时代),但同时也倒逼过后的内核开发人员超强的代码了解和剖析能力。以便补救简陋的工具对效率的掣肘,更快地解决程序中的BUG。 另一方面,主观地讲,printk诚然简略,卓尔无往不利。它能够应用在任何中央,具备齐全的上下文拜访能力,不受约束的表达能力。 它的观测能力和程序自身齐全相等,程序自身能看到什么它就能看到什么,能够说是弱小到巅峰。 这种弱小也是其无奈被取代的根本原因,只管内核的调测技术一直在倒退,这一点始终未被超过。 它能够用任何线性的文本模式,输入开发人员关注的上下文信息。在起初,这种表达能力失去了进一步倒退,反对了局部正则文法。 它的毛病在于不足交互性,任何一点扭转都须要批改程序。另一方面,不论下层流程是否被关注,它的信息都会被输入,大大影响了性能。 printk能够说是最弱小的工具,至今我也是这样认为。但它同时也是最毛糙的工具。就像石头一样,prink随处可见,随处可用,用了就肯定有所得。简略、弱小、间接。然而同样像石头一样,如果用得多了,就会成为垃圾。 printk相比于BPF,领有齐全不受限制的上下文拜访能力,应用的中央简直没有限度,仅从观测的角度,弱小之处有过之而无不及。然而应用形式过于原始,不足工业化的扩大能力,因而如果在更长的时间尺度、更广的应用领域来看的话,printk无奈和BPF等量齐观。 3.2铁器时代 在石器时代,人们应用石头磨制的工具进行生产,这些工具毛糙、非标准化、材质原始容易损坏,轻便、应用寿命短。 Printk也是一样,每次执行时都会输入信息,但大多数时候是不须要的;寿命短,每次扭转须要批改代码。 随着内核越来越成熟,架构设计、模块划分、外部性能等等都越来越标准正当。内核的个性,由各个子系统别离负责,内核的整体体现是各个子系统行为表现的综合。而子系统外部的要害门路,决定了子系统次要的行为表现,比方:调度零碎中的CPU工夫统计、上下文切换,迁徙等等;内存管理系统中的内存调配、NUMA均衡;虚拟内存中的页面谬误、替换次数等等。 随着内核设计的规范化,其外部的要害节点和出现在内部的语义都越来越清晰和标准化。要把握内核的运行状态,其实并不需要随处察看,只须要把握几个要害节点、要害信息就能够了。 以要害变量为根底,工具得以降级;以语义规范化为根底,为交互式的观测机制提供了根底。至此,观测伎俩不再是单纯的信息输入,它也能够反过来影响零碎行为实现多维度的观测。 虚构文件系统Proc首先买通了用户态和内核态的交互通道,从原来只能管制日志级别,到能够控制数据自身,能够管制的范畴更广、更深了;从文本交互,转换为二进制交互,内核性能受到的影响进一步升高。 提供了标准化的API,类型的反对,升高了开发难度,便于推广应用。 提炼出要害参数,通过虚构文件系统进行交互式的零碎观测,反过来有利于内核的规范化。 3.3蒸汽时代 Proc的定义很大一部分,还是与具体的上下文相干,并不适宜大批量的应用。 Trace定义了协定标准,抽象层次更高,能够批量应用。 Trace是一个更加纯正的观测机制,给用户提供了通用简略的接口,底层实现了很丰盛的机制。能够反对大量应用,对于可观测性的晋升起到了根本性的推动。能够批量重复使用,这是它和其余观测形式的区别。 如果说Proc采纳了代码数据化的思维,那么Trace采纳很多元编程的思维,极大简化了内部接口,缩小了反复代码。 3.4电气时代 Trace机制诚然好用,只有事后铺设了基础设施,运行时就能够随时开启观测。但毛病是,对于没有铺设铁轨的中央,火车的承载能力再强也是无奈达到的。 Trace的机制很通用,但另一方面,它无奈深刻业务层面进行更进一步的调测。要实现这一点,须要残缺的上下文能力和可编程能力,因而kprobe呈现了。 只有由函数的中央,就像通了电一样,随时能够点亮,这是Kprobe强于Trace的笼罩能力。可能残缺拜访函数上下文,这是Kprobe强于Trace的业务理解能力。 3.5智能时代 Kprobe是动态性的萌芽,然而很多方面有余。它在内核态运行,须要对内核编程有肯定理解,编程门槛较高。它有安全性问题,它还有可扩展性问题,等等。 从计算能力来说,所有图灵机的计算能力是相等的,要解决能力问题,最终是要实现一个虚拟机的。而在内核态实现一个虚拟机,所波及到的平安问题是必须思考的,通过Verifier和运行时Helper函数,做到了逻辑束缚和上下文隔离。虚拟机、Verifier和Helper函数,是BPF和Kprobe的基本区别。

April 26, 2023 · 1 min · jiezi

关于linux:Wallys-wifi6-router-Ipq6010-ipq6018-support-QCN9074-Card

DR6018Feature:Qualcomm-Atheros IPQ6010/IPQ6018Quad-core ARM 64bit A53 @1.8GHz Processor 1GB DDRL3L System Memory 32MB NOR Flash, 256MB NAND Flash Supports Dynamic Frequency Selection (DFS) 2x2 On-board 2.4GHz radio, up to 573Mbps physical Data Rate 2x2 On-board 5GHz radio, up to 1201Mbps physical Data RateSupport: QUECTEL RM500Q-GLSupport: QCN9074 WiFi 6E Card This is a quad-core 64bit ARM processor 1.8GHz Qualcomm 11329Q chipset modem with 1GB DDRL3L system memory, 32MB NOR flash and 256MB NAND flash. The QUECTEL RM500Q-GL supports dynamic frequency selection (DFS) 2 × 2 Wi-Fi 5 GHz radio (up to 1201Mbps physical data rate). QCA6174 supports QCN9074/QCN6024 WiFi 6E Card. ...

April 25, 2023 · 2 min · jiezi

关于linux:linux系统进入单用户模式

重启零碎在grub界面按"e"呈现如下图将ro改成rw init=/bin/bash 如下图按ctrl x 疏导进入单用户模式

April 25, 2023 · 1 min · jiezi

关于linux:凝思系统进入单用户模式

进入单用户步骤 重启操作系统到grub界面如下图按e 将 ro 改成rw init=/bin/bash 按ctrl x疏导进入单用户模式

April 24, 2023 · 1 min · jiezi

关于linux:hcache查看系统缓存

hcache是基于pcstat的,pcstat能够查看某个文件是否被缓存和依据过程pid来查看都缓存了哪些文件。hcache在其根底上减少了查看整个操作系统Cache和依据应用Cache大小排序的个性下载hcachewget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/...chmod 755 hcache ; mv hcache /usr/sbin查看占用缓存最多的三个文件# hcache -top 3 +----------------------------------------------+----------------+------------+-----------+---------+| Name | Size (bytes) | Pages | Cached | Percent ||----------------------------------------------+----------------+------------+-----------+---------|| /opt/google/chrome/chrome | 216152840 | 52772 | 47108 | 089.267 || /usr/sbin/dockerd | 77613032 | 18949 | 16459 | 086.859 || /usr/lib/electronic-wechat/electronic-wechat | 69190688 | 16893 | 12788 | 075.700 |+----------------------------------------------+----------------+------------+-----------+---------+后果展现含意如下:name:占用缓存的文件全门路size:文件大小pages:占了多少个BlockCached:缓存应用了多少个BlockPercent:Cached 与 Pages的比值下面命令显示的是文件全门路,能够应用-bname选项,只显示文件名# hcache -top 3 -bname +-------------------+----------------+------------+-----------+---------+| Name | Size (bytes) | Pages | Cached | Percent ||-------------------+----------------+------------+-----------+---------|| chrome | 216152840 | 52772 | 47120 | 089.290 || dockerd | 77613032 | 18949 | 16459 | 086.859 || electronic-wechat | 69190688 | 16893 | 12815 | 075.860 |+-------------------+----------------+------------+-----------+---------+查看过程的缓存应用# hcache -pid 1356 ...

April 24, 2023 · 1 min · jiezi

关于linux:LinuxDebian-11下终端出现乱码符号^A^D^的解决方案

最近,xiaoz在同一个SSH客户端下应用一个VPS终端时,当我按向上箭头↑和向下箭头↓时,呈现乱码符号^[[A^[[D。我通过ChatGPT和互联网搜寻也未能解决,最终还是凭借教训解决了这个问题。 长期解决xiaoz应用的操作系统为Debian 11,非root用户(其它Linux发行版应该也是一样的)。仔细的敌人会发现终端最后面是一个$符号,这种如同默认是应用的shell为sh,为了验证shell类型,输出echo $SHELL进行查看: $ echo $SHELL/bin/sh果不其然,shell应用的sh,而后我输出bash命令后将shell切换为了bash模式,后面的符号变成了user@GreenCloud:/data$ 当我再次输出向上箭头↑和向下箭头↓查看历史命令的时候不再呈现乱码符号,问题得以解决。 永恒解决下面那个办法只能治本无奈治标,下次登录时问题仍然存在,咱们能够应用chsh命令来扭转指定用户的默认shell类型,命令如下: # /bin/bash为shell类型,user改成你本人的用户名chsh -s /bin/bash user当用户下次登录时,他们将应用bash作为其默认shell终端类型。这样问题就永恒解决了。 结语Linux下,如果用户应用的shell类型为sh可能导致箭头↑↓呈现乱码符号:^[[A^[[D^,能够通过bash命令来长期解决,或应用chsh命令来更改用户的shell类型,从而永恒解决,有相似状况的无妨参考。 此文章首发于我的独立博客:https://blog.xiaoz.org/archives/18644

April 24, 2023 · 1 min · jiezi

关于linux:eBPF的发展演进从石器时代到成为神一

前言技术的倒退往往是积跬步而至千里的。Linux从92年诞生,倒退至今曾经笼罩大小各类的信息基础设施。是什么样的力量,让Linux可能始终保持倒退生机,又如何对待Linux之上呈现的新的技术趋势?本文试图通过梳理eBPF的演进过程,摸索Linux内核的倒退能源起源与倒退轨迹,与大家一起畅想eBPF给内核技术、Linux生态带来的全新变局。 eBPF概览2.1. 实现原理大家可能都晓得图灵机,这是一个可计算实践模型,能够用来判断计算机的计算能力。图灵机是目前有可能实现的计算能力最强的实践模型,目前咱们罕用的计算机,实践上都是等价于图灵机的。BPF的呈现,是对计算能力的渴求,其原理就是通过IR模仿一台RISC指令集的计算机嵌入到内核中,将内核外部的动态编译逻辑转变为更加灵便的动静编译逻辑,使内核取得近似于图灵机的动静逻辑定制能力。而从classic BPF到extended BPF的倒退,是将这一计算形式进一步夯实和通用化。 BPF的呈现乃至到eBPF的进一步倒退,为内核带来了微小的扭转,使内核具备了更加弱小、可编程的动态变化的能力。这种能力在各种须要定制化的利用场景中,将施展微小的价值,既能够用于扩大性能,也能够用于优化性能。 在实现上,为适应不同业务场景的需要,使eBPF具备等价于一台RISC指令集计算机的计算能力,通过输出参数、Map数据存储、Helper帮忙函数,形成了eBPF程序与内核交互的运行环境。eBPF指令集的计算和控制能力、运行环境与内核的交互能力,两者叠加形成了eBPF程序弱小的解决能力。 在平安方面,通过Verifier严格查看eBPF程序的可实现性、数据拜访的合法性等,保障了eBPF程序与内核交互过程中内核不被挂起、外围数据不会被毁坏。 BPF倒退过程中,由cBPF倒退成为eBPF是一次大的技术升级。eBPF在cBPF的根底上从新设计了指令集、引入了JIT、减少了辅助函数,大大扩大了简单逻辑的设计能力。尽管eBPF有微小的提高,然而根本的底层设计还是统一的,因而两者统称为BPF。 因为eBPF兼容cBPF,在未指定时,BPF更多指eBPF所定义的外延。后文用BPF泛指整个BPF相干的根底机制,eBPF特指最新的BPF规范。 2.2. 技术特点 BPF还在疾速倒退,它的计算能力和齐备性也在迅速进步,前景有限。但就具体的版本而言,却又出现具体技术特点,次要是其反对的能力和受到的束缚两个方面。以最新的BPF的技术标准(v6.1)为底本,介绍BPF的次要技术特点。 RISC指令集 BPF的外围是一个虚构计算机,它采纳类RISC指令集,反对跳转、算数运算、尾调用等基本操作。在运行BPF程序的计算机上,BPF指令会被内核的JIT编译器动静编译为物理机原生指令,实现运行效率的“零”损耗。在反对BPF卸载的设施上,BPF程序也能够卸载到设施上执行。在BPF的指令集中还反对伪调用指令,能够调用到内核帮忙函数。 同时,BPF的指令的编码空间中还有大量的储备,将来依据须要肯定还会持续减少指令,晋升BPF实现简单逻辑的能力。 Map基于键值对的数据存储机制,可用于实现内核、用户态的数据存储和替换。 Helper函数专用于BPF程序调用的函数接口,用于封装内核中的性能,使BPF程序能够和内核互操作,同时放弃BPF程序和内核的平安隔离。 BPF子程序实现了BPF程序之间的调用。 上下文BPF程序的语境和运行上下文,是一种外部通明的数据结构。只有在明确BPF程序的类型时,上下文的定义和外部数据结构才是确定的。不同的BPF程序类型,上下文也各不相同。 CO-RE通过运行时类型反对,实现一次编译、随处运行。 反对特权和非特权级两类运行模式 分为特权级(百万ins)和非特权级(4096ins)两类运行形式。 特权级模式下BPF程序能够取得更宽的权限,实现更简单的逻辑性能。 保障向后兼容 这一准则对于BPF的推广应用十分重要,能够保障旧规范的BPF程序在新规范下也能够正确执行。但同时,也对将来BPF倒退带来了束缚,只有把握好BPF的倒退方向,做好底层设计,能力两者失去兼顾。 比方,从老版本遗留下来的cBPF程序在eBPF中都会被JIT正确翻译和执行。 稳固的ABI BPF稳固的ABI包含,BPF程序类型对应的输出参数定义,可调用的内核帮忙函数定义,返回值定义等。应用稳固的ABI的BPF程序,可保障与不同版本的内核都是兼容的。 另外,BPF还在疾速倒退中,它的性能个性须要逐渐开释,因而目前还有诸多限度,其中有些是基于平安、可靠性思考,有些是没有超出范围的利用需要的激进设计等等。随着平安机制的欠缺、应用程序的扩大、生态体系的成熟,相应的限度也会逐渐的扭转。 目前的实现中,有如下限度: 总运行工夫有界 有界性这是根本准则,应该在比拟长的工夫内都不会扭转。然而,在不扭转有界性的前提下,依据具体须要适当调整更正当的下限,这是存在极大可能的。 指令总数限度 非特权用户最大指令数4096,特权用户最大指令数1百万。 分支数限度BPF调用嵌套档次限度Map实例数限度验证状态数限度最大分支数限度堆栈长度限度 目前反对的堆栈最大长度为512字节。 上下文限度每一种类型的BPF程序,都有其对应输出参数定义,彼此不同。也就是说,BPF程序只能承受特定的输出并进行解决,不能拜访内核的全副状态空间。 辅助函数限度 每一个BPF程序类,都有其对应的辅助函数汇合。这些辅助函数,由内核各子系统提供,是BPF程序类上下文的一部分。它们帮忙BPF程序与内核各子系统交互,同时又爱护内核不会被毁坏。 下面赘述了很多个性,大家可能会有很多疑难,比方: 为什么采纳精简指令集呢?因为这是目前最支流的指令集类型,绝对于简单指令集,精简指令集更有利于实现更高密度、更高吞吐量、更高主频的处理器。因而x86之后呈现的新型指令集零碎,绝大多数都是精简指令集,包含当初的开源指令集RISC-V。 为什么不采纳原生的指令集呢?为什么5个参数寄存器呢?本篇暂不深刻探讨,后续主题波及到的时候再具体解说。 2.3. 利用价值 BPF的利用价值与其动静和可定制个性强相干。 内核研发中始终坚守的准则是:“机制与策略拆散”,即:内核负责提供机制,将策略凋谢给下层。在机制与策略之间须要一层界面来进行交互。 零碎调用是最后计划。它是单向发动的,短少事件模型。 虚构文件系统,提供了双向的交互方式,但难以灵便定制简单的逻辑。 因为软件性能越来越简单,无奈用简略规定来表白,软件的根底性能设施与业务逻辑,须要进行解偶。而业务逻辑局部,须要依据业务定制,因而很适宜用BPF实现。比方: 过滤器权限查看含糊测试 等类型的性能,比拟适宜用BPF实现。另外,视具体问题,也能够利用于: 调度算法用户态交互(代替零碎调用,实现更加可变的服务逻辑)加载器、模拟器、兼容层轻量化内核多态内核启动形式 每一种业务类型都有其独具特色的逻辑模型,通过更形式化地定义这些业务模型,能够更好地了解它们和BPF的联合性,找到更好的实现计划,充分发挥BPF带来的弱小能力。后续篇章,咱们会对典型的利用模型进行更深刻的探讨,以及BPF在这些利用场景中,应该在哪些个性方面进行增强或改良。

April 23, 2023 · 1 min · jiezi

关于linux:WallysIPQ9554qcn6274-wifi-7highperformance-routers

As the demand for faster and more reliable wireless internet continues to grow, companies are constantly looking for ways to improve their products to meet the needs of their customers. Qualcomm, a leader in wireless technology, has taken the initiative to introduce IPQ9554+QCN6274, a chipset designed to enable faster and more efficient wireless connectivity for WiFi 7. Qualcomm ipq9554 is a system-on-a-chip (SoC) designed for use in high-performance wireless routers and other networking devices. It features a quad-core ARM Cortex-A53 CPU and an integrated dual-core network accelerator, making it well-suited for demanding networking applications. ...

April 20, 2023 · 3 min · jiezi

关于linux:国产凝思80系统网络配置

单网卡配置以配置eth0为例 vim /etc/network/interfaces //增加如下内容 auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 pre-up ip addr flush dev $IFACE重启网络服务/etc/init.d/networking restart查看ip是否失效ifconfig bond配置凝思80零碎bonding性能ifenslave版本须要2.9及以上dpkg -l | grep ifenslave //查看 ifenslave配置bonding模块开机加载echo "bonding" >> /etc/modulesupdate-initramfs -u //更新内核 配置bonding模块 vim /etc/modprobe.d/bonding.confoptions bonding mode=1 max_bonds=2 miimon=100 downdelay=200 updelay=200 primary=eth0批改配置文件,以bond0应用eth0和eth2网口为例 vim /etc/network/interfaces //增加如下内容 auto bond0 allow-hotplug bond0 iface bond0 inet static address 192.168.1.100 netmask 255.255.255.0 pre-up ip addr flush dev $IFACE up ifenslave bond0 eth0 eth2 down ifenslave -d bond0 eth0 eth2重启网络服务/etc/init.d/networking restart查看ip是否失效ifconfig ...

April 19, 2023 · 1 min · jiezi

关于linux:国产凝思42系统网络配置

国产凝思42零碎网络配置一、单网卡配置 单网卡配置,以eth0为例,应用root用户配置 vim /etc/sysconfig/network-devices/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none SERVICE=ipv4-static HWADDR= ONBOOT=yes TYPE=Ethernet USERCTL=no IPV6INIT=no PEERDNS=yes IPADDR=192.168.1.1 NETMASK=255.255.255.0重新启动网络服务,使ip失效 /etc/init.d/network restart查看ip网络配置是否失效 ifconfig二、bond配置,应用eth0和eth2绑定成bond0 编辑bond0配置文件 vim /etc/sysconfig/network-devices/ifcfg-bond0 DEVICE=bond0 BOOTPROTO=none SERVICE=ipv4-static HWADDR= ONBOOT=yes TYPE=Ethernet USERCTL=no IPV6INIT=no PEERDNS=yes IPADDR=192.168.1.1 NETMASK=255.255.255.0配置绑定bond0应用的网卡配置文件 vim /etc/sysconfig/network-devices/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none SERVICE=ipv4-static MASTER=bond0 SLAVE=yes HWADDR= ONBOOT=yes TYPE=Ethernet USERCTL=no PEERDNS=yes----------vim /etc/sysconfig/network-devices/ifcfg-eth2 DEVICE=eth2 BOOTPROTO=none SERVICE=ipv4-static MASTER=bond0 SLAVE=yes HWADDR= ONBOOT=yes TYPE=Ethernet USERCTL=no PEERDNS=yes配置bonding模块 vim /etc/sysconfig/modulesbonding mode=1 max_bonds=1 miimon=100 downdelay=200 updelay=200 primary=eth0mode=1:主备模式miimon=100:零碎每100ms检测一次链路链接状态max_bonds=1:最大的网卡绑定数量为1;当配置二个bond时,参数须要改为2primary=eth0:指定eth0网卡为主网卡,eth2主动为备用网卡重新启动网络服务,使ip失效 /etc/init.d/network restart查看ip网络配置是否失效 ifconfig

April 19, 2023 · 1 min · jiezi

关于linux:麒麟操作系统-kylinos-从入门到精通-办公环境-第五十二篇-隔空传输airdrop替代方案

0.根底环境类别:笔记本型号:中国长城 NF14C硬件平台:飞腾处理器(ArmV8 指令集)零碎:河汉麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟零碎,linux,c++,c,飞腾,arm,airdrop,snapdrop 1.背景AirDrop,即隔空投送。 是苹果公司iOS,iPadOS和macOS零碎下特有的性能,用于在多台设施之间分享文件,只有将文件拖动到应用隔空投送性能的好友的头像上,就能进行一对一的文件传输(相似于无线网络传输)。 在2013年WWDC大会上,隔空投送退出到iOS设施中,iPhone 5以下的设施不反对隔空投送利用。 2.snapdrop相似 AirDrop 疾速跨设施传档性能,它不需装置 App 或软件、不需注册登入、不需任何设定,只有在同一个无线网路环境下的手机或电脑关上「Snapdrop」网页,就能侦测到彼此,并且像是 AirDrop 那样开始传送档案。实践上,须要浏览器反对 WebRTC API 能力应用。Chrome、Firefox 在 2012 年的版本曾经反对 WebRTC,市面支流浏览器都反对。而且「Snapdrop」能够在 Android、Windows、Mac 与 iOS 上一起应用!在同一网络内(无线WIFI或者内网域网),多台可相互通信的设施输出www.snapdrop.net即可互相传送文件。 2.1传输文件 2.2发送音讯右击两头传输带按钮,能够间接发送信息。 2.3 我的项目源码我的项目是通过GPL协定开源的,地址:https://github.com/RobinLinus/snapdrop 2.4 其余客户端1.安卓https://github.com/fm-sys/snapdrop-androidapk下载地址:https://play.google.com/store/apps/details?id=com.fmsys.snapd...https://m.apkpure.com/snapdrop-for-android/com.fmsys.snapdrop2.火孤浏览器扩大(可桌面应用)https://github.com/ueen/SnapdropFirefoxAddon下载地址:https://addons.mozilla.org/de/firefox/addon/snapdrop-for-fire...chrome/chromium应用形式 Download the latest release zip and extract open chrome://extensions (enable developer mode) 'Load unpacked extension' and select the extracted folder从应用便利性来讲,还是间接输出网址更快捷,手机装APK 2.5对于在无外网以及非凡区域的应用如果大家是在无外网的内网应用,则须要思考本人内网在服务器上跑一个docker,具体能够参见https://github.com/RobinLinus/snapdrop/blob/master/docs/local-dev.md此处不再详述。 2.6传输原理Signaling 服务器的作用相似相亲里的媒人。一开始,两个客户端互不意识。他们须要一个中介人去介绍,才晓得另一方的存在,而后应用 WebRTC 定义的 API 进行 P2P 连线及数据传输,理论传输是间接通信。 写在最初airdrop的便利性,给大家带来的欢畅。本文通过寻找对应的计划,如果大家有更多好的抉择,麻烦通过评论区通知我。我再补充。特地补充:localsend也很好,然而没有arm版本,我曾花过几天工夫编译过,但底层的flutter sdk并不反对arm64,因而此计划放弃了。 麒麟零碎专栏:地址一:https://segmentfault.com/blog/kylinos 邮箱:1179611323@qq.com群:662512340github:https://github.com/xiaohelongtwitter:https://twitter.com/xiaohelong发行日志:20230414 14:30 首发 ...

April 14, 2023 · 1 min · jiezi