常用shell集锦(更新.........)

1、lsof   -i:9160   :查看9160端口的占用情况 。

2、grep  /query/report/list   *.do   1>hell0  2>world   查询,正确输入到hello文件中,错误到world中
3、ls  | wc -l    显示文件的个数
4、tail -fn 100  stdout.log
5、sudo apt-get install unrar  安装unrar命令
6、chmod -R a+x hadoop-0.21   给文件夹以及其所有子文件执行的权限
7、tar zxvf hadoop-0.18.3.tar.gz
8、tar -czvf  hadoop_001 hadoop-0.21   压缩后文件名字,要压缩文件夹   只打包,不压缩
9、scp id_rsa.pub  dev@10.0.0.22:/home/dev    远程复制的命令   将本地的id_rsa.pub复制到10.0.0.22的/home/dev目录下 。

10、 grep -B 7  'publishTime='  logs/newsinfo.log.20120131 |grep -E  'publishTime=|com.gemantic.analyse.news.service.impl.IndexServiceImpl' |awk '{print $1$2}' |awk '{if(NR%2==0)print $0;else printf $0 "##"}'

将两行内容显示在一行,用##连接起来

11、date +%s  显示当前时间的秒数,详见 man date
12、打包但不压缩的命令:tar -cvf  hadoop_001 hadoop-0.21   压缩后文件名字,要压缩文件夹
解开打包的命令:tar -xvf hadoop_001      将打的hadoop_001按照原有的文件目录解压开 。
13、pwd   显示当前目录路径

14、crontab -l  查询本机上所有定时执行的脚本

15、netstat -an | grep 8080 查看端口

 16、tail -fn 100  stdout.log |grep  ‘’     重定向tail的结果并搜索,可以动态查看自己想要看的一部分 。

 17、top   统计cpu以及内存的使用情况 。

18、du -sh 文件夹名称 :查看该文件(夹)的占用空间  。

 19、ps -eo pid,tty,user,comm,stime,etime   :查询进程的开始时间、结束时间 。

 20、shift :在shell中每使用一次,变量的位置就会向前提前一下(原来$3变成$2,原来的$2,变成$1,原来的$1变成$0) ,还有一种用法默认shell只能使用9个参数$1-$9 ,但shell可以传多个,使用shift就可以使用后面的参数 。 

21、sort exception.2011-08-31 |uniq -c       先将文件exception.2011-08-31中的每行数据按照字母序排列,然后通道传给uniq ,在统计一样的个数  。

 22、grep 'optimized query'  logs/stdout.log |grep -v "stock:mark" |grep 'stock:' |grep '2011/10/24'| awk '{ print substr($2,1,8) }'|uniq -c

grep后的数据格式:2011/10/24 12:10:41.230 INFO [com.gemantic.query.QueryProducer] [] optimized query:+stock:长青集团 +(+MARK:mark -type:xhnewsflash -type:xhpriceflash)   ,统计每毫秒的查询的个数 。

 23、sudo chown -R dev.dev opt   更改文件夹opt的用户和相应的组

24、for gdocfile in  `ls /data/gdoc/|awk '{print $0}'|sort` ;do
java ${JAVA_ARGS} ${MAIN_CLASS} $gdocfile >"$gdocfile".log
done  

for 循环,注意`ls /data/gdoc/|awk '{print $0}'|sort` 两边的两个引号。

26、取当天日期为`date   +%Y%m%d`

取昨天日期为`date   -d   yesterday   +%Y%m%d`   

取两天前日期为`date   -d   -2day   +%Y%m%d`

27、grep -E '20197|COMMAND'    stdout.log    多个条件 或关系  的grep

28、grep 'masterId='  newsinfo.log.20111115 | sort | uniq -c |sort -k1n -k2n -k3n  
结果统计后按照统计的个数排序 ,其中 uniq -c 是对连续出现的id进行累计计算,并把总数放到前面。
-k1n -k2n -k3n  的作用是窃取结果的第一列、第二列,第三列 进行排序并且按数字排序(n的作用), -r 是反序。

 29、cat ../logs/newsinfo.log.* | grep -B 7 "masterId=$categoryid" |awk '{if ($0 ~ /pageId=/) print $0}' |sort |uniq -c |awk -F '=' '{ if (NR<15 && $2 != $categoryid) print "<a href=\"http://info.gemantic.com:9085/news/detail.do?id=" $2 "\">" $2 "</a><br>"}'>>$filename

