随笔分类 -  Linux

摘要:Linux的netlink机制是非常好的Linux内核与应用层进行双向交互数据的方式。其常用的单播方式可以实现内核为服务端,应用层为客户端的通信方式。如果需要实现应用层为服务端,内核为客户端的通信方式,则需要使用组播。这种场景一般是应用层守护进程需要实现获取内核的某些模块的状态信息。内核中已经定义好... 阅读全文
posted @ 2015-05-23 23:58 sinaxyz 阅读(4086) 评论(0) 推荐(0)
摘要:twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数。由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补Redis和Memcached对集群(cluster)管理指出的不足。项目地址:https://git... 阅读全文
posted @ 2015-02-27 15:26 sinaxyz 阅读(304) 评论(0) 推荐(0)
摘要:创建"hello-1.0.tar.gz"例子步骤:1. 创建src/main.c#include <config.h>#include <stdio.h>intmain (){ printf("Hello World!\n"); return 0;}2. 创建READMEThis is a demonstration package for GNU Automake.3. 创建‘Makefile.am’ and ‘src/Makefile.am’src/Makefile.am:bin_PROGRAMS = hellohello_S 阅读全文
posted @ 2013-04-23 10:45 sinaxyz 阅读(425) 评论(0) 推荐(0)
摘要:本章将围绕对象数据库和索引文件展开,便于理解git的工作机制和原理1. 先建立一个git仓库$mkdir test-project$cd test-project$git init$echo ‘Hi, sinaxyz’>file.txt$git add .$git commit -a -m “initial commit” //此处的-m选项表示“后面的参数是本次提交的历史记录”$echo ‘Hi, sinaxyz!’>file.txt$git commit -a -m “add emphasis”$git log //使用log命令查看一下通过前面所学可知,git会对每次comm 阅读全文
posted @ 2013-04-03 21:24 sinaxyz 阅读(331) 评论(0) 推荐(0)
摘要:1. git查看“commit”的历史记录。# git log# git show//查看详细信息#git show 5b888402aadd3cd41b3fe8c84a8658da07893b20//使用检验值#git show 5b888 //只要能区别与其他名称就足够了#git show master //显示主分支最近的更新#git show HEAD //使用HEAD字段可以代表当前分支的头(也就是最近一次commit)#git show HEAD^//查看HEAD的父母的信息#git show HEAD^^ //查看HEAD的父母的父母的信息#git show HEAD~4 //查 阅读全文
posted @ 2013-03-30 22:49 sinaxyz 阅读(211) 评论(0) 推荐(0)
摘要:1. git使用帮助查看man git-commitman git-pullman git-merge2. 任何人在使用git之前,需要提交简单的个人信息,以便git区分不同的提交者。# git config -global user.name "your name"# git config -global user.emailyourname@example.com3. 开启一名为myproject的项目,基本操作如下:# cd myproject# git init# git add .# git commit //这个步骤会自动进入编辑状态,要求填写有关本次提交的“开 阅读全文
posted @ 2013-03-29 22:50 sinaxyz 阅读(232) 评论(0) 推荐(0)
摘要:一、awk命令格式awk option program file-F fs 指定行中分隔数据字段分隔符-f file 指定读取程序的文件名-v var=value 定义awk程序中的一个变量及其默认值-mf N 指定要处理的数据文件中的最大字段数-mr N 指定数据文件中的最大数据行数-W keyword 指定awk的兼容模式或警告等级二、awk进阶1、使用变量awk支持两种不同类型的变量:内建变量,自定义变量。1> 字段和数据行分隔符变量数据字段变量允许使用$符号和数据字段在数据行中位置对应的数值来引用该数据行中的字段。因此... 阅读全文
posted @ 2012-12-18 21:55 sinaxyz 阅读(2430) 评论(0) 推荐(0)
摘要:一、多行命令在使用sed编辑器的基本命令时,所有的sed编辑器命令都是对单行数据执行操作。sed编辑器也可以对多行数据进行处理,包含了3个可用来处理多行文本的特殊命令。1》N:将数据流中的下一行加进来创建一个多行组来处理。2》D:删除多行组中的一行。3》P:打印钓竿组中的一行。1.单选的next命令小写n命令会告诉sed编辑器移动到数据流下一文本行,而不用重新回到命令的最开始再执行一遍。通常sed编辑器会在移动到数据流中的下一文本行前,在这行上执行所有定义好的命令。$ cat data4This is the header lineThis is data lineThis is the la 阅读全文
posted @ 2012-12-17 21:53 sinaxyz 阅读(863) 评论(0) 推荐(0)
摘要:1、sed编辑器被称作流编辑器(stream aditor),跟普特的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可以基于输入到命令行的或是存储在命令文本中的命令来处理数据流中的数据。它每次从输入中读取一行,用提供的编辑命令匹配数据、按命令中指定的方式修改流中的数据,然后生成的数据输出到STDOUT。在流编辑器将所有命令与一行数据进行匹配后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会停止。使用sed命令格式如下 阅读全文
posted @ 2012-12-16 19:41 sinaxyz 阅读(11588) 评论(1) 推荐(1)
摘要:Linux shell正则表达式定义:用来过滤文本的模式模板。正则表达式类型:正则表达式是用正则表达引擎(regular expression engine)实现的。在Linux中,有两种流行的正则表达式引擎:1》POSIX基本正则表达式(BRE)引擎;2》POSIX扩展正则表达式(ERE)引擎。1、纯文本$ echo "This is a test" | sed -n '/test/p'2、特殊字符正则表达式的特殊字符包括:.*[]^${}\+?|()$ echo "The cost is \$4.00" | sed -n '/ 阅读全文
posted @ 2012-12-16 13:06 sinaxyz 阅读(2015) 评论(0) 推荐(1)
摘要:可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏。可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失。可重入函数使用的变量有两种情况:1.使用局部变量,变量保存在CPU寄存器中或者堆栈中;2.使用全局变量,但是这时候要注意保护全局变量(防止任务中断后被其它任务改变变量)。void strcpy(*dest,*src){ while(* dest++ = *src ++){;} *dest = NUL;}分析:上面的函数用于字符串复制,而参数是存放在堆栈中的,故而改函数可以被多任务调用,而不必担心各个任务调用期间会互... 阅读全文
posted @ 2012-09-10 22:21 sinaxyz 阅读(2827) 评论(0) 推荐(0)
摘要:第二章 Linux内核1 内核开发特点1)内核编译时不能访问C库;2)浮点数很难使用;3)内核只有一个定长堆栈;4)注意同步和并发。第三章进程管理1 current宏:查找当前运行进程的进程描述符。2 进程状态(5种)TASK_RUNNING :1)正在运行;2)在运行队列中等待执行。TASK_INTERRUPTIBLE:进程正在睡眠,可以被信号唤醒。TASK_UNINTERRUPTIBLE:进程正在睡眠,不会收到信号被唤醒。TASK_ZOMBIE:僵死态,进程已经结束,父进程未使用wait4()。TASK_STOPPED3 进程上下文进程进入内核空间时,current宏依然有效,内核“代表进 阅读全文
posted @ 2012-08-20 20:23 sinaxyz 阅读(2948) 评论(0) 推荐(0)
摘要:1.page 主要成员atomic_t count;//这个页的引用数. 当这个 count 掉到 0, 这页被返回给空闲列表.void *virtual;//如果页被映射,则表示这页的内核虚拟地址; 否则, NULL.unsigned long flags;//描述页状态的一套位标志. 这些包括 PG_locked, 它指示该页在内存中已被加锁, 以及 PG_reserved,//它防止内存管理系统使用该页2.vm_area_struct 主要成员unsigned long vm_start;//VMA 开始于unsigned long vm_end; //VMA 结束struct file 阅读全文
posted @ 2012-08-20 20:12 sinaxyz 阅读(453) 评论(0) 推荐(0)
摘要:1、将文件checkout到本地目录svn checkoutpath(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co2、往版本库中添加新的文件svnaddfile例如:svn add test.php(添加test.php)svn add*.php(添加当前目录下所有的php文件)3、将改动的文件提交到版本库svn commit-m "LogMessage"[-N][--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)例如:svn commit -m & 阅读全文
posted @ 2012-08-20 17:01 sinaxyz 阅读(244) 评论(0) 推荐(0)
摘要:linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进程的方法首先,我们可以用top命令来查看服务器当前是否有僵尸进程,在下图中可以看到僵尸进程数的提示,如果数字大于0,那么意味着服务器当前存在有僵尸进程下面,我们用ps和grep命令寻找僵尸进程ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'命令注解:-A 参数列出所有进程-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数因为状态为 z或者Z的进程为僵尸进程,所以我们使用grep抓取 阅读全文
posted @ 2012-08-20 16:39 sinaxyz 阅读(288) 评论(0) 推荐(0)
摘要:fork创建一个新进程clone按指定条件创建子进程execve运行可执行文件exit中止进程_exit立即中止当前进程getdtablesize进程所能打开的最大文件数getpgid获取指定进程组标识号setpgid设置指定进程组标志号getpgrp获取当前进程组标识号setpgrp设置当前进程组标志号getpid获取进程标识号getppid获取父进程标识号getpriority获取调度优先级setpriority设置调度优先级modify_ldt读写进程的本地描述表nanosleep使进程睡眠指定的时间nice改变分时进程的优先级pause挂起进程,等待信号personality设置进程运 阅读全文
posted @ 2012-08-20 15:02 sinaxyz 阅读(966) 评论(0) 推荐(0)
摘要:select系统调用select系统调用允许程序同时在多个底层文件描述符上等待输入的到达(或输出的完成)。这意味着终端程序可以阻塞到有事情可做为止。类似的,服务器也可以通过同时在多个打开的套接字上等待请求到来的方法来处理程序。select实现1、使用copy_from_user从用户空间拷贝fd_set到内核空间2、注册回调函数__pollwait3、遍历所有fd,调用其对应的poll方法(对于socket,这个poll方法是sock_poll,sock_poll根据情况会调用到tcp_poll,udp_poll或者datagram_poll)4、以tcp_poll为例,其核心实现就是__po 阅读全文
posted @ 2012-08-20 11:16 sinaxyz 阅读(1767) 评论(0) 推荐(1)
摘要:简介:Linux中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。基本 Linux I/O 模型的简单矩阵每个I/O模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。同步阻塞I/O最常用的一个模型是同步阻塞I/O模型。在这个模型中,用户空间的应用程序执行一个系统调用 阅读全文
posted @ 2012-08-20 10:46 sinaxyz 阅读(470) 评论(0) 推荐(0)