Total Pageviews

Wednesday, 26 February 2025

linux命令: iostat

 

Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iostat属于sysstat软件包。可以用yum install sysstat 直接安装。

命令格式

$ iostat [参数][时间][次数]
bash复制代码

命令功能

  通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。

命令参数

命令 描述
-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示 NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x 显示详细信息
-V 显示版本信息

使用实例

例一:显示所有设备负载情况

$ iostat
Linux 3.10.0-327.el7.x86_64 (s88) 	2017年01月22日 	_x86_64_	(24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.62    0.00    0.20    1.46    0.00   97.72

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              64.59      1726.21       255.56    3159941     467823
dm-0              3.55       141.11         4.46     258319       8162
dm-1              0.10         0.83         0.00       1520          0
dm-2              0.10         2.78         1.14       5080       2082
dm-3             60.44      1565.98       248.84    2866640     455511
dm-4             27.54       463.29       105.38     848088     192897
dm-5              1.25        25.57        17.57      46804      32170
dm-6              0.64        12.86         2.07      23535       3786
dm-7              4.14        80.43        36.60     147240      67004
dm-8              1.13        20.52         2.42      37566       4428
dm-9              1.13        21.18         2.40      38766       4396
dm-10             1.15        21.35         2.41      39082       4412
dm-11             0.70        14.40         2.21      26355       4043
dm-12             1.42        22.42         6.85      41035      12541
dm-13             0.46        12.17         1.25      22275       2289
dm-14             1.15        20.47         2.42      37470       4432
dm-15             8.28       101.07        16.51     185018      30220
dm-16             1.10        20.02         2.45      36646       4488
dm-17             1.81        29.08         4.15      53232       7591
dm-18             0.68        18.40         1.43      33689       2611
dm-19             2.33        43.89         4.63      80340       8483
bash复制代码

说明:
cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

例二:定时显示所有信息

# 每隔 2秒刷新显示,且显示3次
$ iostat 2 3
bash复制代码

例三:显示指定磁盘信息

$ iostat -d sda1
bash复制代码

例四:显示tty和Cpu信息

$ iostat -t
bash复制代码

例五:以M为单位显示所有信息

$ iostat -m
bash复制代码

例六:查看TPS和吞吐量信息

$ iostat -d -k 1 1
bash复制代码

说明:
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;
这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是22.73,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)

例七:查看设备使用率(%util)、响应时间(await)

$ iostat -d -x -k 1 1
bash复制代码

说明:
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
rsec/s: 每秒读扇区数.即 delta(rsect)/s
wsec/s: 每秒写扇区数.即 delta(wsect)/s
rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
avgrq-sz:平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).
await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的,即 delta(use)/s/1000 (因为use的单位为毫秒)
  如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
  idle小于70% IO压力就较大了,一般读取速度有较多的wait。
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)。
  另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。
  avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小。如果数据拿的大,才IO 的数据会高。也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s。也就是讲,读定速度是这个来决定的。
  svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
  队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
形象的比喻:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例
  设备IO操作:总IO(io)/s = r/s(读) +w/s(写) =1.46 + 25.28=26.74
  平均每次设备I/O操作只需要0.36毫秒完成,现在却需要10.57毫秒完成,因为发出的 请求太多(每秒26.74个),假如请求时同时发出的,可以这样计算平均等待时间:
  平均等待时间=单个I/O服务器时间*(1+2+…+请求总数-1)/请求总数
  每秒发出的I/0请求很多,但是平均队列就4,表示这些请求比较均匀,大部分处理还是比较及时。

例八:查看cpu状态

$ iostat -c 1 3

linux命令: ifconfig

 

非常熟悉windows的ipconfig命令,它被用来获取网络接口配置信息并对此进行修改。Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config)。通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。

命令格式

$ ifconfig [网络设备] [参数]
bash复制代码

命令功能

  ifconfig 命令用来查看和配置网络设备。当网络环境发生改变时可通过此命令对网络进行相应的配置。

注意: 用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

命令参数

