Linux
文章平均质量分 75
Greetlist
这个作者很懒,什么都没留下…
展开
-
iptables local packet -- network packet
现象之前使用socat、ssh tunnel 能在应用层做转发,这次想在netfilter里面就把转发做掉,但是发现一点问题:在本台机器上面产生的包不通过nat的PREROUTING链。测试命令(错误)添加tracesudo iptables -t raw -A PREROUTING -j TRACE -p tcp --dport 8003 --destination 127.0.0.1这条命令可以追踪从lo这个接口进来的包。添加DNATsudo iptables -t nat -A原创 2021-08-17 15:39:40 · 169 阅读 · 0 评论 -
一些网络有用的小工具
记录一些Linux下网络工具ethtool这个工具能用来查看、设置网卡的配置,包括速率、半/全双工Autonegotiation、网卡驱动信息等。这篇博客很好地展示了ethtool的使用方法iperf3这个工具可以用来查看两个连接的设备之间的传输速率。server端启动iperf3:iperf3 -s -p $portclient测试上传速率iperf3 -c $host -p $portclient测试下载速率iperf3 -c $host -p $port -R ssh原创 2021-07-27 11:33:04 · 874 阅读 · 0 评论 -
mutex相关的知识,手写自己的spinlock
文章目录目的Glibclock汇编指令前缀锁缓存+缓存一致性协议内存屏障目的一直想了解下mutex是怎么实现的,锁的语义是如何支持的,所以就查了查相关的资料和代码。Glibc首先就是要看看gblic里面对于pthread_mutex_lock这个函数的实现,因为在认知里面关于锁的操作都是起始于这个系统调用:glibc/nptl/pthread_mutex_lock.c#ifndef LLL_MUTEX_LOCK# define LLL_MUTEX_LOCK(mutex) \ lll_l原创 2021-07-26 10:24:34 · 342 阅读 · 0 评论 -
mmap 进程间通讯
文章目录mmap代码注意点知识点mmapmmap可以把一个文件映射到进程内存里面,之后操作这块内存就相当于操作文件,文件存在于文件系统里面,不同的进程都能读取这个文件,所以mmap就可以当作IPC来使用。代码这里写了一个producer和consumer来模拟mmap在不同的进程之间共享数据。msg.h#ifndef MSG_H#define MSG_H#define MMAP_FILE "test_mmap"#define MSG_ARRAY_SIZE 4096#include &原创 2021-06-28 11:23:36 · 823 阅读 · 1 评论 -
SO_BINDTODEVICE 使用指定网卡
文章目录问题指定网口PING程序的实现问题在一台机器上面有一个千兆口和一个万兆口,两个口都能连接到特定的服务上面,但是如果不加网口指定的话,程序的连接全部都是走千兆口的,万兆口没有使用上。指定网口在网上查了下,可以使用SO_BINDTODEVICE这个套接字选项来指定套接字使用哪个网口。临时写了一个简单server/client来验证下:server: int listen_fd = socket(AF_INET, SOCK_STREAM, 0); if (listen_fd &l原创 2021-05-10 15:06:03 · 3412 阅读 · 0 评论 -
Linux下面关于查看磁盘相关的信息
文章目录问题lsblk查看相关文件smartctl最大的问题问题今天发现一个问题,在raid控制器之后的磁盘不知道怎么看磁盘到底是SSD还是HDD,所以查了一下相关的资料。lsblklsblk -o name,rota,model这个命令可以看到所有的磁盘的名字,是否可旋转(如果是1的话,代表是机械硬盘),还有相关的产品信息。可以看到第一张图里面直接是一块SSD,第二张图里面是raid控制器,按理来说查看相关文件cat /sys/block/$device/queue/rotation原创 2021-05-06 18:34:58 · 625 阅读 · 0 评论 -
iptables/nftables/socat/Linux EasyConnect
文章目录iptablesnftablessocatiptablesnetfilter-HOWTO这篇文章很好地说明了到底何时该DNAT,何时该SNAT,大致是:SNAT 需要在nat表的POSTROUTING链里面做,DNAT需要在nat表的PREROUTING链里面做。文章里面有具体的例子。最好结合上面的图来看更加清晰。‘sudo iptables -t nat -A PREROUTING --protocol tcp --dport 8000 -j DNAT --to-destinatio原创 2021-02-01 18:08:03 · 571 阅读 · 0 评论 -
qcow2 镜像文件系统挂载
文章目录目的步骤目的新建一台Linux虚拟机之后,怕启动之后IP会跟局域网里面的IP冲突,需要先把镜像里面的network interfaces文件改掉,然后再启动虚拟机。步骤下面的步骤是针对虚拟机里面的文件系统是LVM的情况,这种很难搞,LVM(8e)不像(83)Linux可以直接挂载到宿主机的文件系统,按照下面的步骤应该对大部分的情景都管用sudo qemu-nbd --connect=/dev/nbd0 $qcow2_file_pathsudo fdisk -l /dev/n原创 2020-11-26 16:13:38 · 1789 阅读 · 0 评论 -
Raid HBA
文章目录问题现象本质原因解决问题现象在新装机的时候,出现了在idrac里面可以看到插入的硬盘,但是操作系统不能识别到硬盘的情况。本质原因Dell服务器里面自带有Raid控制器,各个型号的服务器可能Raid控制器不一样:这里就有一个Raid控制器,控制器有两种模式:RaidHBA关于Raid,HBA,这里有解释从Dell手册里面可以看到:就是相当于切换到Raid模式的时候,这个控制器当作Raid卡用,切换到HBA模式的时候,跟总线差不多,当总线用吧。这里就有控制器的模式切换。原创 2020-10-14 16:54:36 · 4123 阅读 · 0 评论 -
ABI
文章目录问题定义一些文章和理解最初的问题最后问题之前好像听到过对于不同的GCC,G++版本,使用的ABI可能会有不同。就很奇怪这个ABI到底是个什么。从man手册里面的确是看到有这个-fabi_version这个编译选项,也有不同的ABI版本:定义自己感觉应该是把源码编译完成,最后连接的时候,不同的编译器会根据不同的CPU架构(x86,ARM…),不同的操作系统(Windows,Linux,Fedoras,Darwin),来最后生成对应平台的机器码。从维基上面猜的:一些文章和理解StackO原创 2020-09-11 15:48:25 · 256 阅读 · 0 评论 -
Linux 网络初步阅读
文章目录一些名词初始化网卡接收分组NAPI详细步骤高层协议IPv4接收ip_rcvip_rcv_finiship_local_deliverip_local_deliver_finish发送ip_forwardip_forward_finish一些名词NIC:网络接口控制器,Network Interface Controller,就是网卡NAPI(New API):适配超高速网络适配器的网络APIigb:英特尔千兆网卡驱动程序初始化网卡以igb驱动为例igb_init_module {原创 2020-07-08 11:21:11 · 259 阅读 · 0 评论 -
Linux 内存源码初步阅读
文章目录几个数据结构初始化内存伙伴系统初始化伙伴系统分配slab/slub/slobtcmalloc/jemalloc几个数据结构pg_data_t这个数据结构代表每一个NUMA节点,关于NUMA可以稍微看看这篇了解下zonelist内存域的列表,按照内存域的优先级排列。zone内存域,内存域常见类型有几种:page代表一个物理内存页,页帧。free_area这个跟伙伴内存分配相关。放一个自己画的图从上面的图里面大致可以反映出代码的结构。初始化内存直接贴书上的图吧原创 2020-05-26 16:08:47 · 291 阅读 · 0 评论 -
virsh 基本使用
文章目录libvirtvirsh基本使用Referlibvirt可以查看定义virsh基本使用列出所有的domain(我简单地理解成虚拟机)virsh list --all克隆现有的一台虚拟机,包括虚拟机的镜像和虚拟机的配置xmlvirt-clone -o src_domain_name --auto-clone上面这个命令里面,-o选项代表需要克隆哪个虚拟机,克隆完成之后会把新的domain重新命名成为src_domain_name-clone重新命名一个domainv原创 2020-05-20 16:16:14 · 506 阅读 · 0 评论 -
NUMA 相关
文章目录问题引发几个命令计算NUMANUMA的支持一些很好的文章问题引发在看书看到物理内存的时候,看到有UMA(一致内存访问)和NUMA(非一致内存访问)两种方式,不太懂这个NUMA是个什么概念,所以大致去网上了解了下。几个命令numactl这个命令的一些选项可以用来查看当前的numa的信息:numactl --shownumactl --hardware可以看到当前物理机上面有两个NUMA节点。均分所有的CPU,并且还能看到分到的物理内存总量。dmesg这个命令打印内原创 2020-05-15 14:55:45 · 960 阅读 · 0 评论 -
Linux scheduler 调度源码初步阅读
文章目录代码版本fork流程Refer代码版本2.6.39.4fork流程Refer原创 2020-04-29 13:35:34 · 611 阅读 · 0 评论 -
RTNETLINK answers: Cannot assign requested address 手动设置MAC地址出现的错误
文章目录问题描述解决步骤解决办法相关连接问题描述在开启qeme虚拟机的时候,手动填写了内部网卡的MAC地址,但是启动虚拟机之后,从其他同网段的机器并不能ssh到这台虚拟机上面。解决步骤直接把qemu前台运行,直接登陆到qemu里面。看到网卡的状态是down的,MAC地址就是启动虚拟机时候传入的参数。使用命令去启动这块网卡:ip link set ens3 up ifup ens...原创 2020-03-19 14:46:06 · 5440 阅读 · 1 评论 -
Golang http client 关闭连接 && too many open files
文章目录问题相关概念解决办法问题使用Golang去批量下载所需要的数据时,由于http client发起请求并且读取body之后,没有正确设置Transport,并且没有关闭Body,导致机器上面出现大量的CLOSE_WAIT状态的连接。相关概念CLOSE_WAIT:被动关闭方会进入的状态,已经收到主动关闭方的FIN,但是还没有发送FIN到主动关闭方。max_open_files:每个...原创 2020-03-11 13:39:02 · 3543 阅读 · 0 评论 -
ssh 端口转发
文章目录遇到的问题解决办法具体步骤ssh -N -L选项额外选项相关链接遇到的问题现在有三台机器:prometheus-server所在机器 [记作host1]VPN机器 [记作host2]远程机器 [记作host3]现在远程机器上面有node-exporter,需要采集远程机器上面的信息,可是prometheus这台机器不能直接访问远程机器的9100端口(没有开9100端口转发权限...原创 2020-02-27 14:58:27 · 986 阅读 · 0 评论 -
qemu 虚拟机挂载img + sudoers文件修改
文章目录问题描述解决办法虚拟机挂载方法相关链接经验问题描述手动修改了sudoers文件:sudo vim /etc/sudoers出现了错误:很尴尬的sudo用不了了,下面有几个解决方案:解决办法如果是拥有root权限的话,那么无所谓,直接改掉文件就好。如果没有root权限,但是你的账户的确拥有sudo权限,那么可以执行下面这个命令来修改sudoers:sudo pkex...原创 2020-02-11 18:23:47 · 801 阅读 · 0 评论 -
Linux 编译内核,Qemu启动内核,GDB调试
文章目录前置准备步骤前置准备Oracle VM VirtualBoxXShellUbuntu 较高版本发行版步骤先使用VM VirtualBox制作一个虚拟机安装好之后,为了方便我们操作虚拟机,最好使用Shell工具ssh到虚拟机里面,Shell工具按照个人喜好即可。对于VM VirtualBox,我们需要设置一下端口转发,才能连到虚拟机里面:安装一些必须的工具设...原创 2020-01-13 12:05:10 · 455 阅读 · 0 评论 -
apt-get does not have a release file
文章目录问题解决问题执行apt-get update的时候出现了下面这个Warning:does not have a release file解决字面意思就是这个网站不被信任,有被攻击危险,根据StackOverflow的解决办法:需要在source.list文件deb后面加上[trusted=true]deb [trusted=yes] http://us.archive...原创 2019-12-12 17:34:32 · 9118 阅读 · 1 评论 -
ssh 复用连接
文章目录问题目的解决方案遇到的问题问题1.在生产环境下面,如果存在较多的ssh连接,无论是人连接上去的还是代码建立的连接,都会消耗宿主机上面的资源。会造成宿主机的卡顿,IO增大。2.频繁地建立ssh连接,需要不停地输入密码。目的我们需要把大量的连接数降低到一个合理的范围内。解决方案复用连接这个方案可以第一步解决这种问题,具体的命令:ssh -o ControlPath=/ho...原创 2019-11-06 15:18:17 · 2325 阅读 · 0 评论 -
ssh-copy-id
文章目录ssh keygen免密登录目标机器上面的变化ssh keygen生成ssh私钥和公钥,主要文件是:~/.ssh/id_rsa.pub ~/.ssh/id_rsa免密登录主要是要把当前机器的公钥copy到目标机器上面,主要命令是:ssh-copy-id $target_host_username@$target_host嗯,第一次使用这个命令的时候,需要输入密码,成功之后...原创 2019-10-15 16:15:28 · 432 阅读 · 0 评论 -
Linux 信号 向信号处理函数传递数据
1.Linux 信号是一种异步机制,进程可以接收一个信号,并有相应的处理操作,如果我们需要改变当该信号发生时的默认行为,我们就需要捕捉该信号,并且自己书写信号处理函数。2.这种信号处理函数就跟中断差不多,当一个进程接收到一个信号时,进程会暂停当前的执行流,转而调用信号处理函数,信号处理函数结束之后,会继续刚才的执行流继续执行。3.如果进程已经阻塞在一些系统调用的时候,信号发生之后,是不会重...原创 2018-06-28 16:13:40 · 1315 阅读 · 2 评论 -
对于Linux下的服务器编程(2)
对于惊群问题,我们可以使用一个主线程来接受连接,并且把这个连接套接字传递到子进程里面,让子进程来处理这个连接。这种方法需要进程间通信:通过Unix套接字来在进程之间传递套接字。【注意不能使用Unix套接字***直接***传递描述符到子进程,因为虽然父进程和子进程获得的文件描述符相同,但是子进程不一定打开了这个描述符的文件,或者说这两个描述符指向不同的文件,所以必须使用recvmsg/sendmsg...原创 2018-06-19 16:39:24 · 205 阅读 · 0 评论 -
对于Linux下的服务器编程(1)
在Linux下面,对于海量连接并且每个连接在大部分时间里面都是不活跃的情况下,我们使用Epoll来解决C10K[C10M]问题。1.如何使用Epoll:man Epoll。即为三个系统调用。2.在服务器拥有多个CPU的情况下,我们需要多线程或者多进程来帮助我们提高程序的性能,所以就需要一个主线程和一些工作线程,我们可以在每个线程/进程里面弄一个epoll实例,来监控客户的链接[有两种情况]: ...原创 2018-05-31 16:24:42 · 539 阅读 · 0 评论 -
socket Connect refused
使用socket进行网络编程的时候,客户端使用connect函数去连接服务器的时候,有时候会出现Connection refused的错误。这种错误的两个原因(目前我所碰到的)是:1.服务器没有启动相应的端口进行监听。2.服务器存在防火墙,阻止了当前访问。现对第二种情况进行解决:1.在系统安装了类似于firewall等软件的情况下,根据对应的软件命令或者规则来进行调整原创 2018-01-09 22:34:17 · 22360 阅读 · 0 评论 -
Vim 退格键失效
配置完成ycm之后,发现vim的退格键不能正确地删除已经输入的字符。解决方法:set backspace=indent,eol,start放在.vimrc文件内。原创 2018-01-08 17:55:36 · 5585 阅读 · 0 评论 -
Vim 实用技巧,一些自己常用到的命令
一些命令:1. dd : 删除一行2. yy :复制一行3. v or ctrl + v or shift + v : 选择4.shift + a : 光标移到最后并启动插入模式5.shift + i : 光标移动到开头并启动插入模式6. o : 另起一行,并启动插入模式7. .(句号按键) : 重复执行上一次修改操作8. shift + 8 : 高亮显示光标下的所原创 2017-08-04 14:54:22 · 396 阅读 · 0 评论 -
自己的vim配置
自己因为使用vim比较多,并且很喜欢这个文本编辑器,为了应对在不同机器上面作业的情况,我需要记录自己习惯的配置set number "显示行号set tabstop=4 "Tab键的宽度set syntax=on "语法高亮set nocompatible "不跟vi兼容"自动缩进set autoindentset cindent"统一缩进为4set softtabst...原创 2018-01-16 17:00:05 · 343 阅读 · 0 评论 -
win7 + centos 7 双系统安装(修改grub文件)
步骤: 1.先安装win7系统 -> 2.安装Cent OS 7 -> 3.进入Cent 设置grub文件 -> 4.重启注意:两个系统的安装模式(bios/uefi)必须相同。镜像(iso)烧录制作u盘启动:Ultraiso 和 DEAMON Tools(试用30天)这里着重点为安装完Cent 以后会出现找不到window系统的情况:1.我们先以root权限登陆Linux系统(都是安装了,密码应原创 2018-01-22 20:50:11 · 1289 阅读 · 1 评论 -
动态链接库与应用
1.动态链接库概念: 动态链接库又叫做动态链接共享库,共享库是一个目标模块,再运行时,可以加载到任意的存储器地址,并和一个在存储器中的程序链接起来,这个过程称为动态链接,是由一个叫做动态连接器的程序来执行的。 共享库也成为共享目标(shared object),在Unix系统中通常用.so后缀来表示,在Windows中是.dll。2.与位置无关的代码(PIC): 我们可...原创 2017-09-07 13:24:58 · 1034 阅读 · 0 评论 -
IPC -- 管道和FIFO
1.第一种IPC:管道【未命名管道】 过程: 主要调用int pipe(int fd[2])函数来创建一个管道,其中fd[0]代表读端,fd[1]代表写端,我们可以调用pipe之后,fork子进程,然后按照需求来关闭相应的读端和写端,这样父子进程就可以进行通讯。 缺点: fd存在内存里面,程序退出就不见了,并且管道只能用在有关系的进程之间,任意两个进程不能通过管道来相互通讯...原创 2018-06-28 18:22:11 · 161 阅读 · 0 评论 -
原始套接字 发送 TCP SYN 包
通过原始套接字、setsockopt、IP_HDRINCL套接字选项,我们可以在应用进程里面构造自己的IP包:所以我们在初始化原始套接字之后,可以调用setsockopt函数来开启IP_HDRINCL套接字选项,并且构造自己的IP头,TCP/UDP头,最后再像发送普通包一样调用sendto 、sendmsg等函数发送构造好的数据。1.首先我们可以先得到一个原始套接字,并且设置IP_HDRINCL套...原创 2018-07-13 11:08:07 · 8802 阅读 · 5 评论 -
学习Linux性能优化实战-1
文章目录前言平均负载几个常用命令进程调度命令相关文件CPU使用率perf软中断前言最近在极客时间上面发现了倪鹏飞老师的Linux性能优化实战,自己感觉讲得很好,有兴趣的朋友可以去极客时间上面订阅。博客是自己总结学习到的一些命令,记录下来,以备后面使用。侵删。平均负载简单理解为,平均负载其实就是平均活跃进程数。过载:当平均负载大于CPU个数的时候,系统发生过载。极客时间版权所有: ht...原创 2019-04-09 17:42:50 · 439 阅读 · 0 评论 -
线程特定数据
文章目录相关API实验代码相关链接相关API创建一个键:int pthread_key_create(pthread_key_t* ketp, void (*destructor (void*));destructor 是线程分配数据的析构函数取消键与线程特定数据值之间的关系int pthread_key_delete(pthread_key_t key);获取和设定线程特定...原创 2019-03-25 13:56:03 · 140 阅读 · 0 评论 -
一个简单的线程池
文章目录线程池解决问题主要的思路任务队列的设计线程池的设计主要的技术代码线程池解决问题在线程操作过短,创建和销毁大量线程的开销大于执行需要process函数的开销的时候,我们需要使用线程池来帮助我们减少创建和销毁线程的开销。主要的思路我们需要一个任务队列,然后线程池里面的线程去这个队列里面取任务来执行。所以我们需要两个数据结构:1.任务队列。2.线程池。任务队列的设计可以直接使用链表或...原创 2019-02-22 16:45:55 · 168 阅读 · 0 评论 -
netfilter nat的进一步探究
文章目录BaseLinux NF相关代码相关链接Base之前稍微研究过一些nat和原始套接字,知道原始套接字可以自己构造伪IP,MAC等信息,但是我想知道NAT的时候,源IP,目的IP的修改到底发生在哪里。所以就开始在网上找相关的资料。Linux NF相关代码enum nf_inet_hooks { NF_INET_PRE_ROUTING, NF_INET_LOCAL...原创 2019-01-18 17:58:51 · 227 阅读 · 0 评论 -
Time FD
文章目录Linux 定时器time fd相关文件使用代码注意Linux 定时器time fd在linux里面可以使用timerfd里面的API来构造定时器,来执行一些定时任务,使用timerfd的好处是可以把定时器当做文件描述符来使用。相关文件#include <sys/timerfd.h>使用代码 struct timespec now; if (clo...原创 2018-12-12 15:52:00 · 226 阅读 · 0 评论 -
模拟 Docker网桥连接外网
文章目录模拟Docker0网桥1.建立新的network namespace2.建立veth pair3.namespace互联4.启动两个veth并给veth-2添加IP5.在root namespace 里面添加虚拟网桥,启动网桥,配置IP6.把veth-1跟br0相连7.在first命名空间里面添加默认路由8. 添加iptables FORWARD 规则9.添加iptables NAT 规则...原创 2018-09-19 17:24:07 · 1071 阅读 · 0 评论