linux command
文章平均质量分 79
longyu_wlz
在写作、音乐、linux 海滩旁捡拾贝壳的小男孩
展开
-
/run/systemd/netif/links 目录大小持续增加导致 /run 目录满问题分析
上述代码在当前 namespace 的 net 结构中获取 ifindex 的现值,然后对其进行递增操作,当溢出时,从 1 开始分配,分配完成一个后再检索有没有接口占用此 index,有人占用则继续循环,无人占用则修改 net 结构中的 ifindex 并返回 ifindex。业务程序内部出现了某种异常,每分钟会创建删除一次特定名称的网络接口,运行一段时间后 /run 空间占满,观测到 /run/systemd/netif/links 目录下有巨量文件产生,且每一个都占用内存。例如,以太网接口(如。原创 2024-07-18 08:00:00 · 977 阅读 · 0 评论 -
获取进程最后一次执行的 cpu 核的方法及原理
top 获取进程最后一次执行的 cpu 核的原理使用 top -p xx 跟踪某个程序,按 f,然后选择 Last used cpu,然后按 Esc 就能够看到多出来的一列内容就是最后一次运行的 cpu。原创 2022-03-06 16:04:23 · 558 阅读 · 0 评论 -
linux 内核模块中引用符号是如何链接的?
Relocation section '.rela.init.text' at offset 0x2cb38 contains 5 entries: Offset Info Type Sym. Value Sym. Name + Addend000000000001 002800000004 R_X86_64_PLT32 0000000000000000 __fentry__ - 4000000000009 000d00000原创 2021-11-13 20:26:24 · 1895 阅读 · 1 评论 -
udevd 检索内核模块并加载的 demo
udevd 自动加载内核模块在 从 systemd-udevd 运行 log 中研究其自动加载内核模块的过程 这篇文章中,我描述了 systemd-udevd 自动加载内核模块的一些原理。自动加载内核模块可以分为如下两方面内容: 加载内核模块 自动加载内核模块自动加载内核模块涉及 udevd 跟内核之间的通信,及 udevd 自身规则的解析执行,在后续的文章中进行分析。udevd 加载内核模块的功能使用 libkmod 库完成,本文通过一个简单的 demo 来模拟这一过程原创 2021-11-12 12:56:22 · 841 阅读 · 0 评论 -
setpci 命令与内核 pci_enable_device 与 pci_disable_device 函数
root@virt-debian10:/home/longyu# setpci -s 04:00.0 04.W0000root@virt-debian10:/home/longyu# setpci -s 04:00.0 04.W=FFroot@virt-debian10:/home/longyu# setpci -s 04:00.0 04.W0007root@virt-debian10:/home/longyu# lspci -nvv -s 04:00.004:00.0 0200: 8086:1原创 2021-10-28 12:36:40 · 4698 阅读 · 0 评论 -
一次从 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 · 1111 阅读 · 0 评论 -
ethtool -s 配置网卡速率双工的流程与 netdevice 的 user_ns 结构
strace 跟踪 ethtool -s 执行过程socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 3ioctl(3, SIOCETHTOOL, 0x7ffdb4348f80) = -1 EOPNOTSUPP (Operation not supported)ioctl(3, SIOCETHTOOL, 0x7ffdb4348f80) = 0ioctl(3, SIOCETHTOOL, 0x7ffdb4348f80) = 0原创 2021-07-22 23:07:25 · 1303 阅读 · 2 评论 -
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 · 5965 阅读 · 12 评论 -
从系统调用角度分析 ethregs dump 寄存器原理
1. 首先遍历 /sys/bus/pci/devices 子目录,扫描每个 pci 信息,获取 vendor id、device id、config、resource 中的相关信息。示例信息如下: Develop>cat /sys/bus/pci/devices/0000\:86\:00.1/vendor0x8086 Develop>cat /sys/bus/pci/devices/0000\:86\:00.1/device0x1583 Develop>cat /sys/bu原创 2021-05-07 22:45:33 · 642 阅读 · 3 评论 -
iptables 与 ip6tables 命令依赖的内核模块
--show-depends List the dependencies of a module (or alias), including the module itself. This produces a (possibly empty) set of module filenames, one per line, each starting with "insmod" and is typically used by distribution...原创 2020-12-14 23:12:40 · 3464 阅读 · 0 评论 -
bash 中捕获每一个输入字符如何实现?
#include <stdio.h>#include <fcntl.h>#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <termios.h>#include <setjmp.h>#include <signal.h>#include <s原创 2020-11-29 20:03:05 · 592 阅读 · 0 评论 -
在 debian10 上编译 grub-legacy
尝试编译 grub-legacy在 扩容使用了 grub-legacy 引导下的 boot 分区 这篇文章中,我描述了在 grub-legacy 引导中扩展 /boot 分区的过程,有这个基础,我想尝试下编译一个对应版本的 grub 程序来调试调试,在本文中记录一下。获取 grub-legacy 的源码我们系统使用的 grub 版本是 0.97,对应现在发行版中的程序是 grub-legacy,可以执行如下命令获取其源码:sudo apt-get source grub-legacy遇到的问题及原创 2020-11-29 12:48:45 · 537 阅读 · 0 评论 -
扩容使用了 grub-legacy 引导下的 boot 分区
问题描述最近在搞一个项目,需要使用其它厂商提供的内核与 initrd 文件,在操作过程中发现,厂商提供的内核与 initrd 文件的大小超过了 /boot 分区的大小,在生产的时候拷贝文件会失败,而我们的生产镜像中只有一个 /boot 分区,需要扩容 /boot 分区。对问题的分析以前安装发行版的时候有注意到如下流程:配置分区(包含 /boot)安装软件包update-grubgrub-install(会弹出对话框,让用户选择将引导安装到哪个介质中)上面的步骤中,配置 /boot 在安装原创 2020-11-29 12:34:23 · 496 阅读 · 0 评论 -
strace 跟踪多线程程序不能打印系统调用的问题
问题描述在分析 netlink: 8 bytes leftover after parsing attributes in process server这个内核异常打印日志的时候,最先想到可以通过 strace 来跟踪进程,看看是在执行哪个系统调用的时候打印的告警,理论上能够行的通。实际测试发现,strace -p 跟踪到 server 程序后,没有追踪到新的系统调用,等了几分钟也没有任何的打印。使用 strace 跟踪其它进程是正常的,说明 strace 命令本身可能没有问题,问题可能出在我们的 se原创 2020-11-28 23:26:34 · 1619 阅读 · 0 评论 -
blockdev getsize64 的实现
最近在整 initrd 的时候,发现 initrd 中缺少 blockdev 命令,我们的 initrd 中需要用这个命令来获取磁盘的大小,fdisk 命令倒是有,但是不支持 fdisk -s。既然这样我就直接把 blockdev 中 getsize64 的代码抠出来,单独编写个程序来搞。同时为了不添加其它的动态库,使用静态链接来编译程序。源码如下:#include <stdio.h>#include <unistd.h>#include <stdlib.h>原创 2020-11-22 23:27:49 · 1069 阅读 · 0 评论 -
为啥 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 · 566 阅读 · 0 评论 -
使用 mtrace 追踪内存泄露问题
-g 没有打印-O0 -g 没有打印修改文件名后也没有打印查看 /tmp/t 发现加了-g、没有加 -g 输出相同网上搜索发现有相关的描述,不过人家就能够显示源代码行号strace 跟踪直接查看 mtrace 源码,在 perl 脚本中找到了如下描述:38 # We expect two arguments:39 # #1: the complete path to the binary40 # #2: the mtrace data filename41 # The usu.原创 2020-11-01 22:08:27 · 3202 阅读 · 3 评论 -
shell umask 内建命令的原理及其背后的内核态行为
umask(022) = 022umask(022) = 022write(1, "0022\n", 5) = 5int current_umask(void){ return current->fs->umask;}EXPORT_SYMBOL(current_umask);cscope 查看调用此函数的过程,在 namei.原创 2020-10-29 08:12:51 · 620 阅读 · 0 评论 -
chroot 命令帮助信息与几个相关问题
chroot . /root/OSMSAgent_1/OSMSAgentinfo coreutils ‘chroot invocation’23.1 `chroot’: Run a command with a different root directory`chroot’ runs a command with a specified root directory. On manysystems, only the super-user can do this.(1) Synopses: c原创 2020-10-24 13:44:41 · 447 阅读 · 0 评论 -
linux 命令分析之 chroot 的原理
chroot 的功能chroot 可以用来切换当前进程的【根目录】,它能够将当前进程能够访问的目录树结构限制在某个子目录中,同时由于当前进程创建的子进程将会继承父进程的根目录结构,所以子进程也随之被限定。chroot 命令的原理通过 strace 来跟踪一次 chroot 命令执行过程来研究其代码执行过程。这里我删除了与这个问题没有太大关系的一些输出,重要的系统调用信息如下:[root@localhost new_test]# strace chroot . shexecve("/usr/sbi原创 2020-10-24 07:37:22 · 3132 阅读 · 0 评论 -
ELF file OS ABI invalid 问题与 chroot 解决方案
libc.so 的 elf 头部中,Magic 与大多数 so 文件、可执行文件不同。/usr/include/elf.h 138 #define EI_OSABI 7 /* OS ABI identification */ 139 #define ELFOSABI_NONE 0 /* UNIX System V ABI */ 140 #define ELFOSABI_SYSV 0 /* Alias. */ 141 #define ELFOSAB原创 2020-10-16 08:40:56 · 4470 阅读 · 1 评论 -
ethtool 修改网卡 eeprom 内容
ethtool -E 修改 eeprom 内容原创 2020-09-24 21:47:52 · 4333 阅读 · 0 评论 -
gcc constructor 函数属性
constructor destructor constructor (priority)destructor (priority)The constructor attribute causes the function to be called automatically be-fore execution enters main ().Similarly, the destructor attribute causes thefunction to be called automatically原创 2020-09-18 12:48:45 · 401 阅读 · 0 评论 -
Makefile 中的 @true 与 @false 命令
@ 符号告诉 make 不要将这个命令输出到 stdout 中。false 与 @false 功能相同,只是 false 将会输出命令执行信息到 stdout 中。make 在编译过程中,会逐行调用 Makefile 中的脚本,如果某行返回了一个非 0 值(false),make 将会停止编译。在这种情况下 make 命令会认为编译目标文件失败,并且所有依赖这个目标文件的项目也将会失败,因此 make 命令将会失败,会返回一个非零的状态值。查看如下 Makefile:foo: @echo t原创 2020-09-01 05:20:14 · 1670 阅读 · 0 评论 -
系统崩溃重启后 utmp 日志的回收过程
正常的情况下,当用户登出系统后,utmp 文件中的项目会更新,更新状态与登出时间。当系统崩溃时显然正常的登出过程不会执行,那么 utmp 文件中的相应项目不会被更新。对于这种情况如果不进行修复,那么下一次重新进入系统后上一次的记录会残留。查看 manual 发现在系统启动的时候 init 进程是第一个访问 utmp 文件的程序,init 会修改 utmp 中所有 ut_type 未设定为DEAD_PROCESS 或 RUN_LVL 并且 ut_pid 指向的 pid 进程不存在的记录,将 ut_type原创 2020-08-29 15:36:40 · 287 阅读 · 0 评论 -
借通配符展开问题描述 shell 的整个执行流程
nf server dpdk 拷贝世超写的脚本#!/bin/bashset -xif [ “$#” -lt “1” ]thenecho “you must specified file name”exit -1fiNEW_DIR=${1/.tar.gz/}echo $NEW_DIRmkdir $NEW_DIRtar -xvf $1 -C $NEW_DIRpwdcp -rf “NEWDIR/dpdkinclude/include/∗"dpdk/includecp−rf"{NEW_D原创 2020-08-29 15:16:07 · 413 阅读 · 0 评论 -
在文件中添加行号的不同方法
在文件中添加行号的不同方法你可以直接使用IDE提供的显示行号的功能来完成这一任务,当然你也可以使用其它方式完成此项任务。情景如下:工作中需要给以下代码添加行号:#include <stdio.h>int main(int argc, char *argv[]){ printf("hello world!\n"); return 0;}首先将...原创 2018-11-24 18:10:13 · 923 阅读 · 0 评论 -
sed 与 awk 处理重复行
sed与awk处理连续重复行之前在使用sed修改文件的时候,在指定-i参数的时候忘记了删除调试时制定的p命令,造成了连续重复行的出,便又想着怎样去删除这个重复行,再执行一个sed命令就可以了,不过这里用到了sed的高级功能,使用n命令。data文件的内容为:aabbcc现在我需要将aa替换为test,我执行了如下命令: sed -n 's/aa/test/p' data我使用-n...原创 2018-11-18 23:06:53 · 1519 阅读 · 0 评论 -
更优雅的 kill 进程
更优雅的 kill 进程使用 unix 的时候常常需要 kill 一个进程,而我们又常常记不住进程的 pid,所有一般首先使用 ps 命令来打印系统中的进程,然后对 ps 得到的数据以进程名进行过滤,提取出相对应的 pid,以该 pid 为参数调用 kill 就完成了整个的任务。一个基础的示例如下:查找进程[longyu@debian:18:12:14] ~ $ ps -ef | g...原创 2018-10-15 12:45:49 · 1494 阅读 · 0 评论 -
以 cat 为例讲述更高效的命令行使用方式
以cat为例讲述更高效的命令行使用方式cat 是 unix 中的一个基础命令,你可以在很多基础命令学习书籍的例子中看到它。cat 属于查看文件内容的命令,与它功能相似的一个命令是 tac,只是这个命令从后向前输出文件内容。一般情况下,我们经常需要查询文件中的特定内容,这时我们可以先通过 cat 来读取文件,并将文件内容通过匿名管道发送到子进程中进行处理。这是一个常见的解决方案,但这个方案并不高...原创 2018-10-14 17:57:26 · 345 阅读 · 0 评论 -
shell 路径扩展对 find -name 造成的影响
shell 路径扩展对 find -name 造成的影响最近很多次在使用 find -name 时都会遇到一个问题。下面就是这类问题的示例:[longyu@debian:21:20:27] ~ $ ls *.logproblem.log system-error.log[longyu@debian:21:20:31] ~ $ ls "*.log"ls: cannot access *....原创 2018-10-04 10:21:56 · 435 阅读 · 0 评论 -
使用 bash 内建功能完成变量值替换
使用bash内建功能完成变量值替换某天,我需要编写一个 shell script 脚本来批量删除文件名中的特殊字符。一般的思路是首先遍历目录,依次获取到每一个待处理文件名,然后替换当前文件名变量值,最后再使用 mv 命令就可以了。核心的命令行如下 (这里以移除‘-’为例):NEWNAME=$(echo $FILENAME | sed 's/-//g')mv $FILENAME $NEWNA...原创 2018-11-29 23:39:13 · 392 阅读 · 0 评论 -
windows 中 git-bash 中使用 find 的正则表达式选项
windows 中 git-bash 中使用 find 的正则表达式选项find 中能够指定 -regex 使用的正则表达式的类型,不指定类型时使用默认的 emacs 正则表达式语法。你可以通过指定 -regextype 来显示指定使用的正则表达式类型。有如下选择:[emacs|posix-awk|posix-basic|posix-egrep|posix-extended]使用 ema...原创 2018-12-15 15:37:25 · 1285 阅读 · 0 评论 -
删除文件名含有特殊字符的文件
删除文件名含有特殊字符的文件当你要删除含有特殊字符的文件名时,有以下几种情况:使用转义字符、引号rm -rf \~rm -rf '~'rm -rf "~"上述命令删除文件名为 ~ 的文件。如果直接删除,那么根目录中的所有文件都会丢失。这种方式能够适用于大多数情况,如果你不确定的话建议使用 -i ,以免造成严重的后果。注意上述命令成功达成任务的关键在于阻止 shell 进行路...原创 2018-12-16 11:31:32 · 3224 阅读 · 0 评论 -
使用命令行连接 wifi
使用命令行连接 wifi以前尝试过通过命令行连接 wifi,最后没有成功,已经是几年前的印象。继续尝试,我发现 iwconfig 不支持秘钥,只能用于连接开放的热点。下面是我在使用命令行连接 wifi 的时候遇到的问题及解决方法。RF-kill 控制无效报错如下:SIOCSIFFLAGS: Operation not possible due to RF-kill更详细的...原创 2018-12-17 20:30:51 · 2960 阅读 · 0 评论 -
bad interpreter
bad interpreter今天在 linux 上执行一个脚本时产生了如下错误:[longyu@debian:17:08:10] ui $ ./rename.sh bash: ./rename.sh: /bin/bash^M: bad interpreter: No such file or directory看到这个错误我竟然一时间想不到问题在哪,傻傻的再次确认了下 bash 确实在...原创 2018-12-19 04:42:29 · 2895 阅读 · 0 评论 -
以 git + awk 实现批量化操作为例,探讨命令行的处理过程
以 git + awk 实现批量化操作为例,探讨命令行的处理过程使用 git 操作项目文件时,常常需要对多个文件进行相同的操作。一些图形化程序中提供了多文件操作的支持,不过功能相对简单。也许大部分人并不需要太复杂的功能,但如果有这种功能,许多重复的工作便可以消除,效率也能得到提高。在这里我们把 git 作为一个简单的命令,此命令有许多选项,每一个选项可能需要一些参数。我们可以想象,在大多数时...原创 2019-06-16 11:42:12 · 1165 阅读 · 0 评论 -
git 中子模块的使用
1. 为什么要使用子模块2.如何添加子模块3.如何删除子模块4.如何克隆一个带有子模块的项目原创 2019-06-23 10:09:55 · 883 阅读 · 0 评论 -
git 合并多条 commit
git 合并多条 commit在使用 git 管理源码时,常常完成一个小的功能就提交一次,这样做的话,如果出现问题就能够通过回退来恢复现场。这样的方式是针对本地仓库的,当需要推送到远程仓库时,往往需要将多次 commit 合并为一次。这时可以采用下面这种方式:回退到前一次完整的提交,执行如下命令:git reset --soft a15e00438751f428d51f83e3b36...原创 2019-08-03 07:04:09 · 287 阅读 · 0 评论 -
在英文版 Debian 中添加中文拼音(双拼)输入法
在英文版Debian中添加中文拼音(双拼)输入法Although for most time english is enough, we have to input some chinese when browse some chinese sites.This post will show how to add chinese input method in Debian(english vers翻译 2017-02-24 06:45:35 · 5509 阅读 · 0 评论