Linux中的常用命令---很实用

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 ‘wesest.*\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


--------------------- 
作者:抄经的和尚 
来源:CSDN 
原文:https://blog.csdn.net/duomengwuyou/article/details/51088404 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/m0_37268841/article/details/86693474