本章内容:
各种文本工具来查看、分析、统计文本
正则表达式grep
扩展正则表达式egrep
windows的配置是放在注册表里面的,管理起来不方便;在Linux学习的服务基本是修改配置文件。
注意不能使用文本工具处理二进制程序。
正则表达式是重中之重,在很多地方反复使用,学习工作中经常使用的,同时也是难点。理解了正则表达式那么理解扩展的正则表达式也不难的。
文本处理的三剑客是grep,sed,awk
一文件查看
文件 查看命令:cat, tac,rev
cat [OPTION]... [FILE]...
-E: 显示行结束符$
-n: 对显示出的每一行进行 编号
-A :显示所有控制符
-b: : 非空行编号
-s :压缩连续的空行成一行
(一)cat
[root@centos72 ~]# ls
anaconda-ks.cfg
[root@centos72 ~]# cp anaconda-ks.cfg /app/
[root@centos72 ~]# ls /app/
anaconda-ks.cfg
[root@centos72 ~]# file /app/anaconda-ks.cfg
/app/anaconda-ks.cfg: ASCII text
[root@centos72 ~]#
[root@centos72 ~]# cat /app/anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=centos72.huawei.com
# Root password
rootpw --iscrypted $6$3ZpKJEd3ctkruWkF$ACv/Y4HSNb4lTqk4Gbol157B2lHw0AVcKM1rjEshEOrMcIIXw1DvoPPCZy3y3i.SijcTdTAfvFs/uFPwLxKd51
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
user --name=wang --password=$6$PqqaCIq7qipkXclF$5idE9A8TzG/yLzqHbmlSg9cVaNUmxPG85y/K81a0KSrosFH/srLzY0HQxeTUMZKs.KVoyJOphaA8Xz.nidUF// --iscrypted --gecos="wang"
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part swap --fstype="swap" --ondisk=sda --size=2048
part /app --fstype="xfs" --ondisk=sda --size=20480
part / --fstype="xfs" --ondisk=sda --size=51200
part /boot --fstype="xfs" --ondisk=sda --size=1024
%packages
@^minimal
@core
%end
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
(1)-n: 对显示出的每一行进行编号
包括空行也加行号
注意选项可以写在中间或者最后
[root@centos72 ~]# cat /app/anaconda-ks.cfg -n
1 #version=DEVEL
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4 # Use CDROM installation media
5 cdrom
6 # Use graphical install
7 graphical
8 # Run the Setup Agent on first boot
9 firstboot --enable
10 ignoredisk --only-use=sda
11 # Keyboard layouts
12 keyboard --vckeymap=us --xlayouts='us'
13 # System language
14 lang en_US.UTF-8
15
16 # Network information
17 network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
18 network --hostname=centos72.huawei.com
19
20 # Root password
21 rootpw --iscrypted $6$3ZpKJEd3ctkruWkF$ACv/Y4HSNb4lTqk4Gbol157B2lHw0AVcKM1rjEshEOrMcIIXw1DvoPPCZy3y3i.SijcTdTAfvFs/uFPwLxKd51
22 # System services
23 services --disabled="chronyd"
24 # System timezone
25 timezone Asia/Shanghai --isUtc --nontp
26 user --name=wang --password=$6$PqqaCIq7qipkXclF$5idE9A8TzG/yLzqHbmlSg9cVaNUmxPG85y/K81a0KSrosFH/srLzY0HQxeTUMZKs.KVoyJOphaA8Xz.nidUF// --iscrypted --gecos="wang"
27 # System bootloader configuration
28 bootloader --location=mbr --boot-drive=sda
29 # Partition clearing information
30 clearpart --none --initlabel
31 # Disk partitioning information
32 part swap --fstype="swap" --ondisk=sda --size=2048
33 part /app --fstype="xfs" --ondisk=sda --size=20480
34 part / --fstype="xfs" --ondisk=sda --size=51200
35 part /boot --fstype="xfs" --ondisk=sda --size=1024
36
37 %packages
38 @^minimal
39 @core
40
41 %end
42
43 %addon com_redhat_kdump --disable --reserve-mb='auto'
44
45 %end
46
47 %anaconda
48 pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
49 pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
50 pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
51 %end
添加行号
[root@centos72 ~]# nl /etc/issue
1 S
2 Kernel
on an m
[root@centos72 ~]# cat /etc/issue -n
1 S
2 Kernel
on an m
3
[root@centos72 ~]# cat /etc/issue | wc
3 6 23
(2)-b: 非空行编号
[root@centos72 ~]# cat /app/anaconda-ks.cfg -b
1 #version=DEVEL
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4 # Use CDROM installation media
5 cdrom
6 # Use graphical install
7 graphical
8 # Run the Setup Agent on first boot
9 firstboot --enable
10 ignoredisk --only-use=sda
11 # Keyboard layouts
12 keyboard --vckeymap=us --xlayouts='us'
13 # System language
14 lang en_US.UTF-8
15 # Network information
16 network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
17 network --hostname=centos72.huawei.com
18 # Root password
19 rootpw --iscrypted $6$3ZpKJEd3ctkruWkF$ACv/Y4HSNb4lTqk4Gbol157B2lHw0AVcKM1rjEshEOrMcIIXw1DvoPPCZy3y3i.SijcTdTAfvFs/uFPwLxKd51
20 # System services
21 services --disabled="chronyd"
22 # System timezone
23 timezone Asia/Shanghai --isUtc --nontp
24 user --name=wang --password=$6$PqqaCIq7qipkXclF$5idE9A8TzG/yLzqHbmlSg9cVaNUmxPG85y/K81a0KSrosFH/srLzY0HQxeTUMZKs.KVoyJOphaA8Xz.nidUF// --iscrypted --gecos="wang"
25 # System bootloader configuration
26 bootloader --location=mbr --boot-drive=sda
27 # Partition clearing information
28 clearpart --none --initlabel
29 # Disk partitioning information
30 part swap --fstype="swap" --ondisk=sda --size=2048
31 part /app --fstype="xfs" --ondisk=sda --size=20480
32 part / --fstype="xfs" --ondisk=sda --size=51200
33 part /boot --fstype="xfs" --ondisk=sda --size=1024
34 %packages
35 @^minimal
36 @core
37 %end
38 %addon com_redhat_kdump --disable --reserve-mb='auto'
39 %end
40 %anaconda
41 pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
42 pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
43 pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
44 %end
和此选项等价的命令
[root@centos72 ~]# nl /etc/issue
1 S
2 Kernel
on an m
[root@centos72 ~]# cat /etc/issue -b
1 S
2 Kernel
on an m
(3)
-E: 显示行结束符$,也就是换行
[root@centos72 ~]# cat /app/anaconda-ks.cfg -E
#version=DEVEL$
# System authorization information$
auth --enableshadow --passalgo=sha512$
# Use CDROM installation media$
cdrom$
# Use graphical install$
graphical$
# Run the Setup Agent on first boot$
firstboot --enable$
ignoredisk --only-use=sda$
# Keyboard layouts$
keyboard --vckeymap=us --xlayouts='us'$
# System language$
lang en_US.UTF-8$
$
# Network information$
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate$
network --hostname=centos72.huawei.com$
$
# Root password$
rootpw --iscrypted $6$3ZpKJEd3ctkruWkF$ACv/Y4HSNb4lTqk4Gbol157B2lHw0AVcKM1rjEshEOrMcIIXw1DvoPPCZy3y3i.SijcTdTAfvFs/uFPwLxKd51$
# System services$
services --disabled="chronyd"$
# System timezone$
timezone Asia/Shanghai --isUtc --nontp$
user --name=wang --password=$6$PqqaCIq7qipkXclF$5idE9A8TzG/yLzqHbmlSg9cVaNUmxPG85y/K81a0KSrosFH/srLzY0HQxeTUMZKs.KVoyJOphaA8Xz.nidUF// --iscrypted --gecos="wang"$
# System bootloader configuration$
bootloader --location=mbr --boot-drive=sda$
# Partition clearing information$
clearpart --none --initlabel$
# Disk partitioning information$
part swap --fstype="swap" --ondisk=sda --size=2048$
part /app --fstype="xfs" --ondisk=sda --size=20480$
part / --fstype="xfs" --ondisk=sda --size=51200$
part /boot --fstype="xfs" --ondisk=sda --size=1024$
$
%packages$
@^minimal$
@core$
$
%end$
$
%addon com_redhat_kdump --disable --reserve-mb='auto'$
$
%end$
$
%anaconda$
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty$
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok$
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty$
%end$
[root@centos72 ~]# nano aaa
-bash: nano: command not found
[root@centos72 ~]# yum install bash*
Loaded plugins: fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00:00
Package bash-4.2.46-30.el7.x86_64 already installed and latest version
Package 1:bash-completion-2.1-6.el7.noarch already installed and latest version
Nothing to do
[root@centos72 ~]# yum whatprovides nano
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
nano-2.3.1-10.el7.x86_64 : A small text editor
Repo : base
[root@centos72 ~]# yum install nano -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Installing:
nano x86_64 2.3.1-10.el7 base 440 k
Transaction Summary
========================================================================================================
Install 1 Package
Total download size: 440 k
Installed size: 1.6 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : nano-2.3.1-10.el7.x86_64 1/1
Verifying : nano-2.3.1-10.el7.x86_64 1/1
Installed:
nano.x86_64 0:2.3.1-10.el7
Complete!
(4)-A显示所有控制符
使用nano工具,并且按tab键
保存的时候按ctrl+x。再按y,回车就可以保存了
^I表示tab键
[root@centos72 ~]# nano aaa
[root@centos72 ~]# ls aaa
aaa
[root@centos72 ~]# cat aaa
a
b
c
[root@centos72 ~]# cat aaa -E
a$
b$
c$
[root@centos72 ~]# cat aaa -A
a$
^Ib$
^I^Ic$
这个很有意义的,比如多行重定向
EOF结尾,如果多个空格就不会退出
[root@centos72 ~]# cat aaa -A
a$
^Ib$
^I^Ic$
[root@centos72 ~]# mail -s hi wang << EOF
> hello
> how old are you
> EOF
在aaa文件里面,c后面补一个空格
肉眼看不到有空格,但是加上选项A就看到了
[root@centos72 ~]# !na
nano aaa
[root@centos72 ~]# cat aaa
a
b
c
[root@centos72 ~]# ll aaa
-rw-r--r--. 1 root root 10 May 7 13:09 aaa
[root@centos72 ~]# ll aaa -A
-rw-r--r--. 1 root root 10 May 7 13:09 aaa
[root@centos72 ~]# cat aaa -A
a$
^Ib$
^I^Ic $
使用二进制的文本工具也可以通过分析二进制的编码看到
09是tab键,20是空格
[root@centos72 ~]# hexdump -C aaa
00000000 61 0a 09 62 0a 09 09 63 20 0a |a..b...c .|
0000000a
(5)-s压缩连续的空行成一行
多行空行就变成了一行空行了
[root@centos72 ~]# !na
nano aaa
[root@centos72 ~]# cat aaa
a
b
c
a
d
f
[root@centos72 ~]# cat aaa -n
1 a
2 b
3 c
4
5
6 a
7
8
9
10 d
11
12
13 f
[root@centos72 ~]# cat aaa -s
a
b
c
a
d
f
[root@centos72 ~]# cat aaa -sn
1 a
2 b
3 c
4
5 a
6
7 d
8
9 f
查看帮助文档,可以单独显示tab键
[root@centos72 ~]# cat aaa -T
a
^Ib
^I^Ic
a
d
f
(二)tac反向显示
注意是行的反向显示
[root@centos72 ~]# cat aaa
aa
bb
cc
[root@centos72 ~]# tac aaa
cc
bb
aa
列的反向显示
[root@centos72 ~]# echo abcdefg | rev
gfedcba
二分页查看文件内容
(一)more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
显示一页内容,到了最后一页会退出。回车是换行,按空格就会往下翻页
[root@centos72 ~]# more anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=centos72.huawei.com
# Root password
rootpw --iscrypted $6$3ZpKJEd3ctkruWkF$ACv/Y4HSNb4lTqk4Gbol157B2lHw0AVcKM1rjEshEOrMcIIXw1DvoPPCZy3y3i.Si
--More--(37%)
按B就是往前翻页,但是没有less方便
可以进行管道传输,但是此时B往前翻页不起作用了
[root@centos72 ~]# cat anaconda-ks.cfg | more
-d: 显示翻页及退出提示
注意此选项要加在命令的中间
--More--(37%)[Press space to continue, 'q' to quit.]
[root@centos72 ~]# more -d anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=centos72.huawei.com
# Root password
rootpw --iscrypted $6$3ZpKJEd3ctkruWkF$ACv/Y4HSNb4lTqk4Gbol157B2lHw0AVcKM1rjEshEOrMcIIXw1DvoPPCZy3y3i.Si
--More--(37%)[Press space to continue, 'q' to quit.]
如果是加在最后面就无效了
[root@centos72 ~]# more anaconda-ks.cfg -d
::::::::::::::
anaconda-ks.cfg
::::::::::::::
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=centos72.huawei.com
--More--(29%)
(二)less的使用
less :是man 命令使用的分页器,也就是使用man实际上是使用less
一页一页地查看文件或STDIN 输出。按右上角的pgdn是往下翻页,pgup是往上翻页
/搜索关键字,n跳到匹配的下一个,N跳到匹配的上一个
配合其他命令分页显示
[root@centos72 ~]# tree /etc/ | less
/etc/
├── adjtime
├── aliases
├── aliases.db
├── alternatives
│ ├── ld -> /usr/bin/ld.bfd
│ ├── libnssckbi.so.x86_64 -> /usr/lib64/pkcs11/p11-kit-trust.so
│ ├── mta -> /usr/sbin/sendmail.postfix
│ ├── mta-aliasesman -> /usr/share/man/man5/aliases.postfix.5.gz
│ ├── mta-mailq -> /usr/bin/mailq.postfix
│ ├── mta-mailqman -> /usr/share/man/man1/mailq.postfix.1.gz
│ ├── mta-newaliases -> /usr/bin/newaliases.postfix
│ ├── mta-newaliasesman -> /usr/share/man/man1/newaliases.postfix.1.gz
│ ├── mta-pam -> /etc/pam.d/smtp.postfix
│ ├── mta-rmail -> /usr/bin/rmail.postfix
│ ├── mta-sendmail -> /usr/lib/sendmail.postfix
│ └── mta-sendmailman -> /usr/share/man/man1/sendmail.postfix.1.gz
├── anacrontab
├── asound.conf
├── audisp
│ ├── audispd.conf
:
三显示文本前或后行内容
(一)head显示文本前行
head [OPTION]... [FILE]...
-c #: 指定获取前# 字节
-n #: 指定获取前#行
(1)默认显示的是文件前10行
[root@centos72 ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
(2)head默认是读取键盘输入的
每输入一行就打印一行,像鹦鹉学舌一样
输入10行就会自动退出
[root@centos72 ~]# head
abc
abc
1234
1234
qwert
qwert
^C
(3)-n #: 指定获取前#行
[root@centos72 ~]# head -n 3
1
1
2
2
3
3
[root@centos72 ~]# cat anaconda-ks.cfg | head -n 6
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
(4)显示文件的前几行并且显示行号
[root@centos72 ~]# cat anaconda-ks.cfg -n | head -n 6
1 #version=DEVEL
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4 # Use CDROM installation media
5 cdrom
6 # Use graphical install
[root@centos72 ~]# cat -n anaconda-ks.cfg | head -n 6
1 #version=DEVEL
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4 # Use CDROM installation media
5 cdrom
6 # Use graphical install
[root@centos72 ~]# anaconda-ks.cfg head -n 6
-bash: anaconda-ks.cfg: command not found
[root@centos72 ~]# head -n 6 anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
[root@centos72 ~]#
注意-是必须要写的,否则会认为n和6是文件
[root@centos72 ~]# head n 6 anaconda-ks.cfg
head: cannot open ‘n’ for reading: No such file or directory
head: cannot open ‘6’ for reading: No such file or directory
==> anaconda-ks.cfg <==
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
(5)-c #: 指定获取前# 字节
显示一行的前几个字节
注意对于字母来说一个字母就是一个字节
而一个汉字就相当于3个字节
[root@centos72 ~]# head anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
[root@centos72 ~]# head -c6 anaconda-ks.cfg
#versi[root@centos72 ~]#
一个大字占3个字节,0a表示回车
[root@centos72 ~]# echo 大 > f2
[root@centos72 ~]# hexdump -C f2
00000000 e5 a4 a7 0a |....|
00000004
[root@centos72 ~]# ll f2
-rw-r--r--. 1 root root 4 May 7 14:42 f2
[root@centos72 ~]#
生成30位的随机口令,30位也就是30个字符
法1:
[root@centos72 ~]# openssl rand -base64 30
WSK7auwuiDyVxpcwm6ZMNZZegm0jmQ+keScHpKRd
[root@centos72 ~]# openssl rand -base64 30 | head -c 30
Ylia6CtKO6G6mNxg864f5Z38cRy2aL[root@centos72 ~]#
注意每次都不一样
[root@centos72 ~]# openssl rand -base64 30 | head -c 30
Ylia6CtKO6G6mNxg864f5Z38cRy2aL[root@centos72 ~]# openssl rand -base64 30 | head -c 30
NN5Hp7R7uvRRkBloRTGeVwteEuWq2T[root@centos72 ~]# openssl rand -base64 30 | head -c 30
znYiUJ69Tg6QoDXU09oF8Rcj86rYvq[root@centos72 ~]# openssl rand -base64 30 | head -c 30
R/Vdc5GXYNztTvjrJYojrEgumbJ9oK[root@centos72 ~]# openssl rand -base64 30 | head -c 30
NM1clK4uYuhiDIW+B1X0jWKAIYx+Fn[root@centos72 ~]# openssl rand -base64 30 | head -c 30
YOcnJeFHuoOK0OIAhmEPe3TTG93XnJ[root@centos72 ~]# openssl rand -base64 30 | head -c 30
/zd/aG5dH4ltysyVfdGXqK6jFGoD5U[root@centos72 ~]# openssl rand -base64 30 | head -c 30
PEfIFn7flWOSNiyZyTetwCMfhy86wv[root@centos72 ~]# openssl rand -base64 30 | head -c 30
WrnLntoumwz78R9kTk0opsTU9A1MwN[root@centos72 ~]# openssl rand -base64 30 | head -c 30
0rmgIAjWc+GpiwpMTLvB6ICPbqG8Z5[root@centos72 ~]# openssl rand -base64 30 | head -c 30
bpv7uk38XGixkh1BlOZMYF+9vK2qfB[root@centos72 ~]# openssl rand -base64 30 | head -c 30
lDWBCo/kq1YhFE0B58j7xlax2Tp6xG[root@centos72 ~]#
[root@centos73 ~]# openssl rand -base64 30
HZV4gx6Y8RNWgtkTDwM0BnsD31amivawVQW4XV1d
[root@centos73 ~]# openssl rand -base64 30
vn/9HAH1NWaQ+0zdiKrmKky5nKW1jwPhs176vrAC
[root@centos73 ~]# openssl rand -base64 30
kkaa6w6pN71D2YLFj4lkLOjDihqmjj+eTKvx+jsx
[root@centos73 ~]# openssl rand -base64 30
CHS1gSJkfqDRoEMz5Oy7EvR505yGypWSI2QlQtRb
[root@centos73 ~]# openssl rand -base64 30
hV+1C0SAHHET8ddjiff3RL6nBHwcwFpYoypR9icL
[root@centos73 ~]# openssl rand -base64 30
ELUYAUuF1LeVkQVpeL6latrqHVPTJPMm7DWGzNKQ
法2:
使用设备生成随机数
但是默认显示的很多随机数是乱码的,要对其进行过滤,取出前30个没有乱码的字符
取出数字加字母就够用了
[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
GcCS7V3zdbxf7ULACZxyileWOkVbb4[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
4HRYAPkEmR9IU5DmwUCfPH5yFchmWk[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
Xai5M56ExMu3lPTk3uItOrqOIyrHBi[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
EM19jKg8elb0XaBZ5fBt6HlzvADj6V[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
2nGHfnxibhXymvYY50933w9IKZY2a1[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
FtlUPlUBAJqGuCF8D8mBWUA1Qy4mIE[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
pP7Qq0iqqv3ualzDdf6JYcyA7nnL0X[root@centos72 ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
mcrr0qTGkAgFQ4Qp8wQYEOXkth6KBh[root@centos72 ~]#
命令解析:
tr -dc '[:alnum:]'表示删除除了字母数字的其他字符
不加引号的结果:
[root@centos73 ~]# cat /dev/urandom | tr -dc [:alnum:] | head -c30
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[root@centos73 ~]# cat /dev/urandom | tr -dc [:alnum:] | head -c30
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[root@centos73 ~]# cat /dev/urandom | tr -dc [:alnum:] | head -c30
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[root@centos73 ~]# cat /dev/urandom | tr -dc [:alnum:] | head -c30
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[root@centos73 ~]# cat /dev/urandom | tr -dc [:alnum:] | head -c30
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[root@centos73 ~]#
使用另外一种写法:
[root@centos72 ~]# tr -dc '[:alnum:]' < /dev/urandom | head -c30
dq3LYW62eVGZAnZlUPeXbEWlYKK9Dn[root@centos72 ~]# tr -dc '[:alnum:]' < /dev/urandom | head -c30
0Q5SLHiu3XeUVuCtIFxfIYwkhRC4No[root@centos72 ~]# tr -dc '[:alnum:]' < /dev/urandom | head -c30
MKuhLHDBkAgrtN5oLM9HQADaI6SHGZ[root@centos72 ~]# tr -dc '[:alnum:]' < /dev/urandom | head -c30
ZhnykU0EaHzXm8GfojZ9KgXWvfpjRI[root@centos72 ~]# tr -dc '[:alnum:]' < /dev/urandom | head -c30
SGRmOMPhc9svC9BKpcclwLgDUp3DC0[root@centos72 ~]#
(二)tail显示文本后行内容
tail [OPTION]... [FILE]...
-c #: 指定获取后# 字节
-n #: 指定获取后#行 行
-#: :
-f: 跟踪显示文件fd 新追加的内容, 常用日志监控
于 相当于 --follow=descriptor
-F: 跟踪文件名,相当于—follow=name --retry
(1)默认显示后10行
[root@centos72 ~]# tail anaconda-ks.cfg
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
支持重定向
[root@centos72 ~]# cat anaconda-ks.cfg -n | tail
42
43 %addon com_redhat_kdump --disable --reserve-mb='auto'
44
45 %end
46
47 %anaconda
48 pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
49 pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
50 pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
51 %end
(2)-n #: 指定获取后#行
[root@centos72 ~]# cat anaconda-ks.cfg -n | tail -n5
47 %anaconda
48 pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
49 pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
50 pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
51 %end
(3)-f: 跟踪显示文件fd新追加的内容
常用日志监控相当于 --follow=descriptor,并不会退出,因为文件是时时刻刻变化
tailf 类似tail –f,当文件不增长时并不访问文件,所以性能更好,更加节省资源
[root@centos72 ~]# tail -f anaconda-ks.cfg
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
开启新终端,并且往文件里面输入内容
[root@centos72 ~]# echo asdfghjkl >> /app/anaconda-ks.cfg
[root@centos72 ~]# echo aaaaaaaaaa >> /app/anaconda-ks.cfg
[root@centos72 ~]# echo bbbbbbbbbb >> /app/anaconda-ks.cfg
[root@centos72 ~]# echo cccccccccc >> /app/anaconda-ks.cfg
可以看到文件有变化了,而且是马上显示
[root@centos72 ~]# tail -f /app/anaconda-ks.cfg
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
asdfghjkl
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
为了不影响执行命令,那么就放到后台执行,那么就不占用现在开启的终端界面
这样如果有新的情况会显示的
[root@centos72 ~]# echo 1111111111 >> /app/anaconda-ks.cfg
[root@centos72 ~]# tail -f /app/anaconda-ks.cfg &
[2] 11919
[root@centos72 ~]#
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
asdfghjkl
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
cat aaa
aa
bb
cc
[root@centos72 ~]# 1111111111
1111111111
恢复到前台
[root@centos72 ~]# fg 1
tail -f /app/anaconda-ks.cfg
^C
[root@centos72 ~]# tail -f /app/anaconda-ks.cfg
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
asdfghjkl
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
1111111111
实现文件如果没有变化就在终端执行其他命令;如果有变化就显示变化,但不影响其他命令的执行
[root@centos72 ~]# tail -f /app/anaconda-ks.cfg -n0 &
[3] 11929
[root@centos72 ~]# 222222
222222
^C
[root@centos72 ~]#
[root@centos72 ~]# echo 222222 >> /app/anaconda-ks.cfg
查看进程是否运行
[root@centos72 ~]# ps aux | tail
root 2263 0.0 0.0 0 0 ? S 13:41 0:02 [kworker/0:0]
postfix 11664 0.0 0.4 89724 4052 ? S 14:18 0:00 pickup -l -t unix -u
root 11878 0.0 0.0 0 0 ? S 15:12 0:00 [kworker/0:1]
root 11879 0.0 0.5 154588 5388 ? Ss 15:13 0:00 sshd: root@pts/0
root 11883 0.0 0.2 115832 2640 pts/0 Ss 15:13 0:00 -bash
root 11919 0.0 0.0 107988 612 pts/1 S 15:19 0:00 tail -f /app/anaconda-ks.cfg
root 11928 0.0 0.0 0 0 ? S 15:25 0:00 [kworker/0:2]
root 11929 0.0 0.0 107988 612 pts/1 S 15:26 0:00 tail -f /app/anaconda-ks.cfg -n0
root 11931 0.0 0.1 155324 1860 pts/0 R+ 15:28 0:00 ps aux
root 11932 0.0 0.0 107984 648 pts/0 R+ 15:28 0:00 tail
(4)-F: 跟踪文件名,相当于—follow=name --retry
在另外一个终端把文件删除了
[root@centos72 ~]# rm -f /app/f2
如果文件删除了就显示文件不可访问
[root@centos72 ~]# touch /app/f2
[root@centos72 ~]# tail -F /app/
anaconda-ks.cfg f2
[root@centos72 ~]# tail -F /app/f2
tail: ‘/app/f2’ has become inaccessible: No such file or directory
四按列抽取文本cut
也就是剪切粘贴
(一)常见选项
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第# 个字段
#,#[,#] :离散的多个字段,例如1,3,6
#-# :连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING
(二)cut实例
注意列不一定是表的列,所以要指明什么才是列。比如:冒号分割开的也是列
[root@centos72 ~]# ls /app/
anaconda-ks.cfg passwd
[root@centos72 ~]# cat /app/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
wang:x:1000:1000:wang:/home/wang:/bin/bash
(1)指定分隔符为冒号
[root@centos72 ~]# cut -d: -f1,3 /app/passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
games:12
ftp:14
nobody:99
systemd-network:192
dbus:81
polkitd:999
sshd:74
postfix:89
wang:1000
(2)--output-delimiter=STRING 指定输出分隔符
指定的分隔符可以不加双引号
[root@centos72 ~]# cut -d: -f1,3 /app/passwd --output-delimiter="======="
root=======0
bin=======1
daemon=======2
adm=======3
lp=======4
sync=======5
shutdown=======6
halt=======7
mail=======8
operator=======11
games=======12
ftp=======14
nobody=======99
systemd-network=======192
dbus=======81
polkitd=======999
sshd=======74
postfix=======89
wang=======1000
[root@centos72 ~]# cut -d: -f1,3 /app/passwd --output-delimiter=++++++
root++++++0
bin++++++1
daemon++++++2
adm++++++3
lp++++++4
sync++++++5
shutdown++++++6
halt++++++7
mail++++++8
operator++++++11
games++++++12
ftp++++++14
nobody++++++99
systemd-network++++++192
dbus++++++81
polkitd++++++999
sshd++++++74
postfix++++++89
wang++++++1000
[root@centos72 ~]#
[root@centos72 ~]# cut -d: -f1,3 --output-delimiter=++++++ /app/passwd
root++++++0
bin++++++1
daemon++++++2
adm++++++3
lp++++++4
sync++++++5
shutdown++++++6
halt++++++7
mail++++++8
operator++++++11
games++++++12
ftp++++++14
nobody++++++99
systemd-network++++++192
dbus++++++81
polkitd++++++999
sshd++++++74
postfix++++++89
wang++++++1000
(三)cut示例
(1)使用cut获取访问日志里面客户端的IP地址
在生产中cut是很实用的工具
[root@centos72 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.x86_64
[root@centos72 ~]# systemctl start httpd
[root@centos72 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
把防火墙关闭了
[root@centos72 ~]# systemctl stop firewalld.service
[root@centos72 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@centos72 ~]# setenforce 0
日志文件,现在没有访问就没有记录
[root@centos72 ~]# cat /var/log/httpd/access_log
访问此机器的web服务
[root@centos72 ~]# tailf /var/log/httpd/access_log
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /noindex/css/bootstrap.min.css HTTP/1.1" 200 19341 "http://192.168.137.72/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /noindex/css/open-sans.css HTTP/1.1" 200 5081 "http://192.168.137.72/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /images/poweredby.png HTTP/1.1" 200 3956 "http://192.168.137.72/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /images/apache_pb.gif HTTP/1.1" 200 2326 "http://192.168.137.72/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.woff HTTP/1.1" 404 241 "http://192.168.137.72/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.woff HTTP/1.1" 404 239 "http://192.168.137.72/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://192.168.137.72/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
192.168.137.1 - - [07/May/2019:18:20:50 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://192.168.137.72/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
使用cut获取客户端的IP地址
注意空格使用双引号,中间有一个空格
[root@centos72 ~]# cut -d" " -f1 /var/log/httpd/access_log
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
192.168.137.1
(2)显示访问web网站排名前几的机器
要使用到统计和排序
显示的正在连接的客户端IP地址
[root@centos72 ~]# ss -tn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 192.168.137.72:22 192.168.137.1:57568
ESTAB 0 0 192.168.137.72:22 192.168.137.1:58228
删除连续的空格字符,那么多个空格就变成了一个空格
[root@centos72 ~]# ss -tn | tr -s " "
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 192.168.137.72:22 192.168.137.1:57568
ESTAB 0 0 192.168.137.72:22 192.168.137.1:58228
过滤出IP地址的那行
[root@centos72 ~]# ss -tn | tr -s " " | grep ESTAB
ESTAB 0 52 192.168.137.72:22 192.168.137.1:57568
ESTAB 0 0 192.168.137.72:22 192.168.137.1:58228
以空格作为分隔符,并且取第5个字段
[root@centos72 ~]# ss -tn | tr -s " " | grep ESTAB | cut -d" " -f5
192.168.137.1:57568
192.168.137.1:58228
以冒号作为分隔符,取第1个字段
完成
[root@centos72 ~]# ss -tn | tr -s " " | grep ESTAB | cut -d" " -f5 | cut -d: -f1
192.168.137.1
192.168.137.1
法2:
空格替换成冒号
注意tr本身就可以进行替换
[root@centos73 ~]# ss -tn | tr -s " " :
State:Recv-Q:Send-Q:Local:Address:Port:Peer:Address:Port:
ESTAB:0:0:192.168.137.73:22:192.168.137.1:49698:
ESTAB:0:52:192.168.137.73:22:192.168.137.1:58957:
以冒号作为分隔符,并且取第6个字段
[root@centos72 ~]# ss -tn | tr -s " " : | grep ESTAB | cut -d: -f6
192.168.137.1
192.168.137.1
统计连接数,如果一个客户端的连接数多,那么可能是黑客开启多线程就打开了很多的连接,分别测试口令
把登录的用户名取出
[root@centos72 ~]# who
root tty1 2019-01-13 00:35
root pts/0 2019-05-07 15:13 (192.168.137.1)
root pts/1 2019-05-07 12:41 (192.168.137.1)
[root@centos72 ~]# who | cut -d" " -f1
root
root
root
(3)分区的使用情况
[root@centos72 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 1134820 51268380 3% /
devtmpfs 487952 0 487952 0% /dev
tmpfs 498976 0 498976 0% /dev/shm
tmpfs 498976 14108 484868 3% /run
tmpfs 498976 0 498976 0% /sys/fs/cgroup
/dev/sda3 20961280 32952 20928328 1% /app
/dev/sda1 1038336 126596 911740 13% /boot
tmpfs 99796 0 99796 0% /run/user/0
/dev/sr0 4364408 4364408 0 100% /mnt
取出分区利用率,如果利用率达到了多少就要报警了
[root@centos72 ~]# df | grep /dev/sd
/dev/sda2 52403200 1134820 51268380 3% /
/dev/sda3 20961280 32952 20928328 1% /app
/dev/sda1 1038336 126596 911740 13% /boot
[root@centos72 ~]# df | grep /dev/sd | tr -s ' '
/dev/sda2 52403200 1134820 51268380 3% /
/dev/sda3 20961280 32952 20928328 1% /app
/dev/sda1 1038336 126596 911740 13% /boot
[root@centos72 ~]# df | grep /dev/sd | tr -s ' ' | cut -d" " -f5
3%
1%
13%
去除%
[root@centos72 ~]# df | grep /dev/sd | tr -s ' ' | cut -d" " -f5 | cut -d% -f1
3
1
13
法2:
搜索的时候使用%替换
[root@centos72 ~]# df | grep /dev/sd | tr -s ' ' % | cut -d% -f5
3
1
13
(4)取出网卡对应的IP地址
[root@centos72 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
inet6 fe80::b029:2522:876f:5456 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:fc:69:f8 txqueuelen 1000 (Ethernet)
RX packets 16994 bytes 1708821 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16198 bytes 16210329 (15.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 10 bytes 680 (680.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 680 (680.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@centos72 ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
inet6 fe80::b029:2522:876f:5456 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:fc:69:f8 txqueuelen 1000 (Ethernet)
RX packets 17017 bytes 1710815 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16213 bytes 16212741 (15.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
法1:
显示前面2行
[root@centos72 ~]# ifconfig ens33 | head -n2
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
显示前面2行的倒数第1行,惯用的套路
[root@centos72 ~]# ifconfig ens33 | head -n2 | tail -n1
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
以空格作为分割符,删除了多余的空格,只有一个空格
[root@centos72 ~]# ifconfig ens33 | head -n2 | tail -n1 | tr -s ' '
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
以空格作为分隔符,取第3个字段
[root@centos72 ~]# ifconfig ens33 | head -n2 | tail -n1 | tr -s ' ' | cut -d" " -f3
192.168.137.72
法2:
直接把分隔符空格变成冒号
[root@centos72 ~]# ifconfig ens33 | head -n2 | tail -n1 | tr -s ' ' : | cut -d: -f3
192.168.137.72
法3:
过滤出关键字grep netmask
tr -s ' ' 表示把多个空格压缩为1个空格
[root@centos72 ~]# ifconfig ens33 | grep netmask
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
[root@centos72 ~]# ifconfig ens33 | grep netmask | tr -s ''
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
[root@centos72 ~]# ifconfig ens33 | grep netmask | tr -s ' '
inet 192.168.137.72 netmask 255.255.255.0 broadcast 192.168.137.255
[root@centos72 ~]# ifconfig ens33 | grep netmask | tr -s ' ' | cut -d" " -f3
192.168.137.72
取文件的第1列到第3列,第7列
[root@centos72 ~]# cat /app/passwd | cut -d: -f1-3,7
root:x:0:/bin/bash
bin:x:1:/sbin/nologin
daemon:x:2:/sbin/nologin
adm:x:3:/sbin/nologin
lp:x:4:/sbin/nologin
sync:x:5:/bin/sync
shutdown:x:6:/sbin/shutdown
halt:x:7:/sbin/halt
mail:x:8:/sbin/nologin
operator:x:11:/sbin/nologin
games:x:12:/sbin/nologin
ftp:x:14:/sbin/nologin
nobody:x:99:/sbin/nologin
systemd-network:x:192:/sbin/nologin
dbus:x:81:/sbin/nologin
polkitd:x:999:/sbin/nologin
sshd:x:74:/sbin/nologin
postfix:x:89:/sbin/nologin
wang:x:1000:/bin/bash
五合并文件paste
paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符: 指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
使用cat同时打印文件是横向合并
[root@centos72 ~]# cp /etc/issue /app/
[root@centos72 ~]# cp /etc/centos-release /app/
[root@centos72 ~]# cat /app/issue /app/centos-release
S
Kernel
on an m
CentOS Linux release 7.5.1804 (Core)
进行纵向合并
[root@centos72 ~]# paste /app/issue /app/centos-release
S CentOS Linux release 7.5.1804 (Core)
Kernel
on an m
[root@centos72 ~]# cat /app/issue
S
Kernel
on an m
[root@centos72 ~]# cat /app/centos-release
CentOS Linux release 7.5.1804 (Core)
默认是使用制表符作为分割符
[root@centos72 ~]# paste /app/issue /app/centos-release > /app/f3
[root@centos72 ~]# cat -A /app/f3
S^ICentOS Linux release 7.5.1804 (Core) $
Kernel
on an m^I$
^I$
指定分隔符,用法和tr,cut类似
[root@centos72 ~]# paste -d: /app/f3
S CentOS Linux release 7.5.1804 (Core)
Kernel
on an m
[root@centos72 ~]# paste /app/issue /app/centos-release
S CentOS Linux release 7.5.1804 (Core)
Kernel
on an m
[root@centos72 ~]# paste -d: /app/issue /app/centos-release
S:CentOS Linux release 7.5.1804 (Core)
Kernel
on an m:
:
注意如果分隔符是多个相同符号只显示一个
[root@centos72 ~]# paste -d===== /app/issue /app/centos-release
S=CentOS Linux release 7.5.1804 (Core)
Kernel
on an m=
=
[root@centos72 ~]# paste -d"=====" /app/issue /app/centos-release
S=CentOS Linux release 7.5.1804 (Core)
Kernel
on an m=
=
-s : 所有行合成一行显示
[root@centos72 ~]# paste -s /app/issue /app/centos-release
S Kernel
on an m
CentOS Linux release 7.5.1804 (Core)
[root@centos72 ~]# cat /app/issue
S
Kernel
on an m
[root@centos72 ~]# cat /app/centos-release
CentOS Linux release 7.5.1804 (Core)
创建两个文件
[root@centos72 ~]# ls /app/
anaconda-ks.cfg centos-release f3 issue passwd
[root@centos72 ~]# cat > /app/f1
aa
bb
cc
dd
^C^C
[root@centos72 ~]# cat /app/f1
aa
bb
cc
dd
[root@centos72 ~]# cat > /app/f2
11
22
33
44
^C
[root@centos72 ~]# cat /app/f2
11
22
33
44
相当于逆时针转了90度,对于图案的调整是很好的
[root@centos72 ~]# paste /app/f1 /app/f2
aa 11
bb 22
cc 33
dd 44
[root@centos72 ~]# paste /app/f1 /app/f2
aa 11
bb 22
cc 33
dd 44
所有同列的行合成一行显示
[root@centos72 ~]# paste -s /app/f1 /app/f2
aa bb cc dd
11 22 33 44