自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(608)
  • 收藏
  • 关注

原创 C++:通过标识获取子字符串

这是一个常用的方式,比如通过成对括号,引号获取字符串。

2024-12-25 15:23:13 61

原创 Boost:通过boost::process::child调用其他程序时设置起始目录,环境变量,捕获错误

3.可以通过boost::this_process::environment();产生一个环境变量对象,并设置环境变量的key-value,但是这个方式是v1的方式,根据boost的文档,后续会使用v2的方式。2.通过boost::process::start_dir设置程序执行时的初始目录,因为程序执行时不太可能通过类似cd xxx这样的命令进入某个目录,所以当需要时,可以通过start_dir进行设置。而 exit_code用于识别程序完成时是否正确的执行了。

2024-12-23 14:56:51 52

原创 Linux(openssl):用CA证书签名具有SAN和KeyUsage的CSR

3.1创建目录sign_csr_with_san_keyusage。而签名CSR时也经常需要带上key usage,那么如何实现呢?3通过CA签CSR with SAN and Key usage。3.4查看证书的key usage。介绍了签名CSR时如果带上SAN。3.3用CA证书签名。

2024-12-04 10:26:45 333

原创 Systemd: disable和mask的区别

Mask命令的优势在于,它提供了一种更为彻底的方式来阻止服务的运行,从而避免了任何潜在的干扰或冲突。然而,这也意味着,一旦服务被屏蔽,除非进行额外的配置或修改,否则它将无法被重新启动。其作用是切断/etc/systemd/system中指向/lib/systemd/system的链接,从而禁止该服务开机启动,但是依然可以通过手动的方式启动该服务。其作用是将/etc/systemd/system中的服务链接到/dev/null,从而阻止服务通过自动或手动的方式进行启动。

2024-11-13 18:02:08 113

原创 Systemd:/etc/systemd/system和/lib/systemd/system的区别

如果在两个目录下有相同的Unit文件,那么位于/etc/systemd/system下的高优先级的Unit文件将起作用。/etc/systemd/system目录下的Unit文件的优先级高于/lib/systemd/system。两个目录下的Unit文件都可以被systemctl进行start或stop。只有位于/etc/systemd/system目录下的Unit才会开机启动。那么这两个目录在使用时有什么区别呢?下的配置文件,很多都是一个指向了。1.systemctl的操作范围。

2024-11-13 13:50:47 256

原创 Systemd:tmpfiles

如果文件或子目录的最后使用时间与当前系统时间之差大于“寿命”字段的值,那么这些文件或子目录将被删除,此字段的值是一个时间长度,可以使用下面的时间单位后缀: us(微秒)、ms(毫秒)、s(秒)、m(分)、h(时)、d(天)、w(周)。如果系统管理员想要屏蔽 /usr/lib/tmpfiles.d 目录中的某个配置文件,最佳做法是在 /etc/tmpfiles.d 目录中创建一个指向 /dev/null 的同名符号链接,即可彻底屏蔽 /usr/lib/tmpfiles.d 目录中的同名文件。

2024-11-08 21:35:28 203

原创 Systemd:Timer

一旦定时器触发,systemd 将启动与该定时器关联的 .service 单元,从而执行预定的任务。为什么需要启动one.service呢,这是因为OnUnitActiveSec的含义是:Unit上次执行后,等多久再次执行,如果one.service还没被执行过,one.timer是不会定时调用one.service的。注1:可以在.timer里指定Unit,也就是定时到时后需要执行的service,但如果不指定,那么默认会执行和timer同名的service,也就是one.service。

2024-11-08 15:38:05 130

原创 System:oneshot类型的service

有的时候,某个进程只在特殊的情况下运行一下即可,不需要一直以服务的形式待命,这种情况下,可以设置service的type为oneshot,然后设置RemainAfterExit=yes。这样设置的service,即使在其进程启动完成之后退出了,systemd 也仍然会认为这个服务还在运行中,将此服务视为活动(active)状态。可以看到进程已经退出了,但是service还是出于active的状态,这样的话,一旦使用。指定的命令就会执行,从而重新开启触摸板。

2024-10-21 21:45:19 184

原创 Systemd:控制基于依赖服务状态的启动顺序

可以看到systemd先启动test_log,当test_log通过sd_notify通知systemd其ready后,systemd才会启动test_vlog。介绍了启动顺序和依赖,但是这里面有个问题就是,无法控制依赖服务(test_log)确认其完成启动后(ready),再启动依赖于他的服务(test_vlog)//test_log.service (加入Type=notify)//test_vlog.service (没有变化):当前服务启动完毕,会通过sd_notify通知。

