日志1. 为什么需要日志等级?在实际生产中,程序输出的信息非常多,如果没有等级就会导致:
开发阶段找不到重点(调试信息太多)。
上线后也不好排查问题(没有区分严重错误和普通信息)。
因此,合理使用日志等级,能让我们:
快速定位错误。
过滤无用信息。
分环境(开发、测试、生产)灵活控制日志量。
2. Linux 常见日志等级以 syslog 标准 为例(这是 Linux 内核和很多守护进程默认遵循的):
等级名
数值(优先级)
典型含义
EMERG
0
系统不可用,比如内核崩溃(panic)
ALERT
1
必须立刻采取措施,比如磁盘坏块
CRIT
2
严重错误,可能导致程序崩溃
ERR (ERROR)
3
一般错误,需要修复
WARNING
4
警告信息,可能有潜在风险
NOTICE
5
正常但需要注意的事件
INFO
6
普通运行信息
DEBUG
7
调试信息,开发阶段最详细
数值越小,级别越高,越重要。
在生产环境中,一般只保留 WARNING 及以上等级,避免刷盘压力和磁盘占用。
然而在实际操作当中,我们大多只考虑下面几种 ...
Linux
未读进程间通信 —— 有名管道篇1. 什么是有名管道1. 基本定义有名管道是 Linux 中的一种进程间通信方式,其本质也是一个特殊类型的文件,存在于文件系统中,支持 无亲缘关系的进程 之间的数据通信。
2. 与匿名管道的对比
特性
匿名管道(pipe)
有名管道(FIFO)
是否有文件路径
❌ 没有
✅ 有(存在于文件系统中)
是否只能父子进程通信
✅ 是
❌ 可以无亲缘关系通信
创建方式
pipe()
mkfifo() / mknod()
常见用途
父子进程、线程内通信
shell 脚本、后台服务通信
2. 有名管道的创建与使用1. mkfifo 函数原型 —— 创建有名管道1234#include <sys/types.h>#include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);
参数详解
const char *pathname: 表示希望创建的 有名管道的路径(通常是绝对路径或当前目录下的文件名)。它创建出来的是一个 文件系统中的特殊设备文件 ...
Linux
未读进程间通信 —— 匿名管道篇1. 什么是管道管道就是一个内核缓冲区,允许一个进程写数据,另一个进程从中读数据。 它像一根水管:一头写入,一头读取,中间是内核帮我们传递数据。
2. 管道的直接原理1. 底层本质管道就是操作系统在内核空间里开辟的一块 内存缓冲区,这个缓冲区由内核维护,进程不能直接访问,只能通过 文件描述符 进行读写。
管道使用了 环形缓冲区(循环队列结构),读写两端由内核控制。
当我们调用 pipe(fd),操作系统会:
在内核里创建一个缓冲区。
返回两个文件描述符:
fd[0]:读端读进程:read(fd[0], buf, size); 从管道中读取数据(从内核缓冲区读)。
fd[1]:写端写进程:write(fd[1], data, size); 把数据写入管道(进入内核缓冲区)。
pipefd[0] → 0 → 嘴巴 → 读书 → 读端pipefd[1] → 1 → 钢笔 → 写字 → 写端
3. 匿名管道的接口1. pipe() 函数原型在 Linux 中,pipe() 是用于创建 匿名管道 的系统调用,原型如下:
12#includ ...
Linux
未读进程间通信前言1. 进程间通信的介绍1. 进程间通信的目的进程通信的核心目的是在多个独立运行的进程之间传递数据、同步执行、共享资源。即实现多个进程在数据层面的交互。
实际应用需求:
数据共享: 多个进程处理同一批数据,共享同样的资源。
通知事件: 某一进程完成任务后通知其他进程(如进程终止时要通知父进程)。
某种协同: 控制对临界资源的访问,防止竞争。
服务请求与响应: 客户端请求服务器、子进程向父进程返回结果。
进程控制 :有些进程希望完全控制另一个进程的执行(如 Debug 进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
[!NOTE]
每个进程本质上是一个 独立的虚拟地址空间(由 MMU/页表保护),天然是“互不相见”的。因为进程独立性的存在,导致进程通信的成本比较高,所以 通信是有成本的!想要通信,必须要构造一个 “公共的资源”(可访问区域)。这个“资源”谁来提供?—— 操作系统。
2. “公共资源”为什么不是由一个进程来提供?如果由 某个进程创建并拥有 这个资源:
该资源的生命周期就依附于该进程。一旦这个进 ...
VS Code 连接 Linux 服务器全流程解析关于 VS Code 最基本的使用这里就不过多赘述了,因为我这里之前已经装好配置过 VS Code 了,下面开始介绍如何使用 VS Code 连接远端主机进行开发:
1. 使用 VS Code 连接远端主机
首先在 Windows 下打开我们的 VS Code,找到扩展,下载插件 Remote - SSH。
下载完成后,添加远端主机: 摁下键盘的 F1 键,输入 Remote-SSH: Open SSH Host 的字样,在下方找到添加新的主机。
进行登录:基本格式是 ssh root@……(ssh + 空格 + root@ + 自己的公网 IP),就是当初在 Xshell 中进行登录一样。
本地记录: VS Code 会提示将在本地将远端的用户名和密码记录下来。
如何找到这个所谓的 config 文件?我们的刚刚进行的本地记录文件(config)可以从 C 盘 的用户目录下的 .ssh\config 中找到,用记事本打开该文件,就是本地对远端主机的配置信息。
连接远端主机: 选中左边窗口栏的 远程资源管理器 ...
Git 的使用1. Git 版本迭代1. 查看 Git 版本1git --version # 查看当前安装的 Git 版本号
2. Windows 系统更新 Git
访问 Git for Windows,下载最新版安装程序。
运行安装程序,如果存在旧版本会直接覆盖升级成新版本。
安装完成后,再次执行 git --version 验证。
2. Git 仓库的基本使用1. 新建仓库
去 GitHub/Gitee 网页端,点击新建仓库,填写仓库名、介绍等信息。
可选择开源或私有,是否初始化 README、License、.gitignore 等,按需配置。
2. 初始化 Git 仓库(本地仓库)1git init # 在本地初始化一个空仓库(会生成隐藏的 .git 文件夹)
3. 关联远程仓库添加 GitHub 或者 Gitee 仓库作为远程地址(默认命名为 origin):
12git remote add origin 仓库链接 # 把远程仓库链接绑到本地,默认叫 origingit remote -v # 查看远程仓库 ...
Linux
未读动静态库 —— 动态库1. 库的制作者 如何制作动态库1. 编写库的源代码和头文件
创建头文件:声明库的对外接口函数。
创建源文件:实现头文件中声明的函数。
2. 编译为位置无关目标文件-fPIC 关键作用:生成位置无关代码(Position Independent Code),使代码可被加载到内存任意位置,这是动态库的核心要求。
3. 链接生成动态库文件-shared 参数:指示链接器生成共享库(.so 文件)。
4. 组织发布文件将以下文件提供给使用者:
1234├── include/ # 头文件目录│ └── mathlib.h # 接口声明└── lib/ # 库文件目录 └── libmathlib.so # 动态库二进制
2. 动态库 demo1. mathlib.h(头文件)—— 对外接口声明12345678//相当于 #pragma once , 用于防止重复包含头文件#ifndef MATHLIB_H#define MATHLIB_Hint add(int a, int b);int s ...
纪念“一周年”,我的成长、蜕变与收获
今天是 2025 年 5 月 22 日,一个值得纪念的日子 —— 一年前的今天,我毅然选择报班学习,踏上了改变命运的征程。在这一年里,我经历了从迷茫到觉醒的成长蜕变,踩过无数坑后总结出血泪教训,也收获了宝贵的心得与经验。这篇文章分成三个部分展开:我的成长故事、成长心得分享与总结,以及大学避坑指南。
1. 初入象牙塔:从志愿时长 100+ 到安逸下的不安我来到“大学”的日子是 2023 年 8 月 26 日,那时候真的是天真得不行,时间也多得用不完。每天就是老老实实去上课,下课后就呆在宿舍玩一玩,偶尔出去搞点志愿活动,对了,当时加入了青年志愿者社团,短短小半年时间,志愿时长已经有 100 多小时了。有时候也会去打打球,放松一下。可是这样的生活让我渐渐觉得很乏味,也不能说是乏味吧,就觉得看不到未来,如果一直这么混下去,终将一事无成,沦落到街头混饭吃。所以,我就萌生了做点什么去挣点钱,当时的想法很简单,就是赚点小钱补贴生活费,顺便也为以后谋生积攒经验。
2. 搬砖记:跌跌宕宕换来的碎银几两于是,我就一头扎进了搞钱的路子。初期什么都不了解,没人带,也没有 ...
Linux
未读动静态库 —— 静态库
稀土掘金 | 动静态库的认识
CSDN | 理解文件系统|文件缓冲区|软硬链接|动静态库
CSDN | 相关好文
CSDN | 相关好文
1. 扩展概要(了解)一个文件被打开操作系统要做什么:打开文件的流程 = 找 inode ➜ 创建 file 结构 ➜ 建立缓冲 ➜ 用页表映射读写 ➜ 后续 read/write 就操作 page 缓冲。
1. 为什么说“4KB Page”是核心单位?现代操作系统使用 分页机制(Paging) 管理内存,每一页(Page)是 一块固定大小的内存单元。Linux 默认:
一页大小为 4KB。
物理内存也以页框为单位分配(如 Frame #0,Frame #1…)。
所有虚拟内存地址映射到物理内存页框时,以 4KB 为基本单位。
地址空间
页面大小
含义
虚拟地址空间
4KB/page
每个进程有自己的虚拟地址空间
物理内存
4KB/frame
物理内存被划分为一个个页框
页面表(Page Table)
将虚拟页映射到物理页框
所以:所有读写、分配 ...
Linux
未读inode 与软硬链接先说明一下前面没有解释的东西:文件权限后面的 1 是什么?
1. 软链接(Symbolic Link / Symlink)1. 概念软链接是一个特殊类型的文件,它的内容是一个 路径字符串,指向原始文件的路径。
就像 Windows 的 快捷方式;
保存的是目标路径;
用途:可以在任何地方“引用”一个程序、配置文件、目录;
常用于:
给程序创建入口路径(比如 /usr/bin/python 链接到 /usr/bin/python3.11);
让你在任意位置执行程序;
多个配置环境之间切换。
特性
描述
inode 不一致
链接文件有自己的 inode,数据内容是“路径名”
可跨分区
因为只是保存路径字符串,不依赖 inode
可对目录使用
如 /usr/bin/python 链接到 /usr/bin/python3.11
不影响原文件
原文件不变,软链接只是一个指向的“引用”
2. 相关命令12ln -s 源文件或目录 软链接文件名ln -s /真实路径/程序 /usr/local/bin/程序名
12ln -s / ...