自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个金牛座猿猿子的技术分享空间

欢迎参观我的个人博客 https://www.madbull.site/

  • 博客(108)
  • 收藏
  • 关注

原创 Markdown基础语法

Markdown是一种轻量级标记语言,用于编写易读易写的纯文本格式文档,可转换为HTML等多种格式。其基础语法包括:标题(#至######)、文本样式(加粗、斜体、删除线)、列表(无序-/*、有序1.)、链接/图片、代码(行内code/多行```)等。还支持引用块、水平线、表格等高级功能,适用于文档编写、博客撰写等场景。通过简单符号即可实现丰富的排版效果,是程序员和技术写作者常用的工具。

2026-03-26 10:09:35 336

原创 virsh工具基础使用

本文介绍了virsh命令行工具的基本使用方法和常用操作。virsh是libvirt虚拟化管理套件的命令行客户端,支持KVM、Xen等多种虚拟化平台,具有脚本友好、支持远程管理等优势。文章详细讲解了virsh的准备工作、常用操作(如虚拟机状态查看、启停、配置修改等)、高级技巧(远程管理、批量操作)以及常见问题解决方法。通过掌握这些基本命令,用户可以在无图形界面的服务器上高效管理虚拟机。文章最后还提供了操作命令速查表,方便用户快速查阅。

2026-03-24 10:25:44 222

原创 daemon.json–docker常用配置

本文介绍了Docker的实用配置优化方案,包括:1)配置镜像加速器提升拉取速度;2)设置私有仓库信任;3)限制容器日志大小防止磁盘爆满;4)迁移数据目录解决系统盘空间不足;5)自定义网络子网避免内网冲突;6)启用BuildKit提升构建效率;7)配置live-restore实现热恢复提高服务可用性。这些优化可显著改善Docker使用体验,适用于开发和生产环境。

2026-03-24 10:23:31 333

原创 修改crashkernel为0

在Ubuntu系统中禁用crashkernel可释放内存资源。修改方法:1)编辑/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT参数中的crashkernel设为0或完全删除;2)执行update-grub更新配置;3)重启系统。验证方法包括检查/proc/cmdline输出和kdump服务状态。该操作适用于不需要内核崩溃转储功能的用户,可随时通过重新配置恢复此功能。

2026-03-23 10:02:06 273

原创 windows添加一个开机启动

本文介绍了在Windows系统中设置开机自启动服务的几种方法。推荐使用系统自带的sc命令创建服务(需管理员权限),适合支持服务模式的程序。对于普通GUI程序,建议使用NSSM工具将其包装为服务,或通过任务计划程序设置开机启动。文章还对比了不同方法的适用场景:sc命令适合开发者创建标准服务,NSSM提供更友好的图形界面,而任务计划程序则适合需要GUI的普通应用程序。同时指出了启动文件夹和注册表方式的局限性(依赖用户登录),并强调了权限管理和会话隔离等注意事项。

2026-03-23 09:59:43 651

原创 判断系统是BIOS还是UEFI启动方式

摘要:判断Linux系统使用BIOS还是UEFI启动有几种简单方法:1)检查/sys/firmware/efi目录是否存在;2)运行efibootmgr命令看是否输出UEFI信息;3)查看/boot/efi目录内容;4)检查GRUB安装位置是否为EFI文件;5)通过dmesg查看启动日志。最快捷的方法是执行命令"[-d /sys/firmware/efi] && echo UEFI || echo BIOS",结果直接显示当前启动模式。UEFI系统通常有EFI分区和efi

2026-03-22 10:45:00 293

原创 bash获取脚本所在绝对路径

文章摘要:该代码片段展示了一个获取并处理当前文件所在目录路径的shell脚本。首先通过dirname获取路径,判断是否为绝对路径(以/开头),若不是则拼接当前工作目录形成完整路径。随后切换到目标工作目录,并通过pwd命令确保路径规范化,处理可能存在的相对路径符号(如.和..)。该脚本可用于确保后续操作在正确的目录下执行。

2026-03-22 07:00:00 19

原创 GPG基础指令

GPG密钥管理及加密操作摘要 GPG提供完整的密钥管理功能,包括生成密钥对(--full-generate-key)、查看密钥列表(-k/-K)、导入导出(--import/--export)和删除密钥(--delete-key)。加密支持公钥加密(-e -r)和对称加密(-c),解密使用-d参数。签名功能包括完整签名(-s)、明文签名(--clear-sign)和分离签名(--detach-sign),验证使用--verify。常用选项包括指定输出文件(-o)、ASCII格式输出(-a)、批处理模式(--

2026-03-21 21:00:00 213

原创 Shell 中使用 ${} 进行字符串截取

本文介绍了Bash中${}参数扩展的字符串截取功能,包括两种主要方法:基于索引的位置截取和基于通配符的模式匹配截取。前者支持正向和反向截取(需注意负数偏移的特殊语法),后者通过#、%、##、%%操作符实现前缀/后缀的贪婪或非贪婪删除。文章提供了常见应用场景的示例,如获取文件扩展名和提取文件名,并强调了Bash特有语法在POSIX兼容性方面的注意事项。这些技巧可帮助开发者更高效地处理字符串操作。

2026-03-21 11:30:00 473

原创 虚拟化技术的一些基础知识笔记

虚拟化技术主要分为硬件级虚拟化和操作系统级虚拟化(容器化)两大类。硬件级虚拟化如KVM、VMware通过模拟完整硬件环境实现强隔离,适合运行完整操作系统;容器化如Docker、LXC通过共享内核实现轻量级隔离,适合微服务部署。核心组件包括KVM(内核虚拟化模块)、QEMU(硬件模拟器)和libvirt(统一管理工具)。应用场景方面,硬件级虚拟化适合传统工作负载,容器化更适合云原生应用。选择方案需考虑隔离性、性能、资源开销等因素,容器化是当前主流趋势,但硬件级虚拟化在强隔离场景仍不可替代。

2026-03-20 09:00:00 637

原创 PVE在命令行管理虚拟机

本文介绍了ProxmoxVE中QEMU管理器(qm)的常用命令行操作,包括查看虚拟机列表、启动/关闭/重启虚拟机、查看配置信息、设置开机自启以及查看状态日志等功能。qm命令可以方便地管理基于QEMU/KVM的虚拟机,如使用"qm list"查看所有虚拟机状态,"qm start/stop <VMID>"控制虚拟机启停,"qm config <VMID>"查看详细配置等。这些命令为ProxmoxVE环境下的虚拟机管理提供了高效

2026-03-20 08:45:00 79

原创 NVM基础介绍

是一个强大的 Node.js 版本管理工具,它允许你在同一台机器上安装、管理、切换多个 Node.js 版本。它不是虚拟机,而是一个简单的命令行工具,解决了开发中常见的版本冲突问题。NVM 是 Node.js 开发者的得力工具,它解决了多版本管理的痛点,让开发体验更加顺畅。无论你是刚入门的新手,还是经验丰富的老手,掌握 NVM 都能让你的 Node.js 开发之旅更加轻松。记住:工具的目的是简化工作,而不是增加复杂度。根据你的实际需求,选择最适合的方式来使用 Node.js!

2026-03-19 09:15:00 561

原创 小龙虾openclaw安装教程–linux环境

本文详细介绍了在Linux环境下使用Node.js、阿里云百炼和飞书应用部署OpenClaw的完整流程。主要内容包括:1)通过NVM安装Node.js和OpenClaw;2)获取阿里云百炼API-KEY;3)创建并配置飞书应用;4)通过交互式命令行完成OpenClaw的部署配置,包括模型接入、飞书集成等;5)飞书机器人功能配置与测试。文章还提供了服务管理命令和注意事项,建议将OpenClaw运行在隔离环境中,因其推理结果可能存在不确定性。

2026-03-19 09:00:00 1569

原创 JavaScript中,箭头函数、匿名函数与有名函数的区别

