若天明 发表于 2015-1-14 21:18:32

来一发Centos tailf下令

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!我利用过的Linux下令之tailf-跟踪日记文件/更好的tail-f版本
用处申明

  tailf下令几近同等于tail-f,严厉说来应当与tail--follow=name更类似些。当文件更名以后它也能持续跟踪,出格合适于日记文件的跟踪(followthegrowthofalogfile)。与tail-f分歧的是,假如文件不增加,它不会往会见磁盘文件(Itissimilartotail-fbutdoesnotaccessthefilewhenitisnotgrowing.Thishasthesideeffectofnotupdatingtheaccesstimeforthefile,soafilesystemflushdoesnotoccurperiodicallywhennologactivityishappening.)。tailf出格合适那些便携机上跟踪日记文件,由于它能省电,由于削减了磁盘会见嘛(tailfisextremelyusefulformonitoringlogfilesonalaptopwhenloggingisinfrequentandtheuserdesiresthattheharddiskspindowntoconservebatterylife.)。tailf下令不是个剧本,而是一个用C代码编译后的二进制实行文件,某些Linux安装以后没有这个下令,本文供应了怎样编译安装tailf下令的***。

经常使用参数

格局:tailflogfile
静态跟踪日记文件logfile,最后的时分打印文件的最初10行内容。

利用示例

示例一利用tailf下令跟踪日记

#tailflog/WEB.LOG
"seq":5710,
"clientId":1291343201649254,
"presenceStatus":"1"
}}})
16:09:21.324DEBUGhttp-80-79hyjc.cometd.CometdServlet-{"cid":1291343201649002,"op":"recv","ncc0":175}
16:09:21.444DEBUGhttp-80-32hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:21.506DEBUGhttp-80-79hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:23.239DEBUGhttp-80-45hyjc.cometd.CometdServlet-{"cid":1291343201649184,"op":"recv","ncc0":55}
16:09:23.327DEBUGhttp-80-45hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:24.288DEBUGhttp-80-145hyjc.cometd.CometdServlet-{"cid":1291283017076175,"op":"recv","ncc0":82}
16:09:24.339DEBUGhttp-80-81hyjc.cometd.CometdServlet-{"cid":1291283017076151,"op":"recv","ncc0":142}
16:09:24.360DEBUGhttp-80-64hyjc.cometd.CometdServlet-{"cid":1291343201649090,"op":"recv","ncc0":40}
16:09:24.359DEBUGhttp-80-143hyjc.cometd.CometdServlet-{"cid":1291283017076176,"op":"recv","ncc0":66}
16:09:24.878DEBUGhttp-80-145hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:24.892DEBUGhttp-80-143hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:24.896DEBUGhttp-80-64hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:24.906DEBUGhttp-80-81hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:25.095DEBUGhttp-80-115hyjc.filter.AccessCounterFilter-uri=/imx/cometd/service
16:09:25.095DEBUGhttp-80-115hyjc.cometd.CometdServlet-msgTypeIMX_ACTIVE_TESTmsgBody{"clientId":1291343201649002,"presenceStatus":"1","seq":385}
16:09:25.095INFOhttp-80-115imx.client.ImxClient-TxIMX_ACTIVE_TEST{seq=5711,client_id=1291343201649002,presence_status=1(presence_status_online),}
16:09:25.095DEBUGhttp-80-115hyjc.cometd.CometdServlet-{"cid":1291343201649002,"op":"send","sent":0,"rc":1,"msg":{"mt":"IMX_ACTIVE_TEST","mb":{
"seq":5711,
"clientId":1291343201649002,
"presenceStatus":"1"
}}}
Ctrl+C
#

示例二编译安装tailf下令

有些Linux版本不带tailf下令的。
#tailf
-bash:tailf:commandnotfound
#
到代码搜刮网站www.koders.com输出tailf.c就能够搜刮到源代码
tailf.c了局页面:http://www.koders.com/default.aspx?s=tailf.c&submit=Search&la=*&li=*
tailf.c源码页面:http://www.koders.com/c/fidB6EFAC156A7B4C4A46B38039C79B4AD34939EED0.aspx?s=tailf#L1
点左上角的download便可下载,也可间接下载本文附件tailf.zip。
#unziptailf.zip
Archive:tailf.zip
inflating:tailf.c
#ls
tailf.ctailf.zip
#gcc-o/usr/bin/tailftailf.c
tailf.c:34:17:nls.h:没有谁人文件或目次
tailf.c:Infunction`tailf:
tailf.c:53:warning:passingarg2of`fprintfmakespointerfromintegerwithoutacast
tailf.c:Infunction`main:
tailf.c:88:`LC_ALLundeclared(firstuseinthisfunction)
tailf.c:88:(Eachundeclaredidentifierisreportedonlyonce
tailf.c:88:foreachfunctionitappearsin.)
tailf.c:89:`PACKAGEundeclared(firstuseinthisfunction)
tailf.c:89:`LOCALEDIRundeclared(firstuseinthisfunction)
tailf.c:93:warning:passingarg2of`fprintfmakespointerfromintegerwithoutacast
tailf.c:105:warning:passingarg2of`fprintfmakespointerfromintegerwithoutacast
#
修正一下tailf.c的源代码。
第34行四周:正文失落头文件,增添宏界说
//#include"nls.h"
#define_(s)s
第89行四周:把本来的代码正文失落
//setlocale(LC_ALL,"");
//bindtextdomain(PACKAGE,LOCALEDIR);
//textdomain(PACKAGE);
看了源代码以后,你是否是发明实在Linux下令实在其实不太奥秘。
注:本文附件中的tailf.c已修正成上面的模样。
C代码http://codingstandards.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

