如今网络已经成为计算机日常使用中最重要的组成部分之一, 而对网络系统的控制也自然而然成为了操作系统中不可或缺的一项功能.

由于篇幅原因, 网络系统的相关概念在文章中将不予展开;

Linux中的网络系统相关命令不胜枚举, 因此仅挑选常用的、关键的命令进行介绍与实验:

  • ping - Send an ICMP ECHO\_REQUEST to network hosts
  • 发送 ICMP ECHO\_REQUEST 数据包到网络主机(常用于连接通断测试)
  • traceroute - Print the route packets trace to a network host
  • 打印到一台网络主机的路由数据包
  • netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
  • 打印网络连接,路由表,接口统计数据,伪装连接,和多路广播成员
  • ftp - Internet file transfer program
  • 因特网文件传输程序
  • wget - Non-interactive network downloader
  • 非交互式网络下载器
  • ssh - OpenSSH SSH client (remote login program)
  • OpenSSH SSH 客户端(远程登录程序)(常用)

ping -- 测试与目标的连接

ping命令常用于测试与目标之间的连接是否正常, 因为大多数网络终端在收到该请求时都会回复它, 以测试连接是否正常.


当你能够成功对的一个终端执行ping指令往往意味着你们之间的网络连接没有异常, 这通常包括但不限于网卡、驱动、网关、路由、服务等都在正常运行.

ping命令的使用十分简单:

ping 目标

这里的"目标"可以是ip地址也可以是能被解析的域名.

假设我想测试目前与"github.com"的连接, 那么它执行起来将会像是这样:

『Linux学习笔记』13. 网络系统教程

输出中包含了多个字段, 包括数据包大小、目标的信息以及响应耗时等;

ping命令在默认参数下会每隔1秒尝试向目标发送1次"ICMP ECHO\_REQUEST"数据包, 直到进程被终止(通常我们会按下ctrl+c).

查看网络配置与统计数据 -- netstat

netstat命令通过传递不同的参数可以实现不同的功能;

查看网络配置信息 (-ie)

如我们在调用时传递 "-ie" 则意味着我们想要查看目前本机的网络配置信息:

netstat -ie

『Linux学习笔记』13. 网络系统教程

(题外话) 通常情况下netstat更常用于连接统计而非查看配置信息, 因此建议使用"ifconfig"命令实现上述相同功能 ↓.

『Linux学习笔记』13. 网络系统教程

不难看出, 它们的执行结果没有任何区别;

在上述输出信息中, 除了包含我目前设备中真实存在的网络设备eth0(有线网卡)和wifi2(无线网卡)以外, 还出现了名为"lo"的设备.

"lo"其实是Linux中的内部回环网络接口, 命名也是根据"loopback"的简写而来, 是一个虚拟网络接口. 它主要为系统内的程序提供收发本地数据包的支持, 几乎目前市面上的任何Linux系统中都会有这个接口, 它无需与外部网络真正建立连接或收发数据, 因此也具有无需驱动的特性.

查询当前网络路由表 (-r)

使用"-r"参数可以查询本地网络路由表, 该数据可以理解为以防火墙为界的局域网内所有路由情况;

『Linux学习笔记』13. 网络系统教程

查看当前网络连接情况 (-c 或 不带参数)

当不带参数直接执行netstat时, 它会输出当前所有的网络连接情况;

亦或者使用"-c"参数使netstat每秒刷新一次数据.

由于目前Linux中没有进行网络请求, 故未演示;

更多的功能

任何与网络相关的功能你都可以先尝试查看netstat的文档寻找是否有想要的答案;

以下是常用的netstat参数:

  • -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -l 仅列出有在 Listen (监听) 的服務状态-p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。

网络文件传输 -- ftp与wget

ftp -- 文件传输

我们通常需要使用网络与其他计算机或网络中的其他设备进行文件传输, 而Linux系统中常用的传输方式之一就是ftp;

ftp也是Linux中最原始的文件传输方式, 它本身作为程序存在于Linux系统中, 其名字则来源于它所使用的协议(ftp协议);

