linux系统
文章平均质量分 95
敲上瘾
热爱生活,热爱学习,热爱世界
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ ODB ORM 完全指南:从入门到实战应用
ODB是一个面向C++的对象关系映射(ORM)库,可将C++对象与数据库表映射,避免直接编写SQL。它具有对象-关系映射、代码生成、多数据库支持、查询能力和事务管理等特性。安装过程包括build2工具链安装、odb-compiler和运行时库的配置编译。通过#pragma指令声明类与数据库表的映射关系,例如主键(id)、字段类型(type)、默认值(default)等。视图映射支持只读查询功能,可基于对象关系或SQL查询定义。使用示例展示了如何将Person类映射为MySQL数据库表,并自动生成SQL建表脚原创 2025-11-10 12:39:17 · 2047 阅读 · 98 评论 -
Elasticsearch从入门到实践:核心概念到Kibana测试与C++客户端封装
Elasticsearch(ES)是一个开源的分布式搜索引擎,具有分布式、自动发现、索引分片等特性,相比传统数据库在搜索功能上更高效。ES的核心概念包括索引(类似数据库)、类型(类似表)和字段(类似列),并支持多种字段类型如字符串、数字、日期等。映射定义了字段的处理规则,如是否分词、权重设置等。安装ES需要添加仓库秘钥和镜像源,配置外网访问后可启动服务。Kibana是ES的可视化平台,用于数据探索和管理,安装后可通过浏览器访问。测试示例展示了如何创建索引和设置分词器(如IK分词器),以及定义映射规则来优化搜原创 2025-11-04 10:40:57 · 1860 阅读 · 85 评论 -
Linux系统C++开发工具(四)—— jsoncpp 使用指南
本文介绍了JSON的概念及其在网络通信中的应用。JSON是一种轻量级数据交换格式,可用于解决TCP传输中的粘包问题。文章详细说明了JSON的数据存取方式、序列化与反序列化操作,通过Json::Value类存储和访问数据,使用StreamWriter进行序列化,CharReader进行反序列化。最后给出了一个C++示例程序,展示如何实现JSON数据的序列化和反序列化操作。该示例包含了数据构建、序列化、反序列化以及结果输出的完整流程,并附有编译方法。JSON格式因其简洁性和跨平台特性,在数据传输领域具有重要应用原创 2025-11-01 10:20:37 · 1646 阅读 · 95 评论 -
Linux系统C++开发环境搭建工具(三)—— brpc使用指南
RPC(远程过程调用)是一种简化分布式系统通信的技术,使远程服务调用如同本地函数调用。brpc是百度开源的高性能RPC框架,支持多协议、零拷贝及高效网络模型。安装brpc需依赖库并编译源码。使用流程包括定义proto接口、实现服务端逻辑、配置客户端通道。示例中,服务端通过EchoService处理请求,客户端通过Channel和Stub发起调用。brpc高效封装了网络通信、序列化等细节,显著提升分布式开发效率。测试代码展示了请求-响应的完整流程,体现了RPC的透明调用特性。原创 2025-10-31 08:48:17 · 1344 阅读 · 67 评论 -
Linux系统C++开发环境搭建工具(二)—— etcd 使用指南
etcd是一个分布式键值存储系统,主要用于存储和管理分布式系统中的关键数据,在Kubernetes中扮演核心角色。它具有服务发现功能,允许服务动态注册和查询地址。 安装etcd可通过apt-get命令完成,配置需修改监听地址和API版本。C++客户端开发需安装依赖库如Boost和gRPC,并通过etcd-cpp-apiv3库进行交互。 核心API包括: Client对象 - 客户端操作句柄 KeepAlive对象 - 实现租约续期 Watcher对象 - 监控数据变化 Respons原创 2025-10-15 10:16:01 · 1228 阅读 · 88 评论 -
Docker镜像构建指南:Dockerfile语法与docker build命令全解析
Docker镜像是将应用程序及其依赖打包成标准化文件的核心技术,确保跨环境一致性。本文介绍了两种镜像制作方式:docker commit(简单但不推荐)和Dockerfile(主流标准方法)。重点解析了Dockerfile的配置要点,包括FROM(基础镜像)、LABEL(元数据)、COPY/ADD(文件复制)、WORKDIR(工作目录)、ENV(环境变量)等核心指令的使用规范与实战示例。通过Dockerfile可实现自动化、可重复、透明化的镜像构建原创 2025-10-10 10:11:19 · 6774 阅读 · 115 评论 -
Linux系统C++开发环境搭建工具(一)—— gflags/gtest/spdlog 使用指南
本文介绍了Linux环境下C++开发所需的工具链与常用框架,包括基础工具安装(vim、gcc、gdb、make/cmake、git等)、gflags命令行参数解析框架、gtest单元测试框架以及spdlog高性能日志库。详细说明了各工具的安装命令、核心功能和使用方法,并提供了简明的代码示例。这些工具组合能够显著提升C++开发效率,支持从参数解析、单元测试到日志记录的全流程开发需求,帮助开发者构建更健壮、可维护的应用程序。原创 2025-09-29 10:43:22 · 1961 阅读 · 114 评论 -
HTTP协议工作原理与生产环境服务器搭建实战
在浏览器中点击一个链接或输入一个网址时,背后是HTTP协议在默默地协调着客户端与服务器之间的每一次对话。作为应用层最核心的协议之一,HTTP定义了Web通信的基本规则。本文将深入解析HTTP协议的报文格式、关键机制,并通过实践搭建一个简单的HTTP服务器,来揭示网页从请求到展现的完整过程。原创 2025-09-24 10:14:15 · 2963 阅读 · 112 评论 -
Docker多容器编排:Compose 实战教程
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具,通过 YAML 配置文件简化容器编排流程。核心功能包括: 一键部署:通过 docker-compose.yml 文件定义服务、网络和卷,使用 docker compose up 命令快速启动整个应用栈 配置文件结构。原创 2025-09-17 10:12:45 · 16055 阅读 · 120 评论 -
Docker网络实战:容器通信与隔离之道
Docker网络主要实现容器间通信、外部访问容器服务、容器访问外网等功能。常见网络类型包括:Bridge(默认桥接模式)、Host(共享宿主机网络)、Container(共享容器网络)、None(无网络)和Overlay(跨主机网络)。关键命令包括创建网络(docker network create)、查看详情(inspect)、连接/断开网络(connect/disconnect)以及删除网络(rm/prune)。通过自定义Bridge网络可实现容器间域名解析通信,而Host模式则提供高性能但牺牲隔离性。原创 2025-09-12 12:30:05 · 2202 阅读 · 96 评论 -
Docker存储卷(Volume)核心概念、类型与操作指南
存储卷是Docker容器中用于持久化数据的独立文件系统区域,其生命周期独立于容器,可理解为“共享目录”或“外部硬盘”。它解决数据丢失风险并实现容器间数据交互。 存储卷分类 管理卷:由Docker自动创建(默认在/var/lib/docker/volumes),适合临时存储,用户无法指定宿主机目录。 绑定卷:用户指定宿主机与容器的映射路径,适合配置文件共享,但移植性低。 临时卷:数据仅存于内存(Linux专用),容器停止后消失,适合高性能临时存储。原创 2025-09-09 10:06:31 · 9223 阅读 · 98 评论 -
Docker 容器核心指令与数据库容器化实践
容器是一种轻量化的软件单元,将代码及其依赖打包成标准化的"软件集装箱",实现跨环境快速可靠运行。主要特点包括环境隔离、资源限制和快速启动。相比传统虚拟化,容器能提高资源利用率、标准化环境、实现弹性伸缩,并支持差异化服务和沙箱安全。原创 2025-09-05 10:55:26 · 9328 阅读 · 99 评论 -
Docker镜像指南:从核心命令到离线迁移实战
Docker镜像是一个只读文件,包含创建容器所需的全部文件和配置信息,具有分层结构、只读性、内容可寻址和基于联合文件系统等核心特性。使用镜像可以解决环境一致性问题,实现标准化交付。常用命令包括docker rmi删除镜像、docker save/load导出导入镜像、docker history查看构建历史等。离线迁移镜像可通过docker save打包镜像,再使用SCP传输到目标服务器后docker load加载。镜像技术极大简化了应用部署流程,确保环境一致性。原创 2025-09-02 10:11:52 · 4582 阅读 · 83 评论 -
Docker核心概念与镜像仓库操作指南
本文系统介绍Docker镜像与仓库的核心概念。镜像如同只读的软件模具,容器是其运行实例;仓库则是集中存储分发镜像的服务。文章详解了`login`、`pull`、`push`、`search`等镜像仓库常用命令,并通过`docker run`的丰富参数演示如何创建、配置与管理容器。最后,通过两个综合实例:1)拉取Nginx镜像并定制化启动web服务;2)将BusyBox镜像推送至私有仓库,带领读者从理论到实践,全面掌握Docker镜像与仓库的管理和操作。原创 2025-08-30 10:24:58 · 8045 阅读 · 90 评论 -
epoll 内核原理深度剖析与高效使用指南 —— 一文吃透 epoll 的魔鬼细节
本文介绍了Linux中高性能IO多路复用机制epoll的核心原理与接口。epoll通过红黑树管理文件描述符,利用就绪队列和回调机制实现高效事件通知,相比select/poll具有O(1)事件检测复杂度。文章详细解析了三个核心接口(epoll_create创建模型、epoll_ctl管理事件、epoll_wait获取就绪事件),并分析了内核数据结构(红黑树存储事件、就绪队列缓存触发事件)及回调机制如何减少轮询开销。最后通过源码片段说明epoll模型与文件系统的关联,揭示了epoll高效的本质。原创 2025-08-22 14:02:27 · 7647 阅读 · 111 评论 -
Linux I/O 多路复用实战:Select/Poll 编程指南
本文深入探讨了IO多路复用技术中的select和poll系统调用。IO多路复用通过单线程同时监控多个文件描述符,解决了阻塞IO资源消耗大和非阻塞IO轮询效率低的问题。文章详细讲解了select系统调用的工作原理,包括其参数含义、文件描述符位图机制以及具体实现方式。同时指出了select的局限性,如1024个文件描述符的上限等问题,并提到后续将单独分析epoll机制。通过代码示例展示了如何使用select构建服务器程序,包括监听描述符管理、事件就绪原创 2025-08-20 11:27:20 · 12575 阅读 · 88 评论 -
Linux容器基石:LXC核心概念与实践指南
LXC容器技术概述 LXC(Linux Containers)是一种操作系统层虚拟化技术,通过Linux内核提供容器功能,将应用打包成独立运行的沙箱环境。相比虚拟机,LXC隔离性较弱但更轻量。其特点包括:提供简易工具链管理容器,但学习成本较高;依赖命令操作导致批量迁移复杂。Docker后来在LXC基础上发展,逐渐转向自研的libcontainer技术。 基础操作 安装:CentOS/Ubuntu通过包管理器安装lxc及相关组件 容器管理:lxc-create创建容器,lxc-start启动,lxc-atta原创 2025-08-17 09:49:54 · 1859 阅读 · 40 评论 -
Linux系统cgroups资源精细化控制基础
摘要:本文介绍了Linux内核提供的cgroups资源管理机制及其应用。cgroups通过子系统对CPU、内存等资源进行精细化控制,支持资源限制、优先级控制等功能。文章还讲解了pidstat工具的使用方法,用于监控进程资源占用情况,并通过stress工具演示了CPU、内存、IO等压力测试场景。最后展示了在cgroup v1版本中创建内存控制组并设置内存限制的具体操作步骤,为系统资源管理提供了实用指导。原创 2025-08-16 09:14:55 · 1417 阅读 · 18 评论 -
Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
本文介绍了Linux系统管理和隔离相关的重要命令与概念: Namespace:Linux内核资源隔离机制,通过不同namespace实现进程间的资源独立,支持IPC、网络、PID等隔离类型,提供API如clone()、setns()和unshare()。 dd命令:数据转换工具,支持文件复制、格式转换及大小写转换,常用参数包括if(输入文件)、of(输出文件)和bs(块大小)。 mkfs命令:用于格式化存储设备为指定文件系统(如ext4),示例演示了镜像文件的格式化操作。 df命令:查看磁盘使用情况,支持按原创 2025-08-14 10:10:34 · 10006 阅读 · 88 评论 -
高级IO(五种IO模型介绍)
本文深入解析了五种I/O模型的特点与差异。首先指出I/O操作慢的本质在于等+拷贝,其中等待外设就绪是主要瓶颈。通过钓鱼的生动比喻,形象展示了五种模型:阻塞I/O(全程等待)、非阻塞I/O(轮询检查)、信号驱动I/O(信号通知)、多路复用(批量监控)和异步I/O(完全委托)。文章详细分析了每种模型的内核交互机制,特别对非阻塞I/O的实现方式(fcntl设置)和错误处理进行了代码示例说明,并对比了各模型的优缺点。最后强调多路复用才是真正提升I/O效率的核心技术,为后续深入讲解select原创 2025-08-13 10:12:23 · 1813 阅读 · 61 评论 -
企业开发工具git的使用:从入门到高效团队协作
本文介绍了Git的基本概念、安装、本地仓库的创建与配置,以及工作区、暂存区和版本库的区分。详细讲解了版本回退、撤销修改、删除文件等操作,并深入探讨了分支管理,包括分支的创建、切换、合并、删除及冲突解决。此外,还介绍了远程操作,如远程仓库的创建与克隆,分布式版本控制的理解,以及多人协作的两种模式(单分支与多分支)。最后,文章总结了系统开发环境和Git分支设计规范,强调了不同分支在开发、测试、预发布和生产环境中的作用。通过本文,读者可以全面掌握Git的核心功能及其在团队协作中的应用。原创 2025-05-19 09:02:46 · 13265 阅读 · 109 评论 -
Linux权限
linux中的用户有两种,root用户(超级管理员)和普通用户,root的权限是最高的。而普通用户的权限比较低,在做某些操作时需要使用sudo命令来短暂提权。但是并不是任何用户都能够提权,如果任何用户都能提权那么root和普通用户就没有权限区分的意义了,而要能够使用sudo提权这个普通用户必须在root的“白名单”里。原创 2024-11-01 09:40:43 · 1286 阅读 · 78 评论 -
Linux开发工具——make/Makefile
Makefile是一种自动化构建工具,make是一条指令,Makefile是一个文件,当我们创建名为Makefile的文件后在Makefile中按照一定的规则制定一些命令。然后我们在命令行输入make命令后会自动执行Makefile文件中的指令。原创 2024-11-06 09:02:19 · 1433 阅读 · 65 评论 -
操作系统的理解
要理解这个结构,我们需要就盯着数据流动这条线来分析,很容易发现CPU是只与存储器打交道,而不与输入输出设备直接接触,这里存储器起到一个交通枢纽的作用。那么为什么会有这种结构呢,为什么不是“输入”—>“CPU处理”—>“输出”呢?原创 2024-11-22 09:16:19 · 934 阅读 · 76 评论 -
虚拟地址空间与物理内存(Linux系统)
在虚拟内存与物理内存之间存在着一个媒介,它就是页表,起到一个交通枢纽的作用,它实际上是一个映射关系,把虚拟内存上的值通过页表映射得到对应的物理内存。当然页表的作用不止于此,它还起到权限管理的作用,即每个地址都用自己的rwx权限,对野指针、空指针等进行访问,就是在页表这里被拦截的。原创 2024-11-27 09:28:32 · 1957 阅读 · 85 评论 -
深入理解进程的退出、等待与替换(Linux系统)
进程等待指的是父进程等待子进程结束。在子进程结束后它的pcb不会立马释放,而是进入僵尸状态,让父进程回收。当然如果父进程永远不来回收,那么子进程pcb就永远得不到释放,从而内存泄漏。而父进程在等待子进程退出这个过程就叫作进程等待。原创 2024-12-07 09:53:23 · 1383 阅读 · 53 评论 -
自制shell命令行解释器,深入理解Linux系统命令行实现原理
环境变量表需要我们在程序启动时就将它导入, 当然程序启动后环境变量默认是父进程的,所以我们可以重新开辟空间把原环境变量的数据拷贝过来,然后再把environ更新为新的地址。具体实现请参考下文源码。原创 2024-12-09 09:13:31 · 1395 阅读 · 74 评论 -
深入理解Linux系统内存中文件结构以及缓冲区,模拟实现c语言库文件接口
当语言层缓冲区刷新之后,数据并不会马上写入磁盘,而是放到了系统的缓冲区,系统缓冲区的作用是减少磁盘的随机读写,增加顺序读写从而提高读写效率。因为读写到一起的都是相关性强的数据,等再次被读的时候就可以一起被读出来。原创 2025-01-20 09:25:31 · 1729 阅读 · 37 评论 -
动静态库的制作与使用(Linux操作系统)
首先准备好需要做成库的源文件与头文件,如下示例:注意:在制作库方法过程中不能有main函数。如果代码使用c语言进行写的,执行以下语句把所有.c文件进行编译得到了.o文件。gcc -c *.c使用ar指令把所有.o文件链接成静态库,如下:-r(replace):此选项表示在插入文件到库时,若遇到同名的成员,则进行替换。它确保了库中的文件是最新的。-c(create):这个选项用于创建一个新的库文件。如果指定的库文件已经存在,它并不会被覆盖,而是会报错提示文件已存在。原创 2025-01-23 10:15:58 · 1175 阅读 · 49 评论 -
进程池的制作(linux进程间通信,匿名管道... ...)
在程序使用内存的时候,比如vector扩容机制,会提前给你开辟一块空间供你使用,尽管现在用不到,相当于做一下预备。因为只是一个小测试,代码写的并不严谨(没有检查调用是否成功,没有关闭文件,没有进程等待)大家不用太在意,能说明问题就行。,但它与一般的文件还是有些区别,文件都是储存到磁盘上的,而进程之间通信用的文件并不需要把它储存到磁盘上,它只是作为一个传输介质。那么进程池也同样,给父进程提前开辟一些子进程,提供父进程使用。,顾名思义就是没有名字,也不需要名字,因为子进程能够继承下来父进程开辟的管道资源。原创 2025-01-27 09:00:33 · 1531 阅读 · 32 评论 -
命名管道——进程间通信
管道文件,自带同步机制。如上代码示例,如果写端和读端执行速度不一样,快的一端会迁就于慢的一端,最后实现同步。原创 2025-03-03 11:18:21 · 1236 阅读 · 62 评论 -
共享内存通信效率碾压管道?System V IPC原理与性能实测
共享内存是通过在物理内存上开辟一块空间,然后让需要通信的进程都映射到这一块空间,这样就使它们看到同一块资源了。 共享内存通信是双向的,也就是说一个进程可以即读又写,而且使用起来就和c语言申请的malloc差不多。这种通信方式存在着数据安全问题,会在下文细说。 创建共享内存使用shmget函数,它的作用是创建或获取共享内存段的系统调用。 对于shmget用起来还是挺简单的,但是要把它的各种参数的设定都理解还是很困难的,接下来我会进行详细讲解。 问题2很原创 2025-03-12 10:08:08 · 1132 阅读 · 72 评论 -
操作系统的心脏节拍:CPU中断如何驱动内核运转?
当以上程序执行到scanf时,如果我们不输入信息,程序会一直阻塞在这里。那程序如何知道我们已经完成输入了呢?而且我们输入的信息在外设上,程序又是如何知道何时将其载入内存的呢?这其实是由外设就绪后通知给CPU,再由CPU通知给操作系统,然后由操作系统调用最后通知给前台程序。具体细节如下:每个中断都有自己的编号,即中断号,在中断控制器中会有寄存器来记录已就绪的中断号。一旦有外设就绪,它的中断号将被存入寄存器,然后由中断控制器通知CPU。原创 2025-03-18 10:42:08 · 1436 阅读 · 60 评论 -
Linux信号的诞生与归宿:内核如何管理信号的生成、阻塞和递达?
在我们运行程序时通常会用Ctrl+c来使程序退出,这其实是向前台程序发送2号信号。除此之外还有Ctrl+\,表示发送3号信号,同样是让程序退出,2号信号与3号信号的区别将在下文核心转储部分详细讲解。原创 2025-03-21 09:41:06 · 20315 阅读 · 87 评论 -
定长内存池原理及实现
所谓“池化技术”,就是,以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较⼤的开销,不如提前申请好了,这样使⽤时就会变得⾮常快捷,⼤⼤提⾼程序运⾏效率。在计算机中,有很多使⽤“池”这种技术的地⽅,除了。以服务器上的线程池为例,它的主要思想是:先启动若⼲数量的线程,让它们处于睡眠状态,当接收到客户端的请求时,唤醒池中某个睡眠的线程,让它来处理客户端的请求,当处理完这个请求,线程⼜进⼊睡眠状态。原创 2025-03-25 10:48:33 · 1244 阅读 · 67 评论 -
线程池的封装(c/c++)
池化技术所谓“池化技术”,就是,以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较⼤的开销,不如提前申请好了,这样使⽤时就会变得⾮常快捷,⼤⼤提⾼程序运⾏效率。:复用已创建的线程,减少线程创建销毁的开销。:任务到达时可以直接执行,无需等待线程创建。:统一分配、调优和监控线程。原创 2025-04-17 12:28:23 · 2186 阅读 · 68 评论 -
Linux多线程编程的艺术:封装线程、锁、条件变量和信号量的工程实践
pthread_create函数要求传入一个void *(*start_routine) (void *)类型的函数指针,但为了可以让用户更灵活的使用,我们可以在这里进行一下封装。也就是说希望用户想传什么类型的函数指针都行,那么可以单独设计这样一个函数,如下:原创 2025-03-31 10:28:30 · 1329 阅读 · 51 评论 -
多线程编程实战:基于阻塞队列与环形队列的生产者消费者模型详解
⽣产者消费者模式是通过⼀个容器来解决⽣产者和消费者的强耦合问题。⽣产者和消费者彼此之间不直接通讯,⽽通过阻塞队列来进⾏通讯,所以⽣产者⽣产完数据之后不⽤等待消费者处理,直接扔给阻塞队列,消费者不找⽣产者要数据,⽽是直接从阻塞队列⾥取,阻塞队列就相当于⼀个缓冲区,平衡了⽣产者和消费者的处理能⼒。这个阻塞队列就是⽤来给⽣产者和消费者解耦的。原创 2025-04-01 10:11:15 · 1325 阅读 · 26 评论 -
高并发内存池(一):项目介绍和ThreadCache(线程缓存)实现
在多线程环境下进行内存申请本质上属于对公共资源的访问,高并发场景下对内存分配锁的竞争会异常激烈,这将严重拖慢程序运行效率。此外,频繁的系统级内存申请不仅会产生额外开销,还可能引发内存碎片问题。传统的malloc内存分配机制由于这些固有缺陷,已难以满足现代高性能开发中对内存管理效率的需求。原创 2025-03-28 10:04:43 · 1821 阅读 · 68 评论 -
高并发内存池(二):CentralCache(中心缓存)的实现
本文将要讲解的高并发内存池,它的原型是Google的⼀个开源项⽬tcmalloc,全称Thread-Caching Malloc,近一个月我将以学习为目的来模拟实现一个精简版的高并发内存池,并对核心技术分块进行精细剖析,分享在专栏《高并发内存池》里,期待小伙伴们的热情支持与关注!上期讲了Thread Cache的实现,但并未对在Central Cache中如何申请内存进行讲解。接下来让我们会对Central Cache的结构和如何在Central Cache中申请内存进行学习和代码实现。原创 2025-04-02 10:09:05 · 13616 阅读 · 79 评论
分享