2024-10-21 20:58:17 190

原创 Systemd:控制服务的启动顺序和依赖关系

但是基于journal log目前无法看出启动顺序,实际上systemd会首先启动test_log然后再启动test_log,但是需要注意的是,这只保证了调用顺序,不保证test_log启动到了什么状态后再启动test_vlog。可以看到在test_log处于已启动的状态下,重启test_vlog不会对test_log有什么影响。启动了test log和test vlog,这是因为test vlog依赖于test log。只启动了test_vlog,这是因为其依赖的test_log当前已经处于了启动状态。

2024-10-20 21:32:25 465

原创 Systemd: service传递进程参数

10月 20 14:07:54 xxx-VirtualBox test_log[7014]: argc:3 is test_log.service。10月 20 14:27:31 xxx-VirtualBox test_log[7251]: argc:3 is bye@:88。10月 20 14:24:14 xxx-VirtualBox test_log[7197]: argc:1 is 1。介绍了如何通过service启动一个服务进程,在实际应用中,有的时候需要传递一些参数给进程,那么该如何传递呢?

2024-10-20 14:32:10 296

原创 Systemd:通过journalctl查看log

journalctl -u nginx.service -u php-fpm.service --since today # 合并显示多个 Unit 的日志。$ sudo journalctl -o json #单行输出。$ sudo journalctl -o json-pretty #多行输出。(默认情况下 ,只保存本次启动的日志)(及其以上级别)的日志,共有8级。的日志(需更改设置)

2024-10-19 20:38:31 137

原创 Systemd:Unit配置文件

Systemd是Linux的核心守护进程,其功能十分强大,可以管理多种类型的资源,每种资源被称为一个systemd unit,每个unit都需要一个配置文件,该文件的后缀名与资源是一致的。注:Target可以认为是一组Unit,启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit,也是一个通用区块,配置的目标模块通常是特定运行目标的 .target 文件,用来使得服务在系统启动时自动运行。注3:Requires属于强依赖,如果依赖项启动失败或异常退出,那么本Unit也无法启动。

2024-10-19 16:25:30 201

原创 Systemd:简介

Systemd是linux系统的守护进程,它要管理正在运行的 Linux 主机的许多方面,包括挂载文件系统、管理硬件、处理定时器以及启动和管理生产性主机所需的系统服务。lrwxrwxrwx 1 root root 20 11月 22 2023 /sbin/init -> /lib/systemd/systemd。可以看到systemd实际上是linux系统的第一个进程,其他进程都是他的子进程。详细信息,请参考官方文档。Systemd的架构。

2024-10-19 16:13:21 201

原创 Systemd:systemctl 命令

Target 就是一个 Unit 组,包含许多相关的 Unit。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。2.1.5列出所有正在运行的、类型为 service 的 Unit。2.1.2列出所有Unit,包括没有找到配置文件的或者启动失败的。2.4.2列出一个 Unit 的所有依赖,并展开所有target。2.7.2查看一个 Target 包含的所有 Unit。2.2.2显示远程主机的某个 Unit 的状态。2.3.2显示某个 Unit 的指定属性的值。

2024-10-19 15:18:37 441

原创 Systemd:管理进程的加载过程的service配置文件

启动服务时等待的秒数,这一配置对于使用 Docker 容器而言显得尤为重要,因其第一次运行时可能需要下载镜像,严重延时会容易被 Systemd 误判为启动失败杀死。:启动当前服务的命令,可以带有启动参数,比如上例中的:ExecStart=/usr/sbin/sshd -D $SSHD_OPTS。:停止服务时的等待秒数,如果超过这个时间仍然没有停止,Systemd 会使用 SIGKILL 信号强行杀死服务的进程。:指定加载一个包含服务所需的环境变量的列表的文件,文件中的每一行都是一个环境变量的定义。

2024-10-19 14:03:39 174

原创 C++14:通过make_index_sequence实现将tuple转换为array

需要说明的是,array中的元素是同一类型,因此需要tuple中的元素都支持转换为首元素类型。通过该方法,可以把tuple中的元素转换为tuple首元素类型的array。如何将vector转换为array呢。

2024-10-01 10:03:31 116

原创 nlohmann json:读写json文件

的方式是当读取的文件无法匹配json的格式时不抛出异常。3. j.is_discarded()用于判断是否正确的读取到了json内容。

2024-09-25 23:01:05 455

原创 Linux开发:ELF中的段和节的区别