命令 描述
up 启动指定网络设备/网卡
down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除
arp 设置指定网卡是否支持ARP协议
-promisc 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
-allmulti 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
-a 显示全部接口信息
-s 显示摘要信息(类似于 netstat -i)
add 给指定网卡配置IPv6地址
del 删除指定网卡的IPv6地址
<硬件地址> 配置网卡最大的传输单元
mtu<字节数> 设置网卡的最大传输单元 (bytes)
netmask<子网掩码> 设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码
tunel 建立隧道
dstaddr 设定一个远端地址,建立点对点通信
-broadcast<地址> 为指定网卡设置广播协议
-pointtopoint<地址> 为网卡设置点对点通讯协议
multicast 为网卡设置组播标志
address 为网卡设置IPv4地址
txqueuelen<长度> 为网卡设置传输列队的长度

使用实例

例一:显示网络设备信息(激活状态的)

$ ifconfig
bash复制代码

说明:
  eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是 00:50:56:BF:26:20
  inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.120.204,广播地址, Bcast:192.168.120.255,掩码地址Mask:255.255.255.0
  lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。
  第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
  第二行:网卡的IP地址、子网、掩码
  第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
  第四、五行:接收、发送数据包情况统计
  第七行:接收、发送数据字节数统计信息。

例二:启动关闭指定网卡

# 启动eth0网卡
$ ifconfig eth0 up

# 关闭eth0网卡
$ ifconfig eth0 down
bash复制代码

注意: ssh登陆linux服务器操作要小心,关闭了就不能开启了,除非你有多网卡。

例三:为网卡配置和删除IPv6地址

# 配置IPv6的地址
$ ifconfig eth0 add 33ffe:3240:800:1005::2/64

# 删除IPv6的地址
$ ifconfig eth0 del 33ffe:3240:800:1005::2/64
bash复制代码

例四:用ifconfig修改MAC地址

$ ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
bash复制代码

例五:配置IP地址

# 配置ip
$ ifconfig eth0 192.168.120.56

# 配置ip和掩码地址
$ ifconfig eth0 192.168.120.56 netmask 255.255.255.0

# 配置ip、掩码地址和广播地址
$ ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255
bash复制代码

例六:启用和关闭ARP协议

# 启用eth0的ARP协议
$ ifconfig eth0 arp

# 关闭eth0的ARP协议
$ ifconfig eth0 -arp
bash复制代码

例七:设置最大传输单元

# 设置能通过的最大数据包大小为 1500 bytes
$ ifconfig eth0 mtu 1500

linux命令: route

 

Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。

命令格式

route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]
bash复制代码

命令功能

  Route命令是用于操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。当使用”add”或者”del”参数时,路由表被修改,如果没有参数,则显示路由表当前的内容。

命令参数

命令 描述
-c 显示更多信息
-n 不解析名字
-v 显示详细的处理信息
-F 显示发送信息
-C 显示路由缓存
-f 清除所有网关入口的路由表
-p 与 add 命令 -p 与 add 命令一起使用时使路由具有永久性。
add 添加一条新路由
del 删除一条路由
-net 目标地址是一个网络
-host 目标地址是一个主机
netmask 当添加一个网络路由时,需要使用网络掩码
gw 路由数据包通过网关。注意,你指定的网关必须能够达到
metric 设置路由跳数
Command 指定您想运行的命令 (Add/Change/Delete/Print)
Destination 指定该路由的网络目标
mask Netmask 指定与网络目标相关的网络掩码(也被称作子网掩码)
Gateway 指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点 IP 地址
metric Metric 为路由指定一个整数成本值标(从 1 至 9999),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用
if Interface 为可以访问目标的接口指定接口索引。若要获得一个接口列表和它们相应的接口索引,使用 route print 命令的显示功能。可以使用十进制或十六进制值进行接口索引

使用实例

例一:显示当前路由