JavaScript函数类型对比:箭头函数、匿名函数与有名函数 摘要:本文对比了JavaScript中三种函数形式的核心差异。箭头函数(=>)具有词法this绑定、语法简洁的特点,适合回调函数;匿名函数(function(){})拥有动态this和arguments对象,可用于构造函数;有名函数(function name(){})则提供更好的调试体验和可读性,适合复杂逻辑和递归。选择时应根据this绑定需求、调试便利性和代码可维护性进行权衡,合理搭配使用不同函数类型能构建更健壮的应用程序。

2026-03-18 09:30:00 307

原创 在golang中,os.ReadFile 和 io.ReadAll 的区别

本文对比了Go语言中os.ReadFile和io.ReadAll两个读取数据函数的区别。os.ReadFile专用于读取文件,自动处理文件打开/关闭,性能更优;而io.ReadAll适用于任意io.Reader流式数据(如网络响应),需手动管理资源。文章从函数定义、实现原理、性能对比、使用场景等方面进行详细分析,并指出常见陷阱(如资源泄漏、内存溢出等)。核心结论是:读取文件优先用os.ReadFile,处理流式数据必须用io.ReadAll,大文件应采用流式处理方式。

2026-03-18 09:00:00 401

原创 C语言调用指令避免命令注入

本文介绍了一种在C语言中防止命令注入漏洞的方法,通过单引号转义外部参数来确保系统命令安全执行。文章提供了shell_escape函数的实现代码,该函数会将输入字符串用单引号包裹,并转义其中的单引号字符。这种方法的局限性是会禁用$、{}等变量引用方式。作者通过测试用例展示了该函数的实际应用场景,并提醒开发者在使用后必须释放函数分配的内存空间。该方案适用于需要安全处理外部输入参数的命令行调用场景。

2026-03-17 09:51:27 45

原创 Linux 多网卡同网段配置冲突问题

本文探讨了Linux服务器配置多网卡同网段IP地址时的网络通信问题。当多个物理网卡(如eth0和eth1)配置同一子网的不同IP时,由于Linux默认ARP行为会导致MAC地址冲突,表现为只有一个IP可通或TCP连接不稳定。解决方案包括:1)调整内核参数arp_ignore和arp_announce为2,使各网卡仅响应自身IP的ARP请求;2)结合策略路由实现更精确的流量控制。文章详细说明了配置方法、验证步骤和注意事项,指出该配置虽不常见但在特定网络架构中具有实用价值。理解这些原理可避免"配置正确

2026-03-17 09:49:31 612

原创 ip rule 策略路由

Linux策略路由核心命令iprule解析:通过from、iif等条件控制流量路由选择。主要功能包括:基于源IP(from)选择路由表,控制本机出站流量;通过入接口(iif)匹配转发/回包路径;支持to、fwmark等高级匹配条件。规则按priority优先级顺序执行,建议自定义规则显式指定优先级。典型应用包括多WAN出口、对称路由和基于应用的流量分类。需注意路由表预定义和实际路由配置,可使用iprouteget等命令调试。

2025-10-17 13:52:24 1101 1

原创 Lua C API 中的 lua_rawseti 与 lua_rawgeti 介绍

摘要:Lua C API中的lua_rawseti和lua_rawgeti是专门用于操作表中整数键的函数,不触发元表机制,适合性能敏感场景。lua_rawseti将栈顶值赋给指定整数键并弹出值,lua_rawgeti获取指定键值压入栈顶。这两个函数常用于数组操作、注册表管理及元方法内部实现,相比普通表访问函数性能更优,但仅支持整数键。使用时需注意栈平衡,适合高频数组访问或需要绕过元方法的场景,是Lua C API中高效稳定的基础工具。

2025-10-17 13:50:35 665

原创 Lua C API 中的注册表介绍

