Linux基础(五)

1.5.1 文件查看cat,tac,rev,more,less,head,tail

1.5.1.1 文件查看命令:cat,tac,rev

  • cat [OPTION]... [FILE]...
    • -E: 显示行结束符$

    • -n: 对显示出的每一行进行编号

    • -A:显示所有控制符

[root@CentOS7 ~]# cat >>f1 <<EOF
> df
> df
> EOF  
> EOF  
>    ##为什么没有退出来,EOF后面不能加空格
[root@CentOS7 ~]# cat -A f1
dfl$
dsfj$
[root@CentOS7 ~]# cat -n f1
 1  dfl
 2  dsfj
 
[root@CentOS7 ~]# cat -E f1
dfl$
dsfj$
 EOF$
dfl$
dsfj$
 EOF$
dfj$
  • -b:非空行编号
[root@CentOS7 ~]# cat -b f1
 1  dfl



 2  dsfj
 3   EOF
 4  dfl
 5  dsfj
 6   EOF
 7  dfj
 8  fdksfl
 9  dfj
10  fdksfl
11  dfj
12  fdksfl
  • -s:压缩连续的空行成一行
[root@CentOS7 ~]# cat f1
dfl




dsfj
 EOF
dfl
dsfj
 EOF
[root@CentOS7 ~]# cat -s f1
dfl

dsfj
 EOF
dfl
dsfj
 EOF
  • tac:逆序
[root@CentOS7 ~]# tac f1
fdksfl
dfj
fdksfl
dfj
fdksfl
dfj
 EOF
dsfj
dfl
 EOF
dsfj
  • rev:逆序(文件中的每一行都倒着显示)
[root@CentOS7 ~]# rev f1
lfd
jfsd
FOE 
lfd
jfsd
FOE 
jfd
lfskdf

1.5.1.2 more

  • 分页查看文件

more [OPTIONS...] FILE...

  • -d: 显示翻页及退出提示

1.5.1.3 less

一页一页地查看文件或STDIN输出

查看时有用的命令包括:

/文本 搜索 文本

n/N 跳到下一个 或 上一个匹配

less 命令是man命令使用的分页器

head [OPTION]... [FILE]...

  • -c #: 指定获取前#字节
[root@CentOS7 data]# head -c4 /etc/passwd
root[root@CentOS7 data]# head -c8 /etc/passwd
root:x:0[root@CentOS7 data]# 
  • -n #: 指定获取前#行

  • -#: 指定行数

[root@CentOS7 data]#  head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

1.5.1.5 tail

tail [OPTION]... [FILE]...

  • -c #: 指定获取后#字节

  • -n #: 指定获取后#行相当于-#

  • -f: 跟踪显示文件fd新追加的内容,常用日志监控相当于 --follow=descriptor

  • -F: 跟踪文件名,相当于—follow=name --retry

tailf 类似tail –f,当文件不增长时并不访问文件

1.5.2 按列抽取文本cut

cut [OPTION]... [FILE]...

显示文件或STDIN数据的指定列

  • -d DELIMITER: 指明分隔符,默认tab

  • -f FILEDS:

  • #: 第#个字段

  • #,#[,#]:离散的多个字段,例如1,3,6

  • #-#:连续的多个字段, 例如1-6,混合使用:1-3,7

  • -c 按字符切割

  • --output-delimiter=STRING指定输出分隔符

显示文件或STDIN数据的指定列

[root@CentOS7 data]# cat /etc/passwd |cut -d: -f1 
root
bin
daemon
adm
lp
sync
[root@CentOS7 data]# cut -d: -f1 /etc/passwd ##取出用户名
[root@CentOS7 data]# cat /etc/passwd | cut -d: -f7 
/bin/bash
/sbin/nologin

[root@CentOS7 data]#cut -c2-5 /usr/share/dict/words
##取出第二到第五个字节

1.5.3 paste

合并两个文件同行号的列到一行(横向合并)

paste [OPTION]... [FILE]...

  • -d 分隔符:指定分隔符,默认用TAB
  • -s : 所有行合成一行显示
[root@CentOS7 scripts]# cat f1
aaa
bb
cc
[root@CentOS7 scripts]# cat f2
xxx
yy
[root@CentOS7 scripts]# paste f1 f2 
aaa xxx
bb  yy
cc  
[root@CentOS7 scripts]# cat f1 f2
aaa
bb
cc
xxx
yy
[root@CentOS7 scripts]# cat f1 f2 >f4
[root@CentOS7 scripts]# cat f4
aaa
bb
cc
xxx
yy
[root@CentOS7 scripts]# paste -s f1 f2 
aaa bb  cc
xxx yy
[root@CentOS7 scripts]# paste -d ":" f1 f2
aaa:xxx
bb:yy
cc:

