Linux 生来就与网络紧密相连,它就像一个神通广大的网络瑞士军刀,无论是搭建防火墙、路由器,还是构建文件服务器,Linux都能游刃有余。 网络世界广阔无垠,Linux 中的网络命令也同样丰富多彩。不过别担心,我们不需要一次性掌握所有。这次,我们将聚焦于几个最常用、最实用的命令,带你轻松入门。

我们将一起探索如何监控网络状态,如何像搬运工一样传输文件,以及如何通过 ssh 这条“秘密通道”安全地远程登录到其他计算机。
在我们开始之前,你需要对几个基本概念有模糊的印象,比如 IP 地址(就像每台电脑在网络世界的门牌号)、主机名和域名(比如 google.com 这样好记的名字),以及 URI(网页链接)。这些都是网络世界的基础语言。
请注意,我们接下来要介绍的某些命令可能需要你手动安装,或者需要管理员权限(也就是 sudo)才能运行。这就像在现实生活中,有些特殊操作需要特殊许可一样。
即便你不是网络管理员,学会几招“侦查”网络的技巧,也能让你在遇到网络问题时不再束手无策。
ping 是最基础、最直观的网络命令。它的作用就像是你去敲邻居家的门,看看有没有人回应。通过 ping,你可以向一个网络地址(比如一个网站)发送一个“你好,在吗?”的信号(专业点说,叫 ICMP ECHO_REQUEST 数据包)。
如果对方在线且愿意回应,你就会收到一个“我在!”的答复。
举个例子,我们想看看 baidu.com 这个网站是否在线:
|$ ping baidu.com
一旦启动,ping 会每秒发送一个信号,直到你按下 Ctrl+c 停止它。你会看到类似下面的输出:
|PING baidu.com (180.101.49.11) 56(84) bytes of data. 64 bytes from 180.101.49.11: icmp_seq=1 ttl=52 time=107 ms 64 bytes from 180.101.49.11: icmp_seq=2 ttl=52 time=108 ms ... --- baidu.com ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 6010ms rtt min/avg/max/mdev = 105.647/107.052/108.118/0.824 ms
最后显示的统计信息是关键。0% packet loss(0% 丢包率)意味着你发送的每个信号都得到了回应,网络连接状况良好。这说明从你的电脑到目标网站之间的线路,包括网卡、网线、路由器等,基本都是通畅的。
traceroute 这个命令更有趣,它能告诉你,你的数据包从你的电脑出发,到抵达目的地,一路上都经过了哪些“中转站”(也就是路由器)。这就像追踪一个快递,你可以看到它从哪个城市发出,经过了哪些分拣中心,最终才送到你手上。
让我们追踪一下去 baidu.com 的路径:
|$ traceroute baidu.com
输出会像这样,列出每一跳的地址和耗时:
每一行代表一个中转站。你会看到它的名字、IP 地址以及三次测试的往返时间。有时候,你会看到一行只有星号 * * *,这表示这个中转站出于安全或其他原因,“拒绝透露自己的信息”。
通过 traceroute,你可以清晰地看到数据传输的完整路径,当网络变慢时,你可以用它来判断问题可能出在哪一站。
netstat 是一个功能强大的网络信息查看工具。通过不同的选项,你可以查看网络连接、路由表、网络接口等各种信息。
想看看你的电脑有哪些“网卡”吗?可以使用 -ie 选项:
|$ netstat -ie
你会看到类似 eth0(有线网卡)和 lo(本地环回接口,可以理解为电脑和自己通信的虚拟网卡)的信息。对于初学者来说,最关键的是看第四行开头是否有 UP 这个词,它表示网卡正在正常工作。另外,第二行的 inet addr 字段显示了你的 IP 地址,如果这个地址是自动获取的,那么看到一个有效的 IP 地址就说明 DHCP 服务正常。
想知道你的电脑如何决定数据包该往哪儿走吗?可以用 -r 选项查看路由表:
|$ netstat -r
路由表就像一个交通指示牌,告诉系统去往不同目的地的数据包应该交给哪个“网关”(Gateway)。default 或 0.0.0.0 那一行表示所有“未指明路线”的流量都走的默认路线,通常会指向你的家庭路由器。
网络的一大核心功能就是传输文件。我们来看看几个经典的文件“搬运工”。
ftp(File Transfer Protocol)是一个非常经典的文件传输协议。在网页浏览器普及之前,ftp 是下载文件的主力。你可以用它连接到一台 FTP 服务器,上传或下载文件。
不过,ftp 有一个致命的缺点:它在传输用户名和密码时是“明文”的,也就是不加密。这意味着任何在网络上监听的人都能轻易地看到你的登录信息。
因此,现在几乎所有的公共 FTP 服务器都使用“匿名”登录,允许任何人用 anonymous 作为用户名,用任意邮箱地址作为密码登录。
下面是一个典型的 ftp 会话,我们从一台名为 fileserver 的服务器上下载一个文件:
|$ ftp fileserver Name (fileserver:me): anonymous Password: ftp> cd pub/files ftp> ls ftp> lcd Desktop ftp> get somefile.zip ftp> bye
ftp 虽然老旧,但了解它的工作方式有助于理解文件传输的基本原理。顺便一提,有一个叫 lftp 的工具,是 ftp 的超强升级版,支持断点续传、后台下载等高级功能,更适合现代使用。
wget 是一个非常纯粹的命令行下载工具。它支持从 HTTP 和 FTP 网站下载文件。你可以用它下载单个文件、多个文件,甚至整个网站。
比如,想下载 linuxcommand.org 的首页:
|$ wget http://linuxcommand.org/index.php
wget 的强大之处在于它的各种选项,比如它支持断点续传(下载中断后可以接着下),还可以在后台下载(即使你退出了终端,下载任务依然在进行)。
在互联网时代,安全是头等大事。早期的 telnet 和 rlogin 等远程登录工具都因为明文传输密码而被淘汰。取而代之的是 ssh(Secure Shell)。
ssh 解决了两个核心问题:第一,它会验证你连接的服务器确实是“货真价实”的,防止了“中间人攻击”;第二,它会加密你和服务器之间的所有通信内容,确保信息不被窃取。
一个完整的 ssh 系统包含两部分:运行在服务器上的 ssh 服务端,和我们用来连接的 ssh 客户端。
连接到一台远程主机非常简单:
|$ ssh username@remote-host
第一次连接一台新的服务器时,你会看到一个警告,询问你是否信任这台主机。这是因为你的电脑还不认识它。输入 yes 后,这台主机的“指纹”(密钥)就会被保存在你的电脑上。下次再连接时,只要指纹匹配,就不会再有警告了。如果某天指纹突然变了,ssh 会立刻发出警报,提醒你可能存在安全风险!
ssh 不仅可以让你登录到远程服务器的命令行,还可以直接在远程服务器上执行单个命令,并将结果显示在本地:
|$ ssh remote-host 'ls -l /home'
注意命令两边的单引号,它能确保 ls -l /home 这条命令完整地发送到远程服务器上执行,而不是在本地被拆解。
既然 ssh 建立了一条加密通道,我们自然可以用它来安全地传输文件。scp(secure copy)和 sftp(secure ftp)就是为此而生的。
scp 的用法和我们熟悉的 cp 命令很像,只是在文件路径前加上了 username@remote-host:。
把本地文件 document.txt 复制到远程主机的家目录:
|$ scp document.txt remote-host:
从远程主机把 photo.jpg 复制到本地当前目录:
|$ scp remote-host:photo.jpg .
sftp 则是一个安全的 ftp 替代品。它的操作方式和 ftp 几乎一模一样,但所有数据都通过 ssh 的加密通道传输,非常安全。
更棒的是,只要远程服务器开启了 ssh 服务,你就可以用 sftp 连接它,无需额外安装 FTP 服务器。
|$ sftp remote-host sftp> ls sftp> get remote_file.txt sftp> put local_file.txt sftp> bye
许多图形化的文件管理器(比如 GNOME 的 Nautilus)也支持 sftp 协议。你可以在地址栏输入 sftp://remote-host,像操作本地文件夹一样管理远程服务器上的文件。