一、需求

有一个机器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. php var_export与var_dump 输出的不同

    var_export必须返回合法的php代码,var_export返回的代码,可以直接当作php代码赋值个一个变量. 而这个变量就会取得和被var_export一样的类型的值.   问题描述: 在跟踪 ...

  2. Demo学习: Basic jQuery

    UniGUI是一套基于ExtJS的Delphi的WEB框架,它是使用ExtPascal来转化到ExtJS,ExtJS是一个跨浏览器的JavaScript库,因此UniGUI发布出来的程序可以在各种浏览 ...

  3. ASP.NET中的常用快捷键

    想查找ASP.NET中的属性快捷键,忘记了,搜了一下,找到了ASP.NET中的常用快捷键. 大神文章:http://www.cnblogs.com/xiacao/archive/2012/06/12/ ...

  4. python with语句上下文管理的两种实现方法

    在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作.例如,文件读写后需要关闭,数据库读写完毕需要关闭连接,资源的加 ...

  5. c#中的类型转换

    Parse类型转换 Parse()函数 int.double都能调用Parse()函数,Parse(string str);如果转换成功就成功,失败就会抛出一个异常; TryParse()函数 相应地 ...

  6. LeapMotion(1):环境配置、简单测试、理解对象

    关注Leap Motion很长时间了,很早就想入手.可是,一方面,一直忙着其它的比赛,没时间顾及:二是缺钱,钱都垫在比赛上了. 好不容易,11月18日,下定决心买进了,这么长时间,也就是再给贵阳职业学 ...

  7. oracle建用户

    create user ng_zj identified by ng_zjdefault tablespace tbs_testtemporary tablespace tbs_test_tmp; g ...

  8. margin负值在页面布局中的应用

    http://www.w3school.com.cn/tiy/t.asp 预览工具 一.左右列固定,中间列自适应布局 此例适用于左右栏宽度固定,中间栏宽度自适应的布局.由于网页的主体部分一般在中间,很 ...

  9. iOS/Objective-C开发 字典NSDictionary的深复制(使用category)

    目标:把NSDictionary对象转换成NSMutableDictionary对象,对象内容是字符串数组,需要实现完全复制(深复制). 如果调用NSDictionary的mutableCopy方法, ...

  10. CHROME下去掉保存密码后输入框变成黄色背景样式

    之前没遇到过这种情况,现在打开这个页面后,手机号和密码都已经输入了,而且还显示的是黄色背景,清了下cookie,没有解决问题.请教了下大神,先把方法整理到这儿. 用代码审查看了input样式有如下样式 ...