202109-22 解析Linux内核与设备树的编译和烧写 目录一、准备材料二、下载Linux内核文件三、编译四、通过TFTp烧写zImage与.dtb文件五、常见问题一、准备材料可以根据自己的需要准备相应材料:开发环境:VMware操作系统:ubuntu开发版:湃兔i2S-6UB二、下载Linux内核文件之前下载过UBoot文件的朋友应该知道,在每个开发版的资料里都有相应的文件,没有的可以找购买开发版的店家要。下载完成后将文件拷贝到linux系统下进行解压,解压后会的目录如下图所示:注意:编译时一定要在当... 继续阅读 >
202109-22 浅谈Linux信号机制 目录一、信号列表1.1、实时信号非实时信号1.2、信号状态1.3、信号生命周期1.4、信号的执行和注销二、信号掩码和信号处理函数的继承2.1、信号处理函数的继承2.2、信号掩码的继承2.3、sigwait与多线程2.4、多进程下的信号三、apis3.1、信号发生函数3.2、信号处理函数3.3、信号掩码函数3.4、信号集合变量3.5、信号屏蔽函数一、信号列表root@ubuntu:#kill-l 1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP 6)... 继续阅读 >
202109-20 深入理解Linux负载均衡LVS 目录一、LVS负载均衡二、负载均衡LVS基本介绍三、LVS的体系架构3.1、LoadBalancer层3.2、ServerArrary层3.3、SharedStorage层四、LVS的实现原理五、LVS的工作原理六、LVS相关术语七、NAT模式-网络地址转换八、NAT模式工作原理九、DR模式-直接路由模式9.1、DR模式工作原理图9.2、DR模式的特性十、Tunnel模式10.1、Tunnel模式工作原理10.2、Tunnel模式的特性十一、LVS的调度算法11.1、rr:轮询(roundrobin)11.2、wrr:... 继续阅读 >
202109-20 如何理解Linux下的SELinux 目录一、SELinux简介二、SELinux基本概念2.1、工作类型2.2、securitycontext介绍三、策略四、SELinux模式五、实例六、SELinux日志管理一、SELinux简介SELinux是一个内核级别的安全机制,从Linux2.6内核之后就将SELinux集成在了内核当中,因为SELinux是内核级别的,所以我们对于其配置文件的修改都是需要重新启动操作系统才能生效的。现在主流发现的Linux版本里面都集成了SELinux机制,CentOS/RHEL都会默认开启SELinux机制。系统资... 继续阅读 >
202109-20 如何使用Linux的rsync 目录一、简介二、安装三、基本用法3.1、-r参数3.2、-a参数3.3、-n参数3.4、--delete参数四、排除文件4.1、--exclude参数4.2、--include参数五、远程同步5.1、SSH协议5.2、rsync协议六、增量备份七、配置项一、简介rsync是一个常用的Linux应用程序,用于文件同步。它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当... 继续阅读 >
202109-19 详解Linux下调试器GDB的基本使用方法 目录一、概述二、gdb调试2.1、设置断点2.1.1、断点commands高级功能2.2、运行2.3、显示栈帧2.4、显示变量2.5、显示寄存器2.6、单步执行2.7、继续执行2.8、监视点2.9、改变变量的值2.10、生成内核转储文件2.11、attach到进程2.12、反复执行2.13、初始化文件2.14、设置源码目录2.15、TUI调试2.16、Catchpoint2.17、自定义脚本2.17.0、注释、赋值、显示2.17.1、自定义命令2.17.2、条件语句2.17.3、循环语句2.18、dump内存到指定文件三... 继续阅读 >
202109-19 linux中nohup和后台运行进程查看及终止 目录1.nohup2.&3.如果某个进程起不来,可能是某个端口被占用4.终止后台运行的进程nohup命令运行由Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用nohup命令运行后台中的程序。要运行后台中的nohup命令,添加&(表示“and”的符号)到命令的尾部。1.nohup用途:不挂断地运行命令。语法:nohupCommand[Arg…][&]无论是否将nohup命令的输出重定向到终端,输出都将附加... 继续阅读 >
202109-16 解析Linux源码之epoll 目录一、前言二、简单的epoll例子2.1、epoll_create2.2、structeventpoll2.3、epoll_ctl(add)2.4、ep_insert2.5、tfile->f_op->poll的实现2.6、回调函数的安装2.7、epoll_wait2.8、ep_send_events三、事件到来添加到epoll就绪队列(rdllist)的过程3.1、可读事件到来3.2、可写事件到来四、关闭描述符(closefd)五、总结一、前言在linux的高性能网络编程中,绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文... 继续阅读 >
202109-16 详解从Linux源码看Socket(TCP)的bind 目录一、一个最简单的Server端例子二、bind系统调用2.1、inet_bind2.2、inet_csk_get_port三、判断端口号是否冲突四、SO_REUSEADDR和SO_REUSEPORT五、SO_REUSEADDR六、SO_REUSEPORT七、总结一、一个最简单的Server端例子众所周知,一个Server端Socket的建立,需要socket、bind、listen、accept四个步骤。代码如下:voidstart_server(){//serverfdintsockfd_server;//acceptfdintsockfd;intcall_err;... 继续阅读 >
202109-14 分析从Linux源码看TIME_WAIT的持续时间 目录一、前言二、首先介绍下Linux环境三、TIME_WAIT状态转移图四、持续时间真如TCP_TIMEWAIT_LEN所定义么?五、TIME_WAIT定时器源码5.1、inet_twsk_schedule5.2、具体的清理函数5.3、先作出一个假设5.4、如果一个slot中的TIME_WAIT<=1005.5、如果一个slot中的TIME_WAIT>1005.6、PAWS(ProtectionAgainstWrappedSequences)使得TIME_WAIT延长一、前言笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右。线上实际却... 继续阅读 >
202109-10 Linux中Nginx的防盗链和优化的实现代码 隐藏版本号未隐藏版本号,为了提高安全性,需要对版本号进行隐藏。隐藏版本号实验cd/usr/local/nginx/###编辑配置文件vimconf/nginx.conf修改用户组主进程使用root,子进程则通过nginx用户vimconf/nginx.conf###指定用户组usernginxnginx;设置缓存时间###被修改的配置文件vimconf/nginx.conf日志切割下面就是日志分割脚本#!/bin/bashday=$(date-d"-1day""+%Y%m%d")logs_path="/var/log/nginx"pid_path="/usr/local/n... 继续阅读 >
202108-23 详解Linux使用ss命令结合zabbix对socket做监控 目录前言一、ss命令二、zabbix监控机器总体的socket情况2.1、写脚本2.2、配置zabbixagent的配置文件2.3、配置zabbix的模板三、zabbix监控机器来源于各个机器的请求数3.1、写脚本3.2、配置zabbix_agent.conf文件3.3、配置Discovery,配置item,trigger,graph前言这里我们使用zabbix对其进行监控,使用的是ss命令,不使用netstat命令,因为ss的速度快很多,不信的话可以去测一下哈,一台机器的socket越多,对比越明显。而且ss命令... 继续阅读 >
202107-26 如何解决Linux下Too many open files问题 引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。通过命令ulimit-a可以查看当前系统设置的最大句柄数是多少corefilesize (blocks,-c)0datasegsize (kbytes,-d)unlimitedschedulingpriority (-e)0filesize ... 继续阅读 >
202107-17 浅谈Linux的虚拟内存 目录由来虚拟内存分页和页表内存寻址和分配功能进程内存管理数据共享SWAP常见问题32位和64位直接操作物理内存JVM进程占用虚拟内存过多常用管理命令查看系统内存状态pmap修改内存配置SWAP操作小结由来虚拟内存毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一。我想主要是由于内存的重要”战略地位”。CPU太快,但容量小且功能单一,其他I/O硬件支持各种花式功能,可是相对于CPU,它们又太慢。于是它们之间就需要一种润滑... 继续阅读 >
202107-08 浅析ARM架构下的函数的调用过程 目录1、背景知识1、ARM64寄存器介绍2、STP指令详解(ARMV8手册)2、一个例子3、实战讲解1、背景知识1、ARM64寄存器介绍2、STP指令详解(ARMV8手册)我们先看一下指令格式(64bit),以及指令对于寄存机执行结果的影响类型1、STP<Xt1>,<Xt2>,[<Xn|SP>],#<imm>将Xt1和Xt2存入Xn|SP对应的地址内存中,然后,将Xn|SP的地址变更为Xn|SP+imm偏移量的新地址类型2、STP<Xt1>,<Xt2>,[<Xn|SP>,#<imm>]!将Xt1和Xt2存入Xn|SP的地址自... 继续阅读 >
202107-04 解析Linux下C++编译和链接 目录编译原理问题一:头文件遮挡目标文件符号解析问题二:静态库顺序动态链接问题三:全局符号介入运行时加载动态库问题四:静态全局变量与动态库导致doublefree总结编译原理将如下最简单的C++程序(main.cpp)编译成可执行目标程序,实际上可以分为四个步骤:预处理、编译、汇编、链接,可以通过g++main.cpp?v看到详细的过程,不过现在编译器已经把预处理和编译过程合并。预处理:g++-Emain.cpp-omain.ii,-E表示只进行预处... 继续阅读 >