Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198810
  • 博文数量: 75
  • 博客积分: 2049
  • 博客等级: 大尉
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-08 12:37
文章分类

全部博文(75)

文章存档

2011年(1)

2010年(9)

2009年(65)

我的朋友

分类: LINUX

2009-05-14 13:27:26

1.    ``=$()


2.    $(()) 数学运算


3.    [ -a ] = [[ && ]] 


4.    [ -o ] = [[ || ]]


5.    判断a变量是否包含b变量?

方法1:echo $a | grep $b

方法2:expr index "$a" "$b"


6.   not awk '{max=1}{print '$max'}' but  awk '{max=1}{print max}'

     awk自定义的变量不需要在前面加$


7.   查看第n行的上下几行    grep -A 2 "d" text

     -A 2 表示匹配行和下面的2行
     -B 2 表示匹配行和上面的2行
     -C 2 表示匹配行和上面及下面的2行


8.   匹配运算符":"    $ a=123456

     $ expr $a : "12.*"     结果为6


9.   查看Apache的并发请求数及其TCP连接状态:

$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

10.  xargs -n3 < a.txt 表示  每行按3个字段显示

xargs只支持标准输入,不支持文件,不能用xargs -n3  a.txt

 

11.   awk '{print $'"$A"'}' 1.txt   引号就近匹配, 等于:

      awk '{print $'    "$A"    '}' 1.txt  

 

12.   awk 常用变量:

FNR 当前记录数

NF  当前记录中的字段个数

NR  已经读出的记录数

OFS 输出字段分隔符 空格

ORS 输出的记录分隔符 新行

FS  输入字段分隔符

RS  输入的记录分隔符 新行


13.    grep -o 选项只显示匹配的内容


14.    bash 帮助查看 LANG=C PAGER='less -iRsp[查询内容]'  man bash


15.如果某行的第一个字符为空,就把这一行补到上一行,中间用空格或TAB键隔开

示例文件如下
a
        b
c
        d

实现:awk -v RS="###" '{gsub("\n[ \t]+","\t");print}' URFILE

解释:ps: -v  开始定义变量RS="###" ,这个目的是把全文当作一条记录。
gsub("\n[ \t]+","\t")  全局替换函数,把 \n加一个或多个空格或者是\n加一个或多个\t 替换成\t
print 处理之后打印


16.apache日志文件 /log 里的日志格式如下
115.31.12.33 [24/Mar/2009:14:38:16+0800] "GET/search?q=xeon HTTP/1.1" 200 10623
116.18.84.12 [24/Mar/2009:14:41:25+0800] "GET/search?q=NERO8 HTTP/1.1" 200 20799

1. 统计一天内的总搜索量?
2. 统计一天内不同样的查询词,并显示被查询的次数最多的是哪个词?
3. 一天内访问IP数(不同样)最多的某一分钟是哪一分钟?

1 统计一天内的总搜索量?
awk -F"[:[]" '{a[$2]++}END{for(i in a) print i"\t"a[i]}' LOGFILE

2.1 统计一天内不同样的查询词
awk -F"[= :[]" '{a[$3"\t"$8]++}END{for(i in a) print i"\t"a[i]}' LOGFILE

2.2 显示被查询的次数最多的是哪个词
awk -F"[= :[]" '{a[$3"\t"$8]++}END{for(i in a) print i"\t"a[i]}' LOGFILE | sort -k1,1 -k3,3nr | uniq -w 11

3 一天内访问IP数(不同样)最多的某一分钟是哪一分钟
awk -F"[= :[]" '{s=$1"\t"$3"\t"$4":"$5;if(!b[s]){a[$3"\t"$4":"$5]++;b[s]++}}END{for(i in a) print i"\t"a[i]}' LOGFILE | sort -k1,1 -k3,3nr | uniq -w 11


17.使用awk过虑重复的行: awk '!a[$0]++' file = awk 'a[$0]++==0' file

首次出现时a[$0]为空,!a[$0]返回真,然后a[$0]++,第二次出现时,a[$0] 为1,!a[$0]返回假,然后a[$0]++。。。。


18.find . -maxdepth 2 | xargs -n1 du -sm
如果如果目录当中有空格,例如'a a',就会出现du a a 。

find . -maxdepth 2 | xargs -i -n1 du -sm "{}"

-i 是将输出的文件名放到{}中,-n1表示每行按一个字段显示。


19. 读取{}之间的内容 test内容如下:

{
1
}
{
2
}

awk '$1 ~/{/ {while (getline line) {if(line ~/}/) {break};print line}}' test

1

2


20.在crontab中%字符被认为是换行,所以你的命令中有%时,在crontab中要加\转义

30 * * * * date '+%D' >datefile  
是错误的
正确的应该是
30 * * * * date '+\%D' >datefile


21.显示几天之前的日期

 date -d "2009-1-2 -7 day" +%Y-%m-%d
 date -d"7 days ago" +%Y-%m-%d