$ route
$ route -n
bash复制代码
[root@localhost ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.120.0   *               255.255.255.0   U     0      0        0 eth0
e192.168.0.0     192.168.120.1   255.255.0.0     UG    0      0        0 eth0
10.0.0.0        192.168.120.1   255.0.0.0       UG    0      0        0 eth0
default         192.168.120.240 0.0.0.0         UG    0      0        0 eth0
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.120.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.0     192.168.120.1   255.255.0.0     UG    0      0        0 eth0
10.0.0.0        192.168.120.1   255.0.0.0       UG    0      0        0 eth0
0.0.0.0         192.168.120.240 0.0.0.0         UG    0      0        0 eth0
bash复制代码

说明:
  第一行表示主机所在网络的地址为192.168.120.0,若数据传送目标是在本局域网内通信,则可直接通过eth0转发数据包;
  第四行表示数据传送目的是访问Internet,则由接口eth0,将数据包发送到网关192.168.120.240
  其中Flags为路由标志,标记当前网络节点的状态。
  Flags标志说明:
  U Up表示此路由当前为启动状态
  H Host,表示此网关为一主机
  G Gateway,表示此网关为一路由器
  R Reinstate Route,使用动态路由重新初始化的路由
  D Dynamically,此路由是动态性地写入
  M Modified,此路由是由路由守护程序或导向器动态修改
  ! 表示此路由当前为关闭状态
备注:
  route -n (-n 表示不解析名字,列出速度会比route 快)

例二:添加网关/设置网关

# 增加一条 到达244.0.0.0的路由
$ route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
bash复制代码

例三:屏蔽一条路由

# 增加一条屏蔽的路由,目的地址为 224.x.x.x 将被拒绝
$ route add -net 224.0.0.0 netmask 240.0.0.0 reject
bash复制代码

例四:删除路由记录

$ route del -net 224.0.0.0 netmask 240.0.0.0
$ route del -net 224.0.0.0 netmask 240.0.0.0 reject
bash复制代码

例五:删除和添加设置默认网关

$ route del default gw 192.168.120.240
$ route add default gw 192.168.120.240

linux命令: ss

 

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

  当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。

  天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)

命令格式

$ ss [参数]
$ ss[参数] [过滤]
bash复制代码

命令功能

  ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。

命令参数

命令 描述
-h, –help 帮助信息
-V, –version 程序版本信息
-n, –numeric 不解析服务名称
-r, –resolve 解析主机名
-a, –all 显示所有套接字(sockets)
-l, –listening 显示监听状态的套接字(sockets)
-o, –options 显示计时器信息
-e, –extended 显示详细的套接字(sockets)信息
-m, –memory 显示套接字(socket)的内存使用情况
-p, –processes 显示使用套接字(socket)的进程
-i, –info 显示 TCP内部信息
-s, –summary 显示套接字(socket)使用概况
-4, –ipv4 仅显示IPv4的套接字(sockets)
-6, –ipv6 仅显示IPv6的套接字(sockets)
-0, –packet 显示 PACKET 套接字(socket)
-t, –tcp 仅显示 TCP套接字(sockets)
-u, –udp 仅显示 UCP套接字(sockets)
-d, –dccp 仅显示 DCCP套接字(sockets)
-w, –raw 仅显示 RAW套接字(sockets)
-x, –unix 仅显示 Unix套接字(sockets)
-f, –family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, –query=QUERY, –socket=QUERY
QUERY := {all
inet
-D, –diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, –filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]

使用实例

例一:显示TCP连接

$ ss -t -a
bash复制代码

例二:显示 Sockets 摘要

$ ss -s
Total: 1385 (kernel 0)
TCP:   199 (estab 64, closed 76, orphaned 0, synrecv 0, timewait 1/0), ports 0

Transport Total     IP        IPv6
*	  0         -         -        
RAW	  2         1         1        
UDP	  29        21        8        
TCP	  123       47        76       
INET	  154       69        85       
FRAG	  0         0         0  
bash复制代码

说明:
  列出当前的established, closed, orphaned and waiting TCP sockets

例三:列出所有打开的网络连接端口

$ ss -l
bash复制代码

例四:查看进程使用的socket

$ ss -pl
bash复制代码

例五:找出打开套接字/端口应用程序

