如何在 Linux 上使用 FTP 命令

文件传输协议(FTP)虽然历史悠久,可能比大多数读者年纪都大,但其功能依然强大。尽管 FTP 协议在安全性方面不如现代协议,但有时仍有必要使用它。以下是如何操作的说明。

警告:请勿在互联网上使用 FTP

首先需要明确的是,文件传输协议 (FTP) 源于 20 世纪 70 年代初,在设计之初并未考虑安全性。它不采用任何加密措施。你的登录凭证,例如用户名和密码,以及你下载或上传的数据,都以明文形式传输。任何在传输路径上的人都可以轻易获取这些机密信息。不过,FTP 仍然有其应用场景。

如果你需要在局域网内传输文件,那么只要网络中没有人进行数据包嗅探或监听,你应该是安全的。如果你的文件本身不是机密或敏感的,那么在内部网络中使用 FTP 进行传输应该没有问题。Linux 系统通常自带标准的 ftp 命令行工具,专门用于处理这种情况。

但绝对不要使用 ftp 命令通过互联网访问外部资源。对于这种情况,应该使用 sftp 命令行程序,它采用安全的 SSH 文件传输协议。本教程将介绍这两个程序的使用方法。

为了更清楚地说明为什么不应通过互联网使用 FTP,请参考下面的截图。它展示了以明文形式传输的 FTP 密码。网络上的任何一方,或你与互联网上的 FTP 服务器之间的任何一方,都可以轻松看到密码,比如“MySecretPassword”。

在没有加密的情况下,恶意用户还可以在传输过程中修改你下载或上传的文件。

ftp 命令详解

假设你拥有一个有效的 FTP 站点账户,你可以使用以下命令连接到该站点。请将命令中的 IP 地址替换为你想要连接的 FTP 服务器的实际 IP 地址。

ftp 192.168.4.25

重要提示:请仅使用 ftp 命令连接到受信任的本地网络服务器。通过互联网传输文件时,应使用下面介绍的 sftp 命令。

FTP 服务器会以欢迎消息作为响应,具体的问候语会因服务器而异。然后,它会提示你输入要登录的账户的用户名。

请注意,显示的是你要连接的站点的 IP 地址,后面紧跟你的 Linux 用户名。如果你的 FTP 服务器账户名与你的 Linux 用户名相同,只需直接按下 Enter 键即可。这将使用你的 Linux 用户名作为 FTP 服务器上的账户名。如果你的 Linux 用户名和 FTP 账户名不同,则需要输入 FTP 账户用户名,然后按下 Enter 键。

登录 FTP 服务器的步骤

系统会提示你输入 FTP 站点的密码。输入密码后,按下 Enter 键。密码不会在屏幕上显示。如果 FTP 服务器验证了你的 FTP 用户账户名和密码组合,你就会成功登录到 FTP 服务器。

你将会看到 ftp> 提示符。

浏览服务器并下载文件

首先,你可能需要查看 FTP 服务器上的文件列表。可以使用 ls 命令来实现这个目的。假设我们的用户看到 FTP 服务器上有一个名为 gc.c 的文件,并且希望将其下载到自己的计算机上。这里,用户的计算机被称为 FTP 术语中的“本地计算机”。

要下载(或者说“获取”)文件,可以使用 get 命令。例如,我们的用户会输入命令 get gc.c。他们输入 get、一个空格,然后是他们想要下载的文件名。

FTP 服务器会将文件传输到本地计算机,并确认传输完成。同时,还会显示文件的大小和传输所用的时间。

ls
get gc.c

要一次下载多个文件,可以使用 mget(多次获取)命令。mget 命令会提示你确认是否需要依次下载每个文件。输入“y”表示确认,输入“n”表示跳过。

如果需要下载大量文件,这种方式可能会比较繁琐。因此,通常会将相关的文件集合打包成一个 tar.gz 或 tar.bz2 文件,并将其存储在 FTP 站点上。

mget *.c

将文件上传到 FTP 服务器

根据你 FTP 账户的权限,你可能可以将文件上传(或“放置”)到服务器。要上传文件,可以使用 put 命令。在我们的示例中,用户将一个名为 Songs.tar.gz 的文件上传到 FTP 服务器。

