㈠ 如何在linux用户和内核空间中进行动态跟踪
你不记得如何在代码中插入探针点了吗? 没问题!了解如何使用uprobe和kprobe来动态插入它们吧。 基本上,程序员需要在源代码汇编指令的不同位置插入动态探针点。探针点探针点是一个调试语句,有助于探索软件的执行特性(即,执行流程以及当探针语句执行时软件数据结构的状态)。printk是探针语句的最简单形式,也是黑客用于内核攻击的基础工具之一。因为它需要重新编译源代码,所以printk插入是静态的探测方法。内核代码中重要位置上还有许多其他静态跟踪点可以动态启用或禁用。 Linux内核有一些框架可以帮助程序员探测内核或用户空间应用程序,而无需重新编译源代码。Kprobe是在内核代码中插入探针点的动态方法之一,并且uprobe在用户应用程序中执行此操作。使用uprobe跟踪用户空间可以通过使用thesysfs接口或perf工具将uprobe跟踪点插入用户空间代码。使用sysfs接口插入uprobe考虑以下简单测试代码,没有打印语句,我们想在某个指令中插入探针:[source,c\n.test.c#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>编译代码并找到要探测的指令地址:# gcc -o test test.\n# objmp -d test假设我们在ARM64平台上有以下目标代码:0000000000400620 <func_1>: 400620\t90000080\tadr\tx0, 410000 <__FRAME_END__+0xf6f8>并且我们想在偏移量0x620和0x644之间插入探针。执行以下命令:# echo 'p:func_2_entry test:0x620' > /sys/kernel/debug/tracing/uprobe_event\n# echo 'p:func_1_entry test:0x644' >> /sys/kernel/debug/tracing/uprobe_event\n# echo 1 > /sys/kernel/debug/tracing/events/uprobes/enable# ./test&在上面的第一个和第二个echo语句中,p告诉我们这是一个简单的测试。(探测器可以是简单的或返回的。)func_n_entry是我们在跟踪输出中看到的名称,名称是可选字段,如果没有提供,我们应该期待像p_test_0x644这样的名字。test 是我们要插入探针的可执行二进制文件。如果test 不在当前目录中,则需要指定path_to_test / test。0x620或0x640是从程序启动开始的指令偏移量。请注意>>在第二个echo语句中,因为我们要再添加一个探针。所以,当我们在前两个命令中插入探针点之后,我们启用uprobe跟踪,当我们写入events/ uprobes / enable时,它将启用所有的uprobe事件。程序员还可以通过写入在该事件目录中创建的特定事件文件来启用单个事件。一旦探针点被插入和启用,每当执行探测指令时,我们可以看到一个跟踪条目。读取跟踪文件以查看输出:# cat /sys/kernel/debug/tracing/trac\n# tracer: no\n\n# entries-in-buffer/entries-written: 8/8\n#P:\n\n# _—–=> irqs-of\n# / _—-=> need-resche\n# | / _—=> hardirq/softir\n# || / _–=> preempt-dept\n# ||| / dela\n# TASK-PID CP\n# |||| TIMESTAMP FUNCTION# | | | |||| | |我们可以看到哪个CPU完成了什么任务,什么时候执行了探测指令。返回探针也可以插入指令。当返回该指令的函数时,将记录一个条目:# echo 0 > /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo 'r:func_2_exit test:0x620' >> /sys/kernel/debug/tracing/uprobe_event\n# echo 'r:func_1_exit test:0x644' >> /sys/kernel/debug/tracing/uprobe_event\n# echo 1 > /sys/kernel/debug/tracing/events/uprobes/enable这里我们使用r而不是p,所有其他参数是相同的。请注意,如果要插入新的探测点,需要禁用uprobe事件:test-3009 [002] …. 4813.852674: func_1_entry: (0x400644)上面的日志表明,func_1返回到地址0x4006b0,时间戳为4813.852691。# echo 0 > /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo 'p:func_2_entry test:0x630' > /sys/kernel/debug/tracing/uprobe_events count=%x\n# echo 1 > /sys/kernel/debug/tracing/events/uprobes/enabl\n# echo > /sys/kernel/debug/tracing/trace# ./test&当执行偏移量0x630的指令时,将打印ARM64 x1寄存器的值作为count =。输出如下所示:test-3095 [003] …. 7918.629728: func_2_entry: (0x400630) count=0x1使用perf插入uprobe找到需要插入探针的指令或功能的偏移量很麻烦,而且需要知道分配给局部变量的CPU寄存器的名称更为复杂。 perf是一个有用的工具,用于帮助引导探针插入源代码中。除了perf,还有一些其他工具,如SystemTap,DTrace和LTTng,可用于内核和用户空间跟踪;然而,perf与内核配合完美,所以它受到内核程序员的青睐。# gcc -g -o test test.c# perf probe -x ./test func_2_entry=func_\n# perf probe -x ./test func_2_exit=func_2%retur\n# perf probe -x ./test test_15=test.c:1\n# perf probe -x ./test test_25=test.c:25 numbe\n# perf record -e probe_test:func_2_entry -e\nprobe_test:func_2_exit -e probe_test:test_15\n-e probe_test:test_25 ./test如上所示,程序员可以将探针点直接插入函数start和return,源文件的特定行号等。可以获取打印的局部变量,并拥有许多其他选项,例如调用函数的所有实例。 perf探针用于创建探针点事件,那么在执行./testexecutable时,可以使用perf记录来探测这些事件。当创建一个perf探测点时,可以使用其他录音选项,例如perf stat,可以拥有许多后期分析选项,如perf脚本或perf报告。使用perf脚本,上面的例子输出如下:# perf script使用kprobe跟踪内核空间与uprobe一样,可以使用sysfs接口或perf工具将kprobe跟踪点插入到内核代码中。使用sysfs接口插入kprobe程序员可以在/proc/kallsyms中的大多数符号中插入kprobe;其他符号已被列入内核的黑名单。还有一些与kprobe插入不兼容的符号,比如kprobe_events文件中的kprobe插入将导致写入错误。 也可以在符号基础的某个偏移处插入探针,像uprobe一样,可以使用kretprobe跟踪函数的返回,局部变量的值也可以打印在跟踪输出中。以下是如何做:; disable all events, just to insure that we see only kprobe output in trace\n# echo 0 > /sys/kernel/debug/tracing/events/enable; disable kprobe events until probe points are inseted\n# echo 0 > /sys/kernel/debug/tracing/events/kprobes/enable; clear out all the events from kprobe_events\n to insure that we see output for; only those for which we have enabled[[email protected] ~\n# more /sys/kernel/debug/tracing/trace# tracer: no\n\n# entries-in-buffer/entries-written: 9037/9037\n#P:8\n# _—–=> irqs-of\n# / _—-=> need-resche\n# | / _—=> hardirq/softirq#\n|| / _–=> preempt-depth#\n ||| / delay# TASK-PID CPU#\n |||| TIMESTAMP FUNCTION#\n | | | |||| | |使用perf插入kprobe与uprobe一样,程序员可以使用perf在内核代码中插入一个kprobe,可以直接将探针点插入到函数start和return中,源文件的特定行号等。程序员可以向-k选项提供vmlinux,也可以为-s选项提供内核源代码路径:# perf probe -k vmlinux kfree_entry=kfre\n# perf probe -k vmlinux kfree_exit=kfree%retur\n# perf probe -s ./ kfree_mid=mm/slub.c:3408 \n# perf record -e probe:kfree_entry -e probe:kfree_exit -e probe:kfree_mid sleep 10使用perf脚本,以上示例的输出:关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html
㈡ 如何实时查看linux下的日志
日志文件的默认路径是:/var/logLinux系统中有需要用于查看文本内容的命令,但其中每个命令又都有自己的特色特点,比如这个cat命令就是用于查看比较精简的文本内容的。这个其实是最好记的命令之一,cat在英语中是猫的意思.cat /var/log/*.log如果日志在更新,如何实时查看 tail -f /var/log/messages还可以使用 watch -d -n 1 cat /var/log/messages-d表示高亮不同的地方,-n表示多少秒刷新一次。该指令,不会直接返回命令行,而是实时打印日志文件中新增加的内容,这一特性,对于查看日志是非常有效的。如果想终止输出,按 Ctrl+C 即可。在Linux系统中,有三个主要的日志子系统:连接时间日志–由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。进程统计–由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。错误日志–由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。常用的日志文件如下:access-log 纪录HTTP/web的传输acct/pacct 纪录用户命令aculog 纪录MODEM的活动btmp纪录失败的纪录lastlog纪录最近几次成功登录的事件和最后一次不成功的登录messages从syslog中记录信息(有的链接到syslog文件)系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一sudolog 纪录使用sudo发出的命令sulog 纪录使用su命令的使用syslog 从syslog中记录信息(通常链接到messages文件)utmp纪录当前登录的每个用户wtmp一个用户每次登录进入和退出时间的永久纪录xferlog 纪录FTP会话/var/log/secure linuxprobe/com/chapter-02/html与安全相关的日志信息/var/log/maillog 与邮件相关的日志信息/var/log/cron 与定时任务相关的日志信息/var/log/spooler 与UUCP和news设备相关的日志信息/var/log/boot.log 守护进程启动和停止相关的日志消息 utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键–保持用户登录进入和退出的纪录。有关当前登录用户的信息记 录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件 中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许 多系统以一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常,wtmp在第 一天结束后命名为wtmp.1;第二天后wtmp.1变为wtmp.2等等,直到wtmp.7。每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然 后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户 登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和finger。下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。具体命令wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如:who(回车)显示chyang pts/0 Aug 18 15:06ynguo pts/2 Aug 18 15:32ynguo pts/3 Aug 18 13:55lewis pts/4 Aug 18 13:35ynguo pts/7 Aug 18 14:12ylou pts/8 Aug 18 14:15如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回车)显示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27。USER TTYFROM [email protected] IDLE JCPU PCPUWHATchyang pts/0 202.38.68.2423:06pm 2:04 0.08s 0.04s -bashynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 wlewis pts/3 202.38.64.2331:55pm 30:39 0.27s 0.22s -bashlewis pts/4 202.38.64.2331:35pm 6.00s 4.03s 0.01s sh /home/users/ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mailyloupts/8 202.38.64.2352:15pm 1:09m 0.10s 0.04s-bashusers:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数。例如:users(回车)显示:chyang lewis lewis ylou ynguo ynguolast:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如:chyang pts/9202.38.68.242 Tue Aug 1 08:34 – 11:23 (02:49)cfanpts/6202.38.64.224 Tue Aug 1 08:33 – 08:48 (00:14)chyang pts/4202.38.68.242 Tue Aug 1 08:32 – 12:13 (03:40)lewis pts/3202.38.64.233 Tue Aug 1 08:06 – 11:09 (03:03)lewis pts/2202.38.64.233 Tue Aug 1 07:56 – 11:09 (03:12)如果指明了用户,那么last只报告该用户的近期活动,例如:last ynguo(回车)显示:ynguopts/4 simba.nic.ustc.e Fri Aug 4 16:50 – 08:20 (15:30)ynguopts/4 simba.nic.ustc.e Thu Aug 3 23:55 – 04:40 (04:44)ynguopts/11 simba.nic.ustc.e Thu Aug 3 20:45 – 22:02 (01:16)ynguopts/0 simba.nic.ustc.e Thu Aug 3 03:17 – 05:42 (02:25)ynguopts/0 simba.nic.ustc.e Wed Aug 2 01:04 – 03:16 1+02:12)ynguopts/0 simba.nic.ustc.e Wed Aug 2 00:43 – 00:54 (00:11)ynguopts/9 simba.nic.ustc.e Thu Aug 1 20:30 – 21:26 (00:55)ac:ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(小时),如果不使用标志,则报告总的时间。例如:ac(回车)显示:total 5177.47ac -d(回车)显示每天的总的连结时间Aug 12 total 261.87Aug 13 total 351.39Aug 14 total 396.09Aug 15 total 462.63Aug 16 total 270.45Aug 17 total 104.29Today total 179.00ac -p (回车)显示每个用户的总的连接时间ynguo 193.23yucao 3.35rong 133.40hdai 10.52zjzhu 52.87zqzhou 13.14liangliu 24.34total 5178.22lastlog:lastlog文件在每次有用户登录时被查询。可以使用lastlog命令来检查某特定用户上次登录的时间,并格式化输出上次登录日 志/var/log/lastlog的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显 示"**Never logged**。注意需要以root运行该命令,例如:rong5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000dbb **Never logged in**xinchen **Never logged in**pb9511 **Never logged in**xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000另外,可一加一些参数,例如,lastlog -u 102将报告UID为102的用户;lastlog -t 7表示限制上一周的报告。
㈢ 13、linux上怎么动态监控一个文件的内容变化
用途说明tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。 常用参数格式:tail file输出指定文件file的尾部内容,默认输出最后十行内容(outputthe last part of files。Print the last 10 lines of each FILE tostandard output. ) 格式:tail file1 file2…指定多个文件时,会显示每个文件的文件名称,再显示该文件的尾部内容(Withmore than one FILE, precede each with a header giving the file name.) 格式:tail格式:tail -不指定文件时,表明从标准输入读取内容,这通常用在管道线后面,把前一个命令的输出作为tail的输入内容(Withno FILE, or when FILE is -, read standard input.) 格式:tail -n file格式:tail -n n file格式:tail –lines=n显示文件最后n 行,比如tail -20 file就是显示文件最后10行,这个参数可以配合其他参数与使用。注意上面三种格式的斜体n 是实际要显示的行数的数值。 注意:tail-n可以显示最后n行的文本内容。那么有没有一种方式显示从n行开始的文本内容,答案是肯定的。tail -n +4file表示显示文件file从第4行开始的内容。从1开始计数。 格式:tail -f file动态跟踪文件file的增长情况(outputappended data as the filegrows),tail会每隔一秒去检查一下文件是否增加新的内容,如果增加就追加在原来的输出后面显示。但这种情况,必须保证在执行tail命令时,文件已经存在。如果想终止tail-f的输出,按Ctrl+C中断tail程序即可。如果按Ctrl+C不能中断输出,那么可以在别的终端上执行killall tail强行终止。 注意:采用tail-f来监控文件变化情况时,在某些情况会不太灵。比如在java应用程序中采用log4j日志时,每隔1个小时生成一个新的日志文件,当前的日志输出在 LOG4J.LOG中,当一个小时过去后,log4j会将LOG4J.LOG改名成LOG4J.yyyy-mm-dd-HH的形式。那么这个时候tail -f就不能动态输出新的日志内容了。tail命令本身提供了很多参数,似乎都不能完美的解决这个问题。最后只好编写了一个脚本ftail.sh来跟踪日 志,详见《Linux下实时跟踪log4j日志文件的bash脚本 – 增强了tail -f的功能 》。刚才我仔细查看了tail的手册页,发现tail -F就能够做到跟踪这种类型的日志。转念一想,这种需求应该早就被Linux世界的人给满足了的。 格式:tail -F file格式:tail–follow=name –retry file功能与tail -ffile相同,也是动态跟踪文件的变化,不同的是执行此命令时文件可以不存在。 以上处理都是针对文本文件的,下面是针对二进制文件的情形。 格式:tail -c n file取文件file的最后n个字节。 格式:tail -c +n file取文件file的第n个字节后的内容。从1开始计数。使用示例示例一 输出文件尾部先使用seq命令输出20个数字保存到1.txt,然后尝试使用tail命令。[[email protected] ~]# seq 20 >1.txt[[email protected] ~]# cat 1.txt1234567891011121314151617181920[[email protected] ~]# tail 1.txt11121314151617181920[[email protected] ~]# tail -3 1.txt181920[[email protected] ~]# tail -n 3 1.txt181920[[email protected] ~]# tail –lines=3 1.txt181920[[email protected] ~]# tail -n +14 1.txt14151617181920[[email protected] ~]# 示例二 动态跟踪tomcat输出动态跟踪tomcat输出。[[email protected] logs]# tail -f catalina.out at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619)2010-12-0313:23:02,236 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetJobReq={seq=991,job_id='86130469-0006'}2010-12-0313:23:02,301 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetJobRsp={seq=991,result=0(成功),,info={job_id='86130469-0006',employer_id=86130469,employer_name=无锡富士时装有限公司,,,job_title='|570309|',job_title0='文员',job_type=f(全 职),issue_time='2010-11-0300:00:00.0',work_address='1902',work_address0=无锡 市,desired_count='1',,,,,,job_desc=大专,1年以上5s管理工作经验,电脑操作熟练。,required_experience=1(一年以上),,,,required_degree=15(大专),,,,,,,valid_days=30,access_count=12,expire_time='2010-12-0300:00:00.0',job_status=1(过期),,,,,,contact_name=王小 姐,contact_number=0510-85550088,remarks='★此职位是从后台导入的',enter_time='2010-11-0309:45:11.0',change_time=2010-12-0302:18:05.0,,job_seq=123201,,required_min_age=22,,,accommodations=面议,serve_principal=wjw12580,job_summary=大专,1年以上5s管理工作经验,电脑操作熟练,,}}2010-12-0313:23:02,302 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetEmployerReq={seq=0,employer_id='86130469'}2010-12-0313:23:02,304 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetEmployerRsp={seq=0,result=0(成功),,info= {employer_id='86130469',employer_name=无锡富士时装有限公司,employer_region=1902,employer_address=无锡市滨湖镇山水城科技园8号,,employer_desc=无锡 富士时装(集团)有限公司成立于1992年,是中日韩合资企业。主要生产高档针织时装,产品全部外销,连续多年荣获“中国行业500强”、“全国工业重点 行业效益十佳企业”、“无锡市百佳企业”等称号。公司总部位于江苏省无锡市滨湖镇山水城科技园,全新的厂房设施,占地面积30亩。公司分别在苏州、泰兴、 盐城、徐州设有分厂,集团公司现有职工1500多人,年销售额近3亿元。,,,,,,open_mode=5(系统自动操 作),open_time='2010-11-0309:45:10.0',,,,,contact_name=王小 姐,contact_number=0510-85550088,,,,,employer_status=1(已经开通),,,login_password=871386,,agency=false,balance=100.0000,,,,,serve_principal=wjw12580,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,remarks='此帐号由“12580zgz-盐城维克多网络传媒有限公司”导入',enter_time='2010-11-03 09:45:10.0',}}Ctrl+C[[email protected] logs]# 示例三 动态跟踪log4j日志经过我的试验,发现tail -F功能的强大,它等同于–follow=name–retry。如果你跟踪的文件被移动或者改名后, 你还想继续tail它, 你可以使用这个选项。tail手册页中关于–retry的说明:keep trying to open a file even if itis inaccessible when tail starts or if it becomes inaccessible later; useful when following by name, i.e., with –follow=name。 tail命令开始执行时文件不存在或者执行过程中文件不能访问,会不断重试。关于–follow的说明:-f, –follow[={name|descriptor}]output appended data as the file grows; -f, –follow, and –follow=descriptorare equivalent 。–follow=descriptor表明跟踪的是文件描述符, –follow=name表明跟踪的是文件名称。 如果文件名称改掉之后,还想继续跟踪原文件名称对应的尾部内容,就得使用-F选项而不是-f选项了。[[email protected]_server]# tail -F log/IMX.LOG14:13:28.892 INFO ImxConnection[6] imx.server.ImxConnection – RXIMX_ACTIVE_TEST{seq=3460,client_id=1291343201649042,presence_status=1(presence_status_online),}14:13:28.892 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006417 (01/02/00) -Connection #9 served14:13:28.892 INFO ImxConnection[6] imx.dbo.ImxOnlineInfoRow – EXEC SQL UPDATEimx_online_info SET last_active_time = '2010-12-03 14:13:28.0' WHERE account ='zhy'14:13:28.894 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB – UPDATE imx_online_info SETlast_active_time = '2010-12-03 14:13:28.0' WHERE account = 'zhy'; (1milliseconds)14:13:28.894 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006417 (00/02/00) -Connection #9 returned (now AVAILABLE)14:13:29.625 INFO ImxConnection[6] imx.server.ImxConnection – RXIMX_ACTIVE_TEST{seq=3461,client_id=1291343201649042,presence_status=1(presence_status_online),}14:13:29.626 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006418 (01/02/00) -Connection #8 served14:13:29.626 INFO ImxConnection[6] imx.dbo.ImxOnlineInfoRow – EXEC SQL UPDATEimx_online_info SET last_active_time = '2010-12-03 14:13:29.0' WHERE account ='zhy'14:13:29.627 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB – UPDATE imx_online_info SETlast_active_time = '2010-12-03 14:13:29.0' WHERE account = 'zhy'; (0milliseconds)14:13:29.653 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006418 (00/02/00) -Connection #8 returned (now AVAILABLE)Ctrl+C[[email protected]_server]#
㈣ linux如何追踪一个正在变化的文件
tail -n 10 -f filename 查看文件最后10行,动态刷新 -f (flow流动)
㈤ Linux系统查看文件内容的命令有哪些
通过命令+文件名查看内容。如下命令可以查看。1, cat :由第一行开始显示文件内容;2,tac:从最后一行开始显示,可以看出tac与cat字母顺序相反;3,nl:显示的时候输出行号;4,more:一页一页的显示文件内容;5,less与more类似,但它可以向前翻页;6,head:只看前几行;7,tail:只看最后几行;8,od:以二进制的方式读取文件。9,vi和vim作为编辑器,也可以打开文件查看内容。
㈥ linux操作系统环境如何实时跟踪后台日志
一般日志都会写入/var/log的文件中你只需要查看这个目录下的文件内容就可以了如果你要实时跟踪,那就tail -f filename开着就行了
㈦ linux有一个命令可以实时查看文件变化的工具,叫什么来着
用途说明 tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。 常用参数 格式:tail file 输出指定…
㈧ 在Linux中如何查找文件及方法
可以使用find及local查找。 find: 1.命令格式:find pathname -options [-print -exec -ok …]2.命令功能:用于在文件树种查找文件,并作出相应的处理3.命令参数:pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find命令将匹配的文件输出到标准输出。 -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。 -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。4.命令选项:-name 按照文件名查找文件。-perm 按照文件权限来查找文件。-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。-user 按照文件属主来查找文件。-group 按照文件所属的组来查找文件。-mtime -n +n 按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。-type 查找某一类型的文件,诸如:b – 块设备文件。d – 目录。c – 字符设备文件。p – 管道文件。l – 符号链接文件。f – 普通文件。-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。-mount:在查找文件时不跨越文件系统mount点。-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。另外,下面三个的区别:-amin n 查找系统中最后N分钟访问的文件-atime n 查找系统中最后n*24小时访问的文件-cmin n 查找系统中最后N分钟被改变文件状态的文件-ctime n 查找系统中最后n*24小时被改变文件状态的文件-mmin n 查找系统中最后N分钟被改变文件数据的文件-mtime n 查找系统中最后n*24小时被改变文件数据的文件locate:1.命令格式:Locate [选择参数] [样式]2.命令功能:locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*” 或”?”等)来指定范本样式,如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。3.命令参数:-e 将排除在寻找的范围之外。-1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。-q 安静模式,不会显示任何错误讯息。-n 至多显示 n个输出。-r 使用正规运算式 做寻找的条件。-o 指定资料库存的名称。-d 指定资料库的路径-h 显示辅助讯息-V 显示程式的版本讯息
㈨ linux如何查看最近修改的文件
下面用不同的方式只列出所有你今天创建或修改的文件(直接或间接)。1、 使用 ls 命令,只列出你的 home 文件夹中今天的文件。# ls -al –time-style=+%D | grep 'date +%D' 其中:-a – 列出所有文件,包括隐藏文件-l – 启用长列表格式–time-style=FORMAT – 显示指定 FORMAT 的时间+%D – 以 %m/%d/%y (月/日/年)格式显示或使用日期 在Linux中找出最近的文件此外,你使用可以 -X 标志来按字母顺序对结果排序:# ls -alX –time-style=+%D | grep 'date +%D' 你也可以使用 -S 标志来基于大小(由大到小)来排序:# ls -alS –time-style=+%D | grep 'date +%D' 2、 另外,使用 find 命令会更灵活,并且提供比 ls 更多的选项,可以实现相同的目的。-maxdepth 级别用于指定在搜索操作的起点下(在这个情况下为当前目录)的搜索层级(子目录层级数)。-newerXY,用于所寻找的文件的时间戳 X 比参照文件的时间戳 Y 更新一些的文件。 X 和 Y 表示以下任何字母: – a – 参照文件的访问时间 – B – 参照文件的创建时间 – c – 参照文件的 inode 状态改变时间 – m – 参照文件的修改时间 – t – 直接指定一个绝对时间下面的命令意思是只找出 2016-12-06 这一天修改的文件:# find . -maxdepth 1 -newermt "2016-12-06" 在 Linux 中找出今天的文件重要:在上面的 find 命令中使用正确的日期格式作为参照时间,一旦你使用了错误的格式,你会得到如下错误:# find . -maxdepth 1 -newermt "12-06-2016" find: I cannot figure out how to interpret '12-06-2016' as a date or time 或者,使用下面的正确格式:# find . -maxdepth 1 -newermt "12/06/2016" 或者 # find . -maxdepth 1 -newermt "12/06/16"
㈩ 如何查看跟踪查看LINUX内核中的源码
最近看LINUX书籍时,根据书中代码找相应的函数或者结构定义相当吃力,根据网上资料按以下方法查找速度较快。1.安装ctags在源代码目录下运行ctags -R这样,会递归生成当前目录下及其子目录的tags文件。2.使用VIM根据tags文件查找函数或结构定义。1.在源码目录下查找vi -t tagname2.如果要在任意位置使用,则需要把该tags文件添加到~/.vimrc文件中set tags=/home/money/sda8/2.6232/tags3.如果要在代码中实时跟踪,则光标移动到函数名上,使用CTRL+]键,按CTRL+t可以返回。如果要跟踪系统函数,使用shift+K可以自动跳转道光标所在函数的手册。
未经允许不得转载:山九号 » linux如何查看实时跟踪文件|如何实时查看linux下的日志