$ ss -lp | grep 3306
bash复制代码

例六:显示所有UDP Sockets

$ ss -u -a
bash复制代码

例七:显示所有状态为established的SMTP连接

$ ss -o state established '( dport = :smtp or sport = :smtp )'
bash复制代码

例八:显示所有状态为Established的HTTP连接

$ ss -o state established '( dport = :http or sport = :http )'
bash复制代码

例九:列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
命令

$ ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
bash复制代码

例十:用TCP 状态过滤Sockets

$ ss -4 state FILTER-NAME-HERE
$ ss -6 state FILTER-NAME-HERE
bash复制代码

说明:
FILTER-NAME-HERE 可以代表以下任何一个:
  established
  syn-sent
  syn-recv
  fin-wait-1
  fin-wait-2
  time-wait
  closed
  close-wait
  last-ack
  listen
  closing
  all : 所有以上状态
  connected : 除了listen and closed的所有状态
  synchronized :所有已连接的状态除了syn-sent
  bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.
  big : 和bucket相反.

例十一:匹配远程地址和端口号

$ ss dst ADDRESS_PATTERN
$ ss dst 192.168.1.5
$ ss dst 192.168.119.113:http
$ ss dst 192.168.119.113:smtp
$ ss dst 192.168.119.113:443
bash复制代码

例十二:匹配本地地址和端口号

$ ss src ADDRESS_PATTERN
$ ss src 192.168.119.103
$ ss src 192.168.119.103:http
$ ss src 192.168.119.103:80
$ ss src 192.168.119.103:smtp
$ ss src 192.168.119.103:25
bash复制代码

例十三:将本地或者远程端口和一个数比较

$ ss dport OP PORT
$ ss sport OP PORT
bash复制代码

说明:
  ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。
  OP 可以代表以下任意一个:
    <= or le : 小于或等于端口号
    >= or ge : 大于或等于端口号
    == or eq : 等于端口号
    != or ne : 不等于端口号
    < or gt : 小于端口号
    > or lt : 大于端口号

例十四:ss 和 netstat 效率对比

$ time netstat -at
$ time ss
bash复制代码

说明:
  用time 命令分别获取通过netstat和ss命令获取程序和概要占用资源所使用的时间。在服务器连接数比较多的时候,netstat的效率完全没法和ss比。

linux命令: telnet

 

telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的 能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

  但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。

  telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问。

命令格式

$ telnet [参数][主机]
bash复制代码

命令功能

  执行telnet指令开启终端机阶段作业,并登入远端主机。

命令参数

命令 描述
-8 允许使用8位字符资料,包括输入与输出
-a 尝试自动登入远端系统
-b<主机别名> 使用别名指定远端主机名称
-c 不读取用户专属目录里的.telnetrc文件
-d 启动排错模式
-e<脱离字符> 设置脱离字符
-E 滤除脱离字符
-f 此参数的效果和指定”-F”参数相同
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名
-K 不自动登入远端主机
-l<用户名称> 指定要登入远端主机的用户名称
-L 允许输出8位字符资料
-n<记录文件> 指定文件记录相关信息
-r 使用类似rlogin指令的用户界面
-S<服务类型> 设置telnet连线所需的IP TOS信息
-x 假设主机有支持数据加密的功能,就使用它
-X<认证形态> 关闭指定的认证形态

使用实例

例一:远程服务器无法访问

$ telnet 192.168.120.206
Trying 192.168.120.209...
telnet: connect to address 192.168.120.209: No route to host
telnet: Unable to connect to remote host: No route to host
bash复制代码

说明:
处理这种情况方法:
  (1)确认ip地址是否正确?
  (2)确认ip地址对应的主机是否已经开机?
  (3)如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看)
  (4)如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行)
  (5)如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看)

例二:域名无法解析

$ telnet www.baidu.com
www.baidu.com/telnet: Temporary failure in name resolution
bash复制代码

