当前位置:   article > 正文

服务器常用文本命令cat/tac,more/less,head/tail 文本内容处理命令cut/sort/uniq/wc/join/tr 以及文件目录统计、服务器开销统计命令详解及示例_tac命令

tac命令

一、文本查看常用六个命令cat/tac,more/less,head/tail常用选项

1: 查看整个文件:正向查看/反向查看

cat:cat命令用于查看文件,文件较大时,文本在屏幕上迅速闪过(滚屏),用户会看不清所显示的内容。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏,一般用more等命令分屏显示.另外cat还非常适用于文件内容合并处理。
    -n或-number:带行编号显示; 
    -b或--number-nonblank:和-n相似,但对于空白行不编号
    -s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行
    -A:显示不可打印字符,行尾显示“$”。--show-all 等价于 -vET。
    -E 显示行结束符(LINUX每行的结束符为$符,WINDOWS为$符和换行符(回车符)
    -T, --show-tabs 将跳 字符显示为 ^I
    -v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外,中文不会以中文字符串现实。
    -e:等价于"-vE"选项;
    -t:等价于"-vT"选项;
tac:tac命令用于反序显示cat的内容,从行倒序输出文件内容.适用于一些按大小排序的数据反序显示。
    -b, --before             attach the separator before instead of after
    -r, --regex              interpret the separator as a regular expression
    -s, --separator=STRING   指定单元分隔符,而不是换行

2:分屏查看文件内容

more:空格向后翻,可使用b向前翻,h显示帮助,q退出,翻到最后也会自动退出
     输入斜线符 /:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。但无查找到显示
less:空格向后,b向前,pageUP/pageDown也行。翻到最后不自动退出(要自动退出带上-e选项),q命令退出。less也可以/查找
     -l:搜索时忽略大小写的差异; -N:行首显示行号; 
     -s:将连续多个空行压缩成一行显示; -S:在单行显示较长的内容,而不换行显示;
     -x<数字>:将TAB字符显示为指定个数的空格字符。

3:查看页面的部分内容

head:用于显示文件的开头的内容,主要选项:-n ,-c
    header -n [行数] filepath 显示开头几行,默认为10行。
    header -c 字符串 filepath 显示开头几个字符,必须指定数字
tail:查看文件末尾的内容,主要使用选项:-n ,-c和head一样。

tail -f 如果要查看一个当前还未创建的文件时可使用: tail -fq s1.log --retry 可以等待文件创建.

tail和head指定-n选项后,数字参数值还可以还+/-符号,

tail带+号表示从第几行开始一直取到最后一行,带-号表示取最后几行,实际就和不带+/-号一样。如tail -n +2就是指从第二行开始一直到最后一行。

head带-号表示从头一直取到最后第几行,带+号表示取前面几行,即和不带符号一样。

所以记住head可以使用减号,tail可以使用加号。

二、文本内容常用简单处理命令

  文本内容常用简单处理命令常用的有剪取cut,排序sort,去重uniq,统计wc,连接join,替换tr

1. Cut命令

  cut:-d指定分割符号,-f取第几列,可以是1-3或1,3。-b :以字节为单位进行分割。-c :以字符为单位进行分割。cut是一个截取命令,非常适合于处理以一个字符间隔的文本内容。就是将一段数据经过分析,cut选取信息通常是针对“行”来进行分析的。cut的所有选项参数

  1. -b :#以字节为单位分割。
  2. -c :#以字符为单位分割。
  3. -d :#自定义分隔符,默认为制表符。
  4. -f :#与-d一起使用,指定显示哪个区域,如-f1,-f1-3,-f3-,-f-3等。
  5. -s : #与-d一起使用,如果加上-s表示只显示有分隔符的行
  6. -n :#取消分割多字节字符。仅和 -b 标志一起使用。对多字节字符如果字符的最后一个字节。

cut命令的语法形式:

cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]

 cut常见的用法如下示例:

  1. [root@kermit ~]# cat pass
  2. database:mysql:sqlserver:oracle
  3. country:中国:美国:other
  4. 行业:互联网:金融
  5. /home/ftpuser:/bin/bash
  6. hello;yes;test
  7. [root@kermit ~]# cut -d: -f2 pass
  8. mysql
  9. 中国
  10. 互联网
  11. /bin/bash
  12. hello;yes;test
  13. [root@kermit ~]# cut -d: -f1-2 pass #还是以原分隔符进行连接
  14. database:mysql
  15. country:中国
  16. 行业:互联网
  17. /home/ftpuser:/bin/bash
  18. hello;yes;test
  19. [root@kermit ~]# cut -sd: -f1-2 pass #此处加了-s最后一行就不显示,因为它没有:符号
  20. database:mysql
  21. country:中国
  22. 行业:互联网
  23. /home/ftpuser:/bin/bash
  24. [root@kermit ~]# cut -b 1-2 pass #汉字那行直接没有显示
  25. da
  26. co
  27. /h
  28. he
  29. [root@kermit ~]# cut -nb 1-2 pass #-b选项中文就不好用,因为一个汉字占用3个字节(utf8)。
  30. da
  31. co
  32. /h
  33. he
  34. [root@kermit ~]# cut -nb 1-3 pass #此时能完整显示汉字
  35. dat
  36. cou
  37. /ho
  38. hel
  39. [root@kermit ~]# cut -c 1 pass #以字符数来显示,就不用考虑汉字问题了。
  40. d
  41. c
  42. /
  43. h
  44. [root@kermit ~]#

 队此之外,cut还能接受标准输入,命令示例: cut -d: -f1 - 要退出标准输入,只需ctrl+d即可。

