一、需求

有一个机器A,上面那有很多文件。现在新买一个机器B,不想用U盘复制,就想把A弄成个服务器,然后B登录到A,想要什么文件就下载什么文件。

二、Win7实现

A是Win7和Ubuntu双系统,首先在Win7上,用系统自带的ftp服务器(传送门),可以实现文件下载。通过建立虚拟目录的方法,可以把不同盘里边的文件链接到ftp服务器得根目录,然后在B上输入ftp://192.168.1.101:21(B机器的ip和默认ftp端口)就可以访问A机器上的ftp服务器目录,点击文件就能下载,或者右击使用迅雷下载也行。注意两点,一个是防火墙,我是把防火墙关了B才能访问到A机器。另一点是,除了本身指定的服务器目录,新添加的虚拟目录中的文件可能没有权限下载。具体的安全配置有待深入。

三、Ubuntu 实现

今天把A进到Ubuntu下,B也进入Ubuntu,想在linux试一下ftp文件共享。首先在A机器上装一个vsftpd
$ sudo apt-get install vsftpd

装好了之后,查看是否打开21端口
$ sudo netstat -npltu | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 15601/vsftpd

看home目录下是否有一个ftp文件夹,没有的话新建一个,然后修改配置文件
$ sudo vim /etc/vsftpd.conf
在最后加入一句
local_root=/home/ftp
设置服务器的根目录
除了手动指定的这个目录外,vsftpd还建立了 /srv/ftp 这个目录。这个目录是匿名用户访问的目录。访问手动指定的目录是需要账户和密码的。在机器A(装有vsftpd服务器的机子)上,浏览器输入本机地址:ftp://192.168.1.101,进入的页面便是匿名用户访问的 /srv/ftp目录。如果在A的终端中输入
$ ftp localhost
会让你输入用户名和密码(系统的账户和密码),进去之后,会发现是 /home/ftp 这个目录。
【如果不能访问,检查一下配置文件里 local_enable=YES 和 anonymous_enable=YES 这两句是否被注释掉了。更多的关于vsftpd.conf参看ubuntu论坛 或者自己 man 5 vsftpd.conf】

配置好之后,在B机器的浏览器输入A机器的地址ftp://192.168.1.101,进去的是机器B的 /srv/ftp 目录,即匿名用户访问的目录。这个目录上的文件可以下载。但是,当我天真的把其他分区(比如Win7上的F盘)挂载到这个目录下,这个目录就打不开了。还是权限的问题,因为你是匿名访问。下面我们使用终端登录。
在B机器的终端中输入
$ ftp 192.168.1.101
然后会让你输入账户和密码。输入A机器的账户和密码之后,进到 /home/ftp 目录下(如果账户名输入anonymous,输入密码时直接回车,则仍进入匿名用户访问目录)。回到机器A上,用以下命令把Win7上的分区E盘(这个盘已经挂载到Ubuntu的/media目录下)“绑定挂载“到 /home/ftp目录
$ sudo mount --bind /media/E /home/ftp
然后再在B机器上访问A,就能在B机器上看到A机器的E盘上的文件。怎么获取这些文件呢。有get和mget两个命令可以使用。更多命令可以在ftp提示符下输入help或者? 浏览,想查看某条命令的具体用法,输入help + 命令或者 ?+命令,例如
ftp> help get
get   receive file
mget命令可以一次获取多个文件,在使用mget之前,用prompt off关闭提示,不然复制每一个文件之前会询问你是否复制
prompt off
ftp> mget *.*
get下来的文件会在当前目录下。

四、神器wget

虽然mget可以同时get多个文件,但是不能处理文件夹,要想递归的复制文件夹,就需要wget了。
$ wget -m --restrict-file-names=nocontrol ftp://192.168.1.101 --ftp-user=kitty --ftp-password=123456
解释一下参数:
-m的意思是 表示镜像指定的目录 等同于   -r -N -l inf --no-remove-listing
--restrict-file-names解决中文乱码问题

例子1:
wget -r ftp://xxx/ccc/aa/bb/ -P /home/work -nH --cut-dirs=2
//加上 –cut-dirs=n 忽略n个目录
//加上 -P dir 指定文件夹dir

例子2:传送门
wget -r -p -np -k -P ~/tmp/ http://java-er.com
wget居然有如此邪恶的用法
这个语句表示下载全站资料
等于把一个网站整个静态化到本地。

解释一下参数
-P 表示下载到哪个目录
-r 表示递归下载
-np 表示不下载旁站连接.
-k 表示将下载的网页里的链接修改为本地链接.
-p 获得所有显示网页所需的元素

额外的
-c 断点续传
-nd 递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
-L 递归时不进入其它主机,如wget -c -r www.xxx.org/
-A 指定要下载的文件样式列表,多个样式用逗号分隔
-i 后面跟一个文件,文件内指明要下载的URL

不管用get还是wget,有的文件即使你copy到服务器目录下,仍然没有权限get它们。这时候需要改一下文件的所有者。
假如你以kitty账户登录服务器A,想把A机器上的codes文件夹wget到B机器上。如果codes文件夹的所有者不是kitty,那你需要在A机器上将codes文件夹的所有者改为kitty。
$ sudo chown -R kitty codes/
参数 -R 的意思是递归地进行,即将codes文件夹下的子文件子目录都改为kitty所有。然后就可以在机器B上get或 wget 啦。