说明:
处理这种情况方法:
  (1)确认域名是否正确
  (2)确认本机的域名解析有关的设置是否正确(/etc/resolv.conf中nameserver的设置是否正确,如果没有,可以使用nameserver 8.8.8.8)
  (3)确认防火墙是否放开了UDP53端口的访问(DNS使用UDP协议,端口53,使用iptables-save查看)

例三:连接被拒绝

$ telnet 192.168.120.206
Trying 192.168.120.206...
telnet: connect to address 192.168.120.206: Connection refused
telnet: Unable to connect to remote host: Connection refused
bash复制代码

说明:
处理这种情况:
  (1)确认ip地址或者主机名是否正确?
  (2)确认端口是否正确,是否默认的23端口

例四:正常telnet

$ telnet 192.168.120.204
Trying 192.168.120.204...
Connected to 192.168.120.204 (192.168.120.204).
Escape character is '^]'.

    localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)

login: root
Password:
Login incorrect
bash复制代码

说明:
  一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su -切到root用户。

例五:测试服务器8888端口是否可用

$ telnet 192.168.0.88 8888

linux命令: rcp

 

rcp代表“remote copy”(远程文件拷贝)。该命令用于在计算机之间拷贝文件。rcp命令有两种格式。第一种格式用于文件到文件的拷贝;第二种格式用于把文件或目录拷贝到另一个目录中。

命令格式

$ rcp [参数] [源文件] [目标文件]
bash复制代码

命令功能

  rcp命令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。

命令参数

命令 描述
-r 递归地把源目录中的所有内容拷贝到目的目录中。要使用这个选项,目的必须是一个目录
-p 试图保留源文件的修改时间和模式,忽略umask
-k 请求rcp获得在指定区域内的远程主机的Kerberos 许可,而不是获得由krb_relmofhost⑶确定的远程主机区域内的远程主机的Kerberos许可。
-x 为传送的所有数据打开DES加密。这会影响响应时间和CPU利用率,但是可以提高安全性。如果在文件名中指定的路径不是完整的路径名,那么这个路径被解释为相对远程机上同名用户的主目录。如果没有给出远程用户名,就使用当前用户名。如果远程机上的路径包含特殊shell字符,需要用反斜线(\)、双引号(”)或单引号(’)括起来,使所有的shell元字符都能被远程地解释。需要说明的是,rcp不提示输入口令,它通过rsh命令来执行拷贝。
directory 每个文件或目录参数既可以是远程文件名也可以是本地文件名。远程文件名具有如下形式:rname@rhost:path,其中rname是远程用户名,rhost是远程计算机名,path是这个文件的路径。

使用实例

使用rcp,需要具备的条件
  如果系统中有 /etc/hosts 文件,系统管理员应确保该文件包含要与之进行通信的远程主机的项。
  /etc/hosts 文件中有一行文字,其中包含每个远程系统的以下信息:
    internet_address official_name alias
  例如:
    9.186.10.*** webserver1.com.58.webserver
.rhosts 文件
  .rhosts 文件位于远程系统的主目录下,其中包含本地系统的名称和本地登录名。
  例如,远程系统的 .rhosts 文件中的项可能是:
    webserver1 root
  其中,webserver1 是本地系统的名称,root 是本地登录名。这样,webserver1 上的 root 即可在包含.rhosts 文件的远程系统中来回复制文件。
配置过程:
只对root用户生效

  1. 在双方root用户根目录下建立.rhosts文件,并将双方的hostname加进去.在此之前应在双方的 /etc/hosts文件中加入对方的IP和hostname

  2. 把rsh服务启动起来,redhat默认是不启动的。
    方法:用执行ntsysv命令,在rsh选项前用空格键选中,确定退出。然后执行:
    service xinetd restart即可。

3.到/etc/pam.d/目录下,把rsh文件中的auth required /lib/security/pam_securetty.so
一行用“#”注释掉即可。(只有注释掉这一行,才能用root用户登录)

例一:将本地img文件夹内的所有内容 复制到服务器相应的img目录下

