January 13, 2011
3.6.4 Make管理器的使用
"\u003cp\u003e使用Make管理器非常简单,只需在make命令的后面键入目标名即可建立指定的目标,如果直接运行make,则建立Makefile中的第一个目标。\u003c/p\u003e\n\u003cp\u003e此外 make 还有丰富的命令行选项,可以完成各种不同的功能。下表3.17 列出了常用的make命令行选项。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e表3.17 make的命令行选项\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e命 令 格 式 含 义\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e-C dir 读入指定目录下的Makefile\u003c/p\u003e\n\u003cp\u003e-f file 读入当前目录下的file文件作为Makefile\u003c/p\u003e\n\u003cp\u003e-i 忽略所有的命令执行错误\u003c/p\u003e\n\u003cp\u003e-I dir 指定被包含的Makefile所在目录\u003c/p\u003e\n\u003cp\u003e-n 只打印要执行的命令,但不执行这些命令\u003c/p\u003e\n\u003cp\u003e-p 显示make变量数据库和隐含规则\u003c/p\u003e\n\u003cp\u003e-s 在执行命令时不显示命令\u003c/p\u003e\n\u003cp\u003e-w 如果make在执行过程中改变目录,则打印当前目录名\u003c/p\u003e\u003c/blockquote\u003e"
January 13, 2011
3.6.3 Makefile规则
"\u003cp\u003eMakefile 的规则是Make 进行处理的依据,它包括了目标体、依赖文件及其之间的命令语句。一般的,Makefile 中的一条语句就是一个规则。在上面的例子中,都显示地指出了Makefile中的规则关系,如“$(CC) $(CFLAGS) -c $\u0026lt; -o $@”,但为了简化Makefile的编写,make还定义了隐式规则和模式规则,下面就分别对其进行讲解。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.隐式规则\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e隐含规则能够告诉make 怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可。Make 会自动搜索隐式规则目录来确定如何生成目标文件。如上例就可以写成:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eOBJS = kang.o yul.o\u003c/p\u003e\n\u003cp\u003eCC = Gcc\u003c/p\u003e\n\u003cp\u003eCFLAGS = -Wall -O -g\u003c/p\u003e\n\u003cp\u003esunq : $(OBJS)\u003c/p\u003e\n\u003cp\u003e$(CC) $^ -o $@\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e为什么可以省略后两句呢?因为Make的隐式规则指出:所有“.o”文件都可自动由“.c”\u003c/p\u003e\n\u003cp\u003e文件使用命令“$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c –o file.o”生成。这样“kang.o”和“yul.o”就会 …\u003c/p\u003e"
January 13, 2011
3.6.2 Makefile变量
"\u003cp\u003e上面示例的Makefile在实际中是几乎不存在的,因为它过于简单,仅包含两个文件和一个命令,在这种情况下完全不必要编写Makefile 而只需在Shell 中直接输入即可,在实际中使用的Makefile往往是包含很多的文件和命令的,这也是Makefile产生的原因。下面就可给\u003c/p\u003e\n\u003cp\u003e出稍微复杂一些的Makefile进行讲解:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003esunq\u003c/strong\u003e:kang.o yul.o\u003c/p\u003e\n\u003cp\u003eGcc kang.o bar.o -o myprog\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ekang.o\u003c/strong\u003e : kang.c kang.h head.h\u003c/p\u003e\n\u003cp\u003eGcc –Wall –O -g –c kang.c -o kang.o\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eyul.o\u003c/strong\u003e : bar.c head.h\u003c/p\u003e\n\u003cp\u003eGcc – Wall –O -g –c yul.c -o yul.o\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e在这个Makefile中有3 个目标体(target),分别为sunq、kang.o和yul.o,其中第一个目标体的依赖文件就是后两个目标体。如果用户使用命令“make sunq”,则make管理器就是找到sunq目标体开始执行。\u003c/p\u003e\n\u003cp\u003e这时,make会自动检查相关文件的时间戳。首先,在检查“kang.o”、“yul.o”和“sunq”3 个文件 …\u003c/p\u003e"
January 13, 2011
3.6.1 Makefile基本结构
"\u003cp\u003e\u003cstrong\u003e3.6.1 Makefile基本结构\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMakefile 是Make 读入的惟一配置文件,因此本节的内容实际就是讲述Makefile 的编写规则。在一个Makefile中通常包含如下内容:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e需要由make工具创建的目标体(target),通常是目标文件或可执行文件;\u003c/li\u003e\n\u003cli\u003e要创建的目标体所依赖的文件(dependency_file);\u003c/li\u003e\n\u003cli\u003e创建每个目标体时需要运行的命令(command)。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e它的格式为:\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003etarget: dependency_files\u003c/p\u003e\n\u003cp\u003ecommand\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e例如,有两个文件分别为hello.c 和hello.h,创建的目标体为hello.o,执行的命令为gcc\u003c/p\u003e\n\u003cp\u003e编译指令:gcc –c hello.c,那么,对应的Makefile就可以写为:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#The simplest example\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ehello.o: hello.c hello.h\u003c/strong\u003e \u003cstrong\u003e//\u003cstrong\u003e\u003cstrong\u003e要创建的目标体所偏依赖的文件\u003c/strong\u003e\u003c/strong\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003egcc\u003c/strong\u003e **–**\u003cstrong\u003ec hello.c\u003c/strong\u003e **–**\u003cstrong\u003eo hello.o\u003c/strong\u003e \u003cstrong\u003e//\u003cstrong\u003e\u003cstrong\u003e创建目标体要运行的命令\u003c/strong\u003e\u003c/strong\u003e\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e接着就可以使用make了。使用make的格式为:make target,这样make就会自动读入Makefile(也可 …\u003c/p\u003e"
January 11, 2011
apache突然出现Too many errors in select loop. Child process exiting的解决办法
"\u003cp\u003e[Fri Mar 13 19:30:08 2009] [notice] Child 2012: Acquired the start mutex.\u003c/p\u003e\n\u003cp\u003e[Fri Mar 13 19:30:08 2009] [notice] Child 2012: Starting 250 worker threads.\u003c/p\u003e\n\u003cp\u003e[Fri Mar 13 19:30:08 2009] [notice] Child 2012: Listening on port 80.\u003c/p\u003e\n\u003cp\u003e[Fri Mar 13 19:30:08 2009] [error] (OS 10038)An operation was attempted on something that is not a socket. : Too many errors in select loop. Child process exiting.\u003c/p\u003e\n\u003cp\u003e[Fri Mar 13 19:30:08 2009] [notice] Child 2012: Exit event signaled. Child process is ending.\u003c/p\u003e"
January 11, 2011
CentOS(RedHat)安装Adobe Flash Player插件 For firefox全过程
"\u003cp\u003e随便打开一个带Flash的网站,提示需要安装插件,使用firefox自带功能安装失败(图1所示)。\n浏览器默认下载安装的插件失败之后,点“手动安装”会自动跳转到Adobe Flash Player下载页面:\u003c/p\u003e\n\u003cp\u003e或者直接先打开Adobe Flash Player下载页面:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash\"\u003ehttp://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e选择”.rpm For Linux“ 显示并下载:\u003c/p\u003e\n\u003cp\u003e下载完后执行安装:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[root@CentOS Desktop]# rpm -ivh flash-plugin-9.0.124.0-release.i386.rpm\u003c/p\u003e\n\u003cp\u003ePreparing…########################################### [100%]\u003c/p\u003e\n\u003cp\u003e1:flash-plugin ########################################### [100%]\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e[root@CentOS Desktop]#\u003c/p\u003e\n\u003cp\u003e安装成功后重新重动系统既可。\u003c/p\u003e"
January 11, 2011
Linux对象存储文件系统的技术架构研究
"\u003cp\u003e随着高性能计算由传统的主机方式向网络化集群演变,传统的基于主机的存储架构已逐渐向网络化存储发展,计算和存储分离的趋势越来越明显。针对 SAN 和 NAS 的不足,国际上已开展针对 Linux 集群的新型文件系统――对象存储文件系统的研究,本文重点论述了存储对象文件系统的架构、技术特点,并针对Lustre 对象存储文件系统进行了初步测试,结果表明对象存储文件系统在可扩展性、性能、易用性等方面都有显著提高,随着网络化存储技术的不断成熟,对象存储文件系统将成为重要的发展方向。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、引言\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e高性能计算已由传统的主机方式逐渐向集群方式演变,如TOP500中,1998年只有2台系统是集群方式,而到2003年已有208台为集群系统。随着高性能计算体系结构的发展变化,传统的基于主机的存储架构已成为新的瓶颈,不能满足集群系统的需求。集群的存储系统必须有效解决两个主要问题:(1)提供共享访问数据,便于集群应用程序的编写和存储的负载均衡;(2)提供高性能的存储,在I/O级和数据吞吐率方面能满足成百上千台规模的Linux集群服务器聚合访问的需求。目前,网络化存储已成为解决集群系统高性能存储的有效技术途径。\u003c/p\u003e\n\u003cp\u003e国际 …\u003c/p\u003e"
January 6, 2011
MYSQL主从失败,报错 Got fatal error 1236 后恢复过程
"\u003cp\u003e环境:\nMysql: 5.1.37 dual master(节点为A,B)\nOS: centos5.3 x64\u003c/p\u003e\n\u003cp\u003e由于我今天突然将重新启动从服务,导致MYSQL一边的复制失败,如下:\u003c/p\u003e\n\u003cp\u003e从服务器节点A启动slave就报下面的错误:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e090910 22:47:18 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)\n090910 22:47:18 [ERROR] Got fatal error 1236: ‘Client requested master to start replication from impossible position’ from master when reading data from binary log\n090910 22:47:18 [Note] Slave I/O thread exiting, read up to log …\u003c/p\u003e\u003c/blockquote\u003e"
January 6, 2011
OAuth 核心 1.0 版 中文翻译版
"\u003cp\u003eOAuth 核心 1.0\nAbstract\nOAuth协议致力于使网站和应用程序(统称为消费方)能够在无须用户透露其认证证书的情况下,通过API访问某个web服务(统称为服务提供方)的受保护资源。更一般地说,OAuth为API认证提供了一个可自由实现且通用的方法。\u003c/p\u003e\n\u003cp\u003e一个典型的例子是某打印服务提供商printer.example.com(消费方),希望在无须用户提供其照片存储站点密码的情况下,访问用户储存在photos.example.net(服务提供方)上的个人照片。\u003c/p\u003e\n\u003cp\u003eOAuth不强求一个特定的用户接口或操作模式,也不限定服务提供方如何验证用户,特别适合认证证书对消费方不可用的情况,例如OpenID。\u003c/p\u003e\n\u003cp\u003eOAuth致力于为托管web服务认证提供统一的体验和实现,形成一个社区驱动的协议。OAuth构建于已被多个站点独立实现的已有协议和最佳化实践之上,是一个被大小服务提供者所支持、并为应用开发者和用户增进持续性和可信度的开放标准。\u003c/p\u003e\n\u003cp\u003e——————————————————————————–\u003c/p\u003e\n\u003cp\u003eTable of Contents\n1. 作者\n2. 记号与惯例\n3. 术语定义\n4. …\u003c/p\u003e"
January 2, 2011
使用 Portmaster 升级 Ports
"\u003cp\u003e\u003cstrong\u003ePortmaster\u003c/strong\u003e 是另外一个用来升级已安装的 ports 的工具。 \u003cstrong\u003ePortmaster\u003c/strong\u003e 被设计成尽可能使用 “基本” 系统中能找到的工具 (它不依赖于其他的 ports) 和 \u003ccode\u003e/var/db/pkg/\u003c/code\u003e 中的信息来检测出需要升级的 ports。你可以在 \u003ca href=\"http://www.freebsd.org/cgi/url.cgi?ports/ports-mgmt/portmaster/pkg-descr\"\u003e \u003ccode\u003eports-mgmt/portmaster\u003c/code\u003e\u003c/a\u003e 找到它:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# cd /usr/ports/ports-mgmt/portmaster\n# make install clean\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003ePortmaster\u003c/strong\u003e groups ports into four categories:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePortmaster\u003c/strong\u003e 把 ports 分成4类:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRoot ports (不依赖其他的 ports,也不被依赖)\u003c/li\u003e\n\u003cli\u003eTrunk ports (不依赖其他的 ports,但是被其他的 ports 依赖)\u003c/li\u003e\n\u003cli\u003eBranch ports (依赖于其他的 ports,同时也被依赖)\u003c/li\u003e\n\u003cli\u003eLeaf ports (依赖于其他的 ports,但不被依赖)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e你可以使用 \u003ccode\u003e-L\u003c/code\u003e 选项列出所有已安装的 ports 和查找存在更新的 ports:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# portmaster -L …\u003c/code\u003e\u003c/pre\u003e"
January 2, 2011
/usr was not properly dismounted 解决办法
"\u003cp\u003e今日安装好freebsd系统后,就改了一下/etc/rc.conf文件,然后输入reboot重启\n重启后发现一个问题,我的用户都无法通过ttyv0-8登陆,无论什么用户,然后没办法,再重启进入单用户模式,df 发现很多区没挂上去,mount -a 挂上/etc/fstab中默认的分区,提示出来了。\n/usr was not properly dismounted\n/tmp was not properly dismounted\n/var was not properly dismounted\u003c/p\u003e\n\u003cp\u003e然后按照平时的习惯\nfsck\nfsck -y\nfsck -p\n结果问题依旧,唉!汗啊!!\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e于是上网找方法,找到了这个:\u003c/strong\u003e\n学习的BSD的教材上,作者明确指出不要用reboot和halt执行重启和关机动作,那样系统不会执行rc.shutdown脚本导致不能在文件系统上设立“清除”标记,下次开机时系统会自动调用FSCK来检查文件系统一的。\n呵呵,reboot halt -p 都不让用呵呵。没办法。只有这样用了\n\u003cstrong\u003eWARNING: / was not properly dismounted\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我的机器只有 …\u003c/p\u003e"
December 30, 2010
怎么检查windows下apache加载的mpm模块是什么?
"\u003cp\u003e现在有很多php运行环境都apache等都用在windows主机上了,但是性能和linux上的应该有些差。于是有很多优化windows下apache性能。优化apache加载mpm是必不可少的一环。\u003c/p\u003e\n\u003cp\u003e怎么检查自己的windows服务器中apache加载的mpm模块是什么呢?\u003c/p\u003e\n\u003cp\u003e其实很简单:\u003c/p\u003e\n\u003cp\u003e“开始-运行-cmd” 打开命令提示符\u003c/p\u003e\n\u003cp\u003e执行”httpd -l”就可以了。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/12/windows_apache_modules.gif\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2010/12/windows_apache_modules.gif\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e"
December 28, 2010
linux下vsftpd用户和apche用户目录权限的问题
"\u003cp\u003e比如我的网站的目录在/var/www/demo下,其中网站根目录下有个upload文件夹是专门用来上传图片的。\u003c/p\u003e\n\u003cp\u003e所以我把这个目录的权限设置为了 777 ,然后通过php程序自动在upload目录下建立了一个文件夹090602,并在090602下通过程序上传一个1.jpg到这个目录下,这样出现了问题一:我通过客户端的flashfxp连接上去之后不能删除090602这个目录及其下的1.jpg,原因是这个090602和1.jpg的所有者是apache系统下的daemon组的daemon 。\u003c/p\u003e\n\u003cp\u003e问题二:我现在通过flashfxp以newuser(它是属于我新建的一个组flashfxp)登录vsftpd并在网站的upload目录下建立一个090603目录,但这样到了09年6月3号的时候php程序却不能在090603这个目录下上传文件了 。\u003c/p\u003e\n\u003cp\u003e请问有什么好的方法让upload目录下的所有目录及文件同时属于flashfxp组的newuser用户和apache系统下的daemon组的daemon用户呢?或者大家有什么更好的方法呢?\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e呵呵,解决了,方法如下:\n把 newuser 和 daemon 这两个用 …\u003c/p\u003e\u003c/blockquote\u003e"
December 28, 2010
FreeBSD学习笔记整理(内容取自chinaunix)
"\u003cp\u003e\u003cstrong\u003e1、查看 CPU:\u003c/strong\u003e\nsysctlhw.modelhw.ncpu\ndmesg|grep”CPU:”\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2、查看内存:\u003c/strong\u003e\ndmesg|grep “real memory”|awk -F ‘[()]’ ‘{print$2,$4,$7,$8}’\n查看 swap:\ntop|grep”Swap:”|awk\u0026rsquo;{print$1,$2}’\n\u003cstrong\u003e3、查看硬盘:\u003c/strong\u003e\ndiskinfo‐vt/dev/ad0\ndisklable/dev/ad0s2#查看分区信息\n看硬盘大小:\ndmesg|grep”sector”|awk\u0026rsquo;{print$1,$2}’\ndiskinfo‐v/dev/da0|grep”inbytes”|awk‐F\u0026rsquo;[()]”{print$2}’\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e4、查看服务器品牌:\u003c/strong\u003e\ndmesg|grep”ACPIAPIC”\n\u003cstrong\u003e5、挂载文件系统:\u003c/strong\u003e\nfat32:mount_msdosfs‐Lzh_CN.eucCN/dev/ad0s1/mnt\nntfs:mount_ntfs‐CeucCn/dev/ad0s1/mnt\ncdrom:mount_cd9660/dev/acd0/mnt\n注:ntfs …\u003c/p\u003e"
December 28, 2010
增加FreeBSD服务器的swap交换分区
"\u003cp\u003e**** ****\u003cstrong\u003e晚上有客户反映服务器无法访问了,我好不容易蹭了附近邻居的一个无线网络,连上服务器后发现了很多异常链接,swap交换空间占用99%左右,日志中发现如下记录\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eJul 27 23:52:19 freebsd1 kernel: pid 49901 (httpd), uid 1002, was killed: out of swap space\u003c/p\u003e\n\u003cp\u003e立即重启了apache后,swapinfo显示占用情况很快从5%迅速上升到64%直到99%\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e在 FreeBSD 中创建交换文件\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e确认您的内核配置包含虚拟磁盘(Memory disk)驱动 (md(4))。它在 GENERIC 内核中是默认的。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003edevice md # Memory \u0026#34;disks\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e创建一个交换文件 \u003cstrong\u003e64M\u003c/strong\u003e(/usr/swap0):\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"3\"\u003e\n\u003cli\u003e赋予它(/usr/swap0)一个适当的权限:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# chmod 0600 /usr/swap0\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"4\"\u003e\n\u003cli\u003e在 /etc/rc.conf 中启用交换文件: …\u003c/li\u003e\u003c/ol\u003e"