The Linux Command Line——17. 网络系统
检查和监测网络
最基本的网络命令是 ping。这个 ping 命令发送一个特殊的网络数据包,叫做 ICMP ECHO_REQUEST,到一台指定的主机。大多数接收这个包的网络设备将会回复它,来允许网络连接验证。
这个 traceroute 程序(一些系统使用相似的 tracepath 程序来代替)会显示从本地到指定主机要经过的所有“跳数”的网络流量列表。例如,看一下到达 slashdot.org 需要经过的路由,我们将这样做:
从输出结果中,我们可以看到连接测试系统到 slashdot.org 网站需要经由 16 个路由器。对于那些提供标识信息的路由器,我们能看到它们的主机名,IP 地址和性能数据,这些数据包括三次从本地到此路由器的往返时间样本。对于那些没有提供标识信息的路由器(由于路由器配置,网络拥塞,防火墙等方面的原因),我们会看到几个星号,正如行中所示。
netstat 程序被用来检查各种各样的网络设置和统计数据。通过此命令的许多选项,我们可以看 看网络设置中的各种特性。使用“-ie”选项,我们能够查看系统中的网络接口:
在上述实例中,我们看到我们的测试系统有两个网络接口。第一个,叫做 eth0,是以太网接口,和第二个,叫做 lo,是内部回环网络接口,它是一个虚拟接口,系统用它来“自言自语”。
当执行日常网络诊断时,要查看的重要信息是每个网络接口第四行开头出现的单词“UP”,说明这个网络接口已经生效,还要查看第二行中 inet addr 字段出现的有效 IP 地址。
使用这个“-r”选项会显示内核的网络路由表。这展示了系统是如何配置网络之间发送数据包的。
网络中传输文件
我们将展示一个典型的会话,从匿名 FTP 服务器,其名字是 fileserver,的/pub/_images/Ubuntu-8.04 的目录下,使用 ftp 程序下载一个 Ubuntu 系统映像文件。
另一个流行的用来下载文件的命令行程序是 wget。若想从网络和 FTP 网站两者上都能下载数据,wget 是很有用处的。不只能下载单个文件,多个文件,甚至整个网站都能下载。下载linuxcommand.org 网站的首页,我们可以这样做:
与远程主机安全通信
用来与远端 SSH 服务器相连接的 SSH 客户端程序,顺理成章,叫做 ssh。想要连接到名叫remote-sys 的远端主机,我们可以这样使用 ssh 客户端程序:
第一次尝试连接,提示信息表明远端主机的真实性不能确立。这是因为客户端程序以前从没有看到过这个远端主机。为了接受远端主机的身份验证凭据,输入“yes”。一旦建立了连接,会提示用户输入他或她的密码:
成功地输入密码之后,我们会接收到远端系统的 shell 提示符:
远端 shell 会话一直存在,直到用户输入 exit 命令后,则关闭了远程连接。这时候,本地的shell 会话恢复,本地 shell 提示符重新出现。
用户 me 能够用 bob 帐号登录到远端系统
如果远端主机不能成功地通过验证,并提示一下信息
使用文本编辑器(可能是 vim)从文件 ∼/.ssh/known_hosts 中删除废弃的钥匙,就解决了问题。
在上面的例子里,我们看到这样一句话:
这意味着 known_hosts 文件的第一行包含那个冲突的钥匙。从文件中删除这一行,则 ssh程序就能够从远端系统接受新的身份验证凭据。
ssh 程序也允许我们在远端系统中执行单个命令。例如,在名为 remote-sys 的远端主机上,执行 free 命令,并把输出结果显示到本地系统 shell 会话中。
我们在远端系统中执行 ls 命令,并把命令输出重定向到本地系统中的一个文件里面。
这样做是因为我们不想路径名展开操作在本地执行,而希望它在远端系统中被执行。同样地,如果我们想要把输出结果重定向到远端主机的文件中,我们可以把重定向操作符和文件名都放到单引号里面。
scp 和 sftp
如果我们想要从 remote-sys 远端系统的家目录下复制文档 document.txt,到我们本地系统的当前工作目录下,可以这样操作:
和 ssh 命令一样,如果所需的远端主机帐户名与本地系统中的不一致,那么你可以把用户名添加到远端主机名的开头:
sftp 有一个重要特性强于传统的 ftp 命令,就是 sftp 不需要远端系统中运行 FTP 服务端。它仅仅需要 SSH 服务端。这意味着任何一台能用 SSH 客户端连接的远端机器,也可当作类似于 FTP 的服务器来使用。这里是一个样本会话: