05.网络维护与管理命令

网络维护与管理命令

ifconfig 命令

功能说明

ifconfig 命令用来配置网络或显示当前网络接口状态。类似于 Windows下的ipconfig 命令,同时ifconfig命令必须以root用户来执行。其格式如下:

ifconfig  [选项] [interface] [inet|up|down|netmask|addr|broadcast]

ifconfig 命令的选项及其说明如表所示。

ifconfig 命令的选项及其说明

选 项

含 义

-a

显示所有的网络接口信息,包括活动的和非活动的

-s

仅显示每个接口的摘要数据,是有关接口活动性的,每个接口显示一行信息

-v

如果某个网络接口出现错误,将返回错误信息,以帮助发现和处理故障

  • interface:网络接口名,Linux 下的网络接口名类似于 eth0、eth1 和lo 等(在 Centos7.x版本中,网络接口名变为类似 enp0s1、enp0s2 这样的标识),分别表示第 1 块网卡、第 2 块网卡和回环接口。这是个可选项,如果不添加此选项,则显示系统中所有的网卡信息;如果添加此选项,则显示指定网卡信息。
  • up:激活一个网络接口。
  • down:与 up 相反,使指定的网络接口无效。
  • netmask:为一个指定的网络接口指定子网掩码。
  • addr:这里的?addr?是为网络接口指定的 IP 地址。
  • broadcast:为指定的接口设置广播地址。

举例

