如果你被困在Linux终端,比如说在服务器上,如何从终端下载文件?
在Linux中是没有download命令的,但是有几个Linux命令可用于下载文件。
在这篇终端技巧中,你将学习两种在Linux中使用命令行下载文件的方法。
我在这里使用的是Ubuntu,但除了安装,其余的命令同样适用于所有其他Linux发行版。
使用wget命令从Linux终端下载文件
wget也许是Linux和类UNIX系统中使用最多的命令行下载管理器。你可以使用wget下载一个文件、多个文件、整个目录甚至整个网站。
wget是非交互式的,可以轻松地在后台工作。这意味着你可以很容易地在脚本中使用它,甚至构建像uGet下载管理器这样的工具。
让我们看看如何使用wget从终端下载文件。
安装wget
大多数Linux发行版都预装了wget。它也可以在大多数发行版的仓库中找到,你可以使用发行版的包管理器轻松安装它。
在基于Ubuntu和Debian的发行版上,你可以使用apt包管理器命令:
sudoaptinstallwget
使用wget下载文件或网页
你只需要提供文件或网页的URL。它将在你所在的目录下以原始名下载该文件。
wgetURL
要下载多个文件,你必须将它们的URL保存在一个文本文件中,并将该文件作为输入提供给wget,就像这样:
wget-idownload_files.txt
用wget下载不同名字的文件
你会注意到,网页在wget中几乎总是以index.html的形式保存。为下载的文件提供自定义名称是个好主意。
你可以在下载时使用-O(大写字母O)选项来提供输出文件名:
wget-OfilenameURL
用wget下载一个文件夹
假设你正在浏览一个FTP服务器,你需要下载整个目录,你可以使用递归选项-r:
wget-rftp://server-address.com/directory
使用wget下载整个网站
是的,你完全可以做到这一点。你可以用wget镜像整个网站。我说的下载整个网站是指整个面向公众的网站结构。
虽然你可以直接使用镜像选项-m,但最好加上:
- –convert-links:链接将被转换,使内部链接指向下载的资源,而不是网站。
- –page-requisites:下载额外的东西,如样式表,使页面在离线状态下看起来更好。
wget-m--convert-links--page-requisiteswebsite_address
额外提示:恢复未完成的下载
如果你因为某些原因按CTRL-C键中止了下载,你可以用选项-c恢复之前的下载:
wget-c
使用curl在Linux命令行中下载文件
和wget一样,curl也是Linux终端中最常用的下载文件的命令之一。使用curl的方法有很多,但我在这里只关注简单的下载。
安装curl
虽然curl并不是预装的,但在大多数发行版的官方仓库中都有。你可以使用你的发行版的包管理器来安装它。
要在Ubuntu和其他基于Debian的发行版上安装curl,请使用以下命令:
sudoaptinstallcurl
使用curl下载文件或网页
如果你在使用curl命令时没有在URL中带任何选项,它就会读取文件并打印在终端上。
要在Linux终端中使用curl命令下载文件,你必须使用-O(大写字母O)选项:
curl-OURL
在Linux中,用curl下载多个文件是比较简单的。你只需要指定多个URL即可:
curl-OURL1URL2URL3
请记住,curl不像wget那么简单。wget可以将网页保存为index.html,curl却会抱怨远程文件没有网页的名字。你必须按照下一节的描述用一个自定义的名字来保存它。
用不同的名字下载文件
这可能会让人感到困惑,但如果要为下载的文件提供一个自定义的名称(而不是原始名称),你必须使用-o(小写O)选项:
wgetURL0
有些时候,curl并不能像你期望的那样下载文件,你必须使用选项-L(代表位置)来正确下载。这是因为有些时候,链接会重定向到其他链接,而使用选项-L,它就会跟随最终的链接。
用curl暂停和恢复下载
和wget一样,你也可以用curl的-c选项恢复暂停的下载:
wgetURL1
总结
和以往一样,在Linux中做同一件事有多种方法。从终端下载文件也不例外。
wget和curl只是Linux中最流行的两个下载文件的命令。还有更多这样的命令行工具。基于终端的网络浏览器,如elinks、w3m等也可以用于在命令行下载文件。
就个人而言,对于一个简单的下载,我更喜欢使用wget而不是curl。它更简单,也不会让你感到困惑,因为你可能很难理解为什么curl不能以预期的格式下载文件。