put Songs.tar.gz

正如你可能预料的那样,也存在一个可以一次性将多个文件上传到 FTP 服务器的命令,这个命令是 mput(多次放置)。与 mget 命令类似,mput 会要求你输入“y”或“n”来确认每个文件的上传操作。

与下载文件类似,将多个文件打包成 tar 压缩包同样适用于上传文件。我们的用户使用以下命令上传多个“.odt”文件:

mput *.odt

创建和切换目录

如果你的 FTP 服务器账户允许,你可以创建目录。可以使用 mkdir 命令来完成此操作。需要明确的是,你使用 mkdir 命令创建的任何目录都将在 FTP 服务器上创建,而不是在你的本地计算机上。

要更改 FTP 服务器上的目录,可以使用 cd 命令。当你使用 cd 命令时,ftp> 提示符不会改变以反映你当前所在的目录。可以使用 pwd(打印工作目录)命令来显示你当前所在的目录。

我们的 FTP 用户创建了一个名为 music 的目录,切换到该新目录,使用 pwd 命令确认了其位置,然后将文件上传到该目录。

mkdir music
cd music
pwd
put songs.tar.gz

要快速移动到当前目录的父目录,可以使用 cdup 命令。

cdup

访问本地计算机

要更改本地计算机上的目录,可以在 ftp> 提示符下使用 lcd 命令。然而,很容易忘记你当前在本地文件系统中的位置。一种更便捷地访问本地文件系统的方法是使用 ! 命令。

! 命令会打开本地计算机的一个 shell 窗口。你可以在这个 shell 中执行任何你可以在标准终端窗口中执行的操作。当你输入 exit 后,你将返回到 ftp> 提示符。

我们的用户使用了 ! 命令,并在本地计算机上打开了一个 shell 窗口。他们执行了一个 ls 命令来查看该目录中的文件,然后输入 exit 以返回到 ftp> 提示符。

!
ls
exit

重命名文件

要重命名 FTP 服务器上的文件,可以使用 rename 命令。在这里,我们的 FTP 用户使用 rename 命令来重命名一个文件,然后使用 ls 命令列出目录中的文件。

rename songs.tar.gz rock_songs.tar.gz
ls

删除文件

要删除 FTP 服务器上的文件,可以使用 delete 命令。要一次删除多个文件,可以使用 mdelete 命令。你将被要求对要删除的每个文件提供“y”或“n”的确认。

在这里,我们的 FTP 用户列出了文件以查看它们的名称,然后选择了一个要删除的文件。然后他们决定将它们全部删除。

ls
delete gc.o
mdelete *.o

使用 sftp 命令

熟悉 IP 地址系统的读者会注意到,上面示例中使用的 FTP 服务器的 192.168 地址是一个内部 IP 地址,也称为私有 IP 地址。正如我们在本文开头所警告的那样,ftp 命令仅应在内部网络中使用。

如果要连接到远程或公共 FTP 服务器,请使用 sftp 命令。我们的用户将连接到一个位于 test.trebex.net 的公开可访问的 FTP 服务器上名为 demo 的 SFTP 账户。

当他们连接时,他们被告知连接已建立。他们还被告知无法验证主机的真实性。这对于首次连接新主机是正常的。他们按下“y”来接受连接。

由于用户账户名称(demo)是在命令行中传递的,所以不会提示他们输入用户名。只会提示他们输入密码。输入、验证并接受密码后,他们会看到 sftp> 提示符。

sftp [email protected]

我们上面描述的 FTP 命令在 SFTP 会话中的工作方式相同,但以下情况除外。

删除文件使用 rm(FTP 使用 delete)
要删除多个文件,请使用 rm(FTP 使用 mdelete)
要移动到父目录,请使用 cd ..(FTP 使用 cdup)

我们的用户在他们的 SFTP 会话中使用了一些命令。他们使用 ls 列出文件,并使用 cd 进入 pub 目录。他们使用 pwd 打印工作目录。

在 Linux 世界中,传输文件还有其他选择,特别是 scp (安全副本),但我们在这里专注于 FTP 和 SFTP。在适用的场景中使用这两个命令将能很好地满足你和你的文件存储及检索需求。