sort命令分析日志 (Linux/Unix)
发布于 2009-04-28 22:52 1 阅读:37,220 评论:1 标签: cut sort uniq

    很久没有更新blog了,上来冒个泡。

    之前,常用cut,sort,uniq命令的组合分析程序的log,或者查看数据以便统计。例如:cut -d "|" -f 4 | sort | uniq -n -r。

    今天遇到一个问题,需要查看多个用户的操作记录。数据第一列可顺利的按照时间排序,然而用户名在中间,既然是log,那源数据便可能是多个用户的交叉记录了。比如:

以下是引用片段:
time0 | userA | action
time1 | userB | action
time2 | userC | action
time3 | userA | action
time4 | userC | action
time5 | userB | action
time6 | userC | action
time7 | userB | action

    很显然,我们希望的顺序是:

以下是引用片段:
time0 | userA | action
time3 | userA | action
time1 | userB | action
time5 | userB | action
time7 | userB | action
time2 | userC | action
time4 | userC | action
time6 | userC | action

    我们既想按照中间的数据的排序又要保持数据的完整性!也许可以用其他的命令实现这个,但我更倾向于使用常用的命令搞定复杂的事情。

    其实sort命令是可以实现这个的。sort的-t选项可以实现cut的-d功能,再利用+m -n参数可以实现cut的-f的功能,只是,sort的这个+m -n是从0开始计数的。+m -n是指从第m个字段开始,到第n个字段排序,其中包含第m个但不包含第n个。比如:sort -t "|" +1 -2 filename 就可以得到我们想要的结果了。

    sort的功能是排序,应用起来会有很多种排序的方式,可以用指定的参数来控制:

    - d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。这个选项对 uniq -d 后的结果尤为有用。
    - f 将小写字母与大写字母同等对待。也就是忽略大小写。
    - I 忽略非打印字符。
    - M 作为月份比较:“JAN”<“FEB”
    - r 按逆序输出排序结果。这个可与 -d 同时使用,实现数字从大到小的排列

    还有一个很实用的功能,如果你想把一个过滤后的文件内容重新写入到原文件,那么- o 参数可以达到这个要求,但是效率呢?嗯,是个问题,看取舍了!毕竟这种情况重定向是不行的。

    - o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。

    很多系统实用小工具就是用这种常用名字组建的,嗯哼。

展开全文  
收起全文  
在招行专业版查看信用卡信息 (随便说说)
发布于 2009-03-31 14:41 阅读:17,118 评论:0 标签: 信用卡 招行

    晕菜,想在招行专业版上信用卡的信息,看了专业版给的提示,提示我要么去柜台,要么先自动关联自动还款的一卡通。不想关联自动还款,于是去柜台,结果一进门就被工作人员忽悠到打招行信用卡800电话,然后被接线生很温柔地忽悠说招行专业版的客户服务里面就可以搞定。Y的,一群骗子。

    最后通过招行的网站客服搞定了事情,没办法,还是得先关联自动还款的一卡通。下面是网上客服的解释。

    招行网上客服的效率还是不错的,于是想想天朝的备案什么时候也能有这个效率呢?!从事互联网,还是这个备案的单位轻松啊。

------------------------ 喜欢忽悠的分割线 ------------------------

    您可以通过大众版或者电话办理。

    请您登录信用卡网上银行www.8008205555.com,点击“系统登录”输入身份证件号码、查询密码和附加码就能登录网上银行,然后在“还款管理”的下拉框中选择“自动还款设置”即可设置自动还款功能。向您说明一下:到期还款日前一天24点之前申请,当期自动还款才能生效,生效后即会从您一卡通上扣除本期帐款。需提醒您,您只能关联本人的一卡通,且一卡通证件号码、证件类型需与信用卡的一致,同时自扣当日勿往信用卡内存款,以免引起重复扣款。

    或请您致电客服热线800-820-5555,手机用户拨打021-38784800或者4008205555,在语音中选择“1”中文服务后,选择“1”持卡人服务,选择“1”帐务查询与还款,选择“2”自动还款,再选择“1”申请自动还款,即可开通一卡通自动扣款功能。

    绑定后就可以在“专业版管理”--“证书关联信用卡操作”,把信用卡关联到专业版了。

