Linux之网络相关命令——ping、tranceroute、netstat、ftp、lftp、wget、ssh、scp、sftp

2023-05-16

网络连接方面,Linux可以说是万能的. Linux工具可以建立各种网络系统及应用,包括防火墙、路由器、域名服务器、NAS(网络附加存储)盒等。
这里主要讲一些经常用到的命令,涉及网络检测以及文件传输等方面。所涉及的命令包括:

  • ping: 向网络主机发送 ICMP ECHO_REQUEST数据包
  • traceroute: 显示数据包到网络主机的路由路径
  • netstat: 显示网络连接、路由表、网络接口数据、伪连接以及多点传送成员等信息
  • ftp:文件传输命令
  • lftp:改善后的文件传输命令
  • wget:非交互式网络下载器
  • ssh: OpenSSH(SSH协议的免费开源实现)版的SSH客户端(远程系统登录命令)。
  • scp: srcure copy的缩写,是远程复制文件命令。
  • sftp: secure file transfer program的缩写,安全文件传输程序。

0.参考书籍

《Linux命令行大全》 [美] William E. Shotts. Jr 著 郭光伟 郝记生 译, 人民邮电出版社

如有侵权,可联系博主删除。

1. 检查、检测网络

1.1 ping—向网络主机发送特殊数据包

ping命令会向指定的网络户籍发送特殊网络数据包IMCP ECHO_REQUEST.多数网络设备收到该数据包后会做出回应,通过此法即可验证网络连接是否正常,

$ ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79: icmp_seq=1 ttl=44 time=27.7 ms
64 bytes from 39.156.69.79: icmp_seq=2 ttl=44 time=27.1 ms
64 bytes from 39.156.69.79: icmp_seq=3 ttl=44 time=27.2 ms
64 bytes from 39.156.69.79: icmp_seq=4 ttl=44 time=27.0 ms
...
^C
--- baidu.com ping statistics ---
32 packets transmitted, 32 received, 0% packet loss, time 31129ms

一旦程序启动,ping命令便以既定的时间间隔(默认1s)传送数据包直到该命令被打断。按下Ctrl+C结束。
数据包丢失0%说明网络运行正常。

1.2 traceroute—跟踪网络数据包的传输路径

traceroute程序会显示文件通过网络从本地系统传输到指定主机过程中所有停靠点的列表。
例如

$ traceroute baidu.com
 1  10.20.3.1 (10.20.3.1)  5.509 ms  5.782 ms  6.082 ms
 2  10.250.1.1 (10.250.1.1)  0.206 ms  0.198 ms  0.179 ms
 3  * * *
 4  224.fudan.edu.cn (202.120.224.3)  1.518 ms  2.661 ms  2.050 ms
 5  * * *
 6  10.255.19.1 (10.255.19.1)  3.072 ms  2.929 ms  2.983 ms
 7  10.255.249.45 (10.255.249.45)  1.623 ms  1.311 ms  1.216 ms
 8  10.255.38.250 (10.255.38.250)  1.414 ms  1.532 ms  1.719 ms
 9  202.112.27.1 (202.112.27.1)  2.414 ms  2.153 ms  3.080 ms
10  101.4.115.105 (101.4.115.105)  2.367 ms  2.299 ms  2.217 ms
11  101.4.117.30 (101.4.117.30)  21.143 ms  23.262 ms  22.130 ms
12  101.4.116.118 (101.4.116.118)  29.939 ms  29.975 ms  30.451 ms
13  101.4.112.69 (101.4.112.69)  27.647 ms  27.083 ms  27.551 ms
14  101.4.113.110 (101.4.113.110)  30.981 ms  31.284 ms  31.169 ms
15  101.4.116.66 (101.4.116.66)  30.915 ms  28.574 ms  28.971 ms
16  101.4.117.110 (101.4.117.110)  31.936 ms  32.072 ms  32.223 ms
17  202.97.57.173 (202.97.57.173)  29.062 ms 202.97.88.233 (202.97.88.233)  27.312 ms  27.359 ms
18  * 180.149.159.10 (180.149.159.10)  27.638 ms *
19  36.110.244.94 (36.110.244.94)  65.536 ms * *
20  * * *
21  220.181.182.34 (220.181.182.34)  28.894 ms 220.181.17.90 (220.181.17.90)  29.379 ms *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

说明从测试系统到https://www.baidu.com/网站的连接需要经过30个路由器,对于提供身份信息的路由器,列表列出了主机名、IP地址以及运行状态信息。信息包含了从本地系统到路由器3次往返时间。
而对于那些因为路由器配置、网络堵塞或是防火墙等等原因不提供身份信息的路由器,则直接用星号行表示。

1.3 netstat—检查网络设置及相关统计数据

netstat使用-ie选项,可以检查系统中的网络接口信息。

$ netstat -ie

enp13s0f1 Link encap:Ethernet  HWaddr a0:42:3f:37:59:55
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2001:da8:8001:263:a242:3fff:fe37:5955/64 Scope:Global
          inet6 addr: fe80::a242:3fff:fe37:5955/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:526542080 errors:0 dropped:1452651 overruns:703 frame:0
          TX packets:332330448 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:618633150746 (618.6 GB)  TX bytes:217758725891 (217.7 GB)
          Memory:c7200000-c721ffff

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:155800939 errors:0 dropped:0 overruns:0 frame:0
          TX packets:155800939 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:221954702938 (221.9 GB)  TX bytes:221954702938 (221.9 GB)