2. Sort 命令 

sort:默认以首字符排序(而且是以字符串排序),常用选项有如下:

    -n表示以数值大小排序,
    -t以什么分开,
    -k以第几列排序,-k后面跟数字表示以第几列排序,同时还可使用1.2这种小数表示以第1列的第2个字符排序。
    -r降序
    -u排序时相同的行只显示一次,即unique.
    -f排序时忽略字符大小写。
    -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符; 
    -b:忽略每行前面开始出的空格字符; 默认就使用了此项
    -c:检查文件是否已经按照顺序排序;会返回哪一行没有正确排序。
    -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; 
    -m:将几个排序号的文件进行合并; 
    -M:将前面3个字母依照月份的缩写进行排序;  
    -o<输出文件>:将排序后的结果存入制定的文件
    -t<分隔字符>:指定排序时所用的栏位分隔字符
    +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

3.Uniq 命令

uniq只把相邻的重复行过滤,因此执行uniq前需要执行一下sort,其选项如下:

    -d只显示重复的行(只一行),
    -D显示所有重复行
    -c显示重复的次数,uniq可以显示重复行,行号,在每列旁边显示该行重复出现的次数;
    -d或--repeated:仅显示重复出现的行列;
    -f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
    -s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
    -u或——unique:仅显示出一次的行列;
    -w<字符位置>或--check-chars=<字符位置>:指定要比较的字符

4.Join 命令

    Join 命令连接两个文件文件,但前提是有相同意义的列,    join命令一般不常用,不过每个命令肯定都有它的意义,了解了一下发现也挺有意思,也许哪天就真能用到。join适合将一些结构化的文本数据进行整合。前提他们都是多列数据,其中多个文件中有一个意义相同且数据不重复的列,比如一个文件存放着学生的学号和姓名,另一个文件存放着学号和高考分数,这时将这两个文本文件合在一起就可以使用join方法。示例如下:

  1. [root@123 ~]# cat a.txt #列出a.txt文件内容
  2. 1 春天
  3. 2 夏天
  4. 3 秋天
  5. 4 冬天
  6. 5 冬去春来
  7. [root@123 ~]# cat b.txt #列出b.txt文件内容
  8. 0 春来天
  9. 1 暖
  10. 2 热
  11. 3 凉
  12. 4 冷
  13. [root@123 ~]# join a.txt b.txt #使用join相连,就像mysql的连接一样,默认是内连接,
  14. 1 春天 暖
  15. 2 夏天 热
  16. 3 秋天 凉
  17. 4 冬天 冷
  18. [root@123 ~]# join -o 1.1 1.2 1.3 a.txt b.txt #可以指定输出哪些列并指定排序,1/2文件代表文件1/2的第几列。
  19. 1 春天
  20. 2 夏天
  21. 3 秋天
  22. 4 冬天
  23. [root@123 ~]# join -o 1.1 1.2 2.2 a.txt b.txt
  24. 1 春天 暖
  25. 2 夏天 热
  26. 3 秋天 凉
  27. 4 冬天 冷
  28. [root@123 ~]# join -o 1.1 2.2 1.2 a.txt b.txt
  29. 1 暖 春天
  30. 2 热 夏天
  31. 3 凉 秋天
  32. 4 冷 冬天
  33. [root@123 ~]# join -a1 a.txt b.txt #就像mysql的左连接,右连接一样。
  34. 1 春天 暖
  35. 2 夏天 热
  36. 3 秋天 凉
  37. 4 冬天 冷
  38. 5 冬去春来
  39. [root@123 ~]# join -a2 a.txt b.txt
  40. 0 春来天
  41. 1 春天 暖
  42. 2 夏天 热
  43. 3 秋天 凉
  44. 4 冬天 冷
  45. [root@123 ~]# join -a1 -a2 a.txt b.txt
  46. 0 春来天
  47. 1 春天 暖
  48. 2 夏天 热
  49. 3 秋天 凉
  50. 4 冬天 冷
  51. 5 冬去春来
  52. [root@123 ~]# cat a.txt b.txt #把文件内容换了一下。原来是制表分开,改成=号
  53. 1=春天
  54. 2=夏天
  55. 3=秋天
  56. 4=冬天
  57. 1=暖
  58. 2=热
  59. 3=凉
  60. 4=冷
  61. [root@123 ~]# join a.txt b.txt #直接连接时报错,找不到有序数据
  62. join: file 1 is not in sorted order
  63. [root@123 ~]# join -t '=' a.txt b.txt #指定以=分开才可以结合在一起。
  64. 1=春天=暖
  65. 2=夏天=热
  66. 3=秋天=凉
  67. 4=冬天=冷
  68. [root@123 ~]# cat a.txt #修改文件内容,使得b.txt中的ID数字不在第一列
  69. 1=春天
  70. 2=夏天
  71. 3=秋天
  72. 4=冬天
  73. [root@123 ~]# cat b.txt
  74. 暖=1
  75. 热=2
  76. 凉=3
  77. 冷=4
  78. [root@123 ~]# join -1 1 -2 2 -t '=' a.txt b.txt #连接时指定每个文件使用哪列判断相等
  79. 1=春天=暖
  80. 2=夏天=热
  81. 3=秋天=凉
  82. 4=冬天=冷
  83. [root@123 ~]# join -1 2 -2 1 -t '=' b.txt a.txt
  84. 1=暖=春天
  85. 2=热=夏天
  86. 3=凉=秋天
  87. 4=冷=冬天
  88. [root@123 ~]# join -1 2 -2 1 -o 1.2 2.2 1.1 -t '=' b.txt a.txt #指定连接哪些列和顺序
  89. 1=春天=暖
  90. 2=夏天=热
  91. 3=秋天=凉
  92. 4=冬天=冷
  93. [root@123 ~]#

5.wc 命令

  wc命令比较简单,就是统计:默认结果,行,单词数,字节数。即对应选项-l,-w,-c,-m字符数,-L最长的一行包含多少字符。wc命令可以接收标准输入(指定结束符EOF,如下:)

  1. [root@123 ~]wc << EOF
  2. > aaa
  3. > bbbb
  4. > ccccc dd
  5. > EOF
  6. 3 4 18
  7. [root@123 ~]

6.tr 命令

tr 命令用于字符串替换,注意tr是对逐字符进行操作的。常用选项有如下:

    -d或——delete:删除所有属于第一字符集的字符;
    -c或——complerment:取代所有不属于第一字符集的字符;可以认为和-d相反。
    -s或--squeeze-repeats:把连续重复的字符以一个字符表示;
    -t或--truncate-set1:先删除第一字符集,以第二字符集替换,位数不对以第二字符集最后的补位。

