Linux
文章平均质量分 80
longyu_wlz
在写作、音乐、linux 海滩旁捡拾贝壳的小男孩
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
修改 elf 文件方式导入依赖高版本 libc 组件技术调研
链接器的位置放在 elf 的 interp section 中,可以通过修改此 section 的内容来实现修改链接器位置的功能,linux 内核运行进程时会首先加载链接器,然后由链接器统一加载动态库,最后执行程序。strace 跟踪发现,在 execve /bin/bash 的时候返回了无权限错误,判断是不兼容的动态库链接器触发的问题,对于存在会执行系统中命令的组件,要么同步更新依赖的系统命令,要么重新编译该组件。程序编译时并不会依赖 vdso 库,它跟随内核,兼容性由内核保障,一般不需要额外进行处理。原创 2024-09-02 09:00:00 · 869 阅读 · 0 评论 -
如何在安装 UOS 桌面版的笔记本电脑中实现光盘自动挂载?
UOS 自动挂载光盘原创 2024-03-07 08:00:00 · 1581 阅读 · 0 评论 -
UOS 如何实现自动将 U 盘挂载到指定目录中?
项目功能开发需要支持自动将 U 盘挂载到某个业务文件夹中进行访问,不能使用缺省方式。原创 2023-05-13 09:15:53 · 3004 阅读 · 1 评论 -
如何理解 dlopen 的 RTLD_LOCAL flag?
本文通过一个 demo 程序来理解 dlopen 的 RTLD_LOCAL flag原创 2022-11-15 09:00:00 · 2328 阅读 · 0 评论 -
理解 dlopen manual
本文翻译了 debian11 上 man dlopen 的内容,旨在通过翻译来学习 dlopen 支持的功能。原创 2022-11-14 09:00:00 · 2047 阅读 · 0 评论 -
使用 lkdtm 内核模块进行内核崩溃测试
使用 lkdtm 内核模块进行内核崩溃测试原创 2022-10-22 10:28:31 · 995 阅读 · 2 评论 -
如何理解多次执行 flock 函数的场景?
运行 flock_shared_to_ex 程序时,由于有一个进程已经占有了共享锁,锁模式不能转换为互斥锁,flock_shared_to_ex 程序阻塞。暂停前台进程,杀掉 flock_ex_to_shared 程序后,锁被释放,flock_shared_to_ex 程序成功获取到锁。flock_ex_to_shared 程序成功获取到锁,此后按下 Ctrl + Z 暂停此程序,然后运行 flock_shared_to_ex 获取锁,此程序阻塞在获取互斥锁过程中。此过程与上文的猜想一致,猜想成立。原创 2022-10-16 10:00:00 · 786 阅读 · 0 评论 -
使用 pam module 与 seccomp 技术禁止用户加载内核模块
在从 manual 中学习 seccomp 技术这篇文章中,我谈及了使用 seccomp 让用户无法加载内核模块的功能,在本文中尝试写个简单的 demo 来验证下可行性。原创 2022-08-21 21:03:45 · 1333 阅读 · 0 评论 -
MMIO 与 PMIO 技术
MMIO 技术PMIO 是什么?PMIO 全称为 port-mapped I/O,它使用专门为执行 I/O 操作而设计的一类特殊 CPU 指令,如 x86 和 x86-64 架构中的 in 和 out 指令。I/O 设备有一个独立于通用内存的地址空间,可以通过 CPU 物理接口上的额外“I/O”引脚来实现。因为 I/O 的地址空间与主存的地址空间是隔离的,所以这有时被称为隔离 I/O。优点:I/O 端口地址不占用存储器空间;使用专门的 I/O指令对端口进行操作,I/O指令短,执行速度快。由于使用原创 2022-04-20 20:43:01 · 5059 阅读 · 0 评论 -
获取进程最后一次执行的 cpu 核的方法及原理
top 获取进程最后一次执行的 cpu 核的原理使用 top -p xx 跟踪某个程序,按 f,然后选择 Last used cpu,然后按 Esc 就能够看到多出来的一列内容就是最后一次运行的 cpu。原创 2022-03-06 16:04:23 · 716 阅读 · 0 评论 -
从 systemd-udevd 运行 log 中研究其自动加载内核模块的过程
环境信息linux 环境:debian10 系统systemd 版本:systemd 241运行环境:VMware 虚机环境systemd-udevd 命令 help 信息longyu@debian:~$ /lib/systemd/systemd-udevd --helpsystemd-udevd [OPTIONS...]Manages devices. -h --help Print this message -V --version原创 2021-11-02 22:20:26 · 3653 阅读 · 0 评论 -
max file descriptors [4096] for elasticsearch process is too low 问题定位
问题描述某产品反馈在我们的系统中以某 A 用户部署运行 elasticsearch,启动 elasticsearch 时 log 中有如下报错信息: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] in elasticsearch log报错信息表明 elasticsearch 程序的 max file descriptors 的限制为 4096,需原创 2021-10-30 13:17:17 · 25366 阅读 · 2 评论 -
一次从 EXSI 移植 vmfstools 失败的过程记录
vmkfstools 是干嘛的?vmkfstools 是用于管理 VMFS 卷、存储设备和虚拟磁盘的 ESXi Shell 命令之一。可以使用 vmkfstools 命令执行很多存储操作。例如,可以在物理分区上创建和管理 VMFS 数据存储,或操作 VMFS 或 NFS 数据存储中存储的虚拟磁盘文件。(摘自 vmware 官网)从 EXSI 系统移植 vmfstools 的尝试打包 vmfstools 程序及依赖库EXSI 系统缺少 ldd 命令,不能直接查询到依赖的动态库,可以通过设定 LD_TR原创 2021-10-17 17:18:28 · 1458 阅读 · 0 评论 -
scp 解除链接问题的两个解决方案
scp 解除链接问题scp 在传文件的时候会解除链接,当软链接指向的文件不存在时,scp 会报 no such file 的问题。阅读 scp 命令帮助信息,确认 scp 不支持设定关闭解除链接功能。新的问题引出如下问题:Is it possible to make SCP ignore symbolic links during copy?如下链接中有多个解决方案:Is it possible to make SCP ignore symbolic links during copy?第一原创 2021-08-30 12:55:49 · 1455 阅读 · 0 评论 -
ssh 加密算法相关信息含义解析与弱加密算法禁用方法
Ciphers指定 SSH-2 允许使用的加密算法。多个算法之间使用逗号分隔。可以使用的算法如下:“aes128-cbc”, “aes192-cbc”, “aes256-cbc”, “aes128-ctr”, “aes192-ctr”, “aes256-ctr”,“3des-cbc”, “arcfour128”, “arcfour256”, “arcfour”, “blowfish-cbc”, “cast128-cbc”默认值是可以使用上述所有算法。MACs指定允许在 SSH-2 中使用哪些消息原创 2021-08-23 20:17:44 · 13070 阅读 · 4 评论 -
LD_DEBUG 加 rpm -qf 帮你快速找到 undefined symbol 符号所在的动态库及 rpm 包
问题描述rsyslogd: symbol lookup error: rsyslogd: undefined symbol: fjson_global_do_case_sensitive_comparison解决方法[root@localhost ~]# LD_DEBUG='symbols' /usr/sbin/rsyslogd 2>&1 |grep fjson_global_do_case_sen 3434: symbol=fjson_global_do_cas原创 2021-08-22 07:16:14 · 707 阅读 · 0 评论 -
使用 virsh-console 连接到 virt-manager 中运行的 linux 虚拟机串口中
1. 执行 virsh list2. 执行 virsh console xxx3. echo “hello world” > /dev/ttySX4. 修改 grub.cfg,内核引导参数中添加 console=ttySX,1152005. 重启虚拟机原创 2021-08-18 07:39:00 · 3271 阅读 · 3 评论 -
杀掉数通引擎导致虚拟机重启问题定位
问题描述在虚拟机内重启数通引擎会导致虚机重启环境信息arm 虚拟机问题定位过程1. 调大 printk 级别后 kill 数通引擎查看串口输出串口输出中未见明显异常信息。2. 重命名负责绑定网卡接口到 igb_uio 的程序测试根据过去的经验,在 dpdk 数通引擎运行的时候如果去解绑业务口,也可能会导致系统重启。需要排除负责绑定网卡接口程序的影响。重命名并杀掉相关程序后,kill 引擎后虚机仍旧重启。3. 运行 l2fwd 程序并 kill 观察是否重启l2fwd 代表数通引擎的极简原创 2021-08-03 18:56:54 · 371 阅读 · 0 评论 -
attempt to perform an operation not allowed by the security policy `PS‘ @ error/convert.c
问题描述使用 convert 将 groff 生成的 postscript 格式的图像转化为 png 的时候报了如下错误信息:convert-im6.q16: attempt to perform an operation not allowed by the security policy `PS' @ error/constitute.c/IsCoderAuthorized/408.convert-im6.q16: no images defined `test.png' @ error/conv原创 2021-06-14 20:27:35 · 5858 阅读 · 4 评论 -
Program xxx tried to access /dev/mem between f0000->100000.
ffff原创 2021-06-14 20:16:58 · 645 阅读 · 0 评论 -
Open /sys/bus/pci/devices/0000:01:00.0/driver/unbind failed. err 13 (Permission denied)
[longyu@debian-10:07:29:41] dpdk $ su -c ‘echo test > /sys/bus/pci/drivers/virtio-pci/test’原创 2021-05-16 19:41:18 · 6035 阅读 · 0 评论 -
pciutils 功能及其实现分析
https://fossies.org/linux/misc/pciutils-3.7.0.tar.gz//* * The PCI Library -- Example of use (simplistic lister of PCI devices) * * Written by Martin Mares and put to public domain. You can do * with it anything you want, but I don't give you any warra原创 2021-05-09 18:33:31 · 7399 阅读 · 12 评论 -
lspci 常用命令及其实现原理简述
lspci 收集信息的常用命令lspci -tvlspci -xxxlspci -vvvlspci -tv[longyu@debian-10:08:24:24] tmp $ lspci -tv-[0000:00]-+-00.0 Intel Corporation Device 3e34 +-02.0 Intel Corporation UHD Graphics 620 (Whiskey Lake) +-04.0 Intel Corporatio原创 2021-05-07 08:59:54 · 7665 阅读 · 5 评论 -
__thread 定义的每线程数据使用及其内部原理分析
#include<pthread.h>#include <stdio.h>#include<unistd.h>__thread int var;int data;void* worker1(void* arg){ var = data; printf("var is %d\n", var); return NULL;}int main(void){ pthread_t pid1; var = 2; data = var; p原创 2021-04-18 22:46:14 · 1763 阅读 · 0 评论 -
uname 命令如何实现?
unam 命令示例代码#include <sys/utsname.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <errno.h>int main(int argc, char *argv[]){ struct utsname buf; if (uname(&buf) < 0) { perror("原创 2021-04-18 11:36:28 · 1088 阅读 · 0 评论 -
你真的了解 bash 的 exec 命令吗?
前言bash exec 命令不太常用,我对它提供的功能也仅知一二,没有掌握全貌。最近遇到了几个问题,从问题出发研究了一通找到 exec 命令头上,问题迎刃而解后,才对 exec 命令提供的功能有了进一步的认识。在本文中,我将从 bash manual 中 exec 命令的帮助信息出发,完整的描述 exec 命令提供的功能以及我过去几个月遇到的两个与 exec 命令相关的问题。exec 函数的 manual 信息 exec [-cl] [-a name] [command [argumen原创 2021-03-21 21:11:02 · 12069 阅读 · 0 评论 -
Failed to mmap 2 MB hugepages 与 max_map_count limit
问题描述设备内存信息# free -h total used free shared buff/cache availableMem: 15G 8.1G 7.0G 22M 512M 7.4GSwap: 0B 0B 0Bl2fwd 运行报错信息# ./l2fwd -m 64原创 2021-02-02 22:37:50 · 1534 阅读 · 0 评论 -
上手 seccomp
NAMEseccomp - operate on Secure Computing state of the processSYNOPSIS#include <linux/seccomp.h>#include <linux/filter.h>#include <linux/audit.h>#include <linux/signal.h>#include <sys/ptrace.h> int seccomp(unsigned i原创 2021-01-21 23:32:24 · 3008 阅读 · 0 评论 -
tar 打包黑洞文件的特别之处
文件中的 hole《APUE》中对文件 hole 的描述内容摘录如下:文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被读为 0。文件中的空洞并不要求在磁盘上占用存储区。具体处理方式与文件系统的实现有关,当定位到超出文件尾端之后写时,对于新写的数据需要分配磁盘块,但是对于源文件尾端和新开始写位置之间的部分则不需要分配磁盘块。创建一个带 hole 文件的 demo使用如下 demo 能够创建一个带原创 2021-01-19 21:51:09 · 502 阅读 · 0 评论 -
ebpf 研究之原始套接字数据包过滤
原始套接字数据包过滤ebpf 支持原始套接字过滤功能,本文参考 《Linux 内核观测技术 BPF》第 6 章的示例进行描述,并深挖隐藏在 epbf 程序背后的一些技术细节。ebpf 程序示例代码bfp_program 源码如下:#include <linux/bpf.h>#include <linux/if_ether.h>#include <linux/if_packet.h>#include <linux/in.h>#include &l原创 2021-01-09 18:22:27 · 2228 阅读 · 2 评论 -
vmware 中给 debian10 设定 ip 的问题记录
重新装了 vmware 后 debian 10 虚拟机无法自动分配 ip 地址。首先通过 vmware 的虚拟网络编辑器添加了一个 NAT 模式的网络,一开始没有主机虚拟网络适配器。创建之后在 debian 10 中执行 dhclient 命令能够通过 dhcps 分配到一个局域网 ip 地址,但是在虚拟机重启后又需要重新执行。/etc/network/interface 文件中相关的设置内容如下:allow-hotplug ens33iface ens33 inet dhcp这里可以看到 dhc原创 2020-12-06 12:29:19 · 1672 阅读 · 0 评论 -
如何挂载安装了 grub 引导的 img 文件中的分区
首先通过 fdisk 查看 img 文件中分区的位置,找到偏移量,fdisk 指定 img 文件的位置。操作记录如下:longyu@debian:~/initrd_product$ fdisk -l /home/longyu/boot.imgDisk /home/longyu/boot.img: 300 MiB, 314572800 bytes, 614400 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/phys原创 2020-12-06 12:23:34 · 847 阅读 · 0 评论 -
ramdisk_size 设定过小导致 initrd 无法使用进而系统挂死问题
ramdisk_size 是什么?从内核的 Documentation 目录中找到如下相关信息:Field name: ramdisk_sizeType: write (obligatory)Offset/size: 0x21c/4Protocol: 2.00+ Size of the initial ramdisk or ramfs. Leave at zero if there is no initial ramdisk/ramfs.这个 ramdisk_原创 2020-11-22 22:52:19 · 1323 阅读 · 0 评论 -
perf 程序追踪 USDT 用户态程序静态跟踪点
perf 中的 usdt在学习 ebpf 的 usdt 探针的时候遇到了问题,看了一些网上的链接,在 gregg 大神的博客中找到了 perf 中与 usdt 相关的内容,就研究了一下。perf 程序源码在内核源码树中的 ./tools/perf/ 目录中,进入到这个目录执行 make 进行编译即可。编译完成后我执行 make install 后直接执行发现会报 perf_5.0 找不到的错误,make install V=1 发现 perf 被安装到了我的家目录下的 bin 目录中,先配置下环境变量原创 2020-11-22 11:52:57 · 2882 阅读 · 0 评论 -
bpf 跟踪功能——上手 USDT
bpf 跟踪bpf 提供了非常强大的工具能够让我们在程序运行的时候收集需要的数据,它几乎可以访问 Linux 内核和应用程序的任何信息,同时对系统性能和延迟造成的开销最小,它能够实现类似 dtrace、SystemTap 的动态探针功能,不需要修改程序就能够收集数据。本文中的 BPF 程序都是通过 BCC 来编写的。探针跟踪探针是探索程序,旨在传递程序执行时环境的相关信息。内核探针内核探针几乎可以在任何内核指令上设置动态标志或中断,并且系统损耗最小。当内核执行到这些标志时,附加到探针的代码原创 2020-11-22 11:10:10 · 4392 阅读 · 6 评论 -
运行第一个 bpf 程序
上手 ebpf一直想学习一下 ebpf 这个东东,最近买了本《Linux 内核观测技术 BPF》,准备系统的研究一下。原以为有了书之后学起来就相当轻松了,可以我发现书上的第一个例子就编译不过。书上只给了部分的源码,还需要去下载配套的 github 项目,这也没啥关系,不过下载后编译也是编译不过。编译不过的报错也不过是 types.h 头文件找不到,解决了头文件找不到的问题后发现又有新的问题。网上搜索了下发现基本上都是在介绍 ebpf xxx,没有看到一篇讲如何上手 ebpf,只能自己搞搞原创 2020-11-21 16:16:00 · 8107 阅读 · 15 评论 -
为啥 bash 没有按照我想象的样子执行脚本呢?
[longyu@debian-10:00:28:16] ~ $ grep ‘mount’ ./umount.stracestat("/usr/local/sbin/umount", 0x7ffe750f8960) = -1 ENOENT (没有那个文件或目录)stat("/usr/local/bin/umount", 0x7ffe750f8960) = -1 ENOENT (没有那个文件或目录)stat("/usr/sbin/umount", 0x7ffe750f8960) = -1 ENOENT (原创 2020-11-15 16:57:52 · 706 阅读 · 0 评论 -
动态链接 lazy binding 的原理与 GOT 表的保留表项
前言我最近对动态库的实现非常好奇,自己琢磨了半天没有看出什么名堂,就想着能不能找到一本讲相关内容的书籍,网上搜索了下发现确实有这样的一本书,书名为《Linux 二进制分析》。动态库的工作原理从这本书中能够找到解答,在本文中,我将使用下面这个 hello程序来验证。#include <stdio.h>int main(int argc, char* argv[]){ printf("hello world\n"); return 0;}第一个问题:printf 函数调用原创 2020-11-11 23:06:49 · 1563 阅读 · 1 评论 -
QXcbConnection: Could not connect to display :0
No protocol specifiedqt.qpa.screen: QXcbConnection: Could not connect to display :0Could not connect to any X display.xclient 连接到 xserver 的过程中要进行认证,认证使用 ~/.Xauthority 文件来完成,这个文件是由 xauth 命令进行管理的。在终端中 strace 能够发现 cannot find ~/.Xauthority 这个打印,复制到 chroot原创 2020-11-08 18:56:44 · 4617 阅读 · 0 评论 -
上手 buildroot
/usr/bin/make -j1 O=/home/longyu/Downloads/buildroot-2020.02.7/output HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" syncconfigmake[1]: 进入目录“/home/longyu/Downloads/buildroot-2020.02.7”mkdir -p /home/longyu/Downloads/buildroot-2020.02.7/output/build/buildro原创 2020-11-08 18:37:24 · 1246 阅读 · 0 评论
分享