Lua CAPI注册表是专为C代码设计的全局存储区,使用伪索引LUA_REGISTRYINDEX访问。它为C代码提供了安全存储Lua对象的方式,避免被垃圾回收和栈变化影响。推荐使用luaL_ref获取整数引用作为键,通过lua_rawgeti取回值,并用luaL_unref及时释放。典型应用包括保存回调函数、管理对象生命周期等。注意避免使用字符串键以防冲突,并确保及时释放引用防止内存泄漏。注册表机制简单实用,是C与Lua交互的重要工具。

2025-10-16 09:42:44 433

原创 Lua 中的 __index、__newindex、rawget 与 rawset 介绍

文章摘要:Lua中的元表机制通过__index和__newindex两个关键元方法控制表的读写行为,分别处理不存在的键的读取和写入操作。配套的rawget和rawset函数可绕过元表直接操作,避免递归问题。__index常用于实现默认值/继承,__newindex适用于数据校验/日志记录。使用时需注意:仅对不存在键生效、元方法内部必须用raw操作、性能敏感场景慎用。这些机制为构建配置系统、对象模型等提供了灵活支持。

2025-10-16 09:39:26 606

原创 Lua中,表、元表、对象、类的解析

本文系统解析了Lua中的表、元表、对象和类的关系。表是Lua唯一的复合数据结构,可作数组、字典、对象等用途。元表作为表的"行为说明书",通过元方法(__index、__call等)控制表的操作行为。对象本质上是表+方法+可选元表,支持状态和行为封装。通过原型继承机制,利用元表的__index特性可实现类式编程,包括构造函数、继承等面向对象特性。文章详细介绍了四者的实现方式、核心作用及最佳实践,提供了完整的代码示例和关系图谱,揭示了Lua基于原型实现面向对象编程的核心机制。

2025-10-15 09:56:45 1212

原创 Lua C API 中一段LUA建表过程解释

这段代码展示了Lua C API中创建表的详细过程。首先通过lua_newtable()创建空表并压栈,然后依次压入键值对("cookie"字符串和数字0x2b21ef6f),使用lua_settable()将这对元素存入表中。接着通过luaL_register()将textlib_f数组中的函数注册到该表。整个过程演示了Lua栈操作的基本原理,包括压栈、设置表元素和函数注册等核心操作,最终返回包含这些元素的表。

2025-10-15 09:18:17 478

原创 C++中,标准库中的容器

这篇文章详细介绍了C++标准库中的容器(Containers)及其分类。主要分为三大类:序列容器(如vector、list、deque等)、关联容器(如set、map等)和无序关联容器(如unordered_set、unordered_map等)。文章还介绍了容器适配器(如stack、queue等)以及它们各自的特点、使用场景和性能特征。通过具体代码示例展示了各种容器的使用方法,并提供了如何根据需求选择合适容器的速查表。最后强调在现代C++编程中应优先使用标准容器,以获得更安全、高效和易维护的代码。

2025-10-14 11:18:28 975

原创 lvm扩展thin pool

本文介绍了如何利用LVM技术扩展ThinPool存储空间。ThinPool由数据卷和元数据卷组成,支持按需分配空间的ThinVolume。文章详细说明了扩展步骤:1)对新硬盘分区创建PV;2)将PV加入现有VG;3)扩展ThinPool逻辑卷。同时提供了相关命令(pvcreate/vgextend/lvextend)及查看工具(pvdisplay/lvscan等)。最后还介绍了从ThinPool创建/删除LV的方法。适用于需要在LVM环境下扩容ThinPool存储的技术人员。

2025-10-14 11:16:06 456

原创 mysql、mariadb修改数据存储路径

MySQL/MariaDB修改数据存储路径的步骤:1)停止服务;2)查找默认路径(/var/lib/mysql);3)带权限复制数据到新位置;4)修改配置文件中的datadir参数;5)重启服务。注意移动数据时需使用cp -rfp命令保留文件权限。

2025-10-13 10:43:45 252

原创 frp反向代理工具

