git 详细教程,从头开始,看简单英文比中文好懂 Beginner PLEASE NOTE, Section I and II below, are not to be followed in order, they are 2 separate Actions (one to create a new local git repo to push to remote GIT, and the other to obtain "c
配置中转linux机器,使连接该机器上的两个网络的两台主机可以互ping通 一、网络环境:网络1:主机A:eth0 ip:168.1.1.76gateway: 168.1.1.1 网络2:主机B:eth0 ip:172.18.128.23gateway:172.18.128.1 中转机:eth0 ip1:168.1.1.7 与网络1主机A互通eth1 ip2:172.
linux syslog服务器配置,自动发日志到另一台日志服务器 1.客户端:168.1.20.66修改/etc/syslog.conf 添加syslog.info @168.1.80.302.日志服务器:168.1.80.30修改/etc/sysconf/syslog 修改SYSLOGD_OPTIONS为 "-r -x -m 0" #-r表示允许接收外来的消息,-x表示不解析DNS,#-m 0表示时间戳标记间隔,如果指定只
字符串公共串 一、找出最长公共子序列的长度题:求字符串str1,str2的最长公共子序列的长度(可以不连续)。解:定义二元函数函数f(m,n):分别以str1[m],str2[n]结尾的连续公共子序列的长度而对于f(m,n) 有以下两种情况1.str1[m] != str2[n],则有f(m,n) = max(f(m-1,n), f(m, n-1))2.str
Linux 启动详解1 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/inittab 3. /etc/rc.d/rc.sysinit 4. /etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4.. 5. /etc/fstab文件介绍:1.关
求一个数组中满足一定条件的两个元素的最大差值 之前在面的时候碰到一道题,要求找出一个互异数组中两个元素的最大差值。具体描述如下:有一个整数数组d[0,...,n-1],并且数组满足不存在相同的元素,要求找出1) max{d[i] - d[j]} 且 i > j;(对应实际生活中的股票买卖,找出可能的最大收益)2) max{d[i] - d[j]} 且 i 思路有很多种,用动态规划最简单,时间复杂度都是O(n),
KMP算法详解及各种应用 KMP算法详解:KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字。其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n)。在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0.
实战Nginx与PHP(FastCGI)的安装、配置与优化 一、什么是 FastCGIFastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。 FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP
fastcgi与cgi的区别 先讲下cgi:cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序(或perl脚本...), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次for
daemon 进程为什么要fork两次,与后台运行程序区别? daemon进程是后台守护进程,有时候也叫精灵进程(agent).linux 下server都是daemon进程。相信大部分开发人员都知道如何去写一个daemon进程。但是另一方面,大部分人不知道为什么要这么做,不少人是从某个地方copy一个函数,拿来主义。但是具体为什么这么实现,却不是很透彻。 见过一些面试官或被面试人。很多人解释daemon进程存在的理由是因为僵死进程。或
Nginx内核参数相关的优化设定 转自:http://developer.51cto.com/art/201003/191603.htmNginx内核参数一个长时间困扰着网管员的问题,在实际的操作中各种小技巧还是需要我们引起注意。下面我们就详细的看看如何进行。Nginx内核参数在使用的时候有不少问题需要我们解决,其中在优化方面就需要我们格外的注意。在下面就是对Nginx内核参数优化的详细介绍,希望大家有所收获。
LVS 虚拟服务器三种模式例子 NAT模式 1.模拟环境: LVS服务器有两块网卡,连接外网(用户端)和内网(服务器),充当"交警"角色. 优点: 节省ip开销 缺点: LVS服务器负载过高,数据吞吐量降低 三台Linux虚拟机: LVS服务器(vmnet1 ip: 200.168.10.10 , vmnet2 ip: 192.168.10.1) WEB服务器1(vmnet2 ip: 192.168.
LVS 三种工作模式的优缺点比较 LVS 三种工作模式的优缺点比较一、Virtual server via NAT(VS-NAT)优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请
海量数据处理算法总结 1. Bloom Filter【Bloom Filter】Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元素不再集合,那肯定不在。如果判断元素存在集合中,
使用openssl的md5库 在linux机器上,有一个命令可以计算出文件的md5值,那就是md5sum,如果没有的话,就需要安装RPM包:coreutils。现在我们使用openssl的库也可以方便的计算出文件的md5值。主要用到的函数是int MD5_Init(MD5_CTX *c);int MD5_Update(MD5_CTX *c, const void *data, size_t len);int M
scp 断点续传 scp 是通过ssh协议传输数据,如果是想传输一个很大的数据,这几天我就遇到过,一个tar包,400G左右,通过scp拷贝时,有可能遇到服务器断电什么的悲剧问题,那么类似scp拷贝的另一个命令 rsync就可以实现意外中断后,下次继续传,命令如下:rsync -P --rsh=ssh home.tar 192.168.205.34:/home/home.tar-P: 是包含了 “–part
一份非常内行的Linux LVM HOWTO 1. 绪论 欢迎你,亲爱的读者。 写这个文档的目的是为了告诉你什么是LVM,它怎样工作,你怎样运用它使你的生活变得更容易。虽然有一份LVM FAQ,但仍是德文的,它是从不同的角度来描写的。它是一份“真的”HOWTO,在传授理解(有希望的)的时候也是非常内行的。 我要说清楚我不是一个Linux逻辑卷管理器(Logical Volume Manager)的作者。我向那些作者表示敬意
linux中getmntent setmntent endmntent 用法例子 mntent 结构是在 中定义,如下: struct mntent { char *mnt_fsname; /* name of mounted file system */ char *mnt_dir; /* file system path
linux大端,小端,网络字节序转换之可移植性代码 我们有时候经常被大端,小端,网络字节序搞得很迷糊,本文理清一些概念,并给出可移植的代码。我们的主机字节序,即我们的机器存放内存里的顺序,有两种,一种是大端,另一种是小端,大部分的系统都是小端。在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节,比如一个unsigned short的变量的值为十六进制"0x0a 0x0b"对应的十进制2571,这个变量跨了1个字节
net-snmp agent开发详解,非常简单 转载请标明出处 原文地址:http://blog.csdn.net/hepeng597/article/details/8782868花了一两天时间测试和整理一下。用net-snmp扩展MIB库,实现方法可归结为四种:1)一是静态库方式,通过修改配置头文件,在相应地方包含新引入的mib模块的.c和.h文件,然后重新编译库文件和扩展代码;这种方式不够灵活,每次修改扩展的MIB后,
如何自动输入密码ssh连接到其他机器 想在shell脚本里ssh连接到另外一台服务器后执行一些命令,但是不希望通过交互方式输入登录密码。主要的解决方法有三种:1. 生成ssh公钥,建立和对方机器的信任关系;2. 使用expect脚本;3. 使用sshpass。这里介绍一下sshpass相关内容下载并安装sshpass):# tar zxvf sshpass-xxxx.tar.
根据成员变量的地址推算出结构体变量的地址 在linux当中对此有一个很好的宏可以使用,叫做 container_of, 放在 linux/kernel.h当中。它的定义如下所示:/*** container_of - cast a member of a structure out to the containing structure** @ptr: the pointer to the member.* @type: th
linux 修改时间 date 修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: #date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下。 #date -s 10:18:00 修改时区: 找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai替换当前的/etc/l
编译linux内核tips TIPS:1.下载源码解压后,先make menuconfig,在GUI界面根据需要生成对应.config的配置文件2.有了.config的配置文件后,可以make bzImage, 会在/boot目录中生成一些重要的文件,比如:initrdfsxxx.img,vmlinuzxxx, 这两个文件很重要,是在开机启动时会加载到内存的小文件系统,如果这两个文件不对,或者说.config文件没有
iptables用法初解 一、四表五链之间的关系4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。filter:一般的过滤功能nat:用于nat功能(端口映射,地址映射,中转IP等)mangle:用于对特定数据包的修改raw:有限级最高,设置raw时一般是为了
Linux 启动详解2 机器加电启动后,BIOS开始检测参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader.里面的boot
rhel6系统启动过程故障排错处理 http://chaorenyong.blog.51cto.com/2163445/1048194解析Linux系统开关机流程,让你游刃有余的掌握在系统启动过程过的任何错误,让你真正把握整个Linux系统,让你成为系统管理员中故障排错解除的佼佼者。掌握了这门技术的管理,能在短时间内判断出系统故障产生的原理,从而快速找到故障点,并轻松解决,为企业节省大量的人力和物力,减少大量不必要损失。
secureCRT 显示乱码问题(总结) 1:最简单的方法是直接改 Session Option→选字体(新宋体)→再选Character encoding(选UTF-8) 然后再修改远程linux机器的配置 vi /etc/sysconfig/i18n 把LANG改成支持UTF-8的字符集 如:LANG=”zh_CN.UTF-8″ 2:如果再不行,可以试试这样 导出 /etc/sys
Linux 启动详解 机器加电启动后,BIOS开始检测参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader.里面的boot loader通
shell 多行注释 由于Shell不支持直接多行注释,总结了以下Shell注释多行的变通方法 一、通过Here Documents和:实现 1、最简单方法 :<<BLOCK ....注释内容 BLOCK 把输入重定义到前面的命令,但是:是空命令,所以就相当于注释了。 如果注释中有反引号的命令就会报错。反引号部分没被注释掉,例如ab=`ls -l abc`就不会被注释掉。 2、解决注释
tr命令常用例子 一、首先介绍下代替符号[:lower:]所有的小写字母[:upper:]所有的大写字母[:alnum:] 表示所有的字母和数字[:alpha:] 表示所有的字母[:blank:] 表示所有空格[:digit:] 表示所有数字[:punct:] 表示标点符号[:graph:] 表示所有可打印字符,但不包括空格[:print:
vim 缩进 vim tab变空格对于使用vim的程序员来说,shiftwidth,tabstop,softtabstop绝对是经常接触的三个缩进因素。能否有方便美观的,整体化的缩进,主要是由他们相互间的配合决定。在经过一段时间试用后,总结一下我的设置经验。1 shiftwidth:这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时
shell 间接变量引用的问题 1.感叹号的使用aaa=123bbb=aaaecho $bbbecho ${!bbb}输出结果:aaa123可见,感叹号是可以引用间接变量的值2.eval的使用aaa=123bbb=aaaecho $bbbeval ccc=\${$bbb}echo $ccc输出结果:aaa123问题:当遇到星号后,间接引用与编程者期
shell if判断常用参数 Grammar:if 条件 # 条件为真,则条件返回0,进入then语句, 如果条件是函数,那么函数返回0则进入then语句then commandelse # 或者 elif 条件commandfiFast IF example:执行命令[ $? != 0 ] && exit -1 #如果左边的表达式为真则执行右边的语句Tips:
shell中数组扩展技巧及实例 1、申明数组例一:a=(111 222) #一对括表示是数组,数组元素用“空格“符号分割开。echo ${a[0]} #数组下标从0开始echo $a #数组也是指针形似,数组名称相当于一个指针,指向第一个数组元素输出:111111 例二:a=([0]=111 [1]=222)例三:a[0]=111a[1
shell基本计算、逻辑运算、位运算详解 http://blog.pureisle.net/archives/1352.htmlShell 提供大量的基本运算操作,在脚本中非常有用。Shell 对您提供的算术表达式求值,执行运算展开式,此时使用得出的结果替换表达式。以下面的格式提供运算表达式:$(( expression ))$ echo $((5*(3+3)))30$ result = $(($myvar-1
sed实例收集 一、元字符集 1)^锚定行的开始 如:/^sed/匹配所有以sed开头的行。 2)$ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。 3). 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。 4)* 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 5)[] 匹配一个指定
盐焗鸡 电压力锅版 主料:鸡1只(我是一半鸡用电压力锅褒汤了,所以我只剩下一半鸡)调料:胡子酒,盐,味精,生抽,老抽,胡椒粉,辣椒面,鸡精,十三香,生姜,葱头(只要能想到的都根据自己喜好放)步骤:1.将鸡冲洗干净,沥干水分,斩去鸡爪,头,鸡屁股2.将适量的胡子酒按摩鸡,放入盐,味精,生抽,老抽,胡椒粉,辣椒面,鸡精,十三香,均匀按摩鸡五分钟左右,放入冰箱等两三小时入味3.将生姜切成薄片,并用生
xmlstarlet toolkit 脚本操作xml的好工具, 用法心得 在linux终端或者secureCRT ssh上去,或者是shell脚本可以直接调用xmlstarlet命令操作,解析xml很方便,由于是工作上用到的东东,查了相关的资料,也遇到过一些问题,所以在解决后记录备忘,这里只列出一些常用的命令和一些文档里没有提到的命令,如需文档,请参考:http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html例
蛋挞飞饼版 用料 思念原味飞饼 2张(一包一般有五张,大概8.7元左右) 淡奶油 130克(没有可以省略)牛奶 120克(一定要有,从超市买1.3元一小包的甜牛奶就行)蛋黄 1到2个普通面粉 7克玉米淀粉 4克(没有可以省略)葡萄干 适量(没有可以省略)1.做法 将二张飞饼重叠放在一起2.飞饼表面盖着油纸用擀面杖擀几下,擀成稍大的饼形3.将
shell中变量扩展技巧及实例 SHELL中有一些变量扩展的技巧,做下归纳总结mark一、取子字符串规则1:${变量名:位置起点}含义:由指定的位置起点开始,截取子字符串到字符串结束,起点由0开始例1:var="12345678"echo ${var:5}输出:678-------------------------------规则2:${变量名:位置起点:长度}含义:由指定的位置起点
heap堆排序及使用 堆有大堆和小堆,一般是在二叉树的结构中使用,当然也可以把一个数组来构建堆,因为可以把一维数组看成是二叉树,如:a[6]={1,2,3,4,5,6}可以看成如下图:在实际运用中,heap一般用于在大范围内的数中找出最大的几个数或者最小的几个数,速度比其它算法快在stl中,可以用make_heap, push_heap,pop_heap来使用堆,代码如下:#include #
自定义结构作为map的key,比较函数写法 1.当自定义的结构或类作为map的key值时,需要提供比较函数,重载小于操作符。为什么不重载==操作符呢?那map的find函数怎么办呢?实际上,在map的实现里面就是靠 对调operator<两边的操作数实现的。简单的来说,当用map的find或者是set的find函数时,二叉树查找对应值,要涉及到比较操作,如果需要查找的key < element不成立,而且 element < key 也
debug版本与release版本示例 示例代码#include #include using namespace std;int main(){ int *p = NULL; assert(p!=NULL); cout << "123" << endl; return 0;}1)编译debug版本:g++ test.cpp -o test生成文件:-rwxrwxr-x
stl set使用时,passing ‘const xxx’ as ‘this’ argument of 'xxx 'discards qualifiers 丢弃限定符的问题 看下面的代码有什么问题?#include #include class test{public: int data; bool operator < (const test& dst) { return data < dst.data; } void set_data( int param) {
IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类 一、TCP socket ipv6与ipv4的区别服务器端源代码如下:#include #include #include #include #include #include #include #include #include #include #define MAXBUF 1024int main(int argc, char **argv){ i
Lighttpd1.4.20源码分析之插件系统(3)---PLUGIN_TO_SLOT宏 前面讲了lighttpd插件系统的加载和初始化,这一篇中,将介绍一下plugin.c中的宏PLUGIN_TO_SLOT。在将PLUGIN_TO_SLOT宏之前,我们先来看看lighttpd中插件系统的对外接口。这个接口所对的“外”指的是lighttpd服务器。前面已经提到,在运行的过程中,lighttpd不知道所加载的插件都是干什么用的,只知道这些插件所实现的接口,也就是在plugin结构体中
Lighttpd1.4.20源码分析之插件系统(2)---插件的加载和初始化 转自:http://www.cnblogs.com/kernel_hcy/archive/2010/03/11/1683814.html前面讲了lighttpd插件系统的接口,下面我们来看看插件是怎么加载 和初始化的。lighttpd的插件是以动态链接库的形式存在的。在服务器启动的时候,在初始化阶段将所有插件都加载进来。在server.c中的main函数中,加载插件是调用plu
Lighttpd1.4.20源码分析之插件系统(1)---plugin结构体和插件接口 转自:http://www.cnblogs.com/kernel_hcy/archive/2010/03/11/1683809.html在lighttpd中,使用插件的形式来增加服务的功能。同时,lighttpd提供了一个插件的公共接口给开发者,方便第三方提供额外的插件。Lighttpd的插件接口主要提供在plugin.h文件中。其中,plugin结构体是最核心的部分。
linux 监视文件系统inotify 测试 一、简介Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。在实际项目中,如果项目带有配置文件,那么怎么让配置文件的改变和项目程序同步而不需要重启程序呢?一个明显的应用是:在一个程序中,使用Inotify监视它的配置文件,如果该配置文件发生了更改(更新,修改)时,Inotif
google coredump 测试 1. 下载最新的coredump代码当前最新版本为 1.2.1 。项目链接: http://code.google.com/p/google-coredumper/链接给了一个简单的使用方法,我们用这个方法来测试效果#include ... WriteCoreDump('core.myprogram'); /* Keep going, we gen
linux logrotate 配置及测试 一、logrotate 配置logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。logrotate 的配置文件是 /etc/logrotate
array.c(h) 通用数组解析 转自:http://www.cnblogs.com/kernel_hcy/archive/2009/10/23/1588873.htmlLighttpd提供了一个通用数组,这个数组与程序的其他部分练习较少,因此可以单独进行分析。首先要说一下Lighttpd中的定义的一些数据结构。在array.h中有下面的定义:typedef enum { T
Lighttpd中CGI执行流程 转自:http://blog.csdn.net/lenky0401/article/details/4201713对于Lighttpd中CGI执行流程的多余文字不用过多说明,图片里已经基本说的很清楚了。从图中,我们可以看到对于客户端的每一个请求(动态页面,也就是需要CGI处理的),Lighttpd进程都是先fork一个CGI进程,然后将请求头(通过环境参数)和请求体(通过管道)传递
mod_extforward: 让lighttpd记录客户端的真实IP 该模块在1.4.14及以后的版本才有,主要功能是在使用了反向代理后,可以获取客户端真实IP地址,在使用了nginx或者NetScaler这样的反响代理/负载均衡设备以后,后段服务器的访问日志中看到的请求IP都是前面的nginx或者NetScaler的IP,而我们很多时候需要通过分析Log来查看用户访问的地理分布情况,这就需要记录来访用户的真实IP地址。1.首先需要在前端的负载均衡设备上配置
linux echo 让你的脚本输出加上颜色吧 1.echo 具有给输出的字符加颜色的功能,格式如下:格式: echo -e "\033[字背景颜色;字体颜色;ANSI控制码m字符串\033[0m" -e选项是让echo能够识别转义字符,否则不能显示颜色,先上个格式相关的例子例1:echo -e "\033[41;36m something here \033[0m" 或者:echo -e "\033[36;41
linux下利用rtc 实现精确定时器 rtc是linux系统中的一个时间设备,可以open打开,通过ioctl设置频率,然后就可以进行循环read操作,每次read的耗时是(1/频率 单位:秒)先上代码#include #include #include #include #include #include #include #include #include #include #define FREQ 2
linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析 一、_IO, _IOR, _IOW, _IOWR 宏的用法与解析在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。bit29~bit15 14
linux显示指定目录下所有的文件,子目录及子目录的文件 可以调用 dirent.h 中的scandir函数扫描指定目录中所有的文件名如下,用了一个队列先进先出保存每一级的目录,while循环,无需递归,需要把.和..目录过滤#include #include #include #include #include using namespace std;void scandir_recursive(const char*