也就是说节是程序在编译后,分类划分的一些区域,用于保存代码的就是代码节(.text),保存已初始化的全局数据的就是全局数据节(.data),保存只读数据的就是只读数据节(.data),保存未初始化的全局数据的就是.bss,节的分类比较细致,实际的程序中有很多节。其实节的概念就是我们常说的段,是根据不同功能组织的分类,比如:代码段(节),全局数据段(节),只读数据段(节),.bss段(节)...[号] 名称 类型 地址 偏移量。

2024-09-08 12:08:23 202

原创 Linux工具:objdump

4.显示某段的具体信息:objdump --section=.data -s file_path。./c_symbol: 文件格式 elf64-x86-64。./c_symbol: 文件格式 elf64-x86-64。5.显示动态符号表信息:objdump -T file_path。1.查看符号表信息:objdump -t file_path。./c: 文件格式 elf64-x86-64。./c: 文件格式 elf64-x86-64。

2024-09-07 12:52:09 204

原创 Linux工具:readelf

类型: DYN (Position-Independent Executable file)0x0000000000000001 (NEEDED) 共享库:[libstdc++.so.6]0x0000000000000001 (NEEDED) 共享库:[libc.so.6]Elf 文件类型为 DYN (Position-Independent Executable file)

2024-09-07 12:20:07 199

原创 GDB:加载符号表

如:strip --strip-debug --strip-unneeded c。介绍了调试coredump时需要通过-g编译程序,从而产生调试程序所需要的信息。如:objcopy --only-keep-debug c c_symbol。通过这种方式可以将符号表文件c_symbol 加回到可执行文件c。c_symbol: 文件格式 elf64-x86-64。c: 文件格式 elf64-x86-64。如:objcopy --strip-all c。可以看到又可以看到有意义的符号信息了。

2024-09-06 22:37:20 965

原创 GDB:调试加载coredump文件

C/C++语言,程序编写不当,就会产生coredump,可以通过gdb进行调试,快速定位coredump的位置。使用两种方式均可以正确的加载core文件,通过以下方式可以快速的定位coredump。可以看到对空指针d进行复制,导致了coreddump。运行程序后,不出所料参数了coredump。可以通过两种方式加载core文件。

2024-09-06 22:07:52 232

原创 Windows工具:tracert探测路由

用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。4 * * * 请求超时。7 * * * 请求超时。9 * * * 请求超时。10 * * * 请求超时。

2024-09-02 23:12:29 761 1

原创 Linux工具:traceroute探测路由

其工作原理是:主机试图以最小的TTL存活时间(初次为1,后续依次增加)发出探测包,探索包经过路由器时,会将存活时间就会减1,当其存活时间为0时, 路由器会取消探测包的转发,并传送一个ICMP报文给源主机,并会在ICMP报文里包含路由器的IP,这样源主机就会获取依次所需经历的路由设备IP。-m, --max-hop=NUM 设置检测数据包的最大存活数值TTL的大小(default: 64)-g, --gateways=GATES 设置来源路由网关,最多可设置8个。

2024-09-02 23:02:25 722

原创 网络:通过ipv6打开网页

但是由于Linux没有default zone这种概念,所以目前在Linux下,通过浏览器是无法打开link-local网站的。比如:http://[FC00:0000:130F:0000:0000:09C0:876A:130B]但是目前的浏览器都没有支持这种做法,所以实际上无法访问ipv6的link-local网站。http://[fe80::1111:2222]这种方式打开link-local网站。但是%在url中具有特殊的含义,所以需要进行转义为%25,也就是。

2024-09-01 18:13:44 4409

原创 网络:IPv6

3.3ipv6的link-local地址,类似于ipv4的169.254.0.0/16,169.254.x.x地址通常用于当DHCP无法使用时,主机给自己分配的地址,这样可以保证在同一子网下的主机还能正常的通信。FF02:0:0:0:0:1:FFXX:XXXX ,Solicited-Node组播地址。FF02:0:0:0:0:0:0:6,所有OSPF的DR路由器组播地址。FF02:0:0:0:0:0:0:5,所有OSPF路由器组播地址。FF02:0:0:0:0:0:0:D,所有PIM路由器组播地址。

2024-09-01 17:02:47 3153

原创 GDB:调试时传递参数

1.运行gdb时通过--args传递参数。2.在gdb中执行run的时候传递参数。3.在run之前通过set传递参数。可以看到参数传递到了程序中。同样参数传递到了程序中。

2024-08-24 20:36:32 508

原创 Linux开发:通过readlink读取软连接指向的文件

读取软连接后,保存在buf中的路径的长度,如果返回值长度与bufsiz相等,则代表buf的长度不够,发生了截断。如果输入参数pathname不是软连接,则返回0。buf:保存软连接指向路径的缓存。pathname:软连接的路径。bufsiz:buf缓存的大小。注:该函数不会自动在buf后面补0。可以看到读取到了连接指向的实际路径。