/*tailf.c--tailalogfileandthenfollowit*Created:TueJan915:49:211996byfaith@acm.org*Copyright1996,2003RickardE.Faith(faith@acm.org)**Permissionisherebygranted,freeofcharge,toanypersonobtaininga*copyofthissoftwareandassociateddocumentationfiles(the"Software"),*todealintheSoftwarewithoutrestriction,includingwithoutlimitation*therightstouse,copy,modify,merge,publish,distribute,sublicense,*and/orsellcopiesoftheSoftware,andtopermitpersonstowhomthe*Softwareisfurnishedtodoso,subjecttothefollowingconditions:**Theabovecopyrightnoticeandthispermissionnoticeshallbeincluded*inallcopiesorsubstantialportionsoftheSoftware.**THESOFTWAREISPROVIDED"ASIS",WITHOUTWARRANTYOFANYKIND,EXPRESSOR*IMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEWARRANTIESOFMERCHANTABILITY,*FITNESSFORAPARTICULARPURPOSEANDNONINFRINGEMENT.INNOEVENTSHALL*THEAUTHORSORCOPYRIGHTHOLDERSBELIABLEFORANYCLAIM,DAMAGESOR*OTHERLIABILITY,WHETHERINANACTIONOFCONTRACT,TORTOROTHERWISE,*ARISINGFROM,OUTOFORINCONNECTIONWITHTHESOFTWAREORTHEUSEOR*OTHERDEALINGSINTHESOFTWARE.**less-Fandtail-fcauseadiskaccesseveryfiveseconds.This*programavoidsthisproblembywaitingforthefilesizetochange.*Hence,thefileisnotaccessed,andtheaccesstimedoesnotneedtobe*flushedbacktodisk.Thisissortofa"stealth"tail.*/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<malloc.h>#include<sys/stat.h>//#include"nls.h"#define_(s)sstaticsize_tfilesize(constchar*filename){structstatsb;if(!stat(filename,&sb))returnsb.st_size;return0;}staticvoidtailf(constchar*filename,intlines){char**buffer;inthead=0;inttail=0;FILE*str;inti;if(!(str=fopen(filename,"r"))){fprintf(stderr,_("Cannotopen"%s"forread
"),filename);perror("");exit(1);}buffer=malloc(lines*sizeof(*buffer));for(i=0;i<lines;i++)buffer=malloc(BUFSIZ+1);while(fgets(buffer,BUFSIZ,str)){if(++tail>=lines){tail=0;head=1;}}if(head){for(i=tail;i<lines;i++)fputs(buffer,stdout);for(i=0;i<tail;i++)fputs(buffer,stdout);}else{for(i=head;i<tail;i++)fputs(buffer,stdout);}fflush(stdout);for(i=0;i<lines;i++)free(buffer);free(buffer);}intmain(intargc,char**argv){charbuffer;size_tosize,nsize;FILE*str;constchar*filename;intcount;//setlocale(LC_ALL,"");//bindtextdomain(PACKAGE,LOCALEDIR);//textdomain(PACKAGE);if(argc!=2){fprintf(stderr,_("Usage:tailflogfile
"));exit(1);}filename=argv;tailf(filename,10);for(osize=filesize(filename);;){nsize=filesize(filename);if(nsize!=osize){if(!(str=fopen(filename,"r"))){fprintf(stderr,_("Cannotopen"%s"forread
"),filename);perror(argv);exit(1);}if(!fseek(str,osize,SEEK_SET))while((count=fread(buffer,1,sizeof(buffer),str))>0)fwrite(buffer,1,count,stdout);fflush(stdout);fclose(str);osize=nsize;}usleep(250000);/*250mS*/}return0;}


#gcc-Wall-o/usr/bin/tailftailf.c
#tailf
Usage:tailflogfile
#

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!

若相依 发表于 2015-1-17 10:35:22

Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。

老尸 发表于 2015-1-24 07:54:05

Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。

只想知道 发表于 2015-2-1 07:42:29

当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。

简单生活 发表于 2015-2-7 03:33:45

选择交流平台,如QQ群,网站论坛等。

admin 发表于 2015-2-20 16:54:36

学习Linux半年了~个人认为不会的多在网上找资料网上有很多资料可以搜索到,LS那位说放手去搞。

变相怪杰 发表于 2015-3-6 19:14:43

清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。

再现理想 发表于 2015-3-13 08:07:12

我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。

小妖女 发表于 2015-3-13 08:07:12

通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?

不帅 发表于 2015-3-20 17:18:10

和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
页: [1]
查看完整版本: 来一发Centos tailf下令