tcpdump/grep/sed/awk/vi简单命令

《鸟哥的Linux私房菜》

tcpdump

# tcpdump [-i接口] [-w 保存文件名] [-c 个数]
    -i:后接要监听的网络接口如eth0,wlan0,lo,ppp0
    -w:包数据存下来文件名
    -c:监听包个数

不区分源地址和目的地址,过滤IP

# tcpdump -i eth1 host 192.168.1.1

过滤源地址
# tcpdump -i eth1 src host 192.168.1.1

过滤目的地址
# tcpdump -i eth1 dst host 192.168.1.1

不区分源端口和目的端口,过滤端口
# tcpdump -i eth1 port 25

过滤源端口
# tcpdump -i eth1 src port 25

过滤目的端口
# tcpdump -i eth1 dst port 25

过滤网络
# tcpdump -i eth1 net 192.168  
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168

过滤协议
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp

 

tar

tar [-j|-z] [cv] [-f 新建文件名] file   打包与压缩

tar [-j|-z] [xv] [-f 文件名] [-C 目录]  解压缩

tar [-j|-z] [tv] [-f 文件名]  查看文件

三选一参数:

-c 新建打包文件

-x 解压

-t 查看打包文件中有哪些文件名

其它参数:

-j 通过bzip2 进行压缩、解压,此时文件名最好为*.tar.bz2

-z 通过gzip 进行压缩、解压,此时文件名最好为*.tar.gz

-v 在压缩、解压过程中,显示正在处理的文件名

-f filename 要新建或者要处理的文件

-C 目录 解压时,在特定目录下解压

仅解开单一文件

先找到需要的文件

tar –jtv –f /root/etc.tar.bz2 |grep ‘test’

tar –jxv –f /root/etc.tar.bz2 etc/test

仅备份比某个时刻还要新的文件

tar –jcv –f /root/etc.newer.tar.bz2 –newer-mtime=”2022/01/15” /etc/*

 

strings

strings -f "*.so" | grep "xxxxxx"

看那个so中包含"xxxxxx"

grep

grep [–A2] [–B3] [-n] [-v] [-i] [--color=auto] ‘搜索字符串’ filename

-A 列出找出的行外,后续2行也列出来

-B 列出找出的行外,前面3行也列出来

-n 显示行号

-v 反向选择,显示不匹配的行

-i 不区分大小写搜索

grep –n ‘t[ae]st’ test.txt

查找包括 tast ,test的行

grep –n ‘[^g]oo’ test.txt

查找oo,但前面不是g

grep –n ‘[^a-z]oo’ test.txt

查找oo,但前面不是小写字母

grep –n ‘[0-9]’ test.txt

查找有数字的行

grep –n ‘^the’ test.txt

查找the 开头的行

grep –n ‘^[a-z]’ test.txt

查找小写字符开头的行

grep –n ‘^[^a-zA-Z]’ test.txt

不是英文字符开头的行

grep –n ‘^$’ test.txt

查找空白行

 

基础正则表达式字符

^word

待查找的字符串在行首

word$

待查找的字符串在行尾

.

代表一定有一个任意字符的字符

*

重复零个无穷多个前一个字符

[list]

字符集合中的RE字符里找出想要选择的字符

[n1-n2]

字符集合中的RE字符里找出想要选择的字符范围

[^list]

字符集合中的RE字符里找出不要选择的字符范围

 

sed

sed [-ni] [n1[,n2]] function

-n 使用安静模式

-i 直接修改读取的文件内容

 

n1,n2 代表选择进行动作的行数

function参数:

a 在目前的下一行新增一行,后面可以接字符串

c 替换,后面可以接字符串

d 删除

i 在目前的上一行插入一行

p 打印 sed –n 一起使用

s 替换 1,20s/old/new/g

#nl /etc/passwd |sed ‘2,5d’

列出/etc/passwd的内容,同时将2-5行删除

# nl /etc/passwd |sed ‘2a hello’

在第二行(第三行)后加上hello

# sed –i ‘$a #This is end.’ Test.txt

在Test.txt 最后加入一行’#This is end.’

# nl /etc/passwd |sed ‘2,5c hello’

将2-5行换成hello

# sed –i ‘s/\.$/\!/g’ Test.txt

将Test.txt内每一行结尾为”.”换成”!”

 

awk

awk ‘条件类型1{动作1} 条件类型2{动作2} …’ filename

  1. 读入第一行,并将第一行的数据填入$0,$1,$2等变量中
  2. 依据条件类型限制,判断是否需要进行后面的动作
  3. 做完所有的动作与条件类型
  4. 若还有后续行的数据,重复1-3,直到所有数据都读完

NR  awk处理的第几行数据

NF  每一行拥有的字段总数

FS  目前的分隔符,默认是空格键

#last –n 5|awk ‘{print $1 “\t lines: ” NR “\t columes: ” NF}’

#cat /etc/passwd|awk ‘BEGIN {FS=”:”} $3 < 10 {print $1 “\t” $3}’

因为默认分隔符是空格键,所以,如果想第一行就用其它分隔符,需要用BEGIN预先设置awk的变量

#cat pay.txt|awk ‘NR==1{print “%10s %10s \n”,$1,$2,”Total”} NR>=2{total=$1+$2 printf “%10d %10d %10.2f\n”,$1,$2,total}’

 

Vi

按键说明

一般模式:

0

光标移到到这一行的最前面

$

移动到行尾

G

移动到这个文件最后一行

nG(n数字)

移动到第n行

gg

移动到第一行,=1G

n[enter](n数字)

向下移动n行

/word

向下查找word

?word

向上查找word

n(字母)

重复前一个查找动作

N(字母)

方向重复前一个查找动作

:n1,n2s/word1/word2/g

第n1行与第n2行之间,查找word1,并替换

:1,$s/word1/word2/g

从第一行到最后一行,查找替换

:1,$s/word1/word2/gc

从第一行到最后一行,查找替换,但替换前需要用户确认是否需要替换

xX

X向前删除一个字符,x向后删除一个字符

dd

删除一行

yy

复制光标所在行

nyy

复制光标所在的下n行

 一般模式切换到编辑模式:

I,i

I在目前所在行第一个非空格符处插入

i从目前光标所在处插入

A,a

A在目前所在行最后一个字符处插入

a从目前光标所在的下一个字符处开始插入

O,o

O 在目前光标所在处上一行插入新的一行

o 在目前光标所在行下一处插入新的一行

一般模式切换到命令行模式:

:w

将编辑写入硬盘

:w!

强制写入

:q

离开vi

:q!

若修改过文件,又不想存储,强制离开不保存

:wq

写入后离开

:wq!

强制保存后离开

上一篇:tcpdump用法


下一篇:记一次线上流量异常问题的排查