以上输出信息显示,测试系统有两个网络端口:第一个称为enp13s0f1,是以太网端口;第二个称为lo,是系统用来自己访问自己的回环虚拟接口。
对于网络接口进行日常诊断,关键是看能否在每个接口信息第四行的开头找到UP这个词以及能否在第二行的inet addr字段找到有效的IP地址。第四行的UP代表着该网络接口已启动,而对于使用动态主机配置协议的系统(DHCP),inter addr字段里边的有效IP地址则说明了DHCP正在工作。

使用-r选项将显示内核的网络路由表,显示了网络之间传送数据包时网络的配置情况。

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0       *               255.255.255.0   U         0 0          0 enp13s0f1
192.168.1.1     0.0.0.0              UG          0  0           0  eth0  

2.通过网络传输文件

2.1 ftp—采用FTP(文件传输协议)传输文件

ftp是Linux比较经典的命令之一,由File Transfer Protocol协议缩写而来.
FTP原来的表现形式并不安全,因为它以明文的方式传送账户名以及密码。这意味着这些信息并没有加密,任何一个接触网络的人都能看到它们。鉴于此,几乎所有使用FTP协议进行的网络文件传输都是由匿名FTP服务器处理的。匿名服务器允许任何人使用anonymous登录名以及无意义的密码登录。

2.2 lftp—更好的ftp(文件传输协议)

lftp与传统的ftp程序功能类似,但有很多其它便利的功能,包括多协议支持(HTTP)、下载失败时自动重新尝试、后台进程支持、Tab键完成文件名输入等许多其他功能。

2.3 wget—非交互式网络下载工具

wget既可以用于从网站上下载内容,也可以从FTP站点下载,单个文件、多个文件甚至整个网址都可以被下载。

$ wget http://linuxcommand.org/index.php
--2020-06-12 20:02:13--  http://linuxcommand.org/index.php
Resolving linuxcommand.org (linuxcommand.org)... 216.105.38.10
Connecting to linuxcommand.org (linuxcommand.org)|216.105.38.10|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4005 (3.9K) [text/html]
Saving to: ‘index.php’

index.php                       100%[======================================================>]   3.91K  --.-KB/s    in 0s

2020-06-12 20:02:15 (305 MB/s) - ‘index.php’ saved [4005/4005]

从http://linuxcommand.org下载了第一页。

3. 与远程主机的安全通信

3.1 ssh—安全登录远程计算机

SSH(Secure Shell)协议是为了解决明文传送的问题。SSH协议包括两个部分:一个是运行在远程主机上的SSH服务端,用来监听端口22上可能过来的连接请求;另一个是本地系统上SSH客户端,用来与远程服务器进行通信。
多数Linux发行版都采用BSD项目的openSSH(SSH的免费开源实现)方法实现SSH。一些版本如Red Hat会默认包含客户端包和服务端包,而像Ubuntu则仅仅提供客户端包,系统要接受远程连击,必须安装、配置以及运行OpenSSH-server软件包,并且必须允许TCP端口22上进来的网络连接。

例如使用ssh客户端程序来建立与远程主机romote-sys的连接的例子

$ ssh remote-sys

第一次尝试连接的时候,由于ssh程序从来没有接触过此远程主机,所以会跳出一条“不能确定远程主机真实性”的消息。需要输入yes来接受远程主机的身份,一旦建立了连接,会提示用户盲输密码。

输入正确密码后,远程系统的shell提示符便出现了。
远程shell对话将一直开启,直到用户在该对话框中输入exit命令断开与远程系统的连接。连接一旦断开后,本地shell会话恢复,本地shell提示符又重新出现。

以下一段是博主个人经验
我们常用的的实际上是ssh username@192.168.20.55(IP地址) 这样形式的,有些端口不是默认的22,需要加参数 -p11524(端口号)

ssh命令除了能开启远程系统上的shell会话外,还能在远程系统上执行单个简单的命令.

$ ssh romote-sys free

3.2 scp和sftp—安全传输文件

OpenSSH软件包含了两个使用SSH加密隧道进行网络间文件复制的程序,scp(secure copy)便是其中之一。例如从remote-sys远程系统的home目录中将doc.txt的文件复制到本地系统。

$ scp remote-sys:doc.txt .

如果不是本地系统的用户名登录远程系统,那么需要在远程主机名前添加将要登录的远程系统的账户名

$ scp bob@remote-sys:doc.txt

如果是文件夹的话,需要加参数-r
另外一个SSH文件复制程序是sftp。顾名思义,它是ftp程序的安全版本。sftp与ftp很相似,只是sftp采用SSH加密隧道传输信息而不是以明文方式传输。另外一个优点是不需要远程服务器运行FTP服务器,仅仅需要SSH服务器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux之网络相关命令——ping、tranceroute、netstat、ftp、lftp、wget、ssh、scp、sftp 的相关文章

  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 如何在Linux上用C/C++编写Web服务器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑在 Linux 平台上开发一个小型 阅读 初级 Web 服务器 但我不知道从哪里开始 我希望它能够做的是 监听特定端口 接受
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 PHP glob 列出 FTP 服务器上的文件不起作用

    我使用此代码来访问目录 location files pictures glob location png 我想使用 FTP 访问远程路径 location opendir ftp user password host name files
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