- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 通用单链表(一)
通用单链表我们在学习链表的时候,大部分老师和大部分书籍都只会教我们常规的链表,此处常规是指链表的数据部分只适用单一的数据类型,对于怎么扩展到适用所有的数据类型,大多都是让学生自己去摸索,甚至根本就没有提及,可能中国的老师和作者都觉得每个学习数据结构的人都跟linux的创始人一样聪明吧! 我在学习和写代码的过程中,觉得链表两个比较重要点大多数老师和书籍都语焉不详。 1. 链表节点的结构 2. 如
2017-03-11 22:48:07
448
原创 ansible - nagios和zabbix客户端的部署
nagios的目录结构[root@mysql nagios]# tree .├── files│ ├── nagios-plugins-2.1.2.tar.gz│ └── nrpe-3.0.1.tar.gz├── handlers │ └── main.yml├── tasks│ ├── ipt.sh│ └── main.yml├
2016-11-28 19:40:10
1040
原创 nagios编译安装(使用nginx做反向代理)
参考网址: https://assets.nagios.com/downloads/nagioscore/docs/Installing_Nagios_Core_From_Source.pdf#_ga=1.215318228.21109006.1479963831Package requirements: yum install wget gcc glibc gd gd-devel
2016-11-25 20:56:25
1031
原创 lvm的创建,扩展和缩减
lvm: logical volumn managerpv: physical volumn vg: volumn group lv: logical volumn1. 创建lvm - 01 创建一个类型为8e(lvm)的分区 /dev/sdb1 - 02 创建pv # pvcreate /dev/sdb1 - 03 创建vg # vgcreate m
2016-09-29 15:35:03
652
原创 lvs-nat
# lvs-nat网络配置: ---------> web01(RS01) director(调度器)---| ---------> web02(RS02)director的ip配置: vip(用户请求的ip): 192.168.49.172 dip(后端RS的网关): 10.0.0.1
2016-08-30 10:38:59
437
原创 iptables--DNAT
#!/bin/bash# dnat # # 内网服务: 192.168.49.85:80 # 网关: 192.168.49.65 # 请求主机: 172.16.0.129 # 请求过程: # 172.16.0.129 –> 192.168.49.65 –to-destination 192.168.49.85:8080iptables -t nat -Fiptables -Fipta
2016-08-29 19:52:27
482
原创 iptables--SNAT
#!/bin/bash # nat # # # 使用VMware实验,网络规划如下 # 三台虚拟机,一台做路由转发(route),另外两台做测试机(node1, node2) # # ip规划: # route: # 网卡1: 桥接 192.168.49.65 # 网卡2: 仅主机 172.16.0.128 # node1: 桥接 192.168.49.85 网关:
2016-08-29 19:50:16
542
原创 iptables自定义链
# 自定义链iptables -Fiptables -X clean_iniptables -N clean_iniptables -A clean_in -p tcp --syn -m state --state NEW -j DROPiptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROPiptables -A clean_in -p
2016-08-29 10:24:27
4090
原创 iptables总结脚本
# 此脚本是本人学习iptables时编写,并不适用其他机器,仅供学习参考编写策略: 默认策略为ACCEPT, 这里我没有更改默认策略,而是先允许指定的规则通过,然后再DROP所有tcp,udp,icmp请求 读者可根据自己的习惯来编写规则,比如默认禁止所有,再允许指定规则iptables -F# 允许所有已建立的连接 iptables -A INPUT -m state –state E
2016-08-29 09:58:44
604
原创 脚本实现重新对一个磁盘分区格式化
主要分为三步 1. 删除原有分区 2. 使用fdisk进行分区 3. 创建文件系统#!/bin/bash#disks=$(fdisk -l 2>/dev/null |grep '^Disk /dev/[sh]d[a-z]' |awk -F: '{print $1}' |cut -d' ' -f2 |awk -F '/' '{print $3}' |tr '\n' ' ')reparti
2016-06-28 16:25:10
892
原创 centos中python2.7及pip的安装(python3的安装方法类似)
centos python2.7以及pip的安装 提前准备好所需要的源码包 python2.7 pip setuptools zlib zlib-devel1. python2.7安装下载python2.7的tar包,解压./configure --prefix=/usr/local/python27make && make install编辑配置文件 ~/.bash_p
2016-06-23 11:12:50
952
原创 ansible学习笔记(二) -- roles
上一节把整个布局大概列了一下,这节重点记录一下 /etc/ansible/roles/tomcat 这个目录下的各目录的意义此目录的目录结构如下: . ├── files │ └── tomcat-initscript.sh ├── handlers │ └── main.yml ├── tasks │ └── main.yml
2016-05-10 18:09:24
2404
原创 ansible学习笔记(一) -- roles
ansible role exercise git-link: https://github.com/ansible/ansible-examplesDirectory Layout# tree /etc/ansible/.├── ansible.cfg├── group_vars # here we assign vari
2016-05-10 17:38:06
620
原创 创建SysV系统脚本(可指定运行级别自动启动)
/etc/rc.d/init.d /etc/init.d服务类脚本 sysV /etc/rc.d/init.d 必须有的选项: start stop restart statuschkconfig 脚本的前面必须有下面两行,如果没有 chkconfig命令检测不到此脚本 # chkconfig: runlevels SS KK
2016-04-17 19:37:42
1266
原创 shell小脚本
第一题 要求: 1. 设定变量FILE的值为/etc/passwd 2. 依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如: hello, root, your shell: /bin/bash 3. 统计一共有多少用户#!/bin/bashFILE="/etc/passwd"context=`cat /etc/pa
2016-04-10 17:15:21
411
原创 C语言小项目(学生信息管理系统)
/*(1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: 1.系统以菜单方式工作 2.学生信息录入功能(学生信息用文件保存)---输入 3.学生信息浏览功能——输出 4.查询、排序功能——算法 1、按学号查询 2、按姓名查询 5.学生
2016-04-06 09:07:44
22143
8
原创 可靠信号和不可靠信号的测试
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>/* 1. 创建子进程和父进程 2. 注册 SIGINT 非实时信号 SIGRTMIN 实时信号,添加到进程阻塞中 3. 注册用户自定义信号 SIGQUIT 4. 子进程发送3次非实时信号,发3次实时信号
2016-03-23 21:13:17
533
原创 信号发送(sigqueue)和接收(sigaction)
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>void handle(int signum, siginfo_t *info, void *p);int main(void){ pid_t fpid; union sigval value; // 待发送的附加信息
2016-03-23 13:40:14
1798
原创 函数指针做函数参数
#include <stdio.h>#include <stdlib.h>// 函数声明int add(int, int);int load_func(int (*pfunc)(int, int));int main(void){ int (*padd)(int, int); // 定义一个函数指针变量 padd = &add; // &符号可要可不
2016-03-20 18:56:42
489
原创 wait如何处理多进程(多个子进程)
#include <stdio.h>#include <stdlib.h>#include <unistd.h>/* linux 系统调用 wait() * 当用fork()创建子进程,子进程在退出后父进程没有调用wait * 就会产生僵尸进程. * * 下面是用fork循环创建多个子进程,在父进程里调用一次wait * 只能回收一个子进程. * * 下面展示如何用wait()回
2016-03-20 15:39:58
4743
原创 fork函数02
#include <stdio.h>#include <stdlib.h>#include <unistd.h>// 创建procnum个子进程,每个进程循环loopnum次int main(void){ int procnum = 0, loopnum = 0; int i = 0, j = 0; pid_t fpid; printf("procnum: ")
2016-03-17 19:52:46
231
原创 通过execve在两个进程间传递环境变量
进程1:execve 进程2:hello execve.h 的代码如下:#include <stdio.h>#include <stdlib.h>#include <unistd.h>/* #include <unistd.h> execve是系统调用,下面的函数是execve的库函数 extern char **environ; int execl(c
2016-03-17 19:35:55
2710
原创 vfork函数
#include <stdio.h>#include <stdlib.h>#include <unistd.h>/* vfork和fork的区别: 1.vfork创建的子进程和父进程共享线性地址空间;fork创建的子进程具有独立的线性地址空间 2.vfork先执行子进程;fork子进程和父进程的执行顺序是随机的 3.vfork创建的子进程
2016-03-17 17:12:40
387
原创 fork函数01
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <errno.h>int main(void){ pid_t fpid; // pid_t-->unsigned int int count = 0; fpid = fork(); // 错误
2016-03-17 15:27:59
240
原创 sftp通过秘钥上传,修改文件
sftp是通过openssh与服务端建立连接的,默认端口为22新建一个sftp的用户,这里就叫sftp useradd -s /sbin/nologin sftp在sftp用户的家目录加上客户端的公钥 新建的sftp用户是没有 .ssh这个目录的,要自己手动去创建mkdir /home/sftp/.sshcd /home/sftp/.sshtouch authorized_key
2016-03-16 09:47:23
3029
原创 redmine安装部署
redmine数据库配置文件里有三种环境: production, development, testredmine/bin/rails server -b 0.0.0.0 // 默认development环境ruby redmine/bin/rails server -b 0.0.0.0 webrick -e production -d // -e指定环境 -d后台运行red
2016-03-16 09:38:46
809
原创 结构体基础02
#include <stdio.h>#include <stdlib.h>typedef struct _Teacher { char name[100]; char *title; int age; char **p_stu; // 每个老师带的学生} Teacher;// 在堆区分配内存Teacher *create_mem(int count){
2016-03-09 20:39:54
219
原创 vim的一些常用小技巧
当我们要从另外一个文本编辑器复制内容到终端的vim里时,常常会出现复制第二行往下的时候会自动在前面加上空格,如果要手动去掉这些空格会非常不方便 解决方法: 修改vim的配置文件 .vimrc set paste
2016-03-09 14:42:22
230
原创 结构体基础
#include <stdio.h>#include <stdlib.h>typedef struct _Teacher { char name; int age;} Teacher;// 打印结构体成员ageint print_t(Teacher *p, int count){ int i = 0; for (i=0; i<count; i++){
2016-03-09 11:10:08
233
原创 野指针的处理
野指针处理的三个要点: 定义指针时,把指针变量赋值为NULL 释放内存时,先判断指针变量是否为NULL 释放完毕后,把指针变量重新赋值为NULL #include <stdio.h>#include <stdlib.h>void free_mem(char *p){ if (p != NULL){ free(p); p = NULL
2016-03-09 09:48:22
835
原创 多维数组做函数参数问题
编号 数组参数 等效的指针参数 1 一位数组 char a[30] 指针 char * 2 指针数组 char *a[30] 指针的指针 char ** 3 二维数组 char a[10][30] 数组的指针 char (*a)[30]
2016-03-08 16:14:23
396
原创 wiki-confluence乱码问题
confluence里出现乱码,肯定是数据库编码的设置问题,如下:在安装confluence的时候,有两个地方需要配置字符编码1. 创建database的时候2. 连接数据库的时候(JDBC 的链接url)**JDBC的链接设置** jdbc:mysql://hostname:port/database?useUnicode=true&characterEncoding=utf8这个url
2016-03-08 09:20:41
11220
原创 定义一个一维指针指向二维数组并打印
间接证明二维数组在物理上是线性存储的#include <stdio.h>// 证明二维数组在物理上是线性存储的// a[i][j] // a[0] = a+0; a[1] = a+1; a[i] = a+i ;a+i表示第i-1行的地址// *a表示第一行第一列的地址, *a+1表示第一行第二列的地址// 定义一个一维指针指向二维数组的时候, 要将其指向二维数组的第一行第一列的地址,也就是
2016-03-07 22:24:24
1071
原创 二维数组名本质
#include <stdio.h>int main(void){ int a[10][30] = {0}; int (*pa)[30]; // 数组指针 pa = a; printf("pa=%x, pa+1=%x\n", pa, pa+1); printf("a=%x, a+1=%x\n", a, a+1); printf("a[0]=%x,
2016-03-07 21:10:58
435
原创 一维数组名的本质
#include <stdio.h>#include <string.h>/* int a[]; * int (*p)[]; // 定义数组指针 * int *p2 * p = &a; * p2 = a; * p和p2的区别可从下面程序打印的结果看出*/int main(void){ int a[5] = {1, 2, 3, 4, 5}; int i
2016-03-07 20:28:07
1487
原创 字符串模型3:查找字符串str1中字符串str2出现的次数
#include <stdio.h>#include <string.h>// 查找str1中str2出现的次数// 比如:str1 = "haabchnjabchnnjabchuioiabc" 中 str2 = "abc"出现的次数int get_count(char *str1, char *str2, int *pcount){ // 形参pcount的作用是为了计算次数
2016-03-06 20:55:24
3771
原创 字符串模型2:分别取一串字符串中的奇偶字符存放在两个不同的内存块中
#include <stdio.h>/* 有一个字符串”1a2b3d4z”,; * 要求写一个函数实现如下功能, * 功能1:把偶数位字符挑选出来,组成一个字符串1 buf1 * 功能2:把奇数位字符挑选出来,组成一个字符串2 buf2 * 功能3:把字符串1和字符串2,通过函数参数,传送给main,并打印。 * 功能4:主函数能测试通
2016-03-04 11:46:27
655
原创 字符串模型1:打印去掉字符串首尾空格后的字符
#include <stdio.h>#include <string.h>/* 有一个字符串开头或结尾含有n个空格(" helloworld "), 欲去掉前后空格 * 返回一个新字符串. * 要求1:自己定义一个接口 * 要求2:编写测试用例 * int trim_space(char *inbuf, char *outbuf);*//*函数如下*/int trim_spac
2016-03-04 11:35:13
702
原创 中断程序的安装过程
中断程序的安装过程mov cx, offset do0end - offset do0 ; 中断程序的长度cld ; 设置df=0rep movsb ; mov es:[di], word ptr ds:[si]; if df=0 存储器的地址自动增加; inc di; inc si; if df=1
2016-02-01 15:40:13
677
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人