在ftp的传输过程中, 获取文件的被称为客户端, 而提供文件的则被称为服务端;

如果我们想要从一个叫做"dajiu"的ftp服务器中获取一个名为"hello\_ftp"的文件放在~/download目录下, 主要分为以下步骤:

  1. 使用ftp命令连接ftp服务器 ("ftp dajiu")
  2. 按照终端提示输入用户名和密码, 这些信息由客户端自定, 类似注册
  3. 当登陆成功后, 终端将会以"ftp >"作为开头, 届时请继续以下操作
  4. 访问"hello\_ftp"文件所在目录(使用cd命令)
  5. 检查目标文件是否位于该目录(ls)
  6. 在ftp中跳转本地目录, 这类似指定文件所要保存的位置(lcd ~/download)
  7. 请求ftp服务器向客户端发送文件(get hello\_ftp)
  8. 等待文件传输完成...
  9. 结束会话(bye或exit或quit都可以)

lftp -- 改进版的ftp

ftp 并不是唯一的命令行形式的 FTP 客户端。实际上,还有很多。其中比较好(也更流行的)是 lftp 程序, 由 Alexander Lukyanov 编写完成。虽然 lftp 工作起来与传统的 ftp 程序很相似,但是它带有额外的便捷特性,包括 多协议支持(包括 HTTP),若下载失败会自动地重新下载,后台处理,用 tab 按键来补全路径名,还有很多。

wget -- 下载文件

如果想从网络上下载文件, 就像我们在其他操作系统中使用浏览器一样, 那么可以使用wget命令.

它不仅可以从ftp服务器中下载文件, 还支持网络上大部分的主流协议.

下载的"文件"也是任君想象, 从常见的一个文件, 到一组文件(文件夹)、网页, 亦或者整一个网站, wget都能胜任.

它还拥有许多目前下载软件才支持的优秀特性, 如后台下载、断点续传等;

如我想使用wget下载百度搜索的logo(记得先使用cd切换到想要保存的地方或用wget参数指定):

『Linux学习笔记』13. 网络系统教程

wget还有非常多的可选参数以及极高的灵活性可以通过其手册了解.

通过网络控制操作系统

通过网络控制类Unix操作系统已经有蛮长的一段历史了. Linux也继承了这一特性, 支持通过网络登录并操作(动词)系统.

ssh

Linux中所使用的远程协议名为SSH(Secure Shell), ssh同样分为服务端(被控端)和客户端(控制端), 它们通过端口22进行通讯.

目前大多数的Linux发行版都内置了SSH的服务端和客户端, 但仍有少部分(如Ubuntu)只内置了客户端. 不过我们可以通过手动安装 "OpenSSH-server" 软件包来使系统支持作为SSH服务端使用.

假设我们想通过ssh客户端连接到一个名为"ssh-ser"的服务端, 我们可以使用以下命令:

ssh ssh-ser

当一个客户端首次与某个服务端建立连接时, 客户端会提示我们服务器真实性不能确定, 我们需要输入"yes"继续建立连接, 随后会要求认证用户身份, 届时我们需要提供服务端的用户名以及密码进行认证.

如果成功连接,终端的提示符将变为服务端的用户以及设备名, 届时将可以对服务端进行操作.

如果想断开连接, 可以输入exit

scp

ssh中的cp命令, 使用的方法以及效果都与cp类似, 但它需要建立ssh连接并通过ssh协议进行文件传输, 这也是ssh中传输文件的方式之一;

使用方法如下:

scp 服务端名称:目标文件 保存的本地路径

sftp

通过ssh建立的ftp连接, 这相较于传统ftp连接解决了安全性问题, 但该命令需要在建立ssh连接的前提下进行.

该命令的使用方法与ftp完全一致, 但连接时的ftp服务器名称变为了ssh服务端名称.

sftp 服务端名称
...
sftp > 操作与ftp一致

标签: Linux, 连接, 网络, ftp, ssh, 服务端, 网络系统

相关文章推荐

添加新评论,含*的栏目为必填