本文介绍了在内网搭建邮件服务器(Postfix+Dovecot)后,通过FRP工具实现公网访问的完整方案。详细讲解了FRP的下载、配置和部署过程,重点包括:1)双向TLS认证配置;2)服务端与客户端证书生成要求;3)多端口映射配置(SMTP/IMAP等);4)Systemd服务文件编写。相比SSH隧道方案,该方案更稳定可靠,适合长期运行。文中还提供了相关证书生成方法的往期文章链接供参考。

2025-10-13 10:39:33 2217

原创 PVE虚拟机缩小磁盘

本文介绍了在PVE虚拟环境中缩小Ubuntu虚拟机磁盘的具体步骤。首先在虚拟机内部操作:关闭swap、卸载并删除多余分区,重新创建3G的swap分区。然后在宿主机端使用lvresize缩小LVM卷,利用gdisk工具重建损坏的GPT分区表。最后修改虚拟机配置文件完成磁盘容量调整。文章特别指出,系统盘和数据盘应分开创建虚拟磁盘以便管理,并提供了详细的操作截图和命令说明。整个过程涉及虚拟机内部和宿主机端的双重操作,技术要点包括分区调整、LVM卷管理以及GPT分区表修复。

2025-08-07 09:53:52 2594

原创 基于ubuntu搭建gitlab

本文介绍了在Ubuntu系统上搭建GitLab的两种方法:1. 原生安装:通过添加GitLab软件源、安装必要软件包、配置gitlab.rb文件(设置外部URL、时区、Nginx等参数)并启动服务;2. Docker安装:使用docker-compose创建容器,配置数据卷和端口映射。两种方法首次登录都需要使用root账户,初始密码分别保存在/etc/gitlab/initial_root_password和./config/initial_root_password文件中。文中还提到需要配置SSL证书以实

2025-08-07 09:50:58 585

原创 ubuntu增加一个软件仓库流程

本文介绍了如何为Linux系统添加第三方软件源的方法。主要内容包括:1.通过编辑/etc/apt/sources.list文件或在/etc/apt/sources.list.d/目录下创建单独.list文件添加软件源地址;2.添加官方GPG密钥以验证软件包真实性;3.最后执行apt update更新软件包列表。文章详细说明了软件源地址的格式要求,并提供了添加GPG密钥的具体命令行操作。

2025-08-07 09:49:38 641

原创 使用OMV+NextCloud搭建私有云

本文介绍了使用OpenMediaVault(OMV)和NextCloud搭建私有云存储系统的详细步骤。首先通过PVE安装基于Debian的OMV系统,配置硬件并安装compose插件;然后创建共享文件夹作为数据存储;最后通过Docker Compose部署包含NextCloud、MariaDB和Redis的容器组,配置端口映射和环境变量。文章提供了完整的docker-compose.yml配置示例,并说明首次访问和手机客户端安装方法。该方案适合家庭和小型企业构建私有云存储,既能保障数据隐私,又提供文件同步、

2025-08-04 19:07:42 2316 3

原创 PVE环境对网口和wifi的配置

本文介绍了在PVE 8.4.0环境中配置网络接口的完整流程。首先通过MAC地址重命名网口为eth0、eth1和wlan0;然后为wifi配置连接密码,包括安装必要工具和设置wpa_supplicant配置文件;最后详细说明了创建网桥、设置IP地址、子网掩码和网关的方法,并提供了/etc/network/interfaces文件的完整配置示例。配置完成后可通过重启网络服务或PVE服务器来验证设置,最终可在PVE管理页面查看网络配置情况。

2025-08-04 19:03:39 1741

原创 getopt_long命令行解析

本文介绍了Linux中getopt_long函数的用法,用于解析命令行参数。该函数支持长短选项混合使用,通过struct option结构体定义参数属性。文章详细说明了各参数含义,包括no_argument/required_argument/optional_argument三种参数类型,并提供了完整示例代码演示如何解析verbose、output和count等不同参数,最后输出配置结果。示例展示了getopt_long处理必须参数、可选参数及错误检测的能力。

2025-07-23 15:17:22 425

原创 信号量demo

