linux
sunshine008
这个作者很懒,什么都没留下…
展开
-
记一次ubuntu20磁盘扩容
前置:确认磁盘是MBR分区还是GPT分区,本文仅使用与MBR分区。fdisk -lu /dev/vdb中type或者system字段为linux即为MBR分区,GPT则为GPT分区;1、修改分区表1.1、记录旧分区的起始和结束位置:Device Boot Start End Blocks Id System/dev/vdb1 2048 41943039 20970496 83 Linux查看挂载信息:lsblk | grep “/dev/vdb1”或者mount |grep “dev/v原创 2021-11-02 17:43:53 · 911 阅读 · 0 评论 -
常用一句话shell命令行
1、一句话while循环while :; do echo `data`;sleep 0.5;done2、输出毫秒级时间date +%Y-%m-%d ' '%H:%M:%S.%N | cut -b 1-233、awk命令解析shell输出awk '{print $1,$2}'4、排除特定目录或文件ls | grep -v "filea \| fileb"5、shell字符串分割cat xxx | awk -F "-" '{print $2}'6、xargs传参把前序原创 2021-07-09 10:34:54 · 722 阅读 · 0 评论 -
H323场景电话场景验证
验证拓扑pc1(1001) GNUGK服务器(10.10.11.12)ip:10.20.11.200/24 --------------------| ||----eth2(10.20.11.1)-----| | eth5(10.10.11.1) pc原创 2021-04-21 09:35:33 · 1012 阅读 · 0 评论 -
win&linux端口转发使用
应用场景: pc1<---------------->pc2211.20.3.1 172.36.56.2pc1可以与外网互通,pc2在内网,与外网不通,但pc1和pc2可以互通;需求:通过pc1访问pc2pc1为windows1、管理员权限打开cmd;2、添加端口转发;netsh interface portproxy add v4tov4 listenport=10022 connectaddress=172.36.56.2 connectport=22原创 2021-03-30 10:48:56 · 303 阅读 · 0 评论 -
sed、awk、tr命令使用
sed命令:1、模糊匹配文件某行并替换内容sed -i '/s/test1.*/要替换的内容/g' file.txtawk命令:1、以:为分隔符输出第三列cat abc:test:hello | awk -F ":" '{print $3}'原创 2021-03-16 19:23:39 · 527 阅读 · 0 评论 -
性能调试工具perf使用
定位进程运行的cpu:ps -o pid,psr,comm -p `pidof testd`查看cpu1热点:perf top -C 1查看当前cpu的系统调用:perf trace -C 1 --syscalls --call-graph dwarf查看cache-misses:原创 2021-03-12 09:23:34 · 428 阅读 · 0 评论 -
linux下cpu、内存、硬盘、网卡故障注入
1、下载使用软件下载路径:https://github.com/chaosblade-io/chaosblade/releases/download/v0.9.0/chaosblade-0.9.0-linux-amd64.tar.gz无需编译安装,解压即可使用。1、cpu压力注入帮助信息查看:./blade create cpu --help创建任务:./blade create cpu fullload --cpu-list 0,1,2 --cpu-percent 90{"code":2转载 2021-03-01 20:51:26 · 2397 阅读 · 0 评论 -
进程出core相关
可以导致出core的信号不产生core文件的条件:在下列条件下不产生core文件:( a )进程是设置-用户-ID,而且当前用户并非程序文件的所有者;( b )进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;a,b可以通过设置/proc/sys/kernel/suid_dumpable来改变,这样suid的也可以产生core文件( c )用户没有写当前工作目录的许可权;( d )文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。利用GD原创 2021-02-06 11:00:39 · 662 阅读 · 0 评论 -
SIGKILL与SIGTERM的区别
SIGTERM SIGKILL的区别前者可以被阻塞、处理和忽略,但是后者不可以。KILL命令的默认不带参数发送的信号就是SIGTERM.让程序有好的退出。因为它可以被阻塞,所以有的进程不能被结束时,用kill发送后者信号,即可。即:kill -9 进程号。BLOCKED如果进程设置了SIGTERM可以被block,则进程处于block状态时无法被SIGTERM信号杀死。 sigset_t blockSet, savedSigMask; sigemptyset(&blockSe原创 2021-01-16 19:01:24 · 2648 阅读 · 0 评论 -
fork之子进程随父进程死亡prctl
利用prctl的PR_SET_PDEATHSIG属性设置父进程死亡时,发送给子进程的信号。int pid;pid = fork()if (pid == 0) {//子进程//设置父进程死亡时自动给子进程发的信号prctl(PR_SET_PDEATHSIG, SIGKILL)....} else {//父进程}相关属性如下:PR_SET_PDEATHSIG (since Linux 2.1.57) Set the parent death sign原创 2021-01-16 18:49:52 · 1921 阅读 · 0 评论 -
杀死进程组内所有进程
进程组概念 在 linux 中,进程不但有自己的 id 号,还会有一个组 id 号。我们把拥有相同组 id 号的进程的集合称为一个进程组。发送信号给进程和进程组使用 kill -n -pgid 可以将信号 n 发送到进程组 pgid 中的所有进程。例如命令 kill -9 -4115 表示杀死进程组 4115 中的所有进程使用kill -n pid 可以将信号n发送到指定pid进程。进程组的生命周期从进程组被创建开始,到组内所有进程终止或者离开。进程组组长进程组组长是进程组中原创 2021-01-15 20:07:07 · 1422 阅读 · 0 评论 -
替换glibc中malloc、free的几种方法
方案1 使用环境变量LD_PRELOAD方案2 malloc调试变量方案3 编译自己的libmalloc.a方案4 链接过程控制参考链接:https://blog.csdn.net/littlefang/article/details/6052563https://blog.csdn.net/littlefang/article/details/50381587?depth_1-...原创 2020-11-30 09:29:25 · 605 阅读 · 0 评论 -
代码解耦tips
1、添加type字段,使用RESERVE=0保留原有接口,新的接口type字段重新复制;原创 2020-11-21 14:47:42 · 152 阅读 · 0 评论 -
exec系列函数(execl,execlp,execle,execv,execvp)使用
一、exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。例如:在shell命令行执行ps命令,实际上是shell进程调用fork复制一个新的子进程,在利用exec系统调用将新产生的子进程完全替换成ps进程。二、exec系列函数(execl、execlp、execle、e转载 2020-11-21 11:33:36 · 1797 阅读 · 0 评论 -
线程变量__thread使用
#define MAX_CALLBACK_TYPE 100static struct { char stu_type; int flags; void *callback;} msg_callback[MAX_CALLBACK_TYPE] ;如上结构体初始化:#define MAX_CALLBACK_TYPE 100static struct { char stu_type; int flags; void *callback;} msg_callback[MAX_CALLBACK原创 2020-11-16 20:02:43 · 511 阅读 · 0 评论 -
kill信号0使用
kill -0 pid 不发送任何信号,但是系统会进行错误检查。所以经常用来检查一个进程是否存在,存在返回0;不存在返回1;If signal is 0, then no actual signal is sent, but error checking is still performed.原创 2020-11-02 20:35:06 · 1152 阅读 · 0 评论 -
shell编程基础
1、文件测试运算符“-e file”:检测文件是否存在(包含了:目录和文件),如果是,返回truefile="hello.sh"if [ -e $file ]thenecho "文件存在"elseecho "文件不存在"fi“-s file”:检测文件是否为空(文件有内容),如果是,那么返回truefile="hello.sh"if [ -s $file ]thenecho "文件有内容"elseecho "文件没有内容"fi"-f file"检测一个文件是否是普通文件原创 2020-10-28 14:17:37 · 281 阅读 · 0 评论 -
linux服务service的使用(包含看门狗)
1、添加服务:/usr/lib/systemd/system/下添加xxx.service,内容如下:[Unit]:服务的说明Description:描述服务After:描述服务类别 [Service]服务运行参数的设置Type=forking 是后台运行的形式ExecStart 为服务的具体运行命令ExecReload 为服务的重启命令ExecStop 为服务的停止命令Restart 为服务的重启命令PrivateT原创 2020-10-26 19:40:05 · 1578 阅读 · 0 评论 -
openwrt安装软件提示[Errno 28] No space left on device
openwrt路由器安装软件时提示:ERROR: Could not install packages due to an EnvironmentError: [No space left on device使用如下命令指定TMPDIR即可:TMPDIR=/mnt/sdc1 pip install lxmlTMPDIR=/mnt/sdc1为一个比较大的存储空间可添加额外的参数,如:TMPDIR=/folder/address/here/ pip install --upgrade --ca原创 2020-08-23 21:22:05 · 2996 阅读 · 0 评论 -
centos8环境pidof获取准确进程pid
基本思路:获取进程所有pid,然后根据当前pid对应的进程文件系统中status文件获取到进程名,与当前进程名完全匹配的即为当前进程的pid。app_name="test"real_pid=-1for pid in `pidof $app_name`; do process_name = `cat /proc/${pid}/status/|grep "Name"|awk '{print $2}'` if [ $process_name == $app_name ]; then real_pi原创 2020-08-18 10:19:43 · 964 阅读 · 0 评论 -
emac使用
打开文件: emacs test.c搜索字符串:ctrl-s(向下搜索,ctrl-r向上搜索) 输入要搜索的字符串即可撤销输入:删除:ctrl-backspce保存文件:ctrl-x ctrl-s关闭文件:ctrl-x ctrl-c原创 2020-07-22 14:42:20 · 493 阅读 · 0 评论 -
LINUX_VERSION_CODE与KERNEL_VERSION
由于Linux版本的在不断更新,当设备驱动去兼容不同版本的内核时,需要知道当前使用的内核源码版本,以此来调用对应版本的内核API,这两个宏定义在文件/usr/include/linux/version.h#define LINUX_VERSION_CODE 263213#define KERNEL_VERSION(a,b,c) (((a)<<16)+((b)<<8)+(c))安装完linux-header之后,在下面这个目录找到了version.h这个文件/usr/li转载 2020-07-06 20:08:23 · 4064 阅读 · 0 评论 -
TCMalloc:线程缓存的Malloc
动机TCMalloc要比glibc 2.3的malloc(可以从一个叫作ptmalloc2的独立库获得)和其他我测试过的malloc都快。ptmalloc在一台2.8GHz的P4机器上(对于小对象)执行一次malloc及free大约需要300纳秒。而TCMalloc的版本同样的操作大约只需要50纳秒。malloc版本的速度是至关重要的,因为如果malloc不够快,应用程序的作者就很有可能在malloc之上写一个自己的自由列表。这就可能导致额外的代码复杂度,以及更多的内存占用――除非作者本身非常仔细地划分自翻译 2020-06-23 15:01:49 · 402 阅读 · 0 评论 -
Linux内存布局
我们先来看下Linux内存布局,此图比我之前写的那篇文章写的布局更详细在linux中,每一个进程都被抽象为task_struct结构体,称为进程描述符,存储着进程各方面的信息;例如打开的文件,信号以及内存等等;然后task_struct的一个属性mm_struct管理着进程的所有虚拟内存,称为内存描述符。在mm_struct结构体中,存储着进程各个内存段的开始以及结尾,如上图所示;这个进程使用的物理内存,即常驻内存RSS页数,这个内存使用的虚拟地址空间VSZ页数,还有这个进程虚拟内存区域集合和页表。转载 2020-06-05 20:20:11 · 300 阅读 · 0 评论 -
ssh(或sftp)连接慢问题解决
问题1:ssh连接很慢解决方案:这是应为linux系统默认开启DNS认证,我们关掉即可。 vim /etc/ssh/ssh_config UseDNS yes 改为no(122行左右); GSSAPIAuthentication yes改为no(81行左右)然后重启sshd服务service restart sshd;问题2:ssh连接突然就卡断了解决方案:这个是 linux 的安全问题,如果 60s 内没用任何数据,将会自动断开。 vim /etc/ssh/ssh_con转载 2020-06-02 15:11:15 · 7282 阅读 · 1 评论 -
链路带宽测试工具iperf使用
下载安装iperfhttps://iperf.fr/iperf-download.php下载安装对应版本,不区分服务端和客户端;运行udp模式测试:(tcp模式去掉-u参数即可)服务端执行:iperf -p 8000 -s -i -u监听8000端口,以服务端模式运行;客户端运行:iperf -u -c 192.168.1.1 -p 8000 -i 1 -d -b 100M使用8000端口以udp方式连接服务端192.168.1.1,指定带宽100M,测试上下行带宽并按照1s间隔输出测试原创 2020-06-02 10:10:18 · 1652 阅读 · 0 评论 -
网络常用python函数
字符串mac地址转换:def str2mac(s): return ("%02x:" * 6)[:-1] % tuple(orb(x) for x in s)mac地址转字符串:def mac2str(mac): return b"".join(chb(int(x, 16)) for x in plain_str(mac).split(':'))参考链接:https://github.com/secdev/scapy/blob/2e87889089e5593988911309原创 2020-05-20 10:22:22 · 267 阅读 · 0 评论 -
tcmalloc编译使用
一、编译https://github.com/gperftools/gperftools/releases如上链接页面下载需要版本的代码;cd /home/code/;tar -zxvf gperftools-2.7.90.tar.gz;cd gperftools-2.7.90;../configure --prefix=/usr/local/lib --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --d原创 2020-05-15 18:46:49 · 3483 阅读 · 1 评论 -
gdb报错(A program is being debugged already)
用 gdb attach pid 的方式将gdb挂到一个正在运行的进程上,有时会提示A program is being debugged already. Kill it? (y or n)可能是由于正在执行的进程对应的binary被替换了造成的。如果被替换过的binary和先前的差别不大,并且要调试的部分没有变化,可以用下面的方式做gdb attach:gdb 或者可以将先前被替换...原创 2020-05-06 17:22:02 · 1256 阅读 · 0 评论 -
linux malloc内存申请相关参数设置
情况一、malloc小于128k的内存malloc小于128k的内存时使用brk分配内存,将_edata往高地址推(只分配虚拟空间,不对应物理内存(因此没有初始化),第一次读/写数据时,引起内核缺页中断,内核才分配对应的物理内存,然后虚拟地址空间建立映射关系),如下图:1、进程启动的时候,其(虚拟)内存空间的初始布局如图1所示。其中,mmap内存映射文件是在堆和栈的中间(例如libc-2.2...翻译 2020-04-23 21:58:35 · 3674 阅读 · 0 评论 -
gdb编程打印全局变量
以某个全局数组为例说明如何gdb编程打印所有变量:写变量遍历代码创建search.gdb文件写如下内容:define print_hash_table set $cnt =1 set $use=2 while $cnt set $hash_entry=(g_hash_entry_t *)(hash_table.table + 123 * $cnt) if $hash_entry...原创 2020-04-03 16:24:33 · 927 阅读 · 0 评论 -
Python调用shell命令常用方法
Python调用shell指令方法一、使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令不需要输出内容的场景。举例说明:1. 列举当前目录下的所有文件。1 import os2 val = os.system('ls -al')3 print...转载 2020-03-18 10:02:26 · 1059 阅读 · 0 评论 -
__typeof__(type)的用法(gcc扩展)
__typeof__(struct s *) xxx;等同于: struct s * xxx;下面的例子可以证明:#include <stdio.h>#include <stdlib.h>struct s { int x; int y; int z;};int main(void){ __typeof__...转载 2020-03-16 19:26:52 · 2075 阅读 · 0 评论 -
Linux top命令的用法详细详解
首先介绍top中一些字段的含义:VIRT:virtual memory usage 虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:resident memory usage 常驻内存1、进程当前使用的内存大小,但不包括swap out2、包含其他进程的共享3、...转载 2020-03-13 15:36:37 · 322 阅读 · 0 评论 -
问题排查积累
1、查看进程启动时间ps -eo pid,lstart,etime | grep pid(lstart为启动时间,etime为运行多长时间)原创 2020-03-10 22:28:16 · 160 阅读 · 0 评论 -
内核dmes日志实时打印脚本
#!/bin/bashend=`dmesg |wc -l`while truedo sleep 1 end2=`dmesg |wc -l` if [ "$end" != "$end2" ]; then dmesg |awk '{print NR, $0}'|tail -$((end2-end)) end=$end2 fi ...转载 2019-11-22 15:40:14 · 1215 阅读 · 0 评论 -
makefile知识点记录
makefile关键字使用:以下代码保存为Makefile后,执行make即可看到各关键字意义。 # Target::test#.PHONY: testtest: @echo ${CURDIR} @echo ${MAKE_VERSION} @echo ${MAKEFILE_LIST} @echo ${MAKECMDGOALS} @echo "$(.VARIABLES)" |...原创 2019-11-21 10:20:12 · 123 阅读 · 0 评论 -
Ubuntu 14.04下samba文件共享及磁盘映射
配置环境ubuntu14.04.41、安装samba、samba-client apt-get install samba apt-get install samba-client 安装不了请执行apt-get update或者考虑更换源;2、修改配置文件 gedit /etc/samba/smb.conf 在最后添加如下语句: [my share] comment = my s原创 2016-12-01 19:45:30 · 4365 阅读 · 0 评论 -
Linux系统编程——I/O多路复用select、poll、epoll的区别使用(转)
I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。但select(),poll(),epol转载 2016-08-25 17:59:03 · 911 阅读 · 0 评论 -
ubuntu下ibus-sunpinyin输入法安装配置
系统环境:ubuntu14.04LTS ubuntu下ibus-sunpin输入法安装配置:1、系统设置中打开language support,install/remove languages选项中,安装chinese simplified语言(chinese simplified后点击方框,apply changes即可);2、安装im-config,命令行输入im-config切换原创 2016-05-19 17:51:21 · 8336 阅读 · 0 评论