一、文本查看常用六个命令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