实时观察Apache访问情况的工具Apachetop (Linux/Unix)
发布于 2009-02-11 20:39 1 阅读:33,053 评论: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”分别显示的是什么,别忘了告诉我。。。。。

展开全文  
收起全文  
Linux下查看文件和文件夹大小的df和du命令 (Linux/Unix)
发布于 2009-02-09 18:07 阅读:213,805 评论:0 标签: df du 文件大小

    当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。

    df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
    du可以查看文件及文件夹的大小。

    两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。

    下面分别简要介绍

    df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子:

以下是代码片段:

[yayug@yayu ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3.9G  300M  3.4G   8% /
/dev/sda7             100G  188M   95G   1% /data0
/dev/sdb1             133G   80G   47G  64% /data1
/dev/sda6             7.8G  218M  7.2G   3% /var
/dev/sda5             7.8G  166M  7.2G   3% /tmp
/dev/sda3             9.7G  2.5G  6.8G  27% /usr
tmpfs                 2.0G     0  2.0G   0% /dev/shm

    参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。

    上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。

    接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。

    du:查询文件或文件夹的磁盘使用空间

    如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小.

    提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。

以下是代码片段:

[root@bsso yayu]# du -h --max-depth=1 work/testing
27M     work/testing/logs
35M     work/testing

[root@bsso yayu]# du -h --max-depth=1 work/testing/*
8.0K    work/testing/func.php
27M     work/testing/logs
8.1M    work/testing/nohup.out
8.0K    work/testing/testing_c.php
12K     work/testing/testing_func_reg.php
8.0K    work/testing/testing_get.php
8.0K    work/testing/testing_g.php
8.0K    work/testing/var.php

[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/
27M     work/testing/logs/

[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/*
24K     work/testing/logs/errdate.log_show.log
8.0K    work/testing/logs/pertime_show.log
27M     work/testing/logs/show.log

    值得注意的是,看见一个针对du和df命令异同的文章:《du df 差异导致文件系统误报解决》。

    du 统计文件大小相加
    df  统计数据块使用情况

    如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。

    如此一来在定期删除 /var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。

    使用下面的命令杀掉进程之后,系统恢复。
    fuser -u /var/spool/clientmqueue

展开全文  
收起全文  
Shell进制运算错误:08: value too great for base (Linux/Unix)
发布于 2008-12-19 12:18 阅读:33,564 评论:0 标签: bash shell 进制

      昨天发现一个很奇怪的bug,一个分析log的程序,一个小时产生一个log文件,文件名中含有当时的小时数以作标识,其中小时为有前导零的24 小时格式。bug是第08和09小时的log为空,甚为诧异。

      分析程序后,定位于08和09这两个数字上。程序中有一步需要对小时数进行数学运算,问题就在于此,例如:

以下是代码片段:
[root@login yayu]# echo $((08 -2))
bash: 08: value too great for base (error token is "08")

      Google了一下找到了答案:原文点这![建议新窗口打开]

      原因:

以下是代码片段:
Numbers starting with leading 0 are Octal numbers  (base 8) in many programming
languages including C, Perl and shell. Valid octal digits are
0,1,2,3,4,5,6,7 so it barfs if it sees an 8 or a 9. You probably want
to work in straight numbers and make a leading 0 in your output
format with a sprintf("%02d") kind of formatting thing.
Anything starting with 0x or 0X is a hex number.

So the error message means exactly as it says- it's an error from
the let function complaining about the value being too big for the base.

Have fun,
Stuart.

      解决方案:

以下是代码片段:
You can explicitly state the base of a number using base#number
Code:
if [ $((10#$item)) -eq 0 ] ; then
That will have trouble if the number starts with a minus sign.
The '-' needs to be in front of the base like -10#009 for -9.

      原来是进制的问题,C, Perl 和 shell中以0开头的数字是八进制了,而在运算中也是严格如此,不会做自动转化,于是就报错了。如下解决:

以下是引用片段:
[root@login shengting]# echo $((10#08 -2))
6

      纠结问题的根源,还是我的shell写得太烂了......如果命令用得好就不会遇到这个bug了,不过写得好了,又怎么会在以后避免进制导致的问题呢?到底是先有鸡还是先有蛋呢?

展开全文  
收起全文  
SYN Flood攻击、SYN Cookie防御和Linux/FreeBSD的内核参数修改 (Linux/Unix)
发布于 2008-11-28 22:30 阅读:75,766 评论:0 标签: FreeBSD Linux SYN

    黑客是个令人向往、有前途的职业。我欣赏好黑客,讨厌坏黑客。所谓坏黑客,就是导致对方有人要加班的那种家伙。

    SYN Flood攻击是一种典型的拒绝服务型(Denial of Service)攻击。所谓拒绝服务型攻击就是通过进行攻击,使受害主机或网络不能够良好的提供服务,从而间接达到攻击的目的。黑客喜欢玩这个,以让对方加班而显示自己有水平、有能力、有魄力,其实呢,啥都不是。

    一:什么是SYN Flood攻击

    SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCP SYN (synchronize)包到对方,对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK (ACKnowledge Character)包回去,这样三次握手就结束了。

    在上述过程中,还有一些重要的概念:

    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。或者说TCP服务器收到TCP SYN request包时,在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即把形成的TCP连接。一般把收到SYN包而还未收到ACK包时的连接状态成为半开连接(Half-open Connection)。

    Backlog参数:表示未连接队列的最大容纳数目。

    SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

    半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

    在最常见的SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者,这时攻击者是TCP客户机,受害者是TCP服务器。根据上面的描述,受害者会为每个TCP SYN包分配一个特定的数据区,只要这些SYN包具有不同的源地址(这一点对于攻击者来说是很容易伪造的)。这把给TCP服务器系统造成很大的系统负担,最终导致系统不能正常工作。

    二:SYN Cookie原理

    能够有效防范SYN Flood攻击的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。

    SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

    下面分Linux和FreeBSD来说说如何配置内核参数来实现SYN Cookie

    三:Linux下设置

    如果你的服务器配置不太好,TCP TIME_WAIT套接字数量达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少服务器的TIME_WAIT套接字数量。

    TIME_WAIT可以通过以下命令查看:

以下是代码片段:
netstat -an | grep "TIME_WAIT" | wc -l

    在Linux下,如CentOS,可以通过修改/etc/sysctl.conf文件来达到目的。

    增加以下几行:

以下是代码片段:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024    65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2


     说明:

  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies,这是个BOOLEAN。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用,这是个BOOLEAN。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,这是个BOOLEAN,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。单位为秒。
  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。单位为秒。
  net.ipv4.ip_local_port_range = 1024    65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
  net.ipv4.tcp_synack_retries和net.ipv4.tcp_syn_retries是定义SYN重试次数。

  执行以下命令使配置生效:

以下是代码片段:
 /sbin/sysctl -p

    如果你不想修改/etc/sysctl.conf,你也可以直接使用命令修改:

以下是代码片段:
/sbin/sysctl -w key=value

    四:FreeBSD下设置

    yayu个人学习的观点:FreeBSD中对syn的防御和Linux下可能不一样,配置的参数也不完全相同,相关配置和理解可能不对:)

    TCP链接中有一个MSL(max segment lifetime)的概念,也就是最大生成时间,MSL的值在一般的实现中取30s,有些实现采用2分钟。在TCP的状态机中的“被动关闭”:从CLOSE_WAIT到LAST_ACK中有一个如下的规则:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的 FIN)。

    存在这个规则导致一个后果就是在这个2*MSL的时间内,该地址上的链接(客户端地址、端口和服务器端的地址、端口)不能被使用。比如我们在建立一个链接后关闭链接然后迅速重启链接,那么就会出现端口不可用的情况。 

    TIME_WAIT时间是2*MSL。因此可以通过调整net.inet.tcp.msl来减少TIME_WAIT时间。对于Web服务器完全可以将这个值调整为7500或2000(访问一个web,超过4~15秒页面还刷不出来,就可以考虑放弃了-_-)

    参数设置参考:

以下是引用片段:

net.inet.tcp.syncookies=1
防止DOS攻击

net.inet.tcp.msl=7500
防止DOS攻击,默认为30000

net.inet.tcp.blackhole=2
接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

net.inet.udp.blackhole=1
接收到一个已经关闭的端口发来的所有UDP包直接drop

    FreeBSD下,yayu没看见“/sbin/sysctl -p”这样的命令可以使/etc/sysctl.conf的内容生效,所以直接使用命令了:

以下是代码片段:
sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1

    五:其他

    除了修改服务器的内核参数,还可以修改apache的配置文件中的Timeout、KeepAlive、MaxClients等参数来防止Dos攻击,如果有接口调用,还要注意控制一下调用的时间。请听下文分解。

    六:总结

    我讨厌让人加班的坏黑客,不过这也促进了我的学习。

    如果哪位看见上面有不对的地方,还请留意告知,谢谢!

    七:参考文章:

以下是引用片段:

SYN Cookie原理及在Linux内核中的实现
http://www.linux-cn.com/html/linux/kernel/20070411/1630.html

减少Linux下Squid服务器的TIME_WAIT套接字数量
http://blog.s135.com/post/338.htm

TCP协议三次握手
http://www.blogjava.net/hallywang/archive/2007/03/12/103327.html

Tcp三次握手与四次挥手
http://skyyue.bokee.com/viewdiary.15883132.html

linux服务器历险之sysctl优化linux网络
http://blog.csdn.net/chinalinuxzend/archive/2007/09/20/1792184.aspx

中国最完整的sysctl.conf优化方案
http://www.bsdlover.cn/html/38/n-138.html

Linux 反 DDOS的几个设置
http://www.pgsqldb.org/mwiki/index.php/Linux_%E5%8F%8D_DDOS%E7%9A%84%E5%87%A0%E4%B8%AA%E8%AE%BE%E7%BD%AE

FreeBSD系统优化部分内核参数调整中文注释
http://fanqiang.chinaunix.net/system/bsd/2005-04-06/3101.shtml

linux系统优化sysctl
http://bbs.linuxsky.org/thread-7161-1-1.html

SYN,ACK的英文全拼是什么?
http://ks.cn.yahoo.com/question/1407072302504.html

展开全文  
收起全文  
man page显示的命令后的数字含义 (Linux/Unix)
发布于 2008-10-14 22:37 阅读:53,145 评论:0 标签: man 命令

      在man的时候,man page显示的内容中,命令后面会接一个或一组数字,这个数字代表着这个命令的类型。也就是说实际上命令在操作系统中是按照类型存储的。具体可以到/usr/man/目录下查看,你会发现有从man1到man9的目录。具体介绍在die.net上介绍:【这里】。如下:

以下是引用片段:

Section 1
user commands (introduction)
Section 2
system calls (introduction)
Section 3
library functions (introduction)
Section 4
special files (introduction)
Section 5
file formats (introduction)
Section 6
games (introduction)
Section 7
conventions and miscellany (introduction)
Section 8
administration and privileged commands (introduction)
Section L
math library functions
Section N
tcl functions

      结合/usr/man/目录,我们可以有如下的介绍:

以下是引用片段:

  /usr/man/man1   普通的命令─在shell中执行的命令  
  /usr/man/man2   系统调用─关于核心函数的文档  
  /usr/man/man3   库调用─libc函数的使用手册页,如printf,fread
  /usr/man/man4   特殊文件─关于/dev目录中的文件的信息  
  /usr/man/man5   文件格式─/etc/passwd和其他文件的详细格式  
  /usr/man/man6   游戏:给游戏留的,由各个游戏自己定义
  /usr/man/man7   宏命令包─对Linux文件系统、使用手册页等的说明。还有一些变量,比如向environ这种全局变量在这里就有说明
  /usr/man/man8   系统管理─根操作员操作的使用手册页,这些命令只能由root使用,如ifconfig
  /usr/man/man9   核心例程─关于Linux操作系统内核源例程或者内核模块技术指标的文档

      参考资料:

以下是引用片段:

Linux man pages
http://linux.die.net/man/

谁知道很多man文件后面的(8)代表什么啊?
http://topic.csdn.net/t/20040815/10/3275623.html

在man的时候,man page显示的内容中,命令后面会接一组数字,这个数字若为1、2、5、8,表示该查询的命令(文件)的含义是什么?
http://blog.sina.com.cn/s/blog_4a36c25501009ljv.html

LINUX MAN 常用命令
http://hi.baidu.com/zhou2008/blog/item/e6f17b3e36d38a3871cf6ca1.html

展开全文  
收起全文  
让你的vim显示颜色 (Linux/Unix)
发布于 2008-08-06 23:22 阅读:55,319 评论:0 标签: export linux term vim

    使用vim编辑你的程序,如php、c、c++程序,如果没有颜色,相信你会在linux下使用文本编辑程序而感到厌烦。

    这时可更改linux下的终端环境变量TERM,可以使用命令“env”查看TERM的值:

以下是代码片段:
[root@login testing]# env
......
TERM=vt100
......

    更改它的值为“linux”:

以下是代码片段:
[root@login testing]# export TERM=linux

    对于TERM的说法,我也不甚了解。不过你可以man一下看看。对于它可能的值,从网上一篇文章看到可以从这个目录下的文件看到:

以下是引用片段:
/usr/share/terminfo/v/v

    对于“export”,说明如下:

以下是引用片段:

export

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数
 -f  代表[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出所有的shell赋予程序的环境变量。


展开全文  
收起全文  
crontab命令的使用介绍及我的体会 (Linux/Unix)
发布于 2008-07-09 13:21 3 阅读:202,954 评论:3 标签: crontab Linux

    一:前言

    cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。简而言之,如果你想让系统自动在你指定的时间执行某命令,你需要了解crontab这个命令。它不是一个单纯的命令,而是引发一个脚本,具体执行的是这个脚本里面的命令。

    在要判定该服务是否在运行,使用 /sbin/service crond status 命令。
    要启动 cron 服务,使用 /sbin/service crond start 命令。
    要停止该服务,使用 /sbin/service crond stop 命令。
    一般推荐你在引导时启动该服务。

    二:了解 cron 任务

    cron 的主配置文件是 /etc/crontab,它包括下面几行:

以下是引用片段:
[root@login mobile]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0 3 * * * root /var/cfengine/bin/cfexecd -F

    前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

    值得注意的是:

    1:上面的PATH 变量定义用来执行命令的路径,这么一来,如果你在crontab里执行的命令不再这个路径中,请使用命令的全路径,否则crontab并不会为你去寻找。如php命令,你可能是安装到了你指定的路径,那你应该使用which命令找到php命令的全路径。

    2:MAILTO 变量可能会给你带来麻烦,因为它可能会不断的发信,而使你的磁盘臃肿,使用率达到100%,一般是:/var/spool/clientmqueue/ 这个夹,而且里面的文件及其多,并且都是小文件,使用rm命令会提示你文件太多而无法删除,这时你需要了解“ls | xargs rm -f”这个命令的含义。

    与其日积月累,非常的多,甚至会撑爆整个系统。不如每条命令后面进行重定向处理,这是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

    三:crontab 相关的文件

    如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。

    如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。

以下是引用片段:
# record the memory usage of the system every monday
            # at 3:30AM in the file /tmp/meminfo
            30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
            # run custom script the first day of every month at 4:10AM
            10 4 1 * * /root/scripts/backup.sh

    四:crontab命令语法

    格式为:

以下是代码片段:
crontab [ -e [UserName] | -l [UserName] | -r [UserName] | -v [UserName] | File ]

    解释如下:

以下是引用片段:
-e    UserName 编辑用户的 crontab 文件的拷贝,或者,如果一个有效的 UserName 的 crontab 文件不存在则创建一个空的文件进行编辑。当编辑完成后,文件被拷贝到 crontab 目录作为用户的crontab 文件。
-l    UserName 列出用户的 crontab 文件。
-r    UserName 从 crontab 目录除去用户的 crontab 文件。
-v    UserName 列出用户 cron 作业的状态。
File    以File做为crontab的任务列表文件并载入

    五:crontab文件命令使用格式

    /etc/crontab 文件中的每一行都代表一项任务,它的格式是:

以下是代码片段:
minute   hour   day   month   dayofweek   command

    ● minute ― 分钟,从 0 到 59 之间的任何整数
    ● hour ― 小时,从 0 到 23 之间的任何整数
    ● day ― 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
    ● month ― 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
    ● dayofweek ― 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
    ● command ― 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)

    在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

    整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

    用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

    正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

    开头为井号(#)的行是注释,不会被处理。

    六:安全性:控制使用 crontab 命令

    /var/adm/cron/cron.allow 和 /var/adm/cron/cron.deny 文件控制哪一个用户可以使用 crontab 命令。root 用户可以创建、编辑或删除这些文件。这些文件的条目是用户登录名称,每个名称占一行。两个文件都不允许空格。如果登录标识和多个的登录名称相关联,这个crontab 命令采用第一个在 /etc/passwd 文件中的登录名称,而不管当前实际使用哪一个登录名称。而且,要允许用户启动 cron 作业,应该使用 chuser 命令将 /etc/security/user 文件中的守护进程属性设置为 TRUE。

    以下关于 cron.allow 文件的一个示例:

以下是引用片段:
root
nick
dee
sarah

    如果 cron.allow 文件存在,只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户,通过使用 crontab 命令,同时在cron.deny 文件中列出用户的登录名。如果只有 cron.deny 文件存在,任一名称没有出现在这个文件中的用户可以使用 crontab 命令。

    如果以下一个条件成立,用户将不能使用 crontab 命令:

    ● cron.allow 文件和 cron.deny 文件不存在(只允许 root 用户)。 
    ● cron.allow 文件存在,但用户的登录名并不列在其中。 
    ● cron.deny 文件存在,并且用户的登录名列在其中。
    ● 如果 cron.allow 和 cron.deny 文件都不存在,只有被 root 用户授权的人可以用 crontab 命令提交一个作业。

    七:用户与crontab文件的关联

    根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。

    cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

    八:示例

    1:拷贝一个名为 mycronjobs 的文件,到 /var/admn/cron/crontabs 目录下,输入以下内容:

以下是代码片段:
crontab mycronjobs

    2:将时间以小时的形式把每个小时写到 console 中,输入:

以下是代码片段:
0 * * * * echo The hour is `date` 。>/dev/console

    3:要在每个星期一、星期三和星期五的 6:30 a.m. 运行 calendar 命令,输入:

以下是代码片段:
30 6 * * 1,3,5 /usr/bin/calendar

    4:要在一年的每一天的 6:30 运行 calendar 命令,输入:

以下是代码片段:
30 6 * * * /usr/bin/calendar

    5:要在八月的每天午夜运行一个称为 maintenance 的脚本,输入:

以下是代码片段:
0 0 * 8 * /u/harry/bin/maintenance

    6:为命令的标准输入定义文本,输入:

以下是代码片段:
0 16 * 12 5 /usr/sbin/wall%HAPPY HOLIDAY!%Remember to turn in your time card.

在 %(百分号)之后定义 wall 命令的标准输入的文本:

HAPPY HOLIDAY!
 
Remember to turn in your time card.

    7:每天早上6点10分

以下是代码片段:
10 6 * * * date

    8:每两个小时  

以下是代码片段:
0 */2 * * * date (solaris 5.8似乎不支持此种写法)

    9:晚上11点到早上8点之间每两个小时,早上8点

以下是代码片段:
0 23-7/2,8 * * * date

    10:每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

以下是代码片段:
0 11 4 * mon-wed date

    九:参考和感谢

    本文参考、大多抄袭了以下文章,特此感谢。

以下是引用片段:
Linux crontab-自动化的任务:http://www.eygle.com/digest/2006/01/hwoto_linux_crontab.html

crontab 命令:http://study.chyangwa.com/IT/AIX/aixcmds1/crontab.htm

Crontab 笔记:http://www.dbanotes.net/techmemo/crontab_tips.html

展开全文  
收起全文  
[翻译]What is Linux? -- 什么是Linux (Linux/Unix)
发布于 2008-04-15 18:18 阅读:58,598 评论:0 标签: Linux 翻译

  原文:What is Linux?   同时发布:译言

  也许你已经听过很多关于Linux的事情,而且决定体验一下它。如果你是个Linux新手,或者你对电脑都是陌生的,那在最开始的的可能会有点迷惑。但是不要当心这个,事实上这是相当简单的事情。放松一下继续阅读下去吧,我们会为你解释所有的问题。

  在本文中,“Linux”这个单词描述的是一组东西。精确地讲,“Linux”代表着一个操作系统内核 -- 也就是说,它是一个操作系统的底层,所有的艰苦的工作,如与计算机的硬件对话,管理内存和驱动程序,都是由它完成。除非你是一个计算机高级用户,或者你要深入进去解决一些硬件或软件问题,否则你将永远不会接触到它,甚至不需要考虑到它的存在。

  尽管它对于计算机系统来说是非常重要的,但是对用户来说是不会直接接触到它的。相反的是,你会工作在一个被称为“用户平台”的程序中 -- 如此称呼是因为用户是直接工作在这些程序之上的。当一个发行商或项目组把Linux内核和一些对用户有用的用户平台上的程序捆绑在一起,我们将之称为Linux分发版,或简称为“Linux” -- 因为Linux在其中处于核心地位,而且每次称作“Linux分发版”会使人喘气太困难了。一般来说,当有人和你说“我使用Linux”,或“你用过Linux吗?”,他们不仅是在说内核,他们说的是整个Linux分发版。

什么是分发版,哪一个是我应该选择的?

  谈及Linux分发版,你可能会奇怪的觉得究竟什么是分发版。这个是相当简单的。在我们上面的讨论中,我们知道这个Linux内核本身对终端用户是很难有用的。你不能用它玩俄罗斯方块、写文档、开通网页服务,或者发送邮件 -- 如果你不能做这些事情,它怎么能称之为计算机呢?

  所以,很多的发行商和项目组们决定把Linux内核和一些有用的软件整合在一起,于是你就可以很有亲切感的做很多事情了。同时,他们也提供了安装步骤,这样你就可以在电脑上安装Linux了和管理应用程序:如添加和管理驱动、管理用户、无需在命令行环境下使用文本编辑器和指令工作。当你把Linux内核和有用的软件、安装程序、软件管理工具整合在一起,你就拥有一个Linux分发版了。

  下一个问题是,哪一个分发版 -- 或发行套件 -- 是你该选择的?不幸的是,这个问题不像分发版那样好解释。基于很多的因素,我们无法告诉你该选择哪个分发版,这完全取决于你的个人经历,和你想用来做什么。

  一些发行套件,像Rad Hat企业版SUSE企业版主要是为一些使用Linux作服务器的企业使用的。一些如Fedora CoreUbuntuopenSUSE的发行套件有着不同的外观,它们适合使用桌面或用作服务器的用户。

  如果你问20个Linux的使用者他们该选择那个发行套件,你可能会得到很多不同的答案 -- 而且他们都是对的,至少对他们自己而言。

  非常好的是大多是Linux分发版都是免费的,你可以下载每一种,然后试试看哪一种能满足你的需要。可以看看我们的套件中心来得到最流行的发行套件和更多信息。

它们都是免费的吗?

  这个消息是真的吗?微软、苹果以及其他的公司都对他们的软件进行收费,你能够免费下载与Windows或Mac  OS  X旗鼓相当的软件,这听起来有点奇怪。这是怎么回事呢?

  简而言之,一些人认为这些软件应该自由和开源的分发,这样软件就可以自由的分享了 -- 而且你甚至可以修改它!这个行动已经存在很长时间了。GNU项目于1984年由Richard Stallman创建,这个时间早于微软公司发行他的第一版Windows操作系统,同年,苹果公司发布他第一版经典的Mac OS操作系统。

  这个项目一直在聚集着力量,在1991年的时候Linus Torvalds发布了Linux的第一个公开的发行版。Linus Torvald也把Bash Shell和GCC加进了Linux,以使它更有使用价值。最终Torvalds决定采用GPL作为内核的许可协议。

  GPL,是由GNU组织发展起来的,他允许你根据GPL把软件分享给你任何你愿意的人。你可以依据GPL修改这些软件,并分发出新的版本。一旦你在这些许可协议下分享了这些软件,你就接受了这个协议。

GNU/Linux包含了什么?

  一些人乐意把Linux称作GNU/Linxu,因为他们想用这种方式来强调GNU组织对Linux分发版的贡献。Linxu内核在任何Linux分发版都扮演着巨大作用,而这离不开GNU组织所贡献出的软件。例如,如何没有GNU Compiler Collection (GCC),你如何编译内核或者其它运行在Linux下的程序?大多数Linux分发版把GNU Bash作为默认的Shell,GNOME、GTK+使用着GNU glib,还有其它很多的程序在Linux全天候运行着。

  没有必要列出所有的由GNU组织开发运行在Linux的软件,这实在是太多了。没有GNU,我们将错过许多精彩的软件。

  从Linux的分发版中,GNU组织获得了很大影响力的认可。但是,GNU组织并不是唯一的主要贡献者。值得记载的是,Linux分发版所的软件来自许多其他的组织--比如GNOME、KDE、OpenOffice.org、Mozilla基金会等等。

  Linux还是GNU/Linux,这就取决于你了。

自由软件和开源软件的区别

  自由软件和开源软件是有区别的。需要注意的是,所有的自由软件都是开源软件 -- 因为它符合Open Source Initiative (OSI)对开源的定义,其简称为OSI

  然而,并不是所有的开源软件符合GNU组织或Debian组织自由软件的定义。那他们有什么区别呢?基本上,他们存在哲学上的差异。在GNU组织的世界中,自由软件事关自由,而不是价钱。

  而另一方面,开源软件最初起源于它的开发模式。它的开源软件模式 -- 分布式的开发,透明的开发过程,可修改的代码 -- 比私有软件开发模式要好点。因此,开源许可协议可能在某些方面对用户有所限制,而自由软件却不一定会。

  并非所有运行在Linux的软件都是自由或者免费的。很多公司为Linux开发了私有性的软件,你可以付出一点钱来得到它。例如,Oracle有产品运行在Linux上,但他们并没有开放它 -- 他们出售运行在Linux上的Oracle数据库和其它软件来获取利益。

  尽管GPL和其他许可协议要求其下的衍生产品执行相同的许可协议,但他们没有要求非其衍生的产品执行相同的许可协议,所以很多公司可以出售运行在Linux上的软件,这不会破坏任何规定和许可协议。

  事实上,的确有一些公司在出售Linux并做售后服务,而且做得也很不错。红帽子分发版、红帽子企业版,它们包含了自由和开源软件(FOSS),他们从中获取利益已经一段时间了。他们并不是依靠出售许可协议而获取利益,而是在对分发版的技术支持上得到收益,因为很多公司愿意在遇到问题或需要新的功能时付出酬劳。

我可以在Linux下运行Windows程序吗?

  如果你曾经是一个Windows用户,当然大多数人都是这样的,你可能在使用Linux时也能支持你所需要的Windows程序。原本上,Windows程序是不能运行在Linux上的,但是你在Linux上找到替代方法,或者你的确需要的话,你可以使用一些Linux插件来帮助你。

  Wine就是这样的一个选择。Wine是一个开源的软件,它可以让Windows程序运行在Linux或Unix操作系统上。它对Windows程序是兼容的,所以你可以不改变程序的前提下在Linux运行它。另一个选择是CodeWeavers CrossOver,它是基于Wine的,但并不是完全开源的。它拥有一些Wine不具备的功能,使得其在Linux下更加容易安装和运行Windows程序。

  还有一个选择是虚拟机。虚拟机和VMware、VMware工作平台、ParallelsQemu一样,可以让你在Linux下像在处于Windows环境中一样运行程序 -- 所以你可以在Linux下无需修改的运行几乎所有的Windows程序,这就好像在Windows下运行一样。(一些要求3D支持的应用可能在虚拟机无法运行,因为虚拟机不支持3D图形环境)。

  在不远的未来,你可能更愿意使用Linux下程序来取代你在Windows下的程序了。下一章中,我们将讨论如何找到Linux下的程序,并安装它们。

展开全文  
收起全文  
[翻译]What is Linux? -- Linux从这里开始 (Linux/Unix)
发布于 2008-04-03 15:35 阅读:42,559 评论:0 标签: Linux start 翻译

      想从现在开始,每周翻译一篇英语文章。请广大网友监督!

  原文: Linux starts here  同时发布:译言

开始了解Linux

  Linux(发音:LIH-nuks)是一个类似Windows或Mac的计算机操作系统。一般认为Linux是由芬兰的程序员Linus (发音:LEE-nus) Torvalds于1991年在遍及全球的开发者帮助下起源的。Linux类似早期的操作系统Unix,但与Unix不同的是,Linux是一种自由和开源的软件 -- 也就是说,你不仅可以下载并在你的电脑上运行,而且还可以下载它的源代码。你可以修改或扩展这些源代码以适应你的需求。

  Linux广泛运行在多种硬件平台上,从大型的主机到个人电脑,甚至手机上。Linux遵循自由软件基金会GNU项目GNU General Public License第二版规定,它允许用户改变和分发这个操作系统。

  你可以认为Linux由两部分组成 -- 一个被称为内核,它是连接硬件和系统软件系统的基本接口。二是在内核之上运行的各种程序,比如图形用户界面(GUI)和应用程序。

  没有专门的公司销售Linux。因为它是开源的软件,任何人都可以把一些程序和应用与Linux打包为一个整体,并分发它。这种不同的“味道”的Linux被称为分发版。你可以从我们的分发版页面上得到大部分流行的分发版的资料。分发版的一些丰富的资源可以在DistroWatch.com上找到。

  许多Linux的分发版被设计成在你电脑的硬盘上安装,它可以作为一个唯一的操作系统,也可以和其它的操作系统共同存在,这样你可以在每次电脑启动时选择使用哪个操作系统。还有一些分发版可以作为Live CD在你的移动媒体上引导运行,典型的如CD,当然也有Live DVD分发版,甚至有一些分发版可以从软盘或者USB上引导启动。Live类型的分发版是非常有用的,因为这样可以让你在不影响目前的硬盘上的东西的基础上运行不同的操作系统。

  如果你是一个对Linux完全不了解的Windows用户,请丢弃那些令人听起来对Linux沮丧的声音。为了你们,我们写了另一篇文章,可以让你在不改变你的Windows系统情况下测试Linux,也可以让你保留Windows程序和文件情况下安装Linux,你也可以根据你的需要选择适合你的分发版。

Linux桌面

  能让Linux对你电脑有用的一方面是它的图形用户界面(GUI)。这个GUI使用可点击的图标、由屏幕面板、滚动条组成的小窗口让Linux秀色可餐(“look and feel”),而且用户使用的菜单和图标等是可以设置和改变的。这种可视可点击的环境,不依赖于命令行的可视化布局,让操作系统更加的直观可用。如果没有GUI,Linux(或其它任何操作系统)会要求用户依次输入各种命令,也就是命令行模式(CLI)。

  当大多数操作系统没有提供能让你选择你想要的用户界面的功能时,Linux却给你很多的选择。这些用户界面中的大多数不仅仅是提供了图形界面 -- 它们提供了一个具有多种工具、应用程序、游戏和其他应用的桌面环境,这样可以让用户的电脑体验可以更丰富一点。Linux下最流行的两种桌面环境是KDE和GNOME。

  KDE是K桌面环境的代表。KDE可以运行任何Unix操作系统下,包括Linux。KDE所有的源代码是遵循GNU General Public License的,这也意味着任何人能得到和改变KDE以适应自己的应用。KDE集成在大多数的Linux分发版里,包括一些标准化的菜单、工具条、配色方案,同时提供了完整的帮助系统,网络工具、图形和多媒体应用,以及完整的办公系统解决方案和其他多种软件工具。KDE项目是被自由软件开发社区支持的,对于Linux使用者来说是无需任何费用的。

  GNOME (发音:guh-NOME),全称是GNU Network Object Model Environment,是Linux另一种非常普及的GUI或桌面环境。它也是遵循GNU General Public License,这也意味着对于任何Unix操作系统的用户,包括它的源代码都是自由可用的。GNOME集成在每一种Linux分发版上。这也是GNU项目的一部分,GNU项目开发了GNU操作系统,其中的一部分包含在所有的标准Linux分发版中。

  正如KDE,GNOME桌面环境包含的不止是工具条、图标和菜单。整套自由软件包里还包括帮助文件、网络工具以及GNOME  Office办公套件。其它在Linux下的GUI有:

  XPDE desktop environment
    “让Windows XP用户更容易的使用Linux”

  Xfce
    “多种*NIX系统下的轻量级桌面环境。它设计得很有效率,它能快速加载和执行程序,而不耗用太多系统资源”

  Enlightenment
    “高级的图形库、工具和环境”

  IceWM
    “IceWM的目标是快速、简单,不阻碍用户使用”

  Blackbox 
    “Blackbox是一种你所寻找的X窗口系统的快速、轻量级的窗口管理工具,而且它不依赖于那些繁琐的资源库”

  Window Maker 
    “Window Maker是一个X11窗口管理工具,最初是为了综合的支持GNUstep桌面环境”

  FluxBox 
    “建立在Blackbox基础上的快速、紧凑的窗口管理工具,它还具有更多的功能”

命令行

  这些所有的桌面环境的共同点之一是让用户可以使用Linux命令行;你没有必要使用鼠标去执行每一次操作。输入一条或几条命令可能会让一些操作更为快速和容易,这就好像是用户在20年前使用DOS操作计算机一样。

  每个桌面环境进入命令行模式的方式是不一样的。通常会提供一个窗口让你输入命令。在GNOME下,这个窗口叫GNOME终端;KDE下,叫做Konsole。

  我们为你准备了一篇文章:命令行基本介绍。一个更进一步学习的网站是LinuxCommand.org

桌面应用

  和所有操作系统一样,Linux也提供了广泛的桌面应用程序的支持。典型的程序包括电子邮件、办公软件、音乐盒电影播放、个人信息处理、诸如即时和聊天室的网络通讯,以及文件共享。

游戏

  Linux对游戏并不陌生。Linux的分发版总是包含着游戏;例如,GNOME游戏包里面包含了16款街机游戏和智力游戏;KDE游戏中心包含的游戏有街机、棋、牌、骰子、逻辑推理、谋略游戏,和一些小玩具。如果你的分发版没有你想要的游戏,你可以到一些商业性的网站,如Linux Game PublishingTux Games,或者你也可以直接到一些小的公司、独立出版人,个人爱好者手中直接购买。如果这个游戏是为微软的Windows操作系统或者家庭游戏而设计的,那么你可以通过模拟器得到帮助。有关Linux游戏的更多信息,你可以去下面的网站看看:Enjoying games with GNU/Linux

文章并未结束

  不久的将来,我们会提供更多的篇幅来介绍不同种类的桌面和服务方面的应用、编程工具、练习和支持方面的内容。我们非常欢迎你给我们来信提出一个Linux初学者应该知道的内容:editors@linux.com。如果你现在想提问题,可以到这个版面来:http://www.linux.com/forums/forum/1

展开全文  
收起全文  
uniq和sort对汉字的识别差异 (Linux/Unix)
发布于 2008-03-29 22:56 1 阅读:75,088 评论:1 标签: Linux sort uniq

  在处理文本文件中经常会使用的到sort和uniq命令,组合使用时通常是为了得到文本中共有多少行不同的信息。
 
  比如“sort a.txt | uniq”。这个命令的意识是说先对文本进行行排序,然后把相邻中的相同行的内容只取一行。
 
  然而在实践中发现这两个命令对汉字的支持不一样,解决方法如下:

以下是引用片段:

[yayu@login log_result]$ echo $LANG
en_US.UTF-8
[yayu@login log_result]$ LANG=zh_cn

展开全文  
收起全文