展开全文  
收起全文  
估算Apache所需要的内存 (Linux/Unix)
发布于 2009-03-25 19:21 2 阅读:30,462 评论:2 标签: apache 内存

    精确的计算所需要的内存是很困难的,为了尽可能的精确,需要观察类似线上环境下观察服务器的负载和进程。毕竟如果不同的服务器配置和装的模块是有差异的,只有查看自己才可靠,所谓核心的东西要掌握在自己手里大概如此。。。。

    一个简单可靠的法子是,在压力测试时,找到httpd进程,查看一个进程使用了多少的内存,然后看看总的进程,即可估算一下。

    比如:
    ps aux | grep httpd
    查看每个httpd进程使用了多少内存,数字在第四列,格式为百分之几。

    ps aux | grep httpd | wc -l
    得到一共有多少进程,记得结果要减1,因为grep httpd也在结果中。

    free
    查看服务器内存总量,单位为K

    然后就可以估算了。比如一个进程占2%的内存,有27个httpd,总内存为4148424。那就是:
php -r "echo 0.002*4148424*26/1024;"
    结果为210.66215625M内存,这个只仅仅是为apache分配的。还得给其它服务留出足够空余的内存。而且考虑高峰期可能会比平时大12倍,这个时候仅仅考虑Apache就够了,嘿嘿。曾经出现过因磁盘IO过高导致服务器崩溃的场景。

    如果怎么算都不能让服务器有空余的内存,就得考虑限制最大进程数了。使用MaxClient指令可以用来限制。

    以上说得有误之处,还请各位指点!

展开全文  
收起全文  
介绍“最好的编程字体”Monaco (扩展学习)
发布于 2009-03-24 15:09 6 阅读:50,962 评论:6 标签: Monaco 字体

    同事看见我的编程界面,不禁大呼“你的编程字体好丑”。立马无地自容,我真太不专业了!竟然不知道还有“编程字体”这个概念。。。。。。

    于是同事立即推荐了好几个字体,看我都不满意,于是拿出了他的压箱货:Monaco。苹果出品,据称是最好看的编程字体,主要是优化英文字体,对中文也有效。尤其能分清楚0oO,而且很锐化,看见的不再是规规矩矩了。

    为方便大家下载,我把字体放到新浪旗下产品爱问了:http://ishare.iask.sina.com.cn/f/4944524.html

    Windows下,下载字体解压后放到C:\WINDOWS\Fonts下即可,然后就可以到编辑器里设置了。比如EditPlus下在字体中选择“Monaco”即可,如果不希望中文也是Monaco,第一次看见时会感觉有点奇怪,可以在language中选择“East Europe”。

    Ubuntu下将字体mv至字体目录下:/usr/share/fonts/truetype/ 任一地方,建一个新目录也行。记得给每个用户/组有读权限。然后需要做的是刷新FreeType字体文件的索引。

    需要使用命令fc-cache。作用:“build font information cache files”。其实就是扫描字体目录,把信息写入缓存文件,然后应用程序在启动时会读这个文件,这样你就可以在应用程序配置中选择这个缓存文件中的字体了。这个命令可以扫描系统全部字体目录也可以只扫描更新你指定的,就看你在命令后是否给出字体目录了。

    常用的选项有:
    -f 强行重建缓存,force的意思。
    -v 显示命令执行信息,view的意思。

    正确执行命令后,在当前终端或新开一个终端,均不能选择Monaco字体,需要关掉打开的终端,再新开的终端才能进行选择。

    希望对你有用!

展开全文  
收起全文  
Apache配置文件学习(一) (Linux/Unix)
发布于 2009-03-11 21:40 1 阅读:13,340 评论:1 标签: apache 配置

    1:<IfDefine [!]parameter-name> ... </IfDefine>
    而parameter-name是在服务启动时,通过httpd命令行的 -Dparameter 这样的形式指定的。

    2:<IfModule [!]module-file|module-identifier> ... </IfModule>
    module可以是模块的标识符或者是编译模块时的文件名。比如,rewrite_module就是一个模块标识符,而mod_rewrite.c则是编译模块时的文件名。如果模块包含多个源代码文件,您应当使用包含 STANDARD20_MODULE_STUFF 字符串的那个。

    而STANDARD20_MODULE_STUFF请参考:《编写第一个Apache模块――mod_helloworld

    3:User/Group指令用于设置实际提供服务的子进程的用户/组。为了使用这个指令,服务器必须以root身份启动和初始化。如果你以非root身份启动服务器,子进程将不能够切换至非特权用户/组,并继续以启动服务器的原始用户身份运行。如果确实以root用户启动了服务器,那么父进程将仍然以root身份运行。

    Unix-userid是下列值之一:

