1. cat
不适合查看大文件
1、查看文件及行号
[root@localhost teone]# cat -n one.log
1 2 this is a test
2 3 Are you like awk
3 This's a test
4 10 There are orange,apple,mongo
2、显示隐藏符号,如回车符($)
[root@localhost teone]# cat -A one.log
2 this is a test$
3 Are you like vvv$
This's a test$
10 There are orange,apple,mongo$
3、合并文件(将three.log和 four.log这两个文件内容追加至one.log)
[root@localhost teone]# cat three.log four.log >> one.log
[root@localhost teone]# cat one.log
2 this is a test
3 Are you like vvv
This's a test
10 There are orange,apple,mongo
this three
hhhhhhhhhhhh
this four file
vvvvvvvvvvvvv
2.more,less
翻页查看大文件
3.head,tail
head:显示指定文件前若干行的文件内容
tail:显示指定文件结尾若干行的文件内容
1、-n 指定显示开头/结尾几行
[root@localhost teone]# head -n 3 two.log
hhhh,jjjjj,j
bbbbb,bbbb
nnnnnn,nnnnnn,nnn
2、监听文件新增内容
tail -f
4.grep
1、查找文件中指定字符串的行
[root@localhost teone]# grep bb two.log
bbbbb,bbbb
bbbsssa,a
bbbbb,bbbb
bbbsssa,a
2、查看行的个数
[root@localhost teone]# grep -c bb two.log
4
3、查看指定的实时信息
tail -f /opt/test.log | grep -C 10 --color '关键字'
4、使用正则表达式
[root@localhost teone]# grep ^gg two.log
ggggg
5.当前文件夹下以log结尾的文件中包含bb关键字的行
[root@localhost teone]# grep bb *.log
one.log:BBBDDDBBbbb
two.log:bbbbb,bbbb
two.log:bbbsssa,a
two.log:bbbbb,bbbb
two.log:bbbsssa,a
6.反向查找
[root@localhost t_file]# grep -v cc one.log
"ddd
7.不区分大小写
[root@localhost t_file]# grep -i "cc" *.log
one.log:ccccccccccccccccc
one.log:CCCCCCCC
two.log:cccccc
8.找出以.log结尾的文件,并包含关键字cc的行
[root@localhost t_file]# find -name "*.log"|xargs grep "ccc"
./two.log:cccccc
./one.log:ccccccccccccccccc
9.递归查找目录下文件 -r(范围:该目录及其子目录)
[root@localhost qqc_data]# grep -r ccccc /qqc_data/t_file/
/qqc_data/t_file/one.log:cc,|cc"ccc44 cccccccccc
/qqc_data/t_file/three.txt:cc 44 ccccccc
5.find
1、查找当前目录及子目录下以.gz结尾的文件
[root@localhost qqc_data]# find -name "*.gz"
./redis-4.0.8.tar.gz
./go1.15.4.linux-amd64.tar.gz
./go/src/crypto/ed25519/testdata/sign.input.gz
./go/src/debug/elf/testdata/hello-world-core.gz
./go/src/encoding/json/testdata/code.json.gz
2.指定文件容量查找(大于1M,以log后缀的文件)
find / -size +1M -name "*.log"
6.awk
1,指定固定的分割符
[root@localhost t_file]# cat one.log
d"|d d
cc,|cc"ccc cccccccccc
&,&
CCC C|"Csa,sCCC
vv,saa
# BEGIN{FS="分割字符"}:指定分割符,不指定默认以空格分割(awk '{print$1}' one.log)
[root@localhost t_file]# awk 'BEGIN{FS="|"} {print$1}' one.log
d"
cc,
&,&
CCC C
vv,saa
2,指定多个分隔符
# 先按| 分割,得到的结果再按, 分割
[root@localhost t_file]# awk -F '[| ,]' '{print$1}' one.log
d"
cc
&
CCC
vv
3.设置变量
[root@localhost t_file]# cat two.log
22,ddddddddd
ccc,ccc
33,aaaaaaaa
mmmmmmmmmmm
# -v:设置变量,如果前面的结果是数字,会进行运算操作
[root@localhost t_file]# awk -va=1 'BEGIN{FS=","} {print$1,$1+a}' two.log
22 23
ccc 1
33 34
mmmmmmmmmmm 1
4. -f:指定awk 文件
awk -f cal.awk log.txt
5. 运算符
[root@localhost t_file]# cat three.txt
kk 2 kk
cvv 3 vvvvv
zz gghj zz
cc 44 ccccccc
5.1.过滤第二列小于10的行
[root@localhost t_file]# awk '$2<10' three.txt
kk 2 kk
cvv 3 vvvvv
5.2.过滤第二列小于10的行或者等于gghj 的行
[root@localhost t_file]# awk '$2<10 || $2=="gghj"' three.txt
kk 2 kk
cvv 3 vvvvv
zz gghj zz
6.正则匹配关键字
# cc或者vv 关键字的行
[root@localhost t_file]# awk '$0 ~ /cc/ || /vv/' three.txt
cvv 3 vvvvv ffs
cc 44 ccccccc
# 每行第4列包含ff的行
[root@localhost t_file]# awk '$4 ~ /ff/ {print $0}' three.txt
cvv 3 vvvvv ffs
zz gghj zz ssffg
# 所有包含ff的行
[root@localhost t_file]# awk '/ff/' three.txt
cvv 3 vvvvv ffs
zz gghj zz ssffg
# 取反操作:
[root@localhost t_file]# awk '$0 !~ /cc/' three.txt
kk 2 kk
cvv 3 vvvvv ffs
zz gghj zz ssffg
# 注:print$0 表示整行
应用
1, 通过关键字查找进程号并删除
ps -aux | grep t_file/one.log | grep -v grep | awk '{print$2}' | xargs kill -9
2.指定关键字查看实时日志
tail -f /opt/test.log | grep -C 10 --color '关键字'
3.查看内存
free -m | awk '$0 ~ /Mem/ {print$2}'
4.指定日期查看日志文件
awk -ve="05/Jan/2021:13" '$0 ~ e {print$0}' test.log
5.指定目录中包含某个关键字的所有文件
[root@localhost qqc_data]# grep -r ccccc /qqc_data/t_file/ | awk 'BEGIN{FS=":"} {print$1}'
/qqc_data/t_file/one.log
/qqc_data/t_file/three.txt
# https://www.linuxcool.com/netstat