在newsinfo.log.* 中查找,然后awk,然后去重,然后awk判断(使用外面的变量categoryid) 

30、cat /proc/cpuinfo |grep -E 'processor|physical id|core id' |awk '{if(0==NR%3)printf("%s\n",$0);else printf("%s\t",$0)}'

31、grep  三行,然后通过后面的awk将列转换成行

 bin=`dirname "$0"`

bin=`cd "$bin"; pwd`

以上两个命令用于shell脚本中,第一个是得到该脚本所在的目录名称(.),第二行:进入该目录然后调用pwd得到该目录的绝对路径  。

32、

判断字符串是否为空
if [ "$str" = "" ]
if [ x"$str" = x ]
if [ -z "$str" ]

 

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限  
if [ ! -x "$myPath"]; then  
mkdir "$myPath"  
fi 
 
 33、
shell的常用数字操作
counter=0
echo $counter

((counter++))
echo $counter

let counter++
echo $counter

counter=$(expr $counter + 1)
echo $counter
 34、
$0 = shell名称或shell脚本名称
$1 = 第一个shell参数
...
$9 = 第九个shell参数
$# = 位置参数的个数
"$*" = "$1 $2 $3 $4 .. $n"
"$@" = "$1" "$2" "$3" "$4" .. "$n"
$? = 最近执行的命令的退出状态
$$ = 当前shell脚本的PID
$! = 最近启动的后台作业的PID
 
35、
按行读取文件
#!/bin/bash

while read line
do
    echo $line
done < file(待读取的文件)
----------------------------------------------------------------------------
----------------------------------------------------------------------------
#!/bin/bash

cat file(待读取的文件) | while read line
do
    echo $line
done
----------------------------------------------------------------------------
----------------------------------------------------------------------------
for line in `cat file(待读取的文件)`
do
    echo $line
done
----------------------------------------------------------------------------
说明:
for逐行读和while逐行读是有区别的,如:
$ cat file
aaaa
bbbb
cccc dddd
----------------------------------------------------------------------------
$ cat file | while read line; do echo $line; done
aaaa
bbbb
cccc dddd
----------------------------------------------------------------------------
$ for line in $(<file); do echo $line; done
aaaa
bbbb
cccc
dddd
 
 
 36、
文件查找命令
find /  -name etljet
 
37、
////shell脚本中的,-C haha  形式的参数读取
while getopts "F:C:" optname
do
    case "$optname" in
    "F")
        echo "Option $optname is specified $OPTARG"
        ;;
    "C")
        echo "Option $optname has value $OPTARG"
        ;;
    esac
    echo "OPTIND is now $OPTIND"
done
 
38、date -d "2008-09-30  +1 days" +%Y-%m-%d  字符串 加1天并格式化
 
39、awk -F '\t'  '{ if($6==2) print $7" "$5" "$1}'  adplandataplus_2013-06-06.txt |awk  '{if($1 in map){print $0;tmp[$1]=1;}else{map[$1]=$0}}END{for(i in tmp){print map[i]}}'     取出数据中第一列重复的行
 
 
40、通过inode删除一些文件/文件夹   
通常会不小心创建一些不可见字符的文件或者文件夹,如何删除呢 
ls -il    ,第一列就是该文件/文件夹的 inode   
然后  find . -inum inode号码 -exec rm -rf {} \;  就删除了  
 
41、shell按时间段过滤日志

end_time=`date +"%Y-%m-%d %H:%M:%S"`
start_time=`date -d "${end_time} 30 minute ago" +"%Y-%m-%d %H:%M:%S"`
exception=`ssh $host cat $log_file | awk -F "," -v st="$start_time" -v et="$end_time" '{if($1>=st && $1<=et){print $0}}' | grep -E 'Exception|Error ' | tail -n10`

 42、查看cpu时间的详细情况

       http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

 
posted @ 2011-07-21 14:57  xiao晓  阅读(684)  评论(0编辑  收藏  举报