以下是引用片段:

 1:一个用户名/组:通过用户名/组引用用户/组
 2:"#"号后面跟一个用户/组编号 :通过用户/组编号引用用户/组

    用于运行子进程的用户必须是一个没有特权的用户/组,这样才能保证子进程无权访问那些不想为外界所知的文件,同样的,该用户/组亦需没有执行那些不应当被外界执行的程序的权限。

    进程的用户及层次关系可见:

以下是引用片段:
[root@login yayu]# pstree -apu | grep http
  |-httpd,10914 -DSSL
  |   |-httpd,8483,web -DSSL
  |   |-httpd,8489,web -DSSL
  |   |-httpd,8551,web -DSSL
  |   |-httpd,8552,web -DSSL
  |   |-httpd,8553,web -DSSL
  |   |-httpd,8554,web -DSSL
  |                       |-grep,8558 http


    4:如果在<VirtualHost>外设置了一个ServerName,而一个请求不能与某个ServerName指令相匹配,它将会由第一个<VirtualHost>段所伺服。

    5:ServerRoot指令设置了服务器所在的目录。一般来说它将包含conf/和logs/子目录。其它配置文件的相对路径即基于此目录 (比如Include或LoadModule)。而指定ServerRoot、DocumentRoot时不应包括最后的"/"。

    6:Order指令控制默认的访问状态与Allow和Deny指令生效的顺序,变态的命令。

    下面例子中,apache.org域中所有主机,除了foo.apache.org子域包含的主机被拒绝以外,其他都允许访问。而所有不在apache.org域中的主机都不允许访问,因为默认状态是拒绝对服务器的访问。

以下是引用片段:
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org

    另一方面,如果上个例子中的Order指令改变为"Deny,Allow",将允许所有主机的访问。这是因为,不管配置文件中指令的实际顺序如何,"Allow from apache.org"指令会最后被评估到并覆盖之前的"Deny from foo.apache.org"。所有不在apache.org域中的主机也允许访问是因为默认状态被改变到了允许。说白了就是控制Allow和Deny两个指定的顺序。

展开全文  
收起全文  
Apache配置之ServerType的standalone和inetd模式 (Linux/Unix)
发布于 2009-03-09 18:35 阅读:23,043 评论:0 标签: inetd ServerType standalone

   不仔细看httpd.conf配置文件还不知道有这回事,汗。

   ServerType这个配置选项指定如何运行Apache。Apache可以使用两种方法来运行:standalone(独立式)和inetd(超级守护进程式)。

   standalone模式表示Apache进程以一个单独的守护进程方式在后台监听是否有客户端的请求,如果有则生成一个子进程来为其服务。在standalone模式下,apache进程一次性启动,运行期间一直驻留在内存中,尽管损耗了一定的系统资源,但接入信号反应快;而且子httpd进程在http请求完毕后并没有直接断掉,这样就可以重新用来接受新的http请求,请参考apache的keepalive指令(请看这里)。由于不存在对每个请求都启动新的apache根进程,所以它的效率更高。

   inetd模式表示Apache服务不是以一个单独的守候进程的形式支持。而是由Inetd这个超级守候进程进行代劳,当它监听一个客户端的http请求的时候,再启动一个httpd进程为其服务。一个由inted运行的服务器进程在它结束对请求服务的同时立刻退出,虽然不占用了系统资源,但是也由此不适合应用在同时连接数量较多的系统。因为如果请求完毕后就结束httpd进程,会使服务器负担加重。

   具体使用如下:

   standalone模式

   此种模式下,Apache服务器监听特定端口的连接请求。当用户发起特定端口地址的连接请求时,主服务器进程启动子httpd进程来响应该请求。

   这样还需要告诉主服务器进程侦听的特定端口地址,使用命令:


