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

发布于:2024-04-29 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、文本查看常用六个命令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的所有选项参数

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

cut命令的语法形式:

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

 cut常见的用法如下示例:

[root@kermit ~]# cat pass
database:mysql:sqlserver:oracle
country:中国:美国:other
行业:互联网:金融
/home/ftpuser:/bin/bash
hello;yes;test
[root@kermit ~]# cut -d: -f2 pass
mysql
中国
互联网
/bin/bash
hello;yes;test
[root@kermit ~]# cut -d: -f1-2 pass  #还是以原分隔符进行连接
database:mysql
country:中国
行业:互联网
/home/ftpuser:/bin/bash
hello;yes;test
[root@kermit ~]# cut -sd: -f1-2 pass #此处加了-s最后一行就不显示,因为它没有:符号
database:mysql
country:中国
行业:互联网
/home/ftpuser:/bin/bash
[root@kermit ~]# cut -b 1-2 pass #汉字那行直接没有显示
da
co
/h
he
[root@kermit ~]# cut -nb 1-2 pass #-b选项中文就不好用,因为一个汉字占用3个字节(utf8)。
da
co

/h
he
[root@kermit ~]# cut -nb 1-3 pass #此时能完整显示汉字
dat
cou
行
/ho
hel
[root@kermit ~]# cut -c 1 pass   #以字符数来显示,就不用考虑汉字问题了。 
d
c
行
/
h
[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方法。示例如下:

[root@123 ~]# cat a.txt     #列出a.txt文件内容
1   春天
2   夏天
3   秋天
4   冬天
5   冬去春来
[root@123 ~]# cat b.txt     #列出b.txt文件内容
0   春来天
1   暖 
2   热
3   凉
4   冷 
[root@123 ~]# join a.txt b.txt  #使用join相连,就像mysql的连接一样,默认是内连接,
1 春天 暖 
2 夏天 热
3 秋天 凉
4 冬天 冷 
[root@123 ~]# join -o 1.1 1.2 1.3 a.txt b.txt    #可以指定输出哪些列并指定排序,1/2文件代表文件1/2的第几列。      
1 春天 
2 夏天 
3 秋天 
4 冬天 
[root@123 ~]# join -o 1.1 1.2 2.2 a.txt b.txt   
1 春天 暖
2 夏天 热
3 秋天 凉
4 冬天 冷
[root@123 ~]# join -o 1.1 2.2 1.2 a.txt b.txt   
1 暖 春天
2 热 夏天
3 凉 秋天
4 冷 冬天
[root@123 ~]# join -a1 a.txt b.txt  #就像mysql的左连接,右连接一样。
1 春天 暖 
2 夏天 热
3 秋天 凉
4 冬天 冷 
5 冬去春来
[root@123 ~]# join -a2 a.txt b.txt 
0 春来天
1 春天 暖 
2 夏天 热
3 秋天 凉
4 冬天 冷 
[root@123 ~]# join -a1 -a2 a.txt b.txt 
0 春来天
1 春天 暖 
2 夏天 热
3 秋天 凉
4 冬天 冷 
5 冬去春来
[root@123 ~]# cat a.txt b.txt   #把文件内容换了一下。原来是制表分开,改成=号
1=春天
2=夏天
3=秋天
4=冬天

1=暖
2=热
3=凉
4=冷
[root@123 ~]# join  a.txt b.txt         #直接连接时报错,找不到有序数据
join: file 1 is not in sorted order
[root@123 ~]# join -t '=' a.txt b.txt   #指定以=分开才可以结合在一起。
1=春天=暖
2=夏天=热
3=秋天=凉
4=冬天=冷
[root@123 ~]# cat a.txt     #修改文件内容,使得b.txt中的ID数字不在第一列
1=春天
2=夏天
3=秋天
4=冬天
[root@123 ~]# cat b.txt 
暖=1
热=2
凉=3
冷=4
[root@123 ~]# join -1 1 -2 2 -t '=' a.txt b.txt     #连接时指定每个文件使用哪列判断相等
1=春天=暖
2=夏天=热
3=秋天=凉
4=冬天=冷
[root@123 ~]# join -1 2 -2 1 -t '=' b.txt a.txt    
1=暖=春天
2=热=夏天
3=凉=秋天
4=冷=冬天
[root@123 ~]# join -1 2 -2 1  -o 1.2 2.2 1.1 -t '=' b.txt a.txt  #指定连接哪些列和顺序
1=春天=暖
2=夏天=热
3=秋天=凉
4=冬天=冷
[root@123 ~]# 

5.wc 命令

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

[root@123 ~]wc <<  EOF
> aaa
> bbbb
> ccccc dd
> EOF
 3  4 18
[root@123 ~]

6.tr 命令

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

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

tr命令使用示例如下:

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

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

SETs are specified as strings of characters.  Most represent themselves.
Interpreted sequences are:

  \NNN            character with octal value NNN (1 to 3 octal digits)
  \\              backslash
  \a              audible BEL
  \b              backspace
  \f              form feed
  \n              new line
  \r              return
  \t              horizontal tab
  \v              vertical tab
  CHAR1-CHAR2     all characters from CHAR1 to CHAR2 in ascending order
  [CHAR*]         in SET2, copies of CHAR until length of SET1
  [CHAR*REPEAT]   REPEAT copies of CHAR, REPEAT octal if starting with 0
  [:alnum:]       all letters and digits #字母和数字
  [:alpha:]       all letters   #字母
  [:blank:]       all horizontal whitespace #空白
  [:cntrl:]       all control characters #控制(非打印)字符
  [:digit:]       all digits    #数字
  [:graph:]       all printable characters, not including space #图形字符
  [:lower:]       all lower case letters    #小写字母
  [:print:]       all printable characters, including space #可打印字符
  [:punct:]       all punctuation characters    #标点符号
  [:space:]       all horizontal or vertical whitespace #空白字符 
  [:upper:]       all upper case letters    #大写字母
  [:xdigit:]      all hexadecimal digits    #十六进制字符
  [=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