# -r 递归子目录
$ rcp -r img/* webserver1:/var/project/img/
bash复制代码

例二:将服务器的img文件夹内的所有内容 复制到本地目录下

# -r 递归子目录
$ rcp -r webserver1:/var/project/img/* img/
bash复制代码

例三:将目录复制到远程系统:要将本地目录及其文件和子目录复制到远程系统

# 将本地的img目录复制到服务器的project目录下
$ rcp -r img/ webserver1:/var/project/

linux命令: diff

 

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

命令格式

$ diff [参数] [文件1或目录1] [文件2或目录2]
bash复制代码

命令功能

  diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

命令参数

参数 描述
- 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用
-a或–text diff预设只会逐行比较文本文件
-b或–ignore-space-change 不检查空格字符的不同
-B或–ignore-blank-lines 不检查空白行
-c 显示全部内文,并标出不同之处
-C或–context 与执行”-c”指令相同
-d或–minimal 使用不同的演算法,以较小的单位来做比较
-D或ifdef 此参数的输出格式可用于前置处理器巨集
-e或–ed 此参数的输出格式可用于ed的script文件
-f或-forward-ed 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处
-H或–speed-large-files 比较大文件时,可加快速度
-l或–ignore-matching-lines 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异
-i或–ignore-case 不检查大小写的不同
-l或–paginate 将结果交由pr程序来分页
-n或–rcs 将比较结果以RCS的格式来显示
-N或–new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较
-p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称
-P或–unidirectional-new-file 与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较
-q或–brief 仅显示有无差异,不显示详细的信息
-r或–recursive 比较子目录中的文件
-s或–report-identical-files 若没有发现任何差异,仍然显示信息
-S或–starting-file 在比较目录时,从指定的文件开始比较
-t或–expand-tabs 在输出时,将tab字符展开
-T或–initial-tab 在每行前面加上tab字符以便对齐
-u,-U或–unified= 以合并的方式来显示文件内容的不同
-v或–version 显示版本信息
-w或–ignore-all-space 忽略全部的空格字符
-W或–width 在使用-y参数时,指定栏宽
-x或–exclude 不比较选项中所指定的文件或目录
-X或–exclude-from 您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件
-y或–side-by-side 以并列的方式显示文件的异同之处
–left-column 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容
–suppress-common-lines 在使用-y参数时,仅显示不同之处
–help 显示帮助

使用实例

例一:比较两个文件
```bash
$ diff 1.txt 2.txt
1c1
< ii

iii

>**说明:**
  上面的“1c1”表示第一个文件和第二个文件的第1行内容有所不同;
  diff 的normal 显示格式有三种提示:
    a - add
    c - change
    d - delete

**`例二`:并排格式输出**
```bash
$ diff 1.txt 2.txt -y -W 50
ii		      |	iii
iii			      iii
iiii			    iiii
iiiii			    iiiii
复制代码

说明:
  “|”表示前后2个文件内容有不同
  “<”表示后面文件比前面文件少了1行内容
  “>”表示后面文件比前面文件多了1行内容

例三:上下文输出格式

$ diff 1.txt 2.txt  -c
*** 1.txt	2017-01-28 14:24:13.744538252 +0800
--- 2.txt	2017-01-28 14:24:59.096124066 +0800
***************
*** 1,4 ****
! ii
  iii
  iiii
  iiiii
--- 1,4 ----
! iii
  iii
  iiii
  iiiii
bash复制代码

说明:
  这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:
  “+” 比较的文件的后者比前着多一行
  “-” 比较的文件的后者比前着少一行
  “!” 比较的文件两者有差别的行

例四:统一格式输出

$ diff 1.txt 2.txt  -u
--- 1.txt	2017-01-28 14:24:13.744538252 +0800
+++ 2.txt	2017-01-28 14:24:59.096124066 +0800
@@ -1,4 +1,4 @@
-ii
+iii
 iii
 iiii
 iiiii
bash复制代码

例五:比较文件夹不同

$ diff test3 test6
bash复制代码

例六:比较两个文件不同,并生产补丁

$ diff -ruN 1.txt 2.txt >patch.log
bash复制代码

例七:打补丁

$ 1.txt patch