以下是代码片段:

Port [number] (缺省值为80)


   inetd模式

   inetd是监听所有小于1024的端口连接请求的Internet守护进程(一个服务器进程)。与standalone模式不同,当客户系统发出到Apache服务器的连接请求时,inetd启动一个httpd进程,由此进程服务此请求,完成服务后即退出。

   如果选择通过inetd服务器来运行Apache,需要编辑/etc/inetd.conf文件为Apache添加一条新的记录:


以下是代码片段:

httpd stream tcp nowait httpd /etc/httpd/bin/httpd


展开全文  
收起全文  
Linux进程的层次关系 (Linux/Unix)
发布于 2009-02-16 19:40 阅读:40,252 评论:0 标签: Linux 进程

    前段时间在看清华大学出版社出版的《Linux教程》(05年6月第一版)。在248页第十三章《进程》有一节是简述Linux进程的层次关系的,把操作系统自启动后都做了什么,说得比较清晰,看过后受益匪浅。

    就是喜欢看这种能把整个框架说得比较清楚的文章!特抄来以共享:

    当打开Linux系统,LILO(LInux LOader)找到Linux内核把它加载到内存。它初始化各种硬件,包括磁盘控制器。然后转到保护模式,加载操作系统,执行初始化各种内核数据结构的代码,例如inode和文件表。此进程的PID为0。它启动初试进程(init进程,PID为1)完成引导过程的其余工作。init进程启动守护进程kflushd、kupdate、kpiod和kswapd,其PID分别为2、3、4、5。Init进程然后初始化文件系统,安装根文件系统。接下来试着执行/sbin/init程序,在每一个激活的终端上执行minegetty进程(经常被称为getty进程)。getty进程设置终端属性,如波特率,这些属性在/etc/termcap文件中都有定义。它显示login:提示符,等待用户登录。

    在login:提示符下,输入登录名并按回车键,getty进程产生一个子进程。它转变为以登录名为参数的登录进程。登录进程提示输入密码,并检查输入名和密码的有效性。如果两者均正确,登录进程产生一个子进程,它将转变为登录shell。如果登录进程没有在/etc/passwd文件中找到登录名或者输入的密码与/etc/passwd文件中(或者/etc/shadow文件)存放的密码不匹配,他将显示错误提示信息然后终止。控制权又回到getty进程,重新显示login:提示符。一旦进入登录shell,就可以完成自己的工作,还可以按<ctrl-D>键终止当前shell。如果这样做了,shell进程会终止,控制权又回到getty进程,再次显示login:提示符,又开始循环。

    就是说,当登录到Linux系统,系统产生第一个进程,称为登录进程,它又创建登录shell。登录shell为所输入的命令创建进程,用以解释/执行命令。

    两个Linux进程贯穿系统生命周期:swapper和init进程。监视终端行的getty进程,只要终端与系统关联上就会一直存在。登录进程和登录shell进程只有在登录时才存在。所有其它进程生存期较短,只在命令或者程序执行时短暂存在。

    ps -ef 命令或者pstree命令可以用图的形式显示当前系统中执行进程的进程树,勾勒出进程间的父子关系。pstree命令显示的图比ps -ef命令更简洁。pstree显示的结果,前有“+”的是当前的后台进程,而前面的有“-”的是后续后台进程。pstree命令使用-h参数,输出用粗体(加亮)显示当前进程。使用“-a”选项,pstree显示带参数的命令。如“pstree 402 -a”可以显示PID为402的进程的那个的层次关系。

    Bash shell可以使用ulimit显示用户可以同时执行的最大进程个数。TC shell下为limit。两个命令都可以用来显示硬件和操作系统资源的使用限制。

展开全文  
收起全文  
与君共勉:有想法 就行动 (随便说说)
发布于 2009-02-13 18:56 1 阅读:49,845 评论:1 标签: 生活 行动

    与君共勉:有想法 就行动。

    蜀之鄙有二僧,其一贫,其一富。贫者语于富者曰:“吾欲之南海,何如?”。富者曰:“子何恃而往?”曰:“吾一瓶一钵足矣”。富者曰:“吾数年来欲买舟而下,犹未­能也。子何恃而往?”。越明年,贫者自南海还,以告富者。富者有惭色。

