Linux程序员
文章平均质量分 84
Linux应用程序开发相关
内核程序员kevin
我是一名程序员, 专注于Linux应用程序与内核模块开发,喜欢研究各种技术。目前担任某数据安全企业架构师, 在安全软件研发和架构领域深耕近15年。
我希望能帮助更多的程序员成长。
欢迎关注我,让我们一起探讨技术,共同进步。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux 多线程编程:让你的程序跑得更快、更高效!
本文详细介绍了Linux多线程编程的基础知识及其重要性,包括线程与进程的区别、为何使用多线程以及如何通过`pthread`库创建和管理线程。文中讲解了线程同步的关键机制,如互斥锁(`mutex`)、读写锁(`rwlock`)、条件变量(`condition variable`)的使用方法,并提供了代码示例来展示这些概念的应用。此外,还探讨了线程间通信的方法,包括利用全局变量加互斥锁、线程安全队列以及信号量(`semaphore`)实现数据交换。原创 2025-03-20 09:15:00 · 1176 阅读 · 0 评论 -
掌握 Linux 文件操作函数,让你的代码高效又稳健
本文深入探讨了Linux文件操作的核心API,包括`open`、`read`、`write`、`close`、`lseek`、`stat`和`mmap`等函数的使用方法及最佳实践。文章首先介绍了如何正确地打开和关闭文件,强调了参数传递的重要性以及避免资源泄漏的方法。接着,详细讲解了读写文件数据时需要注意的事项,如处理信号中断和检查返回值。此外,还介绍了高级文件操作技巧,比如利用`lseek`进行文件定位、通过`stat`获取文件信息、采用`mmap`实现内存映射以提高大文件处理效率原创 2025-03-18 09:15:00 · 1106 阅读 · 0 评论 -
Git 从入门到精通:高效管理代码的终极指南
本文详细介绍了Git从入门到精通的各个方面,旨在帮助读者高效管理代码。首先解释了Git的基本概念,包括工作区、暂存区、版本库等核心概念,并通过实例说明如何进行提交和分支管理。接着,文章指导了如何安装和配置Git,以及基础用法如初始化仓库、添加与提交代码、查看状态等操作。进一步,探讨了Git的进阶用法,如远程仓库管理、分支管理、变基、撤销修改及使用stash保存当前工作进度。最后,深入讲解了Git的高级功能,包括标签管理、钩子脚本、cherry-pick挑选提交、子模块、工作区管理、大文件支持(LFS)原创 2025-03-06 09:15:00 · 853 阅读 · 0 评论 -
学会 Linux shell 脚本,让你的工作效率提升 10 倍
本文详细介绍了Linux `shell`脚本编程的基础知识及其应用,旨在帮助读者提升工作效率。首先解释了什么是`shell`脚本及其重要性,包括如何通过脚本实现文件管理、自动化运维等任务。接着深入讲解了`shell`脚本的基本语法,如`shebang`行的使用、注释规则,以及`sh`和`bash`的区别。进一步探讨了变量与环境变量的使用方法,涵盖了变量赋值、类型、只读变量等内容。文章还讨论了条件判断(`if`、`case`)、循环结构(`for`、`while`、`until`)及函数定义与参数传递的方法。原创 2025-03-04 19:40:30 · 1460 阅读 · 0 评论 -
Linux终端使用技巧与常用命令 -- 让你看起来很专业!
本文介绍了Linux终端的使用技巧与常用命令,旨在帮助读者提高工作效率。文中首先讲解了快捷键和命令行编辑技巧,如Tab自动补全、Ctrl+C中断命令等,接着阐述了如何利用`history`命令查找历史命令及通过管道符和重定向操作数据流的方法。此外,还详细介绍了包括`ls`、`cd`、`rm`在内的多个基本命令及其选项,并分享了使用`scp`和`rsync`进行文件传输的经验。最后,文章强调了通过创建别名简化命令输入的重要性,并说明了如何使这些自定义设置永久生效。练习被提出为掌握这些技能的关键。原创 2025-03-01 21:00:00 · 1104 阅读 · 0 评论 -
TCP/IP协议栈之网络层: IPv4、IPv6、ICMP,你真的掌握了吗?
本文详细介绍了TCP/IP协议栈中的网络层,特别是IPv4、IPv6和ICMP的核心概念。首先解释了网络层在实现主机到主机通信中的关键角色,接着描述了一个数据包从源到目的地的完整旅程,强调了IP地址的作用以及ARP和MAC地址的重要性。文章深入解析了IPv4与IPv6地址结构的区别、子网划分技术及IP地址分配方式,并讨论了NAT在网络中的应用。此外,还探讨了路由的概念及其配置方法,包括静态路由和动态路由的特点。原创 2025-03-01 09:30:00 · 1446 阅读 · 0 评论 -
TCP/IP协议栈之网络接口层: 以太网与wifi -- 一个地上, 一个天上
本文详细介绍了TCP/IP协议栈中网络接口层的两大核心技术——以太网与WiFi,分别代表了有线和无线网络通信的基本方式。文章首先对比了两者在物理特性和数据传输上的基础差异,包括传输介质、速率、干扰情况及适用场景等。接着深入探讨了以太网(IEEE 802.3)的技术细节,如物理层的不同介质类型、数据链路层的工作机制以及以太网帧结构;同时也分析了WiFi(IEEE 802.11)的关键技术特点,涵盖其物理层使用无线电波的特点、不同工作频段及其应用场景,并解析了WiFi帧格式。原创 2025-02-28 09:15:00 · 3072 阅读 · 5 评论 -
程序员必懂网络基础:让你远离90%的网络故障!
本文详细介绍了网络基础的重要性及对程序员的价值,包括快速定位问题、优化网络请求和提升面试竞争力等方面。文中对比了OSI七层模型与TCP/IP四层模型,指出尽管OSI模型在理论上更为详细,但TCP/IP模型更贴近实际应用,是现代互联网的标准。文章还深入解析了TCP/IP协议栈中的关键协议(如DNS、IP、TCP、HTTP)的工作流程,并通过实例说明了从应用层到物理层的数据封装与解封装过程。最后,文章提供了基于分层思想的网络故障排查方法,涵盖数据链路层、网络层、传输层和应用层的具体工具和技术使用建议。原创 2025-02-27 09:15:00 · 1087 阅读 · 0 评论 -
Linux 程序员必修课:命令、脚本、程序、进程与线程的全貌
- **命令** 是 `shell` 解析并执行的基本单位。 - **脚本** 提供了自动化能力。 - **程序** 是 `Linux` 上的可执行文件。 - **进程** 独立运行,`IPC` 负责通信。 - **线程** 共享资源,提高并发能力。原创 2025-02-26 09:15:00 · 1954 阅读 · 0 评论 -
搞懂Linux文件系统,99%的操作不求人
本文详细介绍了Linux文件系统的关键概念和操作,包括文件系统的类型、结构概览以及磁盘与分区管理。文章首先解释了什么是文件系统及其功能,接着探讨了常见的文件系统类型如ext4、XFS和btrfs的特点及适用场景。文中还深入讲解了如何进行磁盘分区、格式化、挂载等操作,并指导读者如何配置自动挂载。此外,还涵盖了文件权限管理、软硬链接的区别与使用、文件系统的健康检查与修复等内容。最后通过实战案例展示了如何在Linux上创建和管理一个新的文件系统,并分享了一些高级技巧来调整和优化文件系统。原创 2025-02-25 09:15:00 · 4647 阅读 · 0 评论 -
Linux文件系统揭秘:这些目录到底有什么用?
本文介绍了Linux文件系统的结构,帮助读者理解各个目录的功能和用途,以避免在查找文件时迷失方向。文章首先解释了根目录`/`作为整个文件系统起点的重要性,并详细描述了如`/bin`、`/sbin`存放核心命令,`/etc`用于配置文件存储,`/home`和`/root`代表用户私人空间,以及`/dev`、`/proc`和`/sys`涉及设备与内核信息的关键作用。原创 2025-02-24 09:15:00 · 1771 阅读 · 0 评论 -
详解 Linux 用户与文件权限管理
本文详细讲解了Linux用户与文件权限管理的核心概念和操作方法。首先介绍了Linux系统中的用户分类,包括超级用户、系统用户和普通用户,并解释了UID与GID机制以及用户组的重要性。接着探讨了用户和用户组的管理命令,如`useradd`、`usermod`、`groupadd`等,用于创建、修改和删除用户及组。文章还深入讲述了文件权限管理的基础知识,涵盖了传统Unix权限模型、特殊权限(SUID、SGID、Sticky Bit)、访问控制列表(ACL)以及能力(Capabilities)。原创 2025-02-22 09:30:00 · 960 阅读 · 0 评论 -
搞懂Linux图形界面相关术语
通过本篇文章的学习,你现在应该对Linux图形界面的主要组件和术语有了清晰的了解。从桌面环境、显示管理器,到窗口管理器、合成器,再到X11和Wayland的差异,最后我们还了解了Linux上常用的GUI开发工具包。无论是作为用户选择适合的桌面环境,还是作为开发者编写高效的图形应用程序,这些知识点都将帮助你在Linux世界中更加得心应手。原创 2025-01-10 09:26:41 · 1249 阅读 · 0 评论 -
深入解析LD_PRELOAD注入动态库.so的原理
本文介绍了`LD_PRELOAD`和`/etc/ld.so.preload`在Linux系统中用于动态库注入的原理及应用。`LD_PRELOAD`允许用户指定共享库来覆盖程序默认库,适用于函数Hook、调试与性能分析等场景;而`/etc/ld.so.preload`则为系统级配置,影响所有程序。当程序启动时,动态链接器会优先加载`LD_PRELOAD`或`/etc/ld.so.preload`指定的库,进而覆盖原有库函数。原创 2025-01-07 09:15:00 · 2157 阅读 · 0 评论 -
WayLand的架构和协议
Wayland通过简化图形渲染流程,直接与硬件对话,减少了不必要的通信层,提高了性能。其架构中合成器即为显示服务器,可直接从内核获取事件并传递给合成器,避免了额外中间层,从而减少通信开销。`Wayland`利用现代GPU功能确保图像内容即时响应,通过DMA-BUF接口发送绘图命令保持高效运作。原创 2025-01-06 09:00:00 · 2637 阅读 · 0 评论 -
理解并使用cmake
`CMake` 是一个强大的跨平台构建工具,它能够简化现代软件的构建过程,尤其适用于复杂项目的管理和构建。通过模块化的设计和平台无关的特性,`CMake` 提供了灵活性和可扩展性,可以使得构建过程更加高效和可维护。了解 `CMake` 的核心语法和高级功能是构建复杂项目的基础,尤其在多平台、多库依赖和自动化构建的场景中,`CMake` 展现出了巨大的优势。原创 2024-12-24 09:15:00 · 1397 阅读 · 0 评论 -
sysdig中的libscap简介和使用
`libscap`是`sysdig`和`Falco`的核心库,提供系统活动的捕获与分析能力。它通过内核模块(如`sysdig-probe`或`eBPF` probe)直接与Linux内核交互,捕获包括系统调用、进程状态变更、文件系统活动及网络通信在内的事件,并将这些信息传递给用户空间的应用程序进行解析。`libscap`不仅限于系统调用的捕捉,还支持其他类型的事件捕获,如进程生命周期事件等。原创 2024-12-23 09:19:33 · 1255 阅读 · 0 评论 -
理解并使用YAML
在本文中,我们详细介绍了YAML的基本概念、常见语法、使用方法和调试技巧:- **YAML的基本概念和优势**:YAML是一种易读易写的数据序列化格式,广泛应用于配置文件、数据交换和日志格式等场景。- **常用语法和高级功能**:我们深入探讨了YAML的基础语法、数据类型以及复杂结构的处理方法,如嵌套、列表和多行字符串。- **如何使用不同编程语言解析YAML**:介绍了Go语言、Python等常见语言的YAML解析方法,展示了具体的实现代码。原创 2024-12-21 21:00:00 · 4904 阅读 · 0 评论 -
理解并使用Makefile
本文介绍Makefile作为自动化构建工具,如何简化复杂项目的编译流程。它通过定义目标、依赖和命令,智能判断并仅重新编译需要更新的文件,节省时间和资源。文中讲解了Makefile的基本结构与使用方法,包括变量定义减少重复代码、特殊变量自动引用、隐式规则推断生成逻辑、模式匹配处理大量相似规则、内置函数增强灵活性、条件语句定制不同环境下的编译选项等特性。原创 2024-12-21 09:15:00 · 1340 阅读 · 0 评论 -
理解并使用 sysdig
sysdig 是一个强大的系统分析工具,专注于系统调用的捕获与分析。它通过拦截Linux系统调用和内核事件来收集有关进程、网络、文件、内存等方面的信息,帮助用户深入理解系统行为,解决性能瓶颈、安全隐患及故障排查等问题。其核心原理是利用内核机制(如tracepoint或eBPF)实时捕捉系统调用,并在用户空间处理展示。原创 2024-12-17 10:00:46 · 1882 阅读 · 0 评论 -
理解并使用Linux下的perf性能分析工具
本文介绍了perf这一Linux内核自带的性能分析工具,它广泛应用于系统性能监控、程序瓶颈分析和优化。perf通过访问性能监控单元(PMU)来收集硬件事件数据,如CPU周期、缓存行为等,并支持软件事件及用户定义的跟踪点,提供从硬件到用户态的全面性能洞察。阐述了perf的工作原理,包括如何捕捉硬件事件、采样与统计方法、以及数据处理流程。文中还提及perf为减少对系统性能的影响而采用的高效环形缓冲区和灵活的采样频率调整机制。原创 2024-12-12 09:15:00 · 6203 阅读 · 0 评论 -
教程:如何调查dotnet内存泄露问题
通过工具和案例,我们总结出调查`dotnet`内存泄露的关键是**找到问题根因**和**精准修复**。工具如`dotnet-dump`、dotMemory、PerfView等都是调试中的好帮手,而良好的编码习惯更能避免内存泄露的发生。原创 2024-12-11 09:15:00 · 2129 阅读 · 0 评论 -
使用trace-cmd跟踪Linux内核函数:一次愉快的内核探险
通过`trace-cmd list`命令,用户可以列出所有可用的事件源、追踪器、事件以及可过滤的函数,这有助于规划追踪策略。`trace-cmd record`用于启动追踪并记录内核活动到文件中,支持指定追踪器、事件或特定函数等选项,以便更精确地控制追踪过程。最后,`trace-cmd report`读取追踪文件并展示结果,帮助分析每个事件的时间、持续时长及涉及的进程等信息,从而深入了解内核行为,无论是日常调试还是性能优化都能得心应手。原创 2024-12-05 08:22:15 · 2317 阅读 · 0 评论 -
用Go语言重写Linux系统命令 -- ls
本文介绍了如何用Go语言重写Linux的`ls`命令,旨在帮助读者理解文件系统和系统调用。文章首先解释了为何选择Go来实现这一项目,并设定了功能目标,包括列出目录内容、显示隐藏文件、以长格式展示详细信息及以人类可读格式显示文件大小。接着详细说明了环境配置、基础代码结构、选项支持及功能增强的过程。特别强调了用户名与组名解析、文件权限及元信息处理等细节。最后,文章讨论了编译打包步骤,并提出了未来可能的功能扩展建议,如排序、颜色输出、递归列表、跨平台支持等。原创 2024-12-02 09:14:11 · 1488 阅读 · 0 评论 -
用Go语言重写Linux系统命令 -- ping
本文介绍了如何使用Go语言重写Linux系统中的`ping`命令。首先,简要概述了ICMP协议和`ping`命令的工作原理,包括ICMP包的结构和发送接收过程。接着,详细描述了项目初始化步骤、代码模块划分以及每个模块的具体职责。项目被划分为ICMP包构造、网络通信和统计信息处理三个主要部分。文章还提供了一个完整的Go代码实现,包括ICMP包的创建、发送与接收、统计信息的收集及输出。最后,给出了一个测试脚本,用于验证程序功能,并说明了如何为编译后的程序添加必要的权限以执行ICMP请求。原创 2024-11-29 09:22:39 · 1789 阅读 · 0 评论 -
Linux程序员解决程序崩溃的问题
本文详细介绍了Linux程序员解决程序崩溃问题的方法。首先,文章列出了导致程序崩溃的常见原因,包括内存错误、资源耗尽、非法指令、系统限制和环境问题、并发与多线程问题、外部依赖问题以及未处理的异常等。接着,提供了定位崩溃位置的技术手段,如使用gdb分析核心转储文件、利用backtrace获取栈帧信息、通过dmesg日志分析内核错误及strace追踪系统调用等。最后,强调了预防措施的重要性,包括正确使用工具、严谨编码和充分测试。通过这些方法,程序员可以有效地诊断并修复程序崩溃问题,提高代码质量。原创 2024-11-29 09:15:00 · 3750 阅读 · 0 评论 -
解决多共享库环境中C++全局对象多次析构问题的智能指针方案
在Linux环境下,多个动态链接库(.so文件)链接同一个静态库(libxxx.a),并引用其中的全局std::string对象时,程序退出时会导致该对象被多次析构,引起程序崩溃。为解决这一问题,可以使用智能指针来管理全局对象的生命周期。通过引用计数机制,智能指针确保对象只被销毁一次,避免多次析构的风险。本文提供了一个简单的智能指针实现示例,并展示了如何在静态库和动态链接库中使用它来管理全局对象。建议尽量避免在静态库中定义全局非POD类型的数据,若必须使用,推荐使用智能指针原创 2024-11-18 15:27:40 · 608 阅读 · 0 评论 -
TCP Listen 队列详解与优化指南
定义:TCP listen 队列是操作系统内核管理的一个数据结构,用于存储等待处理的连接请求。作用暂时存储客户端发起的连接请求,直到服务器进程准备好处理它们。支持服务器在高并发下有效处理多个连接请求。可以被用来给出期望的backlog数量,但实际是否被满足会取决于底层系统支持。而 SOMAXCONN则意味着系统自己选择一个合适的最大值。如果你需要更灵活地控制backlog的大小而且系统支持,你可以考虑;而如果你只想使用默认最大值,直接用SOMAXCONN就足够了。原创 2024-11-19 09:15:00 · 1403 阅读 · 0 评论 -
统信UOS无法创建透明窗口的问题
统信UOS无法创建透明窗口的问题原创 2023-02-23 07:43:07 · 1175 阅读 · 0 评论 -
GitHub新手入门 - 从创建仓库到协作管理
本文介绍了GitHub的基础操作,包括如何注册、配置SSH密钥、创建仓库、克隆到本地,并执行常见Git操作如git add、git commit、git push、git pull。学习如何创建和管理分支,合并代码,并解决冲突。文章还讲解了如何在GitHub上创建和管理Issue,使用标签、分配人员和项目板来跟踪进度。最后,介绍了Pull Request(PR)的创建和管理流程,通过PR进行代码审查和合并,确保团队协作顺畅。原创 2024-11-11 17:54:35 · 2077 阅读 · 0 评论 -
Linux initramfs 的 init 脚本源代码分析
initramfs 的 init 脚本负责将系统从内核引导到用户空间。首先设置环境变量和关键目录,并挂载 sysfs 和 proc 等虚拟文件系统。然后解析内核命令行参数以配置根文件系统位置、类型等信息,并加载必要的内核模块。通过调用挂载函数,init 脚本挂载实际的根文件系统,确保环境已就绪后验证并启动指定的 init 程序。最后通过 run-init 切换到根文件系统,完成从 initramfs 到用户空间的引导交接,正式开始操作系统的主进程。原创 2024-11-06 09:15:00 · 1577 阅读 · 0 评论 -
深入解析 Linux initramfs:从基础到高级应用
本文将详细介绍 `initramfs` 的定义、结构、工作原理以及如何创建和定制 `initramfs`,适合Linux开发者、运维工程师和内核研究人员阅读,旨在提供实用的技术细节和操作指南。原创 2024-11-05 09:15:00 · 4153 阅读 · 0 评论 -
Ubuntu Linux从加密的根分区中启动的过程分析
Ubuntu Linux 启动时,GRUB 从未加密的 `/boot` 加载内核和 initramfs,initramfs 通过 `cryptroot` 脚本读取 `/etc/crypttab` 文件解密根分区并挂载到 `/`,实现从加密根分区启动。原创 2024-11-04 09:16:21 · 1850 阅读 · 0 评论 -
计算机系统中的大端小端
大端和小端是多字节数据存储的两种方式。大端模式将高位字节存储在低地址处,小端模式则相反。C语言中,多字节类型如`int`、`long`、`short`和浮点数受字节序影响,而`char`类型不受影响。字节序的不同影响结构体和数组的内存布局。原创 2024-11-01 10:47:00 · 1795 阅读 · 0 评论 -
Linux操作系统开机启动的过程--使用GRUB引导
本文探讨了Linux系统从上电启动到用户空间启动的详细过程,涵盖BIOS和UEFI两种不同的固件启动方式、GRUB引导过程、内核和根文件系统的加载以及`systemd`和`SysVinit`的初始化流程。理解这些启动步骤不仅能帮助Linux系统管理员更好地排查启动问题,也为深入学习Linux内核和系统架构奠定了基础。原创 2024-10-31 09:50:40 · 3827 阅读 · 0 评论 -
Ubuntu使用apt下载软件源代码并且编译的步骤
- 使用 `apt` 下载源代码并编译 Debian 包的步骤如下: - 1. **安装工具和依赖**:`sudo apt install dpkg-dev`。 - 2. **配置源代码仓库**:确保 `deb-src` 仓库已启用。 - 3. **下载源代码**:`apt source `。 - 4. **安装编译依赖**:`sudo apt build-dep `。 - 5. **编译软件包**:进入源码目录,执行 `dpkg-buildpackage原创 2024-10-30 08:28:00 · 2116 阅读 · 0 评论 -
git合并多个提交的方法
git合并多个提交的逻辑: 把当前提交合并到前一次提交原创 2023-03-31 08:45:09 · 906 阅读 · 0 评论 -
Linux 使用go语言通过D-Bus发送桌面通知
Linux 使用go语言通过D-Bus发送桌面通知原创 2023-03-28 08:45:41 · 644 阅读 · 0 评论 -
在snap程序中添加可写目录的方法
Linux 在snap程序中添加可写目录的方法原创 2023-03-18 16:46:31 · 713 阅读 · 0 评论 -
使用apparmor限制和允许程序的行为
使用apparmor限制和允许程序的行为原创 2023-03-10 09:21:44 · 988 阅读 · 0 评论
分享