常用shell命令总结,非常实用

man 命令  查询命令说明


1、cat  zcat

cat file1 file2 可以显示两个文件的内容

cat -n file1 可以为文件增加行号

cat file1 file2  >> file3; 把file1和file2的内容合并到file3中

zcat file1[file2]  获取压缩文件file内容


2、sort

sort file1 对file1里面的内容进行排序

sort -u file1  去重排序

sort -r  file1 降序排列

sort -f  file1 -o file1 将排序结果放到原来文件中【原来的内容就木有了】

sort -n file1  按数值的形式进行排序【默认是字母顺序】

sort -n -k 2 -t : file1   以:为分隔符 以第二列位排序列进行排序

http://system-administrator.lofter.com/post/c935d_1bfb98


3、cut

cut -d ‘分隔符’  -f num 如:

cut -d ‘:’ -f 3  

cut -d ‘:’ -f 3 4

cut -d ‘:’ -f 1-3

cut -d ‘:’ -f 1-3, 5


4、awk

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

awk的常见模式:awk '{pattern + action}' {filenames}。awk对于数据分析和生成报表功能会更加强大一些。


awk ‘{print $1}’ file1 读取file1文档,并且截取字符串的第一个被空格分割的单词

awk -F ‘:’ ‘{print $1}’ file1 读取file1文档,每一行通过:进行分隔,然后输出第一个被分割的单词

awk -F ‘:’ ‘{print $1”\t”$2}’ file1 读取file1文档,并且把里面的第一个和第二个分隔出的内容通过制表符连接起来

awk -F ‘:’ ‘BEGIN{print “开始前输出内容”} {print $1 &3} END{print “结束语”}'

awk -F ‘:’ ‘/apple/{print $1}’ file1 读取file1里面的内容,搜索包含apple的行,并且打印出分割之后的第一个单词

awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd   

awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

首先awk预留了很多的内置变量,可以获取文件名称,当前行数,没一行的分隔出的列数。其中print和printf都可以用在输出上面,printf的输出模式更像c语言中的输出。

awk -F ‘:’ ‘BEGIN{count = 0; print “start to cuunt”} {count ++; print $0} END{print “total:”count}’ file1 计算file1文件的行数【可以把begin看成一些初始化条件,中间部分是循环处理文档时的计算,end部分就是总结性的内容】

ls -l | awk 'BEGIN{size = 0; print "start to count..."} {if($5 > 1000){size += $5}} END{print "total:"size}’ 计算当前目录下所有自己数大于1000的文件的总大小。可以在awk中像使用c语言代码一样使用代码和函数。

也可以使用for while等循环,可以放到{}中间使用


5、sed[一款流处理工具,对于输入的内容,可以一行一行的进行过滤和替换等;sed处理的时候会在内存中创建一个模式空间,对于读取的没一行都放入到模式空间中进行处理]

sed命令模式: sed  选项  定址  文档


【定址为p时】

sed -n ‘1,3p’ file1 打印文档的1-3行

sed -n ‘/a/,/b/p’ file1 打印文档中从a开头的行到b开头的行,如果很多这种就都打印出来

sed -n ‘/a[pd]p/p’ file1 查找file1文件中包含了app adp的行


【定址为d时】

sed ‘1d’ file1  删除file1文件的第一行,返回的是删除之后的结果,但是file1文件自身内容是不会改变的

sed ‘1d;3d’ file1 删除file1文件的第一行和第三行

sed ‘1!d’ file1 除了第一行,删除文件的其他行

使用d的时候,一般是不会加上-n选项的,因为就看不到最终的结果了。


【地址为s时】

sed ’s/app/APP/‘ file1 默认替换file1文件里面没一行的第一个app为APP

sed ’s/app/APP/g’ file1 替换所有的app为APP

sed ’s/app/APP/2’ file1 替换每行的第二个app为APP

sed -n ’s/app/APP/p’ file1 只打印被替换的行,后面也可以是gp,表示全局替换并且展示

sed -n ’s/app/APP/gpw file2’ file1 把app全部替换为APP,并且把有变动的行存储到file2中,而且在控制行打印出来

sed ’s/^/#/g’ file1 在file1的没一行开头添加一个#号

sed ’s/.//2’ file1 删除没一行的第二个字符


sed ‘1i hello’ file1 在file1第一行前面插入hello

sed ‘1a hello’ file2 在file1第一行后面插入hello


sed -r ’s/^()()/\1/g’ file1 -r之后,在查找的时候就可以加入正则表达式了


sed ‘1h;3G’ file1 把第一行的内容复制到第三行的后面 


6、wc

wc -l content 多少行

wc -w 多少字【单词也算一个字】

wc -m 多少字符【字符数】


7、head

head -n num file1 从file1中获取前n行的内容

head -c num file1 从file1中获取前n个字符


8、grep [global regular expression print]

grep ‘查找的内容’ 文档

grep ’test’ file1

grep ’test’ file1 file2 -h  加上-h是因为多个文件搜索的时候结果中会出现文档名称,加上-h就没有了

grep ’test’ file*

grep ‘[a-z]\{5\}’ file1 查找连续出现5个字符

grep ‘w\(es\)t.*\1’  只要一个字符串前面出现es后面又出现es的就ok

grep ‘^test’ file1 以test开头的

grep ’test$’ 以test结尾的

http://bbs.chinaunix.net/thread-3558099-1-1.html



能够做以下事情:

(1)能够批量拷贝文档,并且重命名这些文档

批量的重命名文件:for i in ./*; do mv $i $(sed ’s/a.txt/a.png/‘ <<< $i); done

【<<     重定向,用在"here document”     <<<  重定向,用在"here string"】


(2)能够获取某文档里面的指定行数内容【根据行数】

  tail -n num filename  如: tail -n 1 access.log 可以获取末尾的1行内容【不加-n这个选项也可以】

  head -n num filename 获取头多少行

  head -n | tail -n 通过head和tail的组合获取指定几行之间的内容 如 head 20 access.log | tail 10  获取10到20行之间的内容

  sed -n '3,5p’ access.log 获取3到5行之间的内容


  tail -3 /etc/passwd | tac 将获取的内容反过来显示,比如最新注册的几个用户等


  在这些命令的后面加上  >> filename  就可以把结果存储到一个新的文件中了


(3)可以正常的切分字符串,并且拼凑产生另外一个文件

cut -d ':' -f 1,3 cut.txt | sed 's/:/-/' >> test.txt  以分隔符:切割文件,然后通过-连接起来,并且存储到文件test.txt中

awk -F ‘:’ ‘{print $1”\t”$2}’ file1 >> test.txt 以分隔符:切割文件,把分割出来的前两个字段用制表符连接起来放到文件test.txt中


(4)可以替换字符串中的内容

  sed ’s/a/b/g’ file 替换file中的a变为b


(5)如何处理日志中的字段,并且拼凑出自己想要的格式

awk -F '\t' '{if(NF == 16){print $16}}' reallog.log |  获取日志的访问信息 

cut -d '?' -f 2 |    获取参数信息

grep "tk=" |   获取含有token信息的日志/可以后续增加其他搜索条件排除不满足的内容

awk -F '&' '{for(i = 1; i <= NF; i++){if(index($i,"tk=") || index($i,"h")) print $i}}’ | 获取包含有指定数据的信息,其他信息不展示

uniq |  去除重复的信息

xargs |  把几行数据合并为一行

sed 's/ /\&/g’  把数据中的空格变为&符号



awk -F '\t' '{if(NF == 16){print $16}}' reallog.log | cut -d '?' -f 2 | grep "tk=" | awk -F '&' '{for(i = 1; i <= NF; i++){if(index($i,"tk=") || index($i,"h")) print $i}}' | uniq | xargs | sed 's/ /\&/g'

  

【有问题,最终的结果是所有结果的连接,不是针对一行一行的进行的处理】


awk -F '\t' '{if(NF == 16){print $16}}' testlog.log | cut -d '?' -f 2 | awk -F '&' 'BEGIN{tempStr = ""} {for(i = 1; i <= NF; i++){if(index($i,"tk=") || index($i,"h")) {tempStr = tempStr"-"$i;}}} END{print tempStr}' | sed 's/-/\&/g' | sed 's/^./

【这种方式也是不行,返回的是所有内容的拼接结果】


(6)统计文件大小

du -sk server*/access* | awk -F '\t' 'BEGIN{i=0}{i = i + $1}END{print i}’  


(7)查看磁盘占用情况

df -lh  查看系统磁盘占用情况

du -sm * 查看所有文件包括文件夹大小

du -h 文件路径  查看文件路径下大小


(8)有时候因为运行的程序还在引用文件,删除后磁盘空间还在占用。

http://www.cnblogs.com/mfryf/p/3334451.html

lsof | grep deleted 找到那些删除被挂起的命令

结束对应的进程就ok了。最好能够找到谁引用了这些文件。

ctrl + a到命令行头   ctrl+e 到命令行尾


10、查看端口占用

lsof -i:8161




  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值