(1)显示目前系统所有网络接口信息,使用以下命令:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.8  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::84bd:fe45:91f4:87ee  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:fa:65:96  txqueuelen 1000  (Ethernet)
        RX packets 22564  bytes 10172802 (9.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14897  bytes 4181438 (3.9 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 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

第 1 行:"UP"代表网卡开启状态,"RUNNING"代表网卡上的网线处于连接状态,“MULTICAST"代表支持组播,“MTU:1500"表示最大传输单元为 1500 字节。

第2行:依次显示网卡的IP地址、子网掩码和广播地址。

第3行:IPv6地址的配置信息。

第4行:ether后面表示硬件网卡的MAC地址。Ethernet表示连接类型为以太网。

第5、6行:显示了网卡接收数据包的统计信息和接收错误的统计信息。

第7、8行:显示了网卡发送数据包的统计信息和发送错误的统计信息。

(2)在网卡eth0上配置两个IP地址,分别为10.0.0.136、10.0.66.138,子网掩码为255.255.255.0,使用以下命令:

ifconfig eth0 10.0.0.8 netmask 255.255.255.0
ifconfig eth0:0 10.0.66.138 netmask 255.255.255.0

此时用 ifconfig 命令查看,就可以看到两个网卡的信息了,分别是"eth0"和"eth0:0”。如果此时还想在 eth0上增加 IP 地址,那么网卡的命名依次是"eth0:1”、“eth0:2"等。

(3)修改网卡的MAC地址为新的MAC 地址,使用以下命令:

ifconfig eht0 hw ether xx:xx:xx:xx:xx:xx

其中"xx:xx:xx:xx:xx:xx"为新的 MAC 地址,此时用 ifconfig 查看 eth0的信息,MAC地址已经被更改。

(4)将网卡eht0禁用后再启用,使用以下命令:

ifconfig eht0 down
ifconfig eht0 up

注意:用ifconfig命令配置的网卡信息,在网卡重启或者机器重启后,所有的配置都失效了,如果要让网卡配置永久生效,就需要修改网卡的配置文件了,这点我们在下面讲述。

scp命令

功能说明

scp就是secure copy,用于将文件或者目录从一个 Linux 系统拷贝到另一个 Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全。其格式如下:

scp 远程用户名@ip 地址:文件的绝对路径 本地 Linux 系统路径
scp 本地 Linux 系统文件路径 远程用户名@ip 地址:远程系统文件绝对路径名

scp使用第1 种格式是将远程Linux系统上的某个文件或者目录拷贝到本地Linux系统上来,使用第2种格式是将本地的某个文件或者目录拷贝到远程Linux系统的某个路径下。

举例

(1)目前我们处在IP为"10.0.0.8"的 Linux系统下,计划将此系统下的/home/ixdba/etc.tar.gz文件拷贝到IP为"10.0.0.10"的远程Linux系统中root用户下的/tmp目录下,使用下面命令:

scp /home/ixdba/etc.tar.gz root@10.0.0.10:/tmp

命令输入完毕,会要求输入"10.0.0.10"服务器 root 的密码,然后开始远程拷贝数据。如果目前我们处在"10.0.0.10"服务器上,也可以使用下面的命令传输数据。

scp root@10.0.0.8:/home/ixdba/etc.tar.gz /tmp

命令输入完毕,此时会要求输入"10.0.0.8"服务器 root 的密码,然后开始远程拷贝数据。

(2)将本地/etc目录中所有文件和子目录拷贝到IP为"10.0.0.11"的远程Linux系统的root用户下的/opt目录中,使用以下命令:

scp –r /etc root@10.0.0.11:/opt

这里的选项‚r‛与 cp 命令中的‚r‛选项含义相同。

netstat命令

功能说明

netstat 命令用来显示本机网络连接、运行端口和路由表等信息。其格式如下:

netstat [选项]

netstat 命令的选项及其说明如表所示。

netstat 命令的选项及其说明

选 项

含 义

-a

显示本机所有连接和监听端口

-n

以网络 IP 地址的形式显示当前建立的有效连接和端口

-r

显示路由表信息

-s

显示按协议的统计信息。默认地,将显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息

-v

显示当前的有效连接,与‚-n‛选项类似

-t

显示所有的 TCP 协议连接情况

-u

显示所有的 UDP 协议连接情况

-c<秒数>

后面跟的秒数,表示每隔几秒就刷新显示一次

-i

显示自动配置接口的状态

-l

仅显示连接状态为‚LISTEN‛的服务的网络状态

-p

显示连接对应的 PID 与 Programname

举例

(1)显示当前系统的路由信息。

[root@qu ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.66.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

从上面可以看出,当前系统的默认网关是"10.0.0.2”,而对应的网络接口为eth0。

(2)显示当前系统中所有有效的TCP连接,使用以下命令:

[root@qu ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.8:22 10.0.0.1:45759 ESTABLISHED
tcp 0 248 10.0.0.8:22 10.0.0.1:27249 ESTABLISHED
tcp 0 52 10.0.0.8:22 10.0.0.1:14692 ESTABLISHED
tcp6 0 0 :::22 ::😗 LISTEN
tcp6 0 0 ::1:25 ::😗 LISTEN
raw6 0 0 :::58 ::😗 7
……以下省略……

在上面的显示中,可以看出 netstat 的输出分为两个部分,分别是 TCP/IP 网络部分和UNIX Sockets
部分,我们先来看看输出的组成部分。

  • Proto:连接协议的种类,主要是 TCP/UDP 协议。
  • Recv-Q:不是由程序连接而产生的字节(bytes)数。
  • Send-Q:从远端主机传送而来的字节(bytes)数。
  • Local Address:本地端的 IP 地址,可以是 IP,也可以是主机名。
  • Foreign Address:远程主机的 IP 与端口。
  • state:显示状态列,主要有以下几个状态。
    • LISTEN:一般用在服务的监听端口。
    • SYN_SENT:接收到的一个要求连接的主动连接请求。
    • SYN_SENT:发出主动连接的连接请求。
    • TIME_WAIT:表示该连接已经中断,但 socket 还在网络等待结束。
    • FIN_WAIT1:表示该 socket 已经中断,而连接正在中断之中。
    • FIN_WAIT2:表示该连接已经中断,正在等待对方主机响应中断确认请求。

    (3)显示目前系统中已经启动的网络连接和对应的端口信息,使用如下图所示命令:

    [root@qu ~]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      896/sshd            
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1058/master         
    tcp6       0      0 :::22                   :::*                    LISTEN      896/sshd            
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1058/master

    从上图的输出可以看出,系统中对外开放了 22 端口。为什么这么说呢,因为这些端口都是针对"0.0.0.0"开放的,而 25 端口仅仅针对内部 127.0.0.1 开放。在最后一列显示了每个端口对应的服务名和进程 ID,可以很方便地知道每个端口的用途。

    (4) 查看当前系统上处于连接状态的资源信息,可以使用如下图所示命令:

    从上面的输出看出,有四个线路处于连接状态,分别是远端主机 192.168.81. 30 启动的大于 1024 的两个端口 65409、64394 向本地主机 192.168.81.232 的 22 端口建立的连接, 另一个是远端主机 192.168.81.30 启动的大于 1024 的两个端口 49837、49848 向本地主机192.168.81.232 的 23 端口建立的连接。

    traceroute命令

    功能说明

    traceroute 命令用来显示网络数据包传输到指定主机的路径信息,追踪数据传输路由状况。预设数据包大小是38Bytes,用户可另行设置。它与Windows下的tracert命令类似,其格式如下:

    traceroute [选项] [远程主机名或者 IP 地址] [数据包大小]

    traceroute 命令的选项及其说明如表所示。

    traceroute 命令的选项及其说明

    选 项

    含 义

    -i <网络接口>

    使用指定的网络接口发送数据包

    -n

    直接使用 IP 地址而不使用主机名

    -v

    详细显示命令的执行过程

    -w<超时秒数>

    设置等待远程主机回应的时间

    -x

    开启或者关闭对数据包的正确性检验

    -s<来源 ip>

    设置本地主机发送数据包的 IP 地址

    -g<网关地址>

    设置来源的路由网关,最多可设置 8 个

    举例

    跟踪从本机到网站www.ixdba.net 的数据包发送过程,使用以下命令:

    [root@localhost ~]# traceroute -i eth0 -s 192.168.60.251 -w 10 www.ixdba.net 100
    traceroute to www.ixdba.net (221.130.192.57) from 192.168.60.251, 30 hops max, 100 byte packets
    1  192.168.60.3 (192.168.60.3)  0.378 ms  0.564 ms  0.357 ms
    2   192.168.1.10 (192.168.1.10)   0.494 ms   0.458 ms   0.377 ms
    3 222.90.66.1 (222.90.66.1) 2.199 ms 4.531 ms 6.884 ms
    4   61.185.192.101 (61.185.192.101)   8.946 ms   6.319 ms   7.726 ms
    5  117.36.120.25 (117.36.120.25)  9.997 ms  23.021 ms  24.337 ms
    6   61.150.3.165 (61.150.3.165)   27.591 ms   6.703 ms   11.928 ms
    7  125.76.189.81 (125.76.189.81)  8.927 ms  4.388 ms  2.726 ms
    8 61.134.0.9 (61.134.0.9) 5.731 ms   3.653 ms   3.667 ms
    9 202.97.37.173 (202.97.37.173) 5.908 ms 3.874 ms 4.553 ms
    10 202.97.37.182 (202.97.37.182)  2.568 ms  13.896 ms  14.722 ms
    11 202.97.37.90 (202.97.37.90) 16.284 ms 26.148 ms 2.946 ms
    12 202.97.36.161 (202.97.36.161)  49.285 ms  62.249 ms  55.451 ms
    13 202.97.44.58 (202.97.44.58)  56.949 ms  56.292 ms  62.229 ms
    14  202.97.15.226 (202.97.15.226)  142.705 ms  139.009 ms  150.365 ms
    15   211.136.2.249 (211.136.2.249)   136.982 ms   156.440 ms   153.176 ms
    16 211.136.6.22 (211.136.6.22)   136.463 ms   152.606 ms   150.101 ms
    17   211.136.188.182 (211.136.188.182)    100.163 ms    128.552 ms    103.801 ms
    18 221.130.192.57 (221.130.192.57)   149.583 ms

    上面我们指定eth0网络接口发送数据包,同时指定本地发送数据包的IP为192.168.60.251,并设置超时时间为10秒,最后设置发送数据包的大小为100 bytes。根据输出可以看到,从本机到www.ixdba.net 对应的IP 地址经历了 18个路由的迂回。

    traceroute命令会对这18个路由节点做ICMP的回应时间测试,每个路由节点做3次时间测试,如上面显示,基本每个路由节点的回应时间都在100秒内,只有在第15个路由节点,回应时间稍长。我们通过这种网络跟踪,可以测试数据传输在哪个部分出现问题,以便及时解决。

    如果在指定的时间内(这里我们设置的是 10 秒),traceroute 检测不到某个路由节点的回应信息,就在屏幕输出‚*‛,表示此节点无法通过。由于 traceroute 是利用 ICMP 连接的,有些网络设备(比如防火墙)可能会屏蔽ICMP通过的权限,因此也会出现节点没有回应的状态,这些都是我们分析网络问题需要知道的。

    telnet命令

    功能说明

    telnet命令通过telnet 协议与远程的主机通信或者获取远程主机对应端口的信息。与Windows下的telnet完成相同的功能。其格式如下:

    telnet 主机名或者 IP 地址 端口

    举例

    (1) 通过 telnet 协议登录到开启了 telnet 服务的远程主机上,使用以下命令:

    [root@localhost ~]# telnet 192.168.60.123 23
    Trying 192.168.60.123...
    Connected to 192.168.60.123. Escape character is '^]'.
    

    Kernel 3.10.0-229.el7.x86_64 on an x86_64 centos7 login: ixdba
    Password:

    当我们输入用户名ixdba 和密码后就登录到了"192.168.60.123"服务器,这里我们直接用"telnet 192.168.60.123"也是可以的,因为 telnet 默认寻找的就是"23"端口。

    [root@localhost ~]# telnet 192.168.60.123 25
    Trying 192.168.60.123…
    telnet: connect to address 192.168.60.123: Connection refused

    如果出现这个问题,就表示这个端口对应的服务没有开启,或者端口被屏蔽,无权访问。

    (2)查看某台 Linux 系统的 22 和 80 端口是否打开以及分别开启了什么服务,使用以下命令:

    [root@localhost ~]# telnet 192.168.60.88 22
    Trying 192.168.60.88…
    Connected to 192.168.60.88. Escape character is ‘^]’.
    SSH-2.0-OpenSSH_6.6.1

    Protocol mismatch.
    Connection closed by foreign host.

    从这里可以看出,在"192.168.60.88"的 22 端口运行着 SSH 服务,对应的 SSH 版本为 SSH-2.0-OpenSSH_6.6.1。

    [root@localhost ~]# telnet www.ixdba.net 80 Trying 221.130.192.57…
    Connected to www.ixdba.net (221.130.192.57). Escape character is ‘^]’.
    get
    <!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>
    <html><head>
    <title>501 Method Not Implemented</title>
    </head><body>
    <h1>Method Not Implemented</h1>
    <p>get to /index.html not supported.<br />
    </p>
    <hr>
    <address>Apache/2.2.4 (Unix) PHP/5.2.3 mod_fastcgi/2.4.2 Resin/3.1.3 Server at www.ixdba.net Port 80</address>
    </body></html>
    Connection closed by foreign host.

    当我们输入"telnet www.ixdba.net 80"之后,如果"www.ixdba.net“对应 IP 的 80端口是开启的话,就会给出欢迎信息,类似于"Escape character is ‘^]’”。此时我们通过键盘输入"get"命令,将显示 80 端口对应的应用服务器类型,例如本例的 80 端口对应的应用服务为Apache 与 PHP 以及 resin 的组合。

    wget命令

    功能说明

    wget 命令用来从网络上下载某个软件,这个命令对于能够连接到互联网的 Linux系统作用非常大,可以直接从网络下载自己需要的软件。其格式如下:

    wget [要下载软件的网址]

    举例

    下载一个linux-4.0.2 版本内核,可以使用以下命令:

    wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.2.tar.xz

    curl 命令

    curl,全称CommandLine URL,顾名思义,curl 命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。

    curl的官方网站是https://curl.haxx.se/ ,我们可以通过该网站获取此工具的最新版本,还有最全面的使用方法。从官网可以知道,curl支持30 多种类型的传输方式,例如: FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S,RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP 等,这当中包含多种协议。最常使用的有FILE、FTP、HTTP、HTTPS等协议。

    对于运维人员来说,在我们探测远程服务的时候,比如 这个工具能非常方便的作为验证工具和测试工具。下面看几个curl典型应用实例。


    1、通过curl显示网站的header信息

    这个用法运维人员经常使用,可以探测一个网站的header信息,例如:

    [root@qu ~]# curl -I http://www.ixdba.net
    HTTP/1.1 301 Moved Permanently
    Server: nginx/1.13.9
    Date: Sun, 28 Apr 2024 08:55:02 GMT
    Content-Type: text/html
    Content-Length: 185
    Connection: keep-alive

    通过 curl 的"-I"(大写的 i)参数可以获取指定网站的 header 头信息,可以发现上面这个网站可以正常访问(200 状态码),同时此网站的 web 服务器是 nginx/1.13.9,并且还开启了keep-alive。这些信息都是web运维必须要具备的。

    2、显示网站的http 状态代码

    http状态码对web运维来讲,非常重要,在对web 页面进行监控的时候,会经常通过状态码来判断网页的状态,如果返回状态码为非200 状态,那么则认为网页异常。要获取网页状态码,除了上面的"-I"参数外,还有更专业的方法,那就是使用 “-s"和”-o"参数组合,最后使用"-w"参数,可以这样使用:

    [root@qu ~]# curl -s -o /dev/null -w %{http_code}“\n” http://www.baidu.com
    200

    其中:

    • "-s" : 表示安静模式,不输出错误,或者进度条之类的。
    • "-o" : 表示指定输出结果到某个文件,不指定的话默认是终端。这里是将结果写入空设备中。
    • "-w" 表示输出一些定义的元数据,这里输出的是%{http_code},即 http 状态码。除去http_code , 还有http_connect 、 time_total 、 time_connect 、 time_appconnect 、time_redirect、size_download 、 size_upload 、 content_type、 ssl_verify_result 等变量可供选择。输出变量需要按照%{variable_name}的格式。
    • "\n‛ 表示换行

    再来看个例子,通过 http 协议访问一个网站,命令如下:

    [root@qu ~]# curl -s -o /dev/null -w %{http_code}" "%{time_total}" "%{redirect_url}"\n" http://www.ixdba.net
    301 2.590 https://www.ixdba.net/

    可以看到输出结果有个301,这表示当通过http 访问此网站的时候,自动跳转到了https,执行了301 定向操作,所以状态码变成了301,第二个输出"2.590"是变量‚%{time_total}‛解 析 出 的 结 果 , 代 表 总 时 间 , 按 秒 计 。 精 确 到 小 数 点 后 三 位 , 最 后 的"https://www.ixdba.net/" 是"%{redirect_url}"变量的输出结果,代表跳转后的 url。

    3、使用curl 实现 url地址重定向

    默认情况下 CURL 不会发送 HTTP Location headers(重定向),但使用了"-L"选项后,当一个被请求页面移动到另一个站点时,就会发送一个HTTP Loaction header 作为请求, 然后将请求重定向到新的地址上。例如:访问 http://www.ixdba.net 时,会自动将地址重定向到 https://www.ixdba.net

    [root@qu ~]# curl -L -I http://www.ixdba.net -k
    HTTP/1.1 301 Moved Permanently
    Server: nginx/1.13.9
    Date: Sun, 28 Apr 2024 09:12:15 GMT
    Content-Type: text/html
    Content-Length: 185
    Connection: keep-alive
    Location: https://www.ixdba.net/
    Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
    

    HTTP/1.1 502 Bad Gateway
    Server: nginx/1.13.9
    Date: Sun, 28 Apr 2024 09:12:15 GMT
    Content-Type: text/html
    Content-Length: 173
    Connection: keep-alive

    输出有两个部分,可以看到有自动的跳转,这是因为使用了-L 参数,curl 就会跳转到新的网址。

    4、抓取网页内容并保存到本地

    curl也能下载文件,达到跟wget相同的功能,例如将一个url 文件保存到本地,保存原始文件名,可以通过"-O"参数实现:

    [root@qu ~]# curl -O https://www.ixdba.net/archives/2017/06/653.htm -k

    但是有时候 url 中的文件名不固定或者想下载后重命名,可以通过"-o"实现,例如将url中的文件下载到本地,并命名为test.html,命令如下:

    这里面涉及两个curl 参数,分别是:

    • -o/–output 将文件保存为命令行中指定的文件名的文件中
    • -O/–remote-name 使用 URL 中默认的文件名保存文件到本地

    5、通过curl下载文件并开启断点续传

    curl 也可以实现下载大文件,并实现断点续传,先看下面这个例子,如下图所示:

    可以看到,curl下载文件其实比wget更好用,可以看到下载文件时的各个属性,文件总大小,已下载大小,下载耗时多少,下载速度多少等等。在下载一会后,执行ctrl+c,中断下载,接着再次执行curl下载,看看是否能够实现断点续传功能,如下图所示:

    这里使用了三个参数"-C -“表示断点续转,注意断点续传的参数是-C, 要自动续传的话要使用”-C -“, 否则需要手工指定断点的字节位置。这个特别注意。

    6、对CURL的网络使用带宽进行限速

    与wget类似,curl在下载文件时也会占满系统带宽,这样一来,可能会影响线上业务系统的正常运行,因此,限速也是要做的,可以通过”–limit-rate"选项,实现对 curl 下载网速限制,来看一个例子:

    这是限制下载速度为2M,看最下面的下载速度刚好是2048k左右,实现了带宽限速。

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿听风成曲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值