展开全文  
收起全文  
查看、分析memcached使用状态 (Linux/Unix)
发布于 2009-02-12 22:44 阅读:27,240 评论:0 标签: memcached stats 缓存

    访问量上升,数据库压力大,怎么办?好办法是在中间挡一层缓存!这个缓存要求高效,不能比数据库慢,否则服务质量受影响;如果能把数据用hash打散存储到硬盘,也是可以的,不过在内存越来越便宜的今天,还是使用内存吧!

    mysql也有自己的缓存,也是存储在内存的,但是有一个说法是:

以下是引用片段:

只能有一个实例
意味着你能存储内容的上限就是你服务器的可用内存,一台服务器能有多少内存?你又能存多少呢?

只要有写操作,mysql的query cache就失效
只要数据库内容稍有改变,那怕改变的是其他行,mysql的query cache也会失效

    再说,如果mysql都抗不住了,怎么还能指望它提供的缓存呢?

    所以我可以使用memcached了!他的好处和如何用可以参考:

以下是引用片段:

1:《Memcache和mysql交互流程操作原理

2:《让memcached和mysql更好的工作

    开发时面对需求是个麻烦事,更漫长而闹心的是维护,所以我更关心的是memcached运行中的情况。还好的是,memcached的作者给我们提供查看运行情况的命令。主要是“stats”,使用方法为 “telnet ip 端口号”,登录后使用“stats”命令。

    然后你可以看见很多内容,具体可以参考:《memcacche stats

以下是引用片段:

pid = process id
uptime = number of seconds since the process was started
time = current time
version = memcached version
rusage_user = seconds the cpu has devoted to the process as the user
rusage_system = seconds the cpu has devoted to the process as the system
curr_items = total number of items currently in memcache
total_items = total number of items that have passed through the cache
bytes = total number of bytes currently in use by curr_items
curr_connections = total number of open connections to memcached
connection_structures = ???
cmd_get = total GET commands issued to the server
cmd_set = total SET commands issued to the server
get_hits = total number of times a GET command was able to retrieve and
return data
get_misses = total number of times a GET command was unable to retrieve and
return data
bytes_read = total number of bytes input into the server
bytes_written = total number of bytes written by the server
limit_maxbytes = total storage bytes available to the server.

    着重说一下几个对观测很有用的项。

    limit_maxbytes、bytes

    memcached在存储的时候是可以设置失效时间的,但如果存储已经满了,那旧数据即使没有到过期时间,也会被移除。所以需要观察memcached存储是否已经满了,同时这对扩容也是有意义的参考。limit_maxbytes即总的存储大小,而bytes就是已经使用的大小,从这两个数据就可以看出在memcached启动时,我们为它分配的内存是否足够使用。

    cmd_get、cmd_set

    memcached启动后,我们对它一共做了多少次读取操作呢?从这两个参数可以观察出来。

    get_hits、get_misses

    使用memcached后,我们需要评估我们使用的策略是否合理。不能够使用中间缓存后,后端的数据库还是有较大的访问量,这样的话中间缓存就变得没有意义了。get_hits表示命中了多少次读取,即来memcached取到了多少有效数据;get_misses表示没有命中的次数,即此次来取数据的时候,memcached并没有你所查询的数据。如果没有清零统计数据的话,cmd_get = get_hits + get_misses。

    memcached 的状态查询还有其它的命令,可以参考:《Memcached的stats命令

    如下:

stats reset
清空统计数据

stats malloc
显示内存分配数据

stats maps
这个不太确定,看源代码是把/proc/self/maps的数据显示出来。

stats cachedump slab_id limit_num
显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本显示的是  访问时间(timestamp)
1.2.4以上版本,包括1.2.4显示 过期时间(timestamp)
如果是永不过期的key,expire_time会显示为服务器启动的时间

stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]

stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)

stats detail [on|off|dump]
设置或者显示详细操作记录

参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)