22. for i in a*     这里in后面使用的是通配符,而不是正则表达式

23. $@ 与 $*的差别:
$@ 与 $* 只有在引号内才有差别,如参数为a "b c" d,那么"$@" 为 a "b c" d三个字段,"$*" 为"a b c d"的一个字符串.而$@和$*都为a b c d 4个字段
 
24. find的prune用法
搜索以mm开头的文件,但是忽略a和b的目录下
find  . \( -path a  -o -path b \) -prune -o -name  "mm*"   或者
find  . \( -path a  -o -path b \) -prune -o -regex  ".*/mm.*"
注意find不管是通配符还是正则匹配都需要完全匹配(ls也是完全匹配,grep是部分匹配),另外通配符匹配的是文件名而正则匹配的是整个路径。
 
25. 数据的八进制显示命令od
od -bc file   显示文件为八进制格式。可以查看区别是dos文件还是unix文件
 
26. dos2unix和unix2dos命令实现DOS和UNIX文件的相互转换
dos文件的行结束符要用两个字符表示:\r\n。unix文件的行结束只有一个字符\n。
 
27. 归档压缩工具:gzip,bzip2,tar,zip
gzip和bzip2的可选项相同,只是gzip的速度比bzip2压缩速度要快。两个都是压缩工具,将单个文件或者单个目录进行压缩
tar是个归档工具,是将多个文件或者目录归档为单个文件
通常是tar和gzip工具一起使用,先归档再进行压缩
zip工具将tar和gzip工具合二为一
 
zcat获知gzcat可以直接阅读压缩后的文本文件的内容,而不需要gunzip解压缩后再进行阅读
 
gzip命令的可选项
解压文件(-d ) gzip -d  = gunzip
递归压缩方式(-r)
gzip -r dir  压缩一个目录
 
tar一般都是和gzip一起使用,有时候如果压缩用的是bzip2的工具,则不能用tar -xzvf 来解压,tar工具还有个选项--bzip或者-j用来压缩和解压
gzip    tar  xzvf     tar  czvf
bzip2   tar  xjvf     tar  cjvf
 
zip的可选项   归档递归方式(-r)
解压命令unzip   查看压缩文件的内容(-v) unzip -v
 
28. 文件比较命令  cmp,comm,diff
cmp 用来比较两个文件是否完全相同
comm  用来查找两个文件的相同之处
diff  详细显示两个文件的不同之处
 
29. sort , uniq去除重复行
sort -u 是让所有的重复行显示一次(包括没有重复的行)
uniq -u 选取非连续重复行
uniq -d 选取连续重复行,只输出其中一行
uniq    连续重复行显示一次(包括没有重复的行)
注意:针对uniq重复的行都是连续的,不是连续的相同的两行不算是重复行,例如:
a
b
a
这里a不算是重复行
 
30. tr命令可选项
tr -d 删除指定的字符  例如: tr -d ':' < file
tr -cd 删除除了指定的所有字符
tr -s  将多个连续的字符压缩成一个   例如:  tr -s ' ' < file
另外tr还可以用来字符替换    例如:  tr 'a' 'b' < file
 
31. paste命令
paste可以将多个文件水平的合并再一起 例如:paste -d '|' file1 file2
另外paste还可以用来合并行(-s选项),可以有规律地按n行进行合并  例如:
paste  -s -d '|\n' file   这样就按两行合并成一行,而且分隔符为|
 
32. 通配符 * ? [ace] [a-d] [!abc] {mm,nn,xx,yy}
[]是单个字符的集合,{}相当于一个列表,也是一个集合,但不局限于单个字符。
 
33. ps选项
-f   详细显示
-e   显示全部进程,包括用户进程和系统进程
-u   显示用户进程
-a   显示除了本终端的所有用户进程
-l   长格式显示内存相关的信息
-t   显示运行在term终端的进程
 
34. kill
kill -s TERM = kill -15
kill -s KILL = kill -9
 
35. 临时权限SUID SGID 粘着位T
SUID=4   SGID=2   T=1 
SUID和SGID都必须拥有相应的执行权限才有效,有执行权限显示s,无执行权限显示S。 
 
36. <<: here document <<<: here string
while read a
do
...
done <<< `grep abc file`
 
37. shell脚本中设定命令执行超时
在命令执行之前设定超时时间并超时后执行的命令放到后台,例如:
sleep 5 && exit &
mysql -uroot -p
 
38. 在升级的时候,查看新的配置文件比原来的多出来的选项
awk -F'=' 'NR==FNR&&!/#/&&/=/{a[$1]=1}NR!=FNR&&!/#/&&!/^$/&&!a[$1]{print}'  old new

39. tar打包时exclude一个目录

not tar czvf abc.tgz  --exclude=abc/exlude/
but tar czvf abc.tgz  --exclude=abc/exlude
 
 
 
 



 









阅读(1058) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~