使用wput上传文件夹:
wput /home/test ftp://ftpusername:password@ip/test

五、Ubuntu自带的“连接到服务器功能”

最后上个wget的图:因为文件小而多,所以看起来速度只有几百k,当wget几个G的iso文件时速度可以到3MB+,跟USB2.0差不多

使用wget和ftp共享文件的更多相关文章

  1. wget下载FTP的文件

    在Linux中我们怎么样实现wget来下载文件  下面例子 下载所有的py结尾的文件到当前目录 wget ftp://anymous:anymous@42.51.152.2/soft/*.py 递归的 ...

  2. Linux下wget获取ftp下目录下文件

    如果某个目录下有一个文件可以使用ftp命令: get xxx 如果是某个目录下有多个文件(且不需要获取目录下子文件夹下的内容): mget * 如果是某个目录下有子目录希望获取所有子目录: wget ...

  3. Linux下使用wget下载FTP服务器文件

    wget -nH -m --ftp-user=your_username --ftp-password=your_password ftp://your_ftp_host/* 使用命令下载ftp上的文 ...

  4. 服务器上通过FTP共享文件夹

    近日,公司某服务器共同操作的人员增多,而我只需访问及替换某些文件,故想到共享文件夹. 在IIS中建立ftp站点,添加虚拟目录(可多个,对应不同文件夹),设置允许访问的用户(添加用户,见在IIS上搭建F ...

  5. CVE-2014-4877 && wget: FTP Symlink Arbitrary Filesystem Access

    目录 . 漏洞基本描述 . 漏洞带来的影响 . 漏洞攻击场景重现 . 漏洞的利用场景 . 漏洞原理分析 . 漏洞修复方案 . 攻防思考 1. 漏洞基本描述 0x1: Wget简介 wget是一个从网络 ...

  6. wget ftp

    今天操作远端机器的时候发现少一个安装包, 需要传到对方的机器上,还能使用通过的老办法,直接SSH连上去了,发现传的很慢, 只有40K的样子, 看时间还需要二个多小时就有点受不了了.想想有一台FTP服务 ...

  7. 使用WGET参数介绍大全

    wget 是一个命令行的下载工具.对于我们这些 Linux 用户来说,几乎每天都在使用它.下面为大家介绍几个有用的 wget 小技巧,可以让你更加高效而灵活的使用 wget. $ wget -r -n ...

  8. 虚拟机VMware与主机共享文件介绍

    我们经常会在Windows平台安装虚拟机VMware,不管是出于实验测试还是工作需要,伴随而来的就是经常需要在Windows系统和虚拟机系统之间进行共享数据文件,例如,需要将Window主机上的Ora ...

  9. wget

    Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到 本地服务器.如果我们使用虚拟主机,处理这样 ...

随机推荐

  1. SignalR 2.0 系列: 开始使用SignalR 2.0

    这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第四篇:开始使用SignalR 2.0 原文:Getting S ...

  2. 【转】CSS实现兼容性的渐变背景(gradient)效果

    一.有点俗态的开场白 要是两年前,实现“兼容性的渐变效果”这个说法估计不会被提出来的,那个时候,说起渐变背景,想到的多半是IE的渐变滤镜,其他浏览器尚未支持,但是,在对CSS3支持日趋完善的今天,实现 ...

  3. php foreach 操作数组的代码

    php foreach 操作数组的代码.   foreach()有两种用法:  foreach(array_name as $value)  {  statement;  }  这里的array_na ...

  4. Game Tutorials

    SDL: http://www.sdltutorials.com/tutorials        http://lazyfoo.net/ http://panda3d.noie.name/ http ...

  5. [Solved] install Gentoo in VBox: network interface eth0 does not exist

    ERROR:interface eth0 does not exist; ensure that you have loaded the correct kernel moudle for your ...

  6. linux 标准io笔记

    三种缓冲 1.全缓冲:在缓冲区写满时输出到指定的输出端. 比如对磁盘上的文件进行读写通常是全缓冲的. 2.行缓冲:在遇到'\n'时输出到指定的输出端. 比如标准输入和标准输出就是行缓冲, 回车后就会进 ...

  7. 系统架构师JD

    #################################################################################################### ...

  8. myeclipse配置下tomcat debug启动很无比慢

    myeclipse配置下tomcat debug启动很无比慢,而run启动很快今天照常使用MyEclipse 6.5 Blue Edition进行开发,但是却遇到一个怪问题.在MyEclipse环境下 ...

  9. .NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标

    文章出自:http://www.cnblogs.com/ice-river/p/3475041.html 一 .NET平台技术体系梳理 .NET平台应用领域众多(桌面开发,web开发,移动开发),不断 ...

  10. easy ui datagrid 获取选中行的数据

    取得选中行数据: var row = $('#tt').datagrid('getSelected'); if (row){ alert('Item ID:'+row.itemid+" Pr ...