tr命令使用示例如下:

  1. [root@123 ~]# echo 'KEEP smiling!' | tr 'a-z' 'A-Z' #自定义集合,也可以使用'rewqr{]'
  2. KEEP SMILING!
  3. [root@123 ~]# echo 'KEEP smiling!' | tr 'Es' '1'
  4. K11P 1miling!
  5. [root@123 ~]# echo 'KEEP smiling!' | tr 'KEEP' '1' #tr并不会把KEEP当一个字符串来进行整体替换
  6. 1111 smiling!
  7. [root@123 ~]# echo 'KEEP smiling!' | tr -s 'a-z' 'A-Z' #-s把相同的E用一个替换。
  8. KEP SMILING!
  9. [root@123 ~]# echo 'KEEP smiling!' | tr -d 'h-l' #-d进行删除
  10. KEEP smng!
  11. [root@123 ~]# echo 'KEEP smiling!' | tr -d E
  12. KP smiling!
  13. [root@123 ~]# echo 'KEEP smiling!' | tr -s 'e'
  14. KEEP smiling!
  15. [root@123 ~]# echo 'KEEP smiling!' | tr -s 'E'
  16. KEP smiling!
  17. [root@123 ~]# echo 'KEEP smiling! 1234 ok' | tr -d -c '0-9' #-c选项删除不在-c指定的范围内的字符,挺有用。即-c反转字符范围。
  18. 1234[root@123 ~]#
  19. [root@123 ~]#
  20. [root@123 ~]# echo 'KEEP smiling! 1234 ok' | tr -d -c '0-9\n' #注意区别,不把换行删除。
  21. 1234
  22. [root@123 ~]# echo 'KEEP smiling! 1234 ok' | tr -t 'KEP' 'EP' #-t的作用示例
  23. EPPP smiling! 1234 ok

其它tr可以直接导入文件,使用<号导入,如cat a A < /etc/passwd,导入文件
还可以删除文件的空格:cat a.txt | tr -d ' ' 如要去掉换行再加上反斜线n即可。
tr在字符替换上,功能很强大,还有很多字符类可以使用,如下列表:

  1. SETs are specified as strings of characters. Most represent themselves.
  2. Interpreted sequences are:
  3. \NNN character with octal value NNN (1 to 3 octal digits)
  4. \\ backslash
  5. \a audible BEL
  6. \b backspace
  7. \f form feed
  8. \n new line
  9. \r return
  10. \t horizontal tab
  11. \v vertical tab
  12. CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order
  13. [CHAR*] in SET2, copies of CHAR until length of SET1
  14. [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
  15. [:alnum:] all letters and digits #字母和数字
  16. [:alpha:] all letters #字母
  17. [:blank:] all horizontal whitespace #空白
  18. [:cntrl:] all control characters #控制(非打印)字符
  19. [:digit:] all digits #数字
  20. [:graph:] all printable characters, not including space #图形字符
  21. [:lower:] all lower case letters #小写字母
  22. [:print:] all printable characters, including space #可打印字符
  23. [:punct:] all punctuation characters #标点符号
  24. [:space:] all horizontal or vertical whitespace #空白字符
  25. [:upper:] all upper case letters #大写字母
  26. [:xdigit:] all hexadecimal digits #十六进制字符
  27. [=CHAR=] all characters which are equivalent to CHAR

 关于上面的两个空白,如下操作示例,后者会将换行去掉(即包含垂直方向的空白字符),这也就是这两个字符集的区别。

#cat a.txt | tr -d '[:blank:]'  和 cat a.txt | tr -d '[:space:]' 

    在字符替换上还有一个很强大的命令sed,和tr不同的是,sed也是按行操作的。而tr是按字符操作的。sed去除每行前空格示例:

sed 's/^[[:space:]]*//' a.txt

#或者:

sed 's/ //g' a.txt 

三、常用文件目录统计命令

统计目录文件个数: ls | wc -l
统计目录及子目录总文件个数:ls -R | wc -l
搜索文件名并统计个数: ls | grep '.lua' | wc -l
统计文件夹的大小: du -s 或者 du -sh
将文件夹下目录和文件按大小排序:du -sk * | sort -n 如当前文件大小差不多可使用du -sh
查看某文件或目录大小: du -sh name 
统计当前文件夹下文件的个数: ls -l |grep "^-"|wc -l
统计当前文件夹下目录的个数: ls -l |grep "^d"|wc -l
统计当前文件夹下文件的个数,包括子文件夹里的:ls -lR|grep "^-"|wc -l
统计文件夹下目录的个数,包括子文件夹里的:ls -lR|grep "^d"|wc -l

四、常用服务器开销统计命令:

1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10

2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10

3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/676922
推荐阅读
相关标签
  

闽ICP备14008679号