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

林戈的IT生涯 2024-06-12 08:37:05 阅读 62

一、文本查看常用六个命令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 passdatabase:mysql:sqlserver:oraclecountry:中国:美国:other行业:互联网:金融/home/ftpuser:/bin/bashhello;yes;test[root@kermit ~]# cut -d: -f2 passmysql中国互联网/bin/bashhello;yes;test[root@kermit ~]# cut -d: -f1-2 pass #还是以原分隔符进行连接database:mysqlcountry:中国行业:互联网/home/ftpuser:/bin/bashhello;yes;test[root@kermit ~]# cut -sd: -f1-2 pass #此处加了-s最后一行就不显示,因为它没有:符号database:mysqlcountry:中国行业:互联网/home/ftpuser:/bin/bash[root@kermit ~]# cut -b 1-2 pass #汉字那行直接没有显示daco/hhe[root@kermit ~]# cut -nb 1-2 pass #-b选项中文就不好用,因为一个汉字占用3个字节(utf8)。daco/hhe[root@kermit ~]# cut -nb 1-3 pass #此时能完整显示汉字datcou行/hohel[root@kermit ~]# cut -c 1 pass #以字符数来显示,就不用考虑汉字问题了。 dc行/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 EKP 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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。