本文对比了条件变量和信号量两种同步原语的核心区别,并通过生产者-消费者模型演示了信号量的使用。关键区别在于:条件变量无状态需手动唤醒,而信号量有计数器自动控制。代码实现了一个缓冲区大小为5的生产者-消费者系统,使用三个信号量(empty、full、mutex)协调两个生产者和两个消费者线程的同步操作,确保线程安全和资源有序访问。最后通过编译测试验证了程序的正确性。

2025-07-21 18:20:36 382

原创 Docker制作python环境

本文介绍了使用Docker制作Python3.7.8环境的详细步骤。通过阿里龙蜥8.6作为基础镜像,配置国内镜像源后,安装编译依赖并设置时区。重点讲解了Python3.7.8的源码编译安装过程,包括创建符号链接、配置pip源以及处理特殊依赖库的方法。文章还提供了手动添加无法通过pip安装的库的解决方案(如yara库),并说明了工作目录设置和服务部署方法。最后强调了Docker容器启动命令不能后台运行的技术要点。该方案适用于需要为老代码搭建特定Python环境的场景。

2025-07-01 15:37:19 592

原创 kali系统apt密钥丢失解决方法

摘要:本文介绍Kali Linux系统APT密钥丢失的解决方法:1)备份并重置软件源为官方源;2)手动下载安装新格式GPG密钥;3)允许不安全的仓库更新;4)重装APT工具及密钥管理包;5)执行完整系统更新。修复后可切换至国内镜像源(中科大/阿里云/清华等),并提供了各镜像源配置示例。方法涵盖从密钥修复到系统更新的完整流程。(148字)

2025-07-01 14:44:20 762

原创 AI接口使用–阿里云百炼

本文分享了使用阿里云百炼AI文本生成接口开发抖音起名小程序的实践经验。作者详细介绍了四个关键步骤:首先注册阿里云百炼账号并获取API-Key;其次安装Python SDK(DashScope库);然后选择文本模型并按接口格式开发;最后进行功能测试。文中提供了完整的代码示例,包括模型选择、API调用和响应处理逻辑,特别展示了如何处理返回的JSON格式内容。该教程为开发者使用阿里云百炼进行AI文本生成提供了实用参考,其经验也可应用于其他类似AI集成项目开发。

2025-06-27 15:00:25 1250

原创 docker-compose配置文件解析

本文介绍了使用Docker Compose管理多容器应用的方法,重点解析了docker-compose.yml配置文件的编写格式。文章以一个开源项目的compose.yml为例,详细说明了配置文件中各个关键部分的含义,包括日志记录模板、网络定义、卷存储以及服务配置等。特别讲解了服务配置中的镜像指定、端口映射、环境变量、启动依赖和日志模板引用等重要功能。通过该配置文件,开发人员可以用单一命令轻松管理多容器Docker应用的生命周期。

2025-06-27 12:06:25 544

原创 搭建私有docker库

《搭建安全私有Docker仓库指南》 摘要:本文详细介绍了如何搭建带有加密通讯和登录认证功能的私有Docker仓库。通过使用registry:2镜像,配合htpasswd工具创建认证文件,并生成自签名SSL证书实现安全连接。文章包含完整的操作步骤:从准备证书和认证文件,到通过docker run命令启动容器(配置端口映射、目录挂载及环境变量),最后测试镜像推送/拉取功能。针对证书验证问题,还提供了在daemon.json配置非安全仓库的解决方案。整个过程兼顾了私有仓库的管理便利性和通信安全性,适合企业级应用

2025-06-26 18:34:20 571

原创 判断给定字符串是不是IP地址

本文介绍了如何判断字符串是否为IP地址的方法。作者提供了一个C语言函数is_valid_ip(),使用inet_pton()函数验证输入字符串是否符合IPv4或IPv6格式。若符合IPv4返回1,IPv6返回2,否则返回0表示非IP地址。该方法可用于在主机名转IP地址前进行预处理,避免不必要的转换操作。该函数封装简单高效,适合在网络编程中直接使用。

2025-06-26 10:46:37 410

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除