日志分析时常用的一些shell命令

sort
sort的命令主要是排序,常用的参数有以下几个:
  -b   忽略每行前面开始出的空格字符。
  -c   检查文件是否已经按照顺序排序。
  -f   排序时,忽略大小写字母。
  -M   将前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。
  -o<输出文件>   将排序后的结果存入指定的文件。
  -r   以相反的顺序来排序。
  -t<分隔字符>   指定排序时所用的栏位分隔字符。
  -k  选择以哪个区间进行排序。

uniq
uniq的命令主要是用来过滤重复部分显示内容。这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。一般会加上-c参数配合sort统计重复出现的次数。uniq主要有以下几个参数:
  -c, –count           在每行行业显示重复出现的次数
  -d, –repeated        只显示重复行,重复行只出现一次
  -D, –all-repeated[=delimit-method] 显示所有重复的行,重复行出现多次
  -f, –skip-fields=N   忽略比较前N个字段
  -i, –ignore-case     比较时忽略大小写
  -s, –skip-chars=N    忽略比较前N个字符
  -u, –unique          只显示不重复的行
  -w, –check-chars=N   每行最多比较N个字符

find
find命令用来搜索文件并执行指定的操作,在操作的时候要注意find命令有可能会从很多目录中搜索,会导致非常耗资源。find的命令格式如下:
find pathname  -option [-print][-exec -ok command ] {} \;
其中pathname是搜索路径,默认为当前目录,.代表当前目录
-option非常丰富,提供了各种查询属性,比如-name “*.log”就是搜索所有.log结尾的文件(注意如果有星号就需要双引号)
-print是将匹配的文件输出到标准输出,默认是有这个属性的,所以一般执行这个命令的时候不用加
[-exec -ok command ] {} \是将find的结果执行指定的命令,-ok和-exec一样,只不过前者在执行前需要询问用户,比如-exec ls {} \;(注意最后的分号,结束命令),此命令也可以通过管道将find的结果传递给xargs来完成同样的效果

option主要有以下类型:
-name     filename             #查找名为filename的文件
-perm     NNN                  #按执行权限来查找
-user     username             #按文件属主来查找
-group    groupname            #按组来查找
-mtime    -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n                #按文件访问时间来查找
-ctime    -n +n                #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                       #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                        #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer    f1 !f2               #查更改时间比f1新但比f2旧的文件
-type     b/d/c/p/l/f          #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size     n[c]                 #查长度为n块[或n字节]的文件
-depth                         #使查找在进入子目录前先行查找完本目录
-fstype                        #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                         #查文件时不跨越文件系统mount点
-follow                        #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                          #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                         #忽略某个目录,如find -path ./data -prune -name index.php

find命令的使用如下:
#find -name “*.log” -exec ls -l {} \; #查询当前目录下所有.log结尾的文件,并显示详细列表
#find -ctime +365 -ok rm -rf {} \;    #查询一年前修改过的文件并执行删除,删除前确认

xargs
xargs命令是将管道的输出作为参数传递给命令,如xargs ls -l,xargs的命令格式是xargs [-options] [command],主要的options选项有:

-a file                        #从文件中读入作为sdtin,也可以是–arg-file=file
-E eof-str                     #当xargs分析到含有eof-str这个标志的时候就停止,也可以是-e[eof-str],也可以是–eof=eof-str
-p                             #当每次执行一个argument的时候询问一次用户
-n num                         #后面加次数,表示命令在执行的时候一次用的参数个数,默认是用所有的,也可以是–max-args=max-args
-s num                         #命令行的最大字符数,指的是xargs后面那个命令的最大命令行字符数,也可以是–max-chars=max-chars
-L num                         #Use at most max-lines nonblank input lines per command line.-s是含有空格的,也可以是-l[max-lines]或–max-lines=max-lines
-P                             #修改最大的进程数,默认是1,为0不限制,也可以是–max-procs=max-procs
-t                             #表示先打印命令,然后再执行
-I                             #或者是-i,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替,也可以是-i[replace-str]或–replace=replace-str
-d delim                       #分隔符,也可以是–delimiter=delim
其它类似还有–no-run-if-empty等参数