-
实时性能监控不再难!Ubuntu部署Netdata助你轻松定位性能问题
前言 今天给有运维需求的小伙伴介绍一个超级实用的工具——Netdata。在这个科技飞速发展的时代,我们每天都在与各种技术产品打交道,尤其是对于程序员来说,服务器和操作系统就像是我们的左膀右臂。但当它们突然“发脾气”时,那真是比被老板骂还心痛! 想象一下这样的场景:你正在为一个即将上线的大项目加班加点地工作,突然之间,你的 Linux 服务器开始无响应,CPU 使用率飙升到 90%,内存也开始告急。这时候,你多么希望能有一个好用的工具来帮你快速定位问题所在!别担心,今天我要介绍的 Netdata 就非常不错。 Netdata 是一个实时系统监控工具,可以帮助你在遇到性能问题时迅速找到解决方案。它不仅可以监控硬件层面的各种指标(如 CPU、内存、磁盘使用率),还可以监控各种应用程序和服务的性能指标。通过简洁直观的可视化界面,你可以一目了然地了解系统的运行状态。 1.关于 Netdata 为什么选择 Netdata? 实时性:Netdata 每秒更新一次数据,确保你能够及时发现和解决问题。 轻量级:占用资源极少,不会对系统造成额外负担。 易用性:安装简单、配置方便,适合所有技术水平的用户。 丰富的图表:提供多种类型的图表展示方式,帮助你更直观地理解数据。 Github 地址:GitHub - netdata/netdata:为速度而设计。自动化,轻松。监控和故障排除,转变! 以下是 Netdata 的特点: 收集来自 800 多个集成的数据 操作系统指标、容器指标、虚拟机、硬件传感器、应用程序指标、OpenMetrics 导出器、StatsD 和日志。 实时、低延迟、高分辨率 所有数据都是每秒收集的,并在数据收集后立即在 API 上提供以进行可视化(1 秒延迟,数据收集到可视化)。 全面的人工智能 AI 针对收集的每个指标在边缘训练多个机器学习 (ML) 模型,并使用 AI 根据每个指标的过去行为检测异常。 systemd-journald 日志 包括有效地将纯文本……
SE_Wang 2025-01-109 0 0 -
网络安全、Web安全、渗透测试之笔经面经总结
本篇文章涉及的知识点有如下几方面: 1.什么是WebShell? 2.什么是网络钓鱼? 3.你获取网络安全知识途径有哪些? 4.什么是CC攻击? 5.Web服务器被入侵后,怎样进行排查? 6.dll文件是什么意思,有什么用?DLL劫持原理 7.0day漏洞 8.Rootkit是什么意思 9.蜜罐 10.ssh 11.DDOS 12.震网病毒: 13.一句话木马 14.Https的作用 15.手工查找后门木马的小技巧 16.描述OSI(开放系统互联基本参考模型)七层结构 17.TCP和UDP的区别 18.脱壳 19.“人肉搜索” 20.SYN Flood的基本原理 21.什么是手机”越狱“ 22.主机被入侵,你会如何处理这件事自查解决方案: 23. NAT(网络地址转换)协议 24.内网穿透 25.虚拟专用网络 26.二层交换机 27.路由技术 28.三层交换机 29.IPv6地址表示 1.什么是WebShell? WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的─种命令执行环境,也可以将其称做为─种网页后门。黑客在入侵了─个网站后,通常会将这些asp或php后门文件与网站服务器WEB目录下正常的网页文件混在─起,然后就可以使用浏览器来访问这些asp或者php后门,得到─个命令执行环境,以达到控制网站服务器的目的(可以上传下载文件,查看数据库,执行任意程序命令等)。国内常用的WebShell有海阳ASP木马,Phpspy,c99shell等。 (静态网页:最常用的格式文件就是html格式文件,大部分网页的格式都是html格式,html格式又包含有.htm、dhtml.xhtml.shtm.shtml。这些都是指静态页面,里面不含有动态程序。 动态网页页面级包括有ASP(基于JavaScript 或VbScript或C#)、JSP、PHP、ASPX、jspx、cgi。这些里面是包含服务器端执行的代码,也就是服务器在将这些网页发给客户端之前,会先执行里面的动态程序语言,并把执行后生成的html发送到客户端来的,所以我们在客户端看到的源代码也是html格式的(因为动态的代码直接在服务器上执行,而这……
SE_Gai 2025-01-101 0 0 -
C语言——动态内存管理
一为什么要动态内存管理 二内存函数 1malloc 2free 3calloc 4realloc 三创建错误 1没有判断直接使用 2对开辟的空间越界访问 3对非开辟的内存进行释放 4只释放开辟内存的一部分 5对同一块开辟内存多次释放 6忘记释放开辟的内存(内存泄漏) 四常见笔试题 题1 题2 题3 五C/C++程序的内存开辟 六对通讯录进行改造 七柔性数组 1特点 2使用 一为什么要动态内存管理 前面已经掌握了开辟内存的方式: int val = 20;//在栈空间上开辟四个字节 但这种开辟内存的方式有两个特点: 1. 空间开辟大小是固定的; 2. 数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。 如果一个数组在使用时发现不够用(前面通讯录信息存满了还要存信息),我们就要进行来学习动态内存开辟内存来满足需求~ 二内存函数 1malloc a 这个函数向内存(堆区)申请一块连续可用的空间,并返回指向这块空间的指针; b 如果开辟成功,则返回一个指向开辟好空间的指针; c 如果开辟失败,则返回一个NULL指针;因此malloc的返回值一定要做检查; d 返回值的类型是 void* ,因为malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定设置; e 如果参数 size 为0,malloc的行为是标准是未定义的,现象取决于编译器。 2free 自己申请的内存一定要记得释放,所以有了free函数: free函数专门用来释放动态开辟的内存; 如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的(报错); 如果参数 ptr 是NULL指针,则函数什么事都不做; 所以使用free后要把指针置NULL(不然就是野指针) 使用: #include<stdio.h> int main() { int *ptr = (int*)malloc(10 * sizeof(int)); if (NULL == NULL)//判断ptr指针是否为空 { perror("malloc error"); return 1; } //使……
SE_Gai 2025-01-093 0 0 -
【Linux】动静态库
一、静态库与动态库的相关概念 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking) 动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。 二、静态库 库的名字必须以lib开头,静态库以.a结尾,库的名字则是开头和结尾中间的一段。 2.1 ar指令 ar 指令用于创建、修改和提取归档文件的工具。在软件开发中,ar 常被用来创建静态库(.a 文件),这些静态库包含了多个编译后的对象文件(.o 文件)。 格式:ar [选项] [库文件名][添加到库中的文件] 常用选项: r:替换归档文件中的文件。如果归档文件中已经存在同名文件,则替换它。 c:创建一个新的归档文件。如果指定的归档文件已经存在,则会被覆盖。 我这里ar指令的格式并不完整,想要了解更多,大家可以去其他文章中了解。 向Makefile中写入命令,通过make快速执行多个命令,通过上图我们可以看到静态库确实被创建出来了。 2.2 创建静态库 注意:在使用静态库的那部分中,对创建静态库的方法进行了改进。 由于我的程序会使用到四种方法,这里分别创建这四个方法的.h文件和.c文件,将运算方法的函数声明写到.h文件中,将运算方法的函数体写入到.c文件中。 这里我们创建一个我们想执行的文件,这个文件中会使用到上面的四个运算方法,那么想执行……
SE_Wang 2025-01-094 0 0 -
【Linux】深入Linux:GCC/G++编译器实用指南
一、Linux编译器-gcc/g++使用 从普通源文件形成可执行程序文件,需要经历四个阶段:预处理(进行宏替换),编译(生成汇编指令),汇编(生成机器可识别代码),链接(生成可执行文件或库文件) 在Linux下,我们可以通过使用gcc/g++对普通源文件进行以上四个步骤处理,形成可执行程序。gcc是专门来编辑C语言代码,g++可以用来编辑C语言和C++语言的代码,g++底层是通过gcc实现。 在使用方面上,gcc和g++相差不大。在这篇文章中将编辑C语言代码使用gcc进行编译工作。接下来,进行相关知识的讲解。 【使用示例】 当使用编译器编译源文件会生成可执行程序,该可执行文件默认取名为a.out,当然我们可以使用-o 选项对目标文件重命名,但是确保需要形成一个可执行程序,该目标文件后缀需要符合可执行文件的后缀。 在使用gcc/gcc进行代码编译时,还需要注意当前编译器版本是否支持相关特性。如果由于编译器版本过低,会导致代码无法编译成功。对此我们在网上搜索安装最新gcc/g++指令或者在使用过程中添加选项gcc test.c -o my.exe -std=c99及g++ test.cpp -o my.exe -std=c++11。 虽然Linux不考虑文件后缀,但是不意味着Linux开发工具不考虑文件后缀。我们需要知道g++底层还是gcc,g++可以编译C/C++代码,但是gcc只能编译C语言代码,gcc不认识C++这些流,大部分是编译错误。 二、gcc编译可执行程序具体过程 使用gcc可以直接帮我们形成可执行程序,今天我们想看下从源文件到可执行程序每一个步骤。这里需要使用到一些gcc指令,能够使得他在每个阶段停下来并且能让我们看见中间的编译结果。 2.1 预处理阶段 指令:gcc -E test.c -o test.i 在预处理阶段,会该文件进行宏替换,去注释,头文件展开,条件编译等操作。 预处理指令是以#号开头的代码行。 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程 选项“-o”是指目标文件……
SE_Wang 2025-01-0811 0 0 -
c#删除文件和目录到回收站
之前在c++上遇到过这个问题,折腾许久才解决了,这次在c#上再次遇到这个问题,不过似乎容易了一些,亲测代码如下,两种删除方式都写在代码中了。 直接上完整代码: using Microsoft.VisualBasic.FileIO; using System; using System.IO; using System.Runtime.InteropServices; namespace ceshiConsole { public class FileIOHelper { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)] public struct SHFILEOPSTRUCT { public IntPtr hwnd; [MarshalAs(UnmanagedType.U4)] public int wFunc; public string pFrom; public string pTo; public short fFlags; [MarshalAs(UnmanagedType.Bool)] public bool fAnyOperationsAborted; public IntPtr hNameMappings; public string lpszProgressTitle; } #region Dllimport [DllImport("shell32.dll", CharSet = CharSet.Auto)] public static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp); #endregion #region Const public const int FO_DELETE = 3; public const int FOF_ALLOWUNDO = 0x40; public const int FOF_NOCONFIRMATION = 0x10; #endregion #region Public Static Method public static void DeleteFileToRecyclebin(string file, Boolean showConfirmDialog = false) { SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT(); shf.wFunc = FO_DELETE; shf.fFlags = FOF_ALLOWUNDO; if (!showConfirmDialog) { shf.fFlags |= FOF_NOCONFIRMATION; } shf.pFrom = file + '\0' + '\0'; SHFileOperation(ref shf); } public static bool SendToRecycleBin(string path) { bool bRet = true; try { if (File.Exists(path)) { FileSystem.DeleteFile(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); } else if ……
SE_Gai 2025-01-081 0 0 -
【HarmonyOS之旅】HarmonyOS概述(一)
1 -> HarmonyOS简介 鸿蒙操作系统(HarmonyOS)是华为开发的全场景分布式操作系统,旨在为多种终端设备提供无缝协同体验。鸿蒙系统的设计理念是“面向未来、面向全场景”,支持多种设备类型,包括智能手机、平板电脑、智能穿戴设备、智慧屏等。 2 -> HarmonyOS发展历程 鸿蒙系统的发展可以追溯到2019年,当时美国商务部将华为列入黑名单,阻止华为向美国制造商购买零部件和技术。作为回应,华为发布了第一代鸿蒙操作系统。随着时间的推移,鸿蒙系统不断迭代升级,实现了系统底座的全部自研,成为继苹果iOS和安卓系统后,全球第三大移动操作系统。 3 -> HarmonyOS技术特性 3.1 -> 硬件互助,资源共享 多种设备之间能够实现硬件互助、资源共享,依赖的关键技术包括分布式软总线、分布式设备虚拟化、分布式数据管理、分布式任务调度等。 3.1.1 -> 分布式软总线 分布式软总线是手机、平板、智能穿戴、智慧屏、车机等分布式设备的通信基座,像一个无形的桥梁,为设备之间的互联互通提供了统一的分布式通信能力,为设备之间的无感发现和零等待传输创造了条件。开发者只需聚焦于业务逻辑的实现,无需关注组网方式与底层协议。 应用场景: 智能家居控制:通过分布式软总线,用户可以使用手机或其他智能设备控制家中的各种智能家电,如灯光、空调、窗帘等。例如,用户可以在回家的路上通过手机提前打开家中的空调,或者在起床时通过手机控制窗帘自动拉开。 虚拟现实(VR)和增强现实(AR):在VR和AR应用中,分布式软总线可以用于连接头戴式显示器与其他设备,实现更加沉浸式的体验。例如,通过分布式软总线,VR设备可以与外部摄像头连接,将现实场景融入虚拟环境中。 在教育领域,分布式软总线可以用于连接学生的电子设备(如平板电脑、笔记本电脑)与教师的教学设备,实现教学内容的同步展示和互动。 3.1.2 -> ……
SE_Wang 2025-01-079 0 0 -
MYSQL的第一次作业
前情提要 需要下载mysql并进行配置,建议下载8.0.37,详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析 提示安装mysql有多种方法:Windows安装MySql8.0 msi格式、Windows安装mysql8.0 zip格式、yum仓库安装、本地RPM包安装、容器安装、生产环境中使用通用二进制包安装 连接并使用数据库 C:\Users\ASUS>mysql -uroot -p Enter password: ****** 注意:密码是自己安装mysql设置的 出现以下界面表示连接成功 CREATE DATABASE mydb6_product; USE mydb6_product; 可以用 SELECT DATABASE();查看现在使用的数据库 检验 创建employees表 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, gender VARCHAR(10) NOT NULL DEFAULT 'unknown', salary FLOAT ); 检验 使用 DESC EMPLOYEES; 可以检验 创建orders表 CREATE TABLE orders ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL, price FLOAT, quantity INT, category VARCHAR(50) ); 检验 使用 DESC ORDERS; 可以检验 创建invoices表 CREATE TABLE invoices ( number INT AUTO_INCREMENT PRIMARY KEY, order_id INT, `in date` DATE, `total amount` FLOAT CHECK (`total amount` > 0), FOREIGN KEY (order_id) REFERENCES orders(id) ); 注意:为了确保 order_id 列是外键并关联到 orders 表的 id 列,需要先创建 orders 表,然后再创建 invoices 表。此外,为了确保 total amount 列的数据大于 0,可以使用 check约束。 检验 使用 DESC INVOICES; 可以检验 查看建立的表 借鉴文章链接:MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.cs……
SE_Gai 2025-01-071 0 0 -
【Linux】深入理解进程管理与fork系统调用的实现原理
进程 基本概念 课本概念:程序的一个执行实例,正在执行的程序等 内核观点:担当分配系统资源(CPU时间,内存)的实体 操作系统在把程序加载到内存中的同时,为了更好的管理进程,还要为每一个进程创建一个task_struct,包含进程相关的所以属性,这样对进程的管理就相当于对数据结构的管理。 描述进程-PCB 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct task_struct-PCB的一种 在Linux中描述进程的结构体叫做task_struct。 task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。 task_ struct内容分类 标示符: 描述本进程的唯一标示符,用来区别其他进程。 状态: 任务状态,退出代码,退出信号等。 优先级: 相对于其他进程的优先级。 程序计数器: 程序中即将被执行的下一条指令的地址。 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。 I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息 组织进程 可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。 查看进程 首先,我们写一段代码 使用ps ajx指令查看进程 这里为什么查到两个带有myproc关键字的进程呢? 这是因为grep指令也是一个可执行程序,当使用这个指令的时候此时也是一个进程,当我们用这个进程查看带有myproc关键字的进程,当然就会把自己查出来了。 我们可以在加上一条指令屏蔽。 📢小知识:把一个程序运行起来,本质就是在系统当……
SE_Wang 2025-01-068 0 0 -
PortSwigger NoSQL 注入
一、什么是NoSQL? NoSQL(Not Only SQL)是一种非关系型数据库管理系统(Non-Relational Database Management System),它用于存储和检索非结构化或半结构化数据。与传统的关系型数据库(如 MySQL、PostgreSQL)不同,NoSQL 数据库不依赖于固定的表结构和 SQL 查询语言,而是采用更灵活的数据模型来适应现代应用的需求。 NoSQL 与传统关系型数据库的对比 特性 NoSQL 数据库 关系型数据库(SQL) 数据模型 灵活(键值对、文档、列族、图) 固定(表结构) 扩展性 高(分布式架构) 有限(通常垂直扩展) 性能 高(适合高并发读写) 中等(适合复杂查询) 一致性 弱一致性或最终一致性 强一致性 事务支持 有限(部分支持简单事务) 完善(支持 ACID 事务) 查询语言 无标准化查询语言 SQL(标准化查询语言) 适用场景 大数据、高并发、半结构化数据 结构化数据、复杂查询 二、什么是NoSQL注入? NoSQL 注入危害 绕过身份验证或保护机制。 提取或编辑数据。 导致拒绝服务。 在服务器上执行代码。 NoSQL 注入的原理 NoSQL 注入的核心原理是:应用程序未对用户输入进行充分的验证和过滤,导致攻击者可以通过构造恶意输入来操纵 NoSQL 查询。 与传统 SQL 注入不同,NoSQL 注入通常利用 NoSQL 数据库的查询语法(如 JSON、BSON)或 API 调用来实现攻击。 NoSQL 注入与传统 SQL 注入的对比 特性 NoSQL 注入 SQL 注入 目标数据库 NoSQL 数据库(如 MongoDB) 关系型数据库(如 MySQL) 注入方式 利用 JSON、BSON 或 API 调用 利用 SQL 语句拼接 攻击复杂度 较高(需要了解 NoSQL 语法) 较低(SQL 语法较为通用) 防御难度 较高(NoSQL 查询灵活性高) 较低(已有成熟的防御方法) 三、 NoSQL 语法注入 原理:打破 NoSQL 查询语法,注入自己的有效载荷。 1、确定要处理的字符 原理:通过转义引号确定注入点 this.catego……
SE_Gai 2025-01-061 0 0