stats detail dump
PREFIX copy_test2 get 1 hit 1 set 0 del 0
PREFIX copy_test1 get 1 hit 1 set 0 del 0
PREFIX cpy get 1 hit 0 set 0 del 0

展开全文  
收起全文  
实时观察Apache访问情况的工具Apachetop (Linux/Unix)
发布于 2009-02-11 20:39 1 阅读:33,191 评论:1 标签: apachetop log

    Linux服务器的负载、进程等信息可以通过top命令查看。而Apache的运转如何实时的观察呢?“tail -f”log文件?这是个好方法,但是太累了!

    所以,感谢Chris Elsworth为我们提供了类似top命令的apachetop命令!官网地址:http://www.webta.org/projects/apachetop/

    apachetop可以查看最近一段时间和自命令执行以来的apache访问情况,信息包括被访问的文件、次数、流量大小。

    命令安装、使用可以查看官网提供的说明:http://www.webta.org/projects/apachetop/browser/README,或者查看一个中文的解释:《实时跟踪log变化的工具Apachetop》。

    在此我对命令显示信息和一些好用的参数做一下说明。

    先看命令显示:

以下是引用片段:

last hit: 11:19:12         atop runtime:  0 days, 07:12:27             11:19:13
All:      1553476 reqs (  59.9/sec)       3566.4M (  140.7K/sec)    2407.3B/req
2xx: 1458916 (93.9%) 3xx:   93768 ( 6.0%) 4xx:   787 ( 0.1%) 5xx:     5 ( 0.0%)
R ( 30s):    1692 reqs (  56.4/sec)       4342.8K (  144.8K/sec)    2628.3B/req
2xx:    1606 (94.9%) 3xx:      85 ( 5.0%) 4xx:     1 ( 0.1%) 5xx:     0 ( 0.0%)

 REQS REQ/S    KB KB/S URL
  916 30.53  1202 40.1*/api/chk.php
   71  2.37 433.7 14.5 /login.php
   50  1.67  44.6  1.5 /css/css.css
   39  1.50 506.4 19.5 /js/js.js

    第一行的“last hit: 11:19:12”和“11:19:13”分别显示此次显示时的最后观察时间,和现在的时间。不过我对这个时间很不理解,因为这个世界和系统的时间是不一致的。不知道是我理解有误还是怎么回事,忘有知情的朋友留言告诉我。

    第一行中间的部分表示这个命令运行了多长时间。

    第二、三行显示的是自命令执行以来观察到的所有数据汇总。第四、五行显示的是近30表的数据汇总。前一行表示:总请求数、每秒处理的请求数、总的数据传输量、每个请求的数据传输量。后一行显示http响应类型、此类型的总数、每秒的此类型的响应数。这个还是很好理解的。

    再往后的数据则从访问量大小排列出了是哪些程序在被访问。格式照上也很好理解。

    有几个很有用的参数值的学习一下。

    -f:这个参数指定了apachetop命令观察的对象。并不是每个人的apache的日志都在默认的位置,甚至你为了统计的方便,使用多个日志文件来区分不同的端口(80、443)、正确和错误的访问日志、等等。这个时候可以使用这个参数来指定log文件。尤其有用的是,你可能需要同时查看多个log的情况,这时你可以多次使用-f参数来制定,如: apachetop -f file1 -f file2。

    -d:默认情况下,显示界面每5秒刷新一次,如果你觉得刷新频率不爽,你可以使用这个参数来做改变。

    -T:上面的例子中,我们在最后面看到的是最近30秒的情况。如果你觉得密度不够,可以使用这个参数来做改变。

    -H:还是上面的例子,可以看到最近30秒的请求总数是:1606+85+1+0=1692次。如果你想让每请求N次刷新一次界面怎么办?哈,就是使用这个命令了!

    注意:-T和-H参数是不能同时使用的,否则会提示你:“-T and -H are mutually exclusive. Specify only one.”

    -q:有一些程序,在使用的时候是可以带参数的,即get方式。如果你想看看都是些什么参数,就可以使用这个命令了!

    看完以后,不要忘了,如果你知道第一行的“last hit: 11:19:12”和“11:19:13”分别显示的是什么,别忘了告诉我。。。。。

展开全文  
收起全文