更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux命令 > Linux tar、talk、tcpdump、tcpreplay命令的用法及解释

Linux tar、talk、tcpdump、tcpreplay命令的用法及解释

更新时间:2022-01-19 14:55:18浏览次数:574+次

以下为你详细解释tar、talk、tcpdump、tcpreplay命令的用法。

\

Linux tar命令的用法及解释

Linux tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip、bzip2命令)。

1、语法

tar(选项)(参数)

2、选项

-A或--catenate:新增文件到以存在的备份文件;

-B:设置区块大小;

-c或--create:建立新的备份文件;

-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

-d:记录文件的差别;

-x或--extract或--get:从备份文件中还原文件;

-t或--list:列出备份文件的内容;

-z或--gzip或--ungzip:通过gzip指令处理备份文件;

-Z或--compress或--uncompress:通过compress指令处理备份文件;

-f<备份文件>或--file=<备份文件>:指定备份文件;

-v或--verbose:显示指令执行过程;

-r:添加文件到已经压缩的文件;

-u:添加改变了和现有的文件到已经存在的压缩文件;

-j:支持bzip2解压文件;

-v:显示操作过程;

-l:文件系统边界设置;

-k:保留原有文件不覆盖;

-m:保留文件不被覆盖;

-w:确认压缩文件的正确性;

-p或--same-permissions:用原来的文件权限还原文件;

-P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;

-N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;

--exclude=<范本样式>:排除符合范本样式的文件。

3、参数

文件或目录:指定要打包的文件或目录列表。

4、实例

将文件全部打包成tar包:

tar -cvf log.tar log2022.log    仅打包,不压缩!

tar -zcvf log.tar.gz log2022.log   打包后,以 gzip 压缩

tar -jcvf log.tar.bz2 log2022.log  打包后,以 bzip2 压缩

在选项f之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加z选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包;如果加j选项,则以.tar.bz2来作为tar包名。

查阅上述tar包内有哪些文件:

tar -ztvf log.tar.gz

由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上z这个选项了。

将tar包解压缩:

tar -zxvf /opt/soft/test/log.tar.gz

在预设的情况下,我们可以将压缩档在任何地方解开的。

只将tar内的部分文件解压出来:

tar -zxvf /opt/soft/test/log30.tar.gz log2022.log

我可以透过tar -ztvf来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!

文件备份下来,并且保存其权限:

tar -zcvpf log31.tar.gz log2020.log log2021.log log2022.log

这个-p的属性是很重要的,尤其是当您要保留原本文件的属性时。

在文件夹当中,比某个日期新的文件才备份:

tar -N "2022/01/19" -zcvf log22.tar.gz test

备份文件夹内容是排除部分文件:

tar --exclude scf/service -zcvf scf.tar.gz scf/*

其实最简单的使用 tar 就只要记忆底下的方式即可:

压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称

查询:tar -jtv -f filename.tar.bz2

解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

Linux talk命令的用法及解释

Linux talk命令是talk服务器的客户端工具,通过talk命令可以让用户与其他用户聊天。linux中talk命令参数程序的使用很简单,只要知道交谈对象的地址,就可以邀请对方交谈。

1、语法

talk(参数)

2、参数

用户:指定聊天的用户;

终端:指定用户的终端。

3、实例

例如登录在主机rs6000.cic.test.com上的用户jdx希望和登录在主机tirc.cs.test.com上的用户wangxz进行交谈,则可以输入下面的命令:

talk wangxz@tirc.cs.test.com

Internet上的相关程序(Talk Daemon)就会传送一条信息邀请wangxz来交谈,这时用户wangxz的屏幕上就会出现如下信息,并响铃提示:

Message from Talk_Daemon@tirc.cs.test.com at 21:44 …

talk: connection requested by jdx@rs6000.cic.test.com

talk: respond with:  talk jdx@rs6000.cic.test.com

这时,用户wangxz应该做的工作就是按照上面的信息提示,即输入linux中talk命令:

talk jdx@rs6000.cic.test.com

之后,连接建立成功,两个用户就可以进行交谈了。这时,双方的终端屏幕上都将显示信息[Connection established]并响铃,同时屏幕被linux中talk命令程序以一条水平线分割为上下两部分,上半部分用来显示用户自己输入的内容,下半部分用来显示对方输入的内容。两个用户可以同时输入,他们输入的内容将会立即显示在双方的屏幕上。

在用户进行输入时,可按BACKSPACE见来更正前一个字符,也可按CTRL+w来删除一个完整的单词,或者用CTRL+U来删除一整行,另外,用户还可以通过按CTRL+L来刷新屏幕。如果要结束交谈,可由任何一方按下CTRL+C来中断连接,但在结束对话前最好道声“再见”,并等待对方回应。linux中talk命令程序结束时,在屏幕上将回显示一条信息:

[Connection closing. Exiting]

并非每次要求对方交谈都能成功,有时对方没有登录,则linux中talk命令程序提示信息:

[Your party is not logged on]

并退出;如果对方已登录,但因某种原因(如不是正在使用机器)没有响应,那么linux中talk命令程序将会每隔10秒钟给他发一条邀请信息,同时在自己的屏幕上显示:

[Ringing your party again]

如果用户不愿等待,则可以按CTRL+C终止linux中talk命令程序。还有的时候系统可能出现下面的信息:

[Checking for invitation on caller’s machine]

这说明双方的linux中talk命令程序不兼容,这时可以试试ntalk和ytalk命令,如果没有,就只好找系统管理员了。

如果用户在做某些紧急工作(如编辑邮件)时不希望被linux中talk命令的邀请打搅,他可以使用命令:

mesg n

来暂时拒绝交谈,这时如果有用户邀请他交谈,只能得到提示信息:

[Your party is refusing messages]

不过要注意的是,一旦完成紧急工作。最好立即打开信息接收开关(用命令mesg y),否则将会失去很多信息交流的机会。

以上是linux中talk命令参数的是使用方法。

Linux tcpdump命令的用法及解释

Linux tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。

1、语法

tcpdump(选项)

2、选项

-a:尝试将网络和广播地址转换成名称;

-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;

-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;

-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;

-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;

-e:在每列倾倒资料上显示连接层级的文件头;

-f:用数字显示网际网络地址;

-F<表达文件>:指定内含表达方式的文件;

-i<网络界面>:使用指定的网络截面送出数据包;

-l:使用标准输出列的缓冲区;

-n:不把主机的网络地址转换成名字;

-N:不列出域名;

-O:不将数据包编码最佳化;

-p:不让网络界面进入混杂模式;

-q :快速输出,仅列出少数的传输协议信息;

-r<数据包文件>:从指定的文件读取数据包数据;

-s<数据包大小>:设置每个数据包的大小;

-S:用绝对而非相对数值列出TCP关联数;

-t:在每列倾倒资料上不显示时间戳记;

-tt: 在每列倾倒资料上显示未经格式化的时间戳记;

-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;

-v:详细显示指令执行过程;

-vv:更详细显示指令执行过程;

-x:用十六进制字码列出数据包资料;

-w<数据包文件>:把数据包数据写入指定的文件。

3、实例

直接启动tcpdump将监视第一个网络接口上所有流过的数据包

tcpdump

监视指定网络接口的数据包

tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。

监视指定主机的数据包

打印所有进入或离开sundown的数据包。

tcpdump host sundown

也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

tcpdump host 210.27.48.1

打印helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)

截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.

tcpdump ip host ace and not helios

如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

截获主机hostname发送的所有数据

tcpdump -i eth0 src host hostname

监视所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname

监视指定主机和端口的数据包

如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令

tcpdump tcp port 23 host 210.27.48.1

对本机的udp 123 端口进行监视 123 为ntp的服务端口

tcpdump udp port 123

监视指定网络的数据包

打印本地主机与Berkeley网络上的主机之间的所有通信数据包

tcpdump net ucb-ether

ucb-ether此处可理解为“Berkeley网络”的网络地址,此表达式最原始的含义可表达为:打印网络地址为ucb-ether的所有数据包

打印所有通过网关snup的ftp数据包

tcpdump 'gateway snup and (port ftp or ftp-data)'

注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析

打印所有源地址或目标地址是本地主机的IP数据包

tcpdump ip and not net localnet

如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。

Linux tcpreplay命令的用法及解释

Linux tcpreplay是一种pcap包的重放工具,它可以将用ethreal、wireshark工具抓下来的包原样或经过任意修改后重放回去。它允许你对报文做任意的修改(主要是指对2层、3层、4层报文头),指定重放报文的速度等,这样tcpreplay就可以用来复现抓包的情景以定位bug,以极快的速度重放从而实现压力测试。

一、选项

-A "<args>" 在使用 tcpdump 风格打印输出信息时,同时再调用tcpdump中的参数, 默认已经带有“-n,-l”,所以一般看到的都是ip地址,而没有主机名的打印,注意这个是在tcpreplay使用了-v参数时才能使用,不带-v不会报错,但是没有实际意义。格式:-vA “nnt”表示以tcpdump风格输出报文信息,并且不打印时间戳、主机名、端口服务名称。注意不要使用-c参数来指定打印的数据报文的个数,这样发送出去的报文也会变少。

-c <cachefile> 双网卡回放报文必选参数,后面紧跟cache文件名,该文件为tcpprep根据对应的pcap文件构造出来。

-D 把应用层的数据,使用dump mode写入到指定文件中去,和-w、-W 参数一起使用。

-e <ip1:ip2> 指定端点的ip,即把发送报文的和接收的报文的ip都修改称对应的参数值中指定的ip,但是这样发送的出的报文不会区分client和server。。

-f <configfile> 指定配置文件。

-F 在发送报文时,自动纠正错误的校验和。对测试DUT的校验和检验。

-h 显示帮助文件。

-i <nic> 双网卡回放报文必选参数,指定主接口。

-I <mac> 重写主网卡发送出报文的目的MAC地址。

-j <nic> 双网卡回放报文必选参数,指定从接口。

-J <mac> 重写从网卡发送出报文的目的MAC地址。

-k <mac> 重写主网卡发送报文的源MAC地址。

-K <mac> 重写从网卡发送报文的源MAC地址。

-l <loop> 指定循环的次数。

-L <limit> 指定最大的发包数量。可以在确认连接的调试时使用。

-m <multiple> 指定一个倍数值,就是必默认发送速率要快多少倍的速率发送报文。 加大发送的速率后,对于DUT可能意味着有更多的并发连接和连接数,特别是对于BT报文的重放, 因为连接的超时是固定的,如果速率增大的话, 留在session表中的连接数量增大,还可以通过修改连接的超时时间来达到该目的。

-M 表示不发送“火星”的ip报文,man文件中的定义是 0/8、172/8、 255/8。

-n 在使用-S参数,不对混杂模式进行侦听。

-N <CIDR1:CIDR2,...> 通过伪造的NAT,重写IP地址。这个参数应该有很重要的应用,目前没有测试使用。

-O 没有测试使用。

-p <packetrate> 指定每秒发送报文的个数,指定该参数,其它速率相关的参数被忽略,最后的打印信息不会有速率和每秒发送报文的统计。

-P 表示在输出信息中打印PID的信息,用于单用户或单帐户模式下暂停和重启程序。

-r <rate> 指定发送的速率。目前-m/-r/-p这3个参数的相互关系。

-R 让网卡极限速度发数据包。

-t <mtu> 指定MTU,标准的10/100M网卡的默认值是1500。

-T Truncate packets > 截去报文中MTU大于标准值的部分再发送出去,默认是不发送,skip掉。

-v 每发送一个报文都以 tcpdump 的风格打印出对应的信息。

-V 查看版本号。

-w <file> 将主网卡发送的报文写入一个文件中,参数后紧跟文件名。

二、实例

1、重放在客户端 ftp 连接的报文

a、在客户端使用 ethereal 抓包,存为 ftp.pcap 文件。

b、将 ftp.pcap 文件进行 tcpprep 操作,制作 cache 文件。

[root@A ~]# tcpprep -an client -i ftp.pcap -o ftp.cache –v

c、将 DUT 设备的两个接口和 PC 的两个接口使用网线连接,使用 tcpreplay 重 放报文。注意防火墙的配置为网桥(透明)模式。

[root@A ~]# tcpreplay -c ftp.cache -i eth0 -j eth1 ftp.pcap -R –v

-R 参数表示全速发送,-v 显示打印信息。

2、重放在客户端 BT 连接的报文

a、在实验室 BT 下载一些台湾的娱乐节目和热门的大片,使用 ethereal 抓包, 存为 bt.pcap 文件。注意 pcap 文件大小的控制,对 pc 的内存要求比较高,我保 存了一个 600 多 M 的 pcap 文件用了 40 多分钟,大家有需要可以直接从实验室 copy。

b、将 bt.pcap 文件进行 tcpprep 操作,制作 cache 文件。

[root@A ~]# tcpprep -an client -i bt.pcap -o bt.cache -C "100M BT Packet" –v

制作 cache 文件,在 cache 文件中写入“100M BT Packet”的注释。

c、使用 tcpreplay 重放报文。

[root@A ~]# tcpreplay -c bt.cache -i eth0 -j eth1 bt.pcap -v –R

3、重放 tftp 服务器上抓到的报文

a、在 tftp 服务器上使用 ethereal 抓包,存为 tftp.pcap 文件。

b、将 pcap 文件进行 tcpprep 的操作,制作 cache 文件。

[root@A ~]# tcpprep -an server -i tftp.pcap -o tftp.cache –v

注意:我在测试的时候犯了一个错误,使用 DUT 的 tftp 升级来做实验,同时穿 过 DUT 重放报文,结果在网卡发送报文的后,DUT 的 mac 地址做了的回应,导致交互过程没有穿过 DUT,这个问题比较搞笑,上午弄了半天才发现原因,开始还以为 udp 的连接不能重放。

c、使用 tcpreplay 重放报文。

[root@A ~]# tcpreplay -c tftp.cache -i eth0 -j eth1 tftp.pcap –v