2024-08-24 20:14:29 200

原创 C++(23):新的错误返回机制expected

4.调用函数时返回的expected值,如果转bool后为true,代表函数正确的执行了,可以通过类似*result或result.value()获取到返回值。5.如果函数执行错误了,那么可以通过result.error()返回错误对象,比如DivE,继而通过错误对象得到错误值result.error().err。2.expected的第二个模版参数DivE代表的是函数执行错误时的类型,可以是原生类型也可以是自定义类型。传统的C++程序,有的时候既想要知道函数是否正确的执行了,又想要知道返回的结果。

2024-07-28 21:54:32 297

原创 C++(20):存储utf8的char8_t类型

2.char8_t具有和unsigned char相同的符号属性、存储大小、对齐方式以及整数转换等级,但不是unsigned char。3.由于char8_t和unsigned char不是用一种类型,所以其指针间也不同直接赋值。C++23中可以将utf8数据直接保存在char8_t变量中。1.char8_t的字面量类型通过u8定义。

2024-07-28 16:09:29 191

原创 NodeJS:npm的使用

通过该方法将在当前目录下创建文件夹node_modules,并将模块安装到node_modules中。可以通过-g参数指定模块为全局安装,那么模块将安装到/usr/lib/node_modulesl下。npm时nodejs的包安装工具。9.删除当前镜像源,使用默认源。3.安装nodejs模块。查看所有全局模块的信息。查看指定全局模块的信息。10.设置淘宝新镜像源。

2024-07-28 15:41:04 216

原创 Rust:cargo的常用命令

有的时候修改完程序可能需要检查一下程序是否可编译,而不需要真正的编译,以加快检查效率,可以通过。当程序通过了各种测试后,可以通过下面的命令编译经过优化后运行的更快的发布版。编译后的可执行文件位于:hello/target/debug/hello。即可完成编译及运行项目。

2024-07-27 14:04:15 539

原创 Rust:在Ubuntu22.04上安装

尝试后由于网络原因,无法顺利安装。然后编辑rust.sh文件。设置rust.sh为可执行。2.使用国内源进行安装。直接回车选择默认即可。

2024-07-27 12:04:02 1050

原创 Ubuntu22.04:使用root用户

Ubuntu默认是不能使用root用户的,需要使用root权限时,可以通过sudo或sudo su。好处是只需输入当前用户的密码就可以。设置root的用户密码。

2024-07-21 21:52:33 972

原创 C++:CLI11命令行分析工具

1.创建目录/usr/include/CLI,然后将release中的CLI11.hpp拷贝到/usr/include/CLI中。CLI11使用起来比较简单,源码下的example目录下有很多例子可以参考。2.将源码中的CLI目录拷贝到/usr/include/目录中。CLI11是一个比较方便的命令行分析工具。使用时直接引入头文件即可,不需要库文件。可以对输入的值进行检查。

2024-07-21 20:56:36 225

原创 Ubuntu22.04:安装Samba

mount时-o参数是可以分开提供的。设置用户xxx访问Samba的密码。3.将用户加入到Samba服务中。1.安装Samba服务。4.配置Samba服务。

2024-07-18 10:12:51 393

原创 Ubuntu22.04:安装并配置nfs

no_root_squash:root用户具有对根目录的完全管理访问权限。/nfsroot:指定/nfsroot为nfs服务器的共享目录。no_subtree_check:不检查父目录的权限。rw:挂接此目录的客户端对该共享目录具有读写权限。*:允许所有的网段访问,也可以使用具体的IP。mount完成后在/nfsroot下创建文件。可以看到test文件,说明mount成功了。如果需要指定nfs的版本可以通过。也可以通过mount命令进行查看。表示支持nfs3及nfs4。然后在nfs目录下查看。

2024-07-18 09:16:20 1851

原创 Linux开发:Ubuntu22.04安装libcurl4

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证等,使用libcurl可以很方便的完成高层网络协议编程。

2024-07-14 18:40:43 687

原创 Linux开发:Fuse介绍

3.fuse daemon通过读取/dev/fuse将request从内核队列中取出,根据操作调用步骤1中注册的相应回调,也就是回调会具体处理对fuse文件系统的操作请求,当处理完请求后,fuse daemon会将reply通过/dev/fuse传递给fuse driver,此后fuse daemon把requset标记为completed,最终唤醒用户进程。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作时所对应的回调函数,就可以实现一个文件系统。

2024-07-13 16:42:07 362

空空如也

空空如也

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

TA关注的人

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