1.5.4 收集文本统计数据wc

  • 计数单词总数、行总数、字节总数和字符总数
  • 可以对文件或STDIN中的数据运行
  • wc story.txt

    39 237 1901 story.txt

    行数 字数 字节数 文件名

  • 常用选项

    • -l 只计数行数

    • -w 只计数单词总数

    • -c 只计数字符总数

    • -L 显示文件中最长行的长度

[root@CentOS7 data]# cat /etc/passwd |wc -l 
64
[root@CentOS7 data]# cat /etc/passwd |wc -L
99
[root@CentOS7 data]# cat /etc/passwd |wc -c
3171
[root@CentOS7 data]# cat /etc/passwd |wc -w
109

1.5.5 文本排序sort

sort [options] file(s)

默认排序会把相同的行放在一块

常用选项

  • -r 执行反方向(由上至下)整理

  • -R 随机排序

[root@CentOS7 scripts]# seq 72 |sort -R |head -n1
35 ##随机排序,取出随机数,抽奖
  • -n 执行按数字大小整理

  • -f 选项忽略(fold)字符串中的字符大小写

  • -u 选项(独特,unique)删除输出中的重复行

  • -t : 选项使用:做为字段界定符

  • -k # 选项按照使用c字符分隔的#列来整理能够使用多次 #(为数字)

练习:统计一篇英文文章中,单词出现频率最高的前3个单词

[root@CentOS7 data]# cat f1|tr " " "\n"|tr -d [:punct:]|sort|uniq -c|sort -n|tail -n3
9 and
9 of
15 the

1.5.6 uniq 默认会将重复行排序到一起

uniq命令:从输入中删除前后相接的重复的行

uniq [OPTION]... [FILE]...

  • -c: 显示每行重复出现的次数

  • -d: 仅显示重复过的行

  • -u: 仅显示不曾重复的行

注:连续且完全相同方为重复-

常和sort 命令一起配合使用:

sort userlist.txt | uniq -c

实验:对/var/log/httpd/access_log 日志文件访问ip进行排序,取出访问量最高的前十个ip

cat /var/log/httpd/access_log  | cut -d" " -f1|sort |uniq -c |sort -nr|head -n10

1.5.7 比较文件diff 命令

比较两个文件之间的区别

[root@CentOS7 data]# diff foo.conf foo2.conf 
5c5 
<   use_widgets = no  
---  
>  use_widgets = yes ##注明第5行有区别(改变) 

1.5.8 复制对文件改变patch

diff 命令的输出被保存在一种叫做“补丁”的文件中

使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

patch 复制在其它文件中进行的改变(要谨慎使用) 适用

-b 选项来自动备份改变了的文件

$ diff -u foo.conf foo2.conf > foo.patch 

##将文件foo.conf和foo2.conf比较差异,将生成的补丁放到foo.patch++ 

$ patch foo.conf foo.patch 

##将foo.conf打上补丁就变成了foo2.conf文件中的内容,不过foo.conf文件内容就被覆盖了

$ patch -b foo.conf foo.patch  
##将foo.conf先备份,后打补丁,找回foo2.conf 

练习:

1、找出ifconfig “网卡名”命令结果中本机的IPv4地址

[root@CentOS7 scripts]# ifconfig ens33|head -n2 |tail -n1|tr -s ' '|cut -d' ' -f3 
192.168.110.131

2、查出分区空间使用率的最大百分比值

[root@CentOS7 scripts]# df |grep "/dev/sd" |tr -s ' ' '%'|cut -d% -f5|sort -n |tail -n1
16

3、查出用户UID最大值的用户名、UID及shell类型

[root@CentOS7 scripts]# cat /etc/passwd |sort -t: -k3 -nr|head -n1|cut -d: -f1,3,7
nfsnobody:65534:/sbin/nologin

4、查出/tmp的权限,以数字方式显示

[root@CentOS7 scripts]# stat /tmp|cut -d'/' -f1|head -n4|tail -n1|cut -d'(' -f2
1777
[root@CentOS7 scripts]# stat /tmp |egrep -o "\([0-9]{3,4}"

5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

[root@CentOS7 scripts]# netstat -nt |tr -s ' ' :|cut -d: -f6|tr -dc '[0-9].\n'|sort|uniq -c |sort -nr
3 192.168.110.1
2 
1 192.168.110.128
[root@CentOS7 scripts]# netstat -nt |grep "tcp"|tr -s ' ' ':'|cut -d: -f6|sort |uniq -c |sort -nr 
2 192.168.110.1
1 192.168.110.128
上一篇:Oracle 12c及以上手工创建pdb


下一篇:设置虚拟机为静态ip地址