2009年5月24日星期日

以太网芯片MAC和PHY的关系

问:如何实现单片以太网微控制器?

答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下。

问:以太网MAC是什么?

答:MAC就是媒体接入控制器。以太网MAC由IEEE-802.3以太网标准定义。它实现了一个数据链路层。最新的MAC同时支持10Mbps和100Mbps两种速率。通常情况下,它实现MII接口。

问:什么是MII?

答:MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。数据接口包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需要16个信号。管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。


问:以太网PHY是什么?

答:PHY是物理接口收发器,它实现物理层。IEEE-802.3标准定义了以太网PHY。它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范。

问:造成以太网MAC和PHY单片整合难度高的原因是什么?

答:PHY整合了大量模拟硬件,而MAC是典型的全数字器件。芯片面积及模拟/数字混合架构是为什么先将MAC集成进微控制器而将PHY留在片外的原因。更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。

问: 除RJ-45接口外,还需要其它元件吗?

答:需要其它元件。虽然PHY提供绝大多数模拟支持,但在一个典型实现中,仍需外接6、7只分立元件及一个局域网绝缘模块。绝缘模块一般采用一个1:1的变压器。这些部件的主要功能是为了保护PHY免遭由于电气失误而引起的损坏。

问:10BaseT和100BaseTX PHY实现方式不同的原因何在?

答:两种实现的分组描述本质上是一样的,但两者的信令机制完全不同。其目的是阻止一种硬件实现容易地处理两种速度。10BaseT采用曼彻斯特编码,100BaseTX采用4B/5B编码。

问:什么是曼彻斯特编码?

答:曼彻斯特编码又称曼彻斯特相位编码,它通过相位变化来实现每个位(图2)。通常,用一个时钟周期中部的上升沿表示"1",下降沿表示"0"。周期末端的相位变化可忽略不计,但有时又可能需要将这种相位变化计算在内,这取决于前一位的值。

问:什么是4B/5B编码?

答:4B/5B编码是一种块编码方式。它将一个4位的块编码成一个5位的块。这就使5位块内永远至少包含2个"1"转换,所以在一个5位块内总能进行时钟同步。该方法需要25%的额外开销。


网卡的MAC和PHY

网卡工作在osi的最后两层,物理层和数据链路层,物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。物理层的芯片称之为PHY。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。以太网卡中数据链路层的芯片称之为MAC控制器。很多网卡的这两个部分是做到一起的。他们之间的关系是pci总线接mac总线,mac接phy,phy接网线(当然也不是直接接上的,还有一个变压装置)。


PHY和MAC之间是如何传送数据和相互沟通的。通过IEEE定义的标准的MII/GigaMII(Media
Independed
Interfade,介质独立界面)界面连接MAC和PHY。这个界面是IEEE定义的。MII界面传递了网络的所有数据和数据的控制。

Qt完全开源了!

Qt完完全全地Open了!

Qt Software将Qt及Qt
Creator等相关组件搬运至了Gitorious——完全开放式的以Git管理源码的代码中心。

地址:http://gitorious.org/~qtsoftware

Qt现在跟GTK+不论是在协议、开发模式上都已经没有区别了,最大的区别就是:Qt是C++,GTK+是C。当然Qt的跨平台做的更好,GTK+的ABI更好(似乎?)。

Qt更像是一整套完全的解决方案:包括WebKit、XML和OpenGL,而GTK+则是单纯的一个GUI库(如果不算glib的话)。

实际上没什么好比的,都是自由软件,选择自己喜欢的,就是最合适的!

我最喜欢Qt的Opera + VirtualBox + Google Earth!

2009年5月23日星期六

ubuntu下安装与卸载软件方法

刚 刚 接触
ubuntu就开始一直在安装语言包、升级、常用软件和其它相关依赖等等东西,总的来说,是一个劲儿的装,缺全然不知怎么卸载,现在把安装和卸载写在一块,一旦出现安装的相关问题,可以将其卸载,慢慢分析错误,再安装,这样就不会导致重复安装(每次安装方法不同导致路径不同而引起混乱)导致的混乱。
1、通过deb包安装的情况:
安装.deb包:
代码:sudo dpkg -i package_file.deb
反安装.deb包:
代码:sudo dpkg -r package_name
2、通过apt-get安装的情况:
安装
代码:sudo apt-get install package_name
反安装
代码:sudo apt-get remove package_name
3、sudo dpkg -p package_name卸载软件包及其配置文件,但无法解决依赖关系!
sudo aptitude purge pkgname卸载软件包及其配置文件与依赖关系包!

清除所有已删除包的残馀配置文件
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。
--------------------------------------------------------------------------------
dpkg: --purge needs at least one package name argument
Type dpkg --help for help about installing and deinstalling packages
· ;
Use `dselect' or `aptitude' for user-friendly package management;
Type dpkg -Dhelp for a list of dpkg debug flag values;
Type dpkg --force-help for a list of forcing options;
Type dpkg-deb --help for help about manipulating *.deb files;
Type dpkg --license for copyright license and lack of warranty (GNU GPL)
· .
Options marked
· produce a lot of output - pipe it through `less' or `more' !
4、dpkg安裝的可以用apt卸載,反之亦可
5、aptitude 与 apt-get 一样,是 Debian
及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude
在处理依赖问题上更佳一些。举例来说,aptitude
在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。以下是笔者总结的一些常用
aptitude 命令,仅供参考。
命令 作用
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
当然,你也可以在文本界面模式中使用 aptitude。
6、常用apt命令
apt-cache search # ------(package 搜索包)
apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ------(package 安装包)
sudo apt-get install # -----(package - - reinstall 重新安装包)
sudo apt-get -f install # -----(强制安装?#"-f =
--fix-missing"当是修复安装吧...)
sudo apt-get remove #-----(package 删除包)
sudo apt-get remove - - purge # ------(package 删除包,包括删除配置文件等)
sudo apt-get autoremove --purge # ----(package
删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update #------更新源
sudo apt-get upgrade #------更新已安装的包
sudo apt-get dist-upgrade # ---------升级系统
sudo apt-get dselect-upgrade #------使用 dselect 升级
apt-cache depends #-------(package 了解使用依赖)
apt-cache rdepends # ------(package
了解某个具体的依赖?#当是查看该包被哪些包依赖吧...)
sudo apt-get build-dep # ------(package 安装相关的编译环境)
apt-get source #------(package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean # --------清理下载文件的存档
&& 只清理过时的包
sudo apt-get check #-------检查是否有损坏的依赖
7、dpkg的介绍及命令使用:
简介
dpkg是Debian的中级软件包管理器,类似RPM.
dpkg是Debian软件包管理系统的中流砥柱,负责安全卸载软件包,配置,以及维护已安装的软件包.也是Debian系统中众多软件包管理工具的后端.有关dpkg的更多介绍参阅:http://www.dpkg.org
系统中所有packages的信息都在/var/lib/dpkg/目录下,其中子目录"/var/lib/dpkg/info"用于保存各个软件包的配置文件列表.
.conffiles 记录了软件包的配置文件列表
.list
保存软件包中的文件列表,用户可以从.list的信息中找到软件包中文件的具体安装位置.
.md5sums 记录了软件包的md5信息,这个信息是用来进行包验证的.
.prerm
脚本在Debian报解包之前运行,主要作用是停止作用于即将升级的软件包的服务,直到软件包安装或升级完成.
.postinst脚本是完成Debian包解开之后的配置工作,通常用于执行所安装软件包相关命令和服务重新启动.
/var/lib/dpkg/available文件的内容是软件包的描述信息,该软件包括当前系统所使用的Debian安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包.
dpkg
查询当前系统所有已安装的deb包
dpkg –l
命令用于查询当前系统所有以安装的deb包的信息.,通过less和grep可以执行更复杂的查询工作.
例如查找跟vim有关的软件包,dpkg –l |grep –ivim
(如发现iU 表示软件包未安装成功,ii表示安装成功)
查看已安装软件包的详细情况
dpkg –s 命令查看软件包的详细情况,包括版本,依赖之类的
查询系统中所安装软件包所安装的文件
dpkg –L
命令用于查询系统中所安装软件包的安装的文件安装到系统的位置和安装了那些.
小提示: 如何可以看软件包装到哪个地方?
用apt-get install *
如何可以看软件包装到哪个地方?
dpkg -L package-name|more
查询系统中某个文件属于那个软件包
dpkg –S 命令用于了解当前的软件属于那个软件包
查询未安装的信息
查询未安装软件包详细信息
dpkg –I 命令用于查看未安装软件包的详细信息,以便了解该软件包是否需要安装.
查询deb包文件中所包含的文件
dpkg –c 显示未安装deb软件包所包含的文件列表,以及安装位置
安装软件包
安装deb软件包
dpkg –i 手工安装deb包到系统中,不过有时会存在Dpends关系,建议使用apt-get
来安装.
如果通过dpkg –i安装软件后由于Dpends关系没有安装成功,可通过apt-get –f
install解决
解决dpkg –i 安装deb包出现Dpends问题
apt-get –f install 解决Dpends问题.
例如:dpkg –i lftp_3.1.3-1_i386.deb
Selecting previously deselected package lftp.
(Reading database … 20654 files and directories currently installed.)
unpacking lftp (from lftp_3.1.3-1_i386.deb)…
dpkg:dependency problems prevent configuration of lftp:
lftp depends on libexpat1 (<=1.95.8);however
dpkg : error processing lftp (--install)
dependency problems –leaving unconfigured
Errors were encountered while processing:
lftp
//lftp软件包安装失败
dpkg –l |grep lftp
iU lftp 3.1.3-1 Sophisticated
command-line FTP/HTTP client p
//"dpkg -l" 查询信息表示lftp软件包未安装成功
(iU表示未安装成功,ii表示安装成功)
使用apt-get –f install解决
卸载deb软件包
dpkg
–r用于卸载指定的软件包,该命令只卸载软件包安装到系统中的文件,而不去删除软件包的配置文件,因此不是完全意义上的卸载.但是软件包保存在系统中,可以提供给以后在安装软件包时使用.
例如:dpkg –r prozilla 移除后再用dpkg –l |grep prozilla 查看
会看到rc proc 1.3.6-3woody3 multi-thraded download accelerator
表示软件包已经被卸载,但配置文件仍在"rc"带表配置文件仍在.
卸载软件包并清除配置文件
dpkg –P 用于卸载软件包同时也删除配置文件,dpkg –P
不能解决Dpends问题,建议卸载时使用apt-get操作
重新配置软件包
对于Debian系统中的众多软件包(尤其是系统和服务器软件包)来说,在第一次安装该软件包时候会显示对话框窗口,提示用户输入必要的配置信息.当用户需要再次对软件包配置的时候,可以使用dpkg-reconfigure来对指定的软件包进行配置.
比如dpkg-reconfigure locales
alien包转换工具
如果我们有很喜欢的RPM包,而又没有deb版本.怎么办~?可以同过alien来转换或者直接安装,这个小家伙可是个很方便的东西!
基本命令如下:
首先通过apt-get install alien来安装.
然后
alien -i name-of-the-pakage.rpm /*用来直接安装rpm包
alien -d , --to-deb /*Make debian packages,This is the default
例:alien –d package.rpm
alien –r , --to-rpm /*Make rpm packages
例:alien –r package.deb
alien –p , --to-pkg /*Make Solaris pkg packages
alien –-to-slp /*Make slp packages
alien –t , --to-tgz /*Make tgz packages
alien –T 检测
alien –-patch=patch 设置patch

2009年5月22日星期五

rTorrent终极优化攻略

所有优化参数和设定以个人有限条件为基准,引用时请依具体情况修改。
硬件:Maxtor Shared Storage(MSS1代,CPU MIPS32 300Mhz ,128M内存)
软件:Firmware(openmss_cn_2.6.6.bin)
软件包(baoyinet105.ipk)
BT下载软件(Rtorrent 0.8.4,Transmission 1.42)
部分软件通过ipkg安装,并全部ipkg upgrade升级到最新版
网络:互联网(2M小区LAN宽带),局域网(Asus wl-530wg
无线路由器,百兆以太网)
一.优化指南
二.分组管理与最大任务数
三.自动化应用设定
四.更多增强功能调试中...
五.rTorrent和Transmission大比拼
升级步骤:
(1)备份启动脚本(必须,否则升级后无法开机启动)
cp /opt/etc/init.d/S99rtorrent /pub/
(2)升级 (如有clear错误,没影响不必理睬)
ipkg update
ipkg install libtorrent
ipkg install rtorrent
(3)cp /pub/S99rtorrent /opt/etc/init.d/
一.优化指南
(1)Linux 系统网络优化
查资料已核实与下载有关的部分网络参数,以下几项可修改。
#ip_forward,ip包转发(默认0),做路由器需设为1启用,MSS只是客户端关闭设0即可
echo 0 > /proc/sys/net/ipv4/ip_forward
#ip_default_ttl,ip包生存时间(默认64),默认64即可
echo 64 > /proc/sys/net/ipv4/ip_default_ttl
#tcp_retries2,已存在tcp连接重试次数(默认15次),普遍认为数值可调小故设7
echo 7 > /proc/sys/net/ipv4/tcp_retries2
#tcp_fin_timeout,tcp会话wait2超时时间(默认180秒),普遍认为数值可调小故设60
echo 60 > /proc/sys/net/ipv4/tcp_fin_timeout
#ip_local_port_range,设定本地对外连接的端口范围,默认1024-4999,适当扩大到6999.
echo "1024 6999" > /proc/sys/net/ipv4/ip_local_port_range
所有设定重启后失效,建议全部写入开机脚本/opt/etc/init.d/S99local中,本来用sysctl
-w应该可以修改并保存的(但测试MSS不可)

(2)rTorrent普通设定优化
使用vi /opt/root/.rtorrent.rc编辑 附:vi使用方法
首先要确定你是否可以被外网连接,下面简成外网YES用户、外网NO用户。
(可能需要网络设定打开相应端口转发等步骤,网上介绍文章很多)
1.功能设定
#此项一定要开(如PT种子该功能自动失效)
peer_exchange = yes
外网YES用户,可以使用下面两个设定。
#使用udp trancker
use_udp_trackers = yes
#打开dht(必须设定session)
session = /shares/mss-hdd/Public/rtorrent/.session
dht = on
dht_port = 6881
外网NO用户,因为实测完全无效,最好关闭。(如果XP下BT软件该功能是有效的)
use_udp_trackers = no
dht = off

2.连接设定
因为连接用户数(peers)与网络速率(up&down
rate)两部分,与rTorrent的资源占用率成正比。
与它们有关设定为以下五项,理论上来说越大越好,但实际上要综合设定以提高效率。
如果你的机器足够好,你可以尽管把它设大,所以我说的优化仅针对128M内存、300Mips的MSS1代。
外网YES用户有incoming端口时,可以和任何peer进行连接,所以上传速率只需结合情况设定即可(建议30以上)
download_rate = 0
upload_rate = 30
外网NO用户,你所有的连接必须是你主动去连接外网YES用户,而BT下载的一条机制是"上传决定下载"
所以你必须也要有足够的上传(建议设为0,不限速)
download_rate = 0
upload_rate = 0

每个任务最小连接数、最大连接数、最大上传数。
正常情况下:连接数越大,下载速率越快。而外网NO用户也要依赖最大上传数来一定程度提高下载速度。
如果按照理论上来,可以设为下面的,但具体参数应根据实际情况修改。
min_peers = 40
max_peers = 200
max_uploads = 15
因为考虑到MSS的性能,min_peers的设定很难取舍。
因为如果是下载中(leecher),现有连接数<min_peer时,rTorrent会持续http访问每组tracker(PT除外)来保证连接达到40,此时可能引发CPU的占用问题。

3.细节设定
设定服务类型Tos(Type of
Service),分别是低延迟lowdelay,高速率throughput,高可靠度reliability,低消耗mincost。
或者也可以自定义一个值,这里目前把它设为高速率
#tos = default|lowdelay|throughput|reliability|mincost, tos = hex
tos = throughput
设定http open最大值,此项是非常重要的效率优化值。
目前具体数值仍在试验中(外网上有老外探讨这个问题,专门把它设低,主要针对低性能多任务情况。)
因为rTorrent在进行HTTP访问时,对CPU占用率极高,所以才有了MSS上经常遇到的假死现象(screen操作没有任何反应),
这时如果你用top看一下,rtorrent的CPU占用不是90%以上就是不正常的显示为0%,但Load
average值会很高。
rtorrent对HTTP访问(也就是访问tracker服务器取得返回连接信息)的默认设置是32个.
当你有很多任务(假如下载10个,做种50个)同时进行,一旦开始这个过程,CPU立刻就从<10%飙升到100%了。
这种情况,轻微的会导致rTorrent的screen下无法操作,
严重的会导致MSS失去响应,所有的tcp连接失效,等恢复后看到下载上传速度均为0.
而造成这种情况的关键原因是rTorrent完全遵守标准的BT下载原理所致,比如软件启动后的过程是。
载入任务(如50个种子),按次序所有的tracker开始排队进行访问(此时CPU已经飙升),依次访问成功后,进入等待状态(CPU降到10%以下),
但每个tracker在各自等待1800秒(30分钟)会再次重复同样的过程,所以就造成rTorrent总是在大约30分钟进入严重的假死状态。
所以如果将HTTP最大值减少,可以避免http集中访问,可以减少或避免rTorrent假死状态提高工作效率。
我的测试
设2时基本可避免假死状况,但数字太小会影响访问tracker取得连接的效率。
设8,经过观察即便CPU不处于100%,依然有假死问题,仍在测试。
#设定http最大值(用于http tracker访问),默认32,建议MSS暂时设为8。
set_max_open_http = 8

二.分组管理与最大任务数
目前设计的分组管理功能如下(已经全部实现完美管理并正常运行)
1.以queue,watch,downloads为主目录,下设若干相同的分组子目录。
2.自动监测下载最大任务数脚本(即incomplete中运行的任务,不计算做种的seeding数),
3.在下载完成后进行一系列动作,包括4G以上文件合并、watch目录下的种子文件自动删除。
4.可以设定各自的分享率ratio,比如区分PT、BT种子(强力推荐此设置)
**注意事项:必须使用queue下分组目录保存种子(排队任务)或者watch下分组目录保存种子(立刻开始任务),其他加入种子的方式(比如nTorrent加入)均可能引起一些功能失效。
**小提示:如果须暂停某任务,只需把它的种子文件从watch下移动回queue下。
实际工作流程简易介绍:(懒得画流程图,简单写一下)
1.RTqueue.sh每三分钟运行一次,过程为:
检查watch目录下.torrent文件数量,即当前下载任务数
如果小于最大任务数(max_active_dl,默认10个可自设),
就从queue的分组中寻找.torrent文件转移到对应的watch分组(比如game)下。
非.torrent文件会被放到unkownfile下。
2.rTorrent的schdule监测watch每个分组(间隔10秒,可自设)
当有新的.torrent加入时,就启动下载任务(默认立即开始)。
3.下载100%完成后执行的命令(必须是所有文件,不可以有把优先级off的文件)
on_finished =
move_complete:转移对应的下载文件到设定的目录中去(如\pub\Downloads\!Game)
on_finished =
remove_tied,任务标志T被去掉,删掉watch下关联的.torrent文件(这步非常重要,否则RTqueue.sh无法添加新任务)
on_finished = 4g 判断是否有分割的2G以上文件要合并。
4.判断分享率ratio,达到条件的结束任务,未达到的转为作种继续上传。

文件夹分组管理
要将文件夹全面重新规划,按照自己喜欢的方式分类。
(已经下载的所有文件也可以利用相应的命令全部转移,但比较麻烦,建议还是就全部重新设定,感兴趣的可以看下面迁移旧文件部分)
将rtorrent直接迁移到/pub下,分为.session,watch,queue(下设若干分类文件夹,可任意追加)
注意事项:Linux的文件访问区分大小写,创建目录尽量不要使用符号(尤其是空格)。
结构图如下:
A.rTorrent程序文件夹
/pub
/rtorrent
/.session
/watch
/game
/video
/seeding
/queue
/game
/video
/seeding

B.下载文件夹,working为下载中任务目录,其他为和A中对应的下载后保存位置。
/pub
/downloads
/game
/video
/seeding
/working

以上的目录结构时需修改配置文件.rtorrent.rc中的设定有:
#下载时临时存放目录以及session存放目录
directory = /shares/mss-hdd/Public/downloads/working
session = /shares/mss-hdd/Public/rtorrent/.session

增加相应的不同watch如下:
注:已实现区分PT、BT种子的强化方法,强烈推荐混PT站的作此设定,详见下面红色标注的强化方法。

标准方法1:分别建立三组监视目录,并在下载完成后转移文件到对应文件夹下。(推荐使用,可自动转移)
可以根据自己的情况任意追加和设定分组,只要修改d.set_custom1=后面的目录位置即可。
schedule =
wd_1,10,10,"load_start=/pub/rtorrent/watch/seeding/*.torrent,d.set_custom1=/pub/downloads/seeding"
schedule =
wd_2,20,10,"load_start=/pub/rtorrent/watch/game/*.torrent,d.set_custom1=/pub/downloads/game"
schedule =
wd_3,30,10,"load_start=/pub/rtorrent/watch/video/*.torrent,d.set_custom1=/pub/downloads/video"
on_finished = move_complete,"d.set_directory=$d.get_custom1=
;execute=mv,-u,$d.get_base_path=,$d.get_custom1="

标准方法2:分别建立三组监视目录,直接将文件保存到对应文件夹下。(不推荐,无法分清未完成和已完成)
schedule =
wd_1,10,10,"load_start=/pub/rtorrent/watch/seeding/*.torrent,d.set_directory=/pub/downloads/seeding"
schedule =
wd_2,20,10,"load_start=/pub/rtorrent/watch/game/*.torrent,d.set_directory=/pub/downloads/game"
schedule =
wd_3,30,10,"load_start=/pub/rtorrent/watch/video/*.torrent,d.set_directory=/pub/downloads/video"

强化方法3(混PT站必备)
强化方法3与标准方法1区分在于加入了branch判断语句,
*做此设定因为使用了官方规定的load_start_verbose,所以如果当前已有任务会重新载入,
造成与原来的.session下种子冲突,并提示"已有相同的infohash种子等信息,可不必理会。(其实不用verbose也可以,但还是按照官方来)
以下为标准语句,可以用于对应本功能时测试使用:
作用是在载入watch目录下的种子时,自动判断是否为private
tracker(PT),BT种子就把任务的custom2设为BT,同时将分享率Group设为RatioBT,
PT种子,custom2为空,分享率执行默认Ratio(其实也可custom2设为PT,但置空,是为了以后更多的复杂判断条件预备。)
**注意事项,schedule语句很长,任何符号都不能写错,建议在XP中复制粘帖,编辑成自己的再逐一粘帖到配置文件。
**private=后面是两个逗号,第一个之后是判断为private的执行命令,第二个是判断为public的执行命令。
schedule
=wd_test,10,10,"load_start_verbose=/pub/rtorrent/watch/test/*.torrent,d.set_custom1=/pub/Downloads/test,\"branch={d.is_private=,,{d.set_custom2=BT,view.set_visible=RatioBT}}\""
可分别在test中分别放一个小文件的PT和BT种子,用下面的命令确认效果。
print=$d.get_custom2=
d.multicall=RatioPT,print=$d.get_name=
如果是BT种子,两个命令的输出应该在屏幕上显示"BT","种子文件名"。


参考范例
以强化方法3为标准,包括了在.rtorrent.rc中与分组有关的全部设定,
整个分类管理只须再加上RTqueue.sh的脚本crontab即可。
##on执行语句部分
#下载完成后将文件转移至指定的custom1文件夹
on_finished = move_complete,"d.set_directory=$d.get_custom1=
;execute=mv,-u,$d.get_base_path=,$d.get_custom1="
#下载完成后删除watch下.torrent文件
on_finished = remove_tied,"d.delete_tied="
#下载完成后执行4g合并脚本
on_finished = 4g,"execute=RT4g.sh,$d.get_base_path=,$d.get_custom2="
#删除任务时也将相关文件一并删除
on_erase = rm_complete,"d.open= ;execute=rm,-rf,$d.get_base_path="
##schedule语句,用于监测各分类脚本
#范例:可修改部分用红色标注,分别是
schedule名称(wd_test),开始时间(30秒后),时间间隔(10秒),监视分类目录(/pub/rtorrent/watch/test/),完成存放目录(/pub/Downloads/test)
BT的Ratio分组(RatioBT)
schedule
=wd_test,10,10,"load_start_verbose=/pub/rtorrent/watch/test/*.torrent,d.set_custom1=/pub/Downloads/test,\"branch={d.is_private=,,{d.set_custom2=BT,view.set_visible=RatioBT}}\""
#正式分组
schedule =
wd_1,30,10,"load_start_verbose=/pub/rtorrent/watch/!seeding/*.torrent,d.set_custom1=/pub/Downloads/!seeding,\"branch={d.is_private=,,{d.set_custom2=BT,view.set_visible=RatioBT}}\""
schedule =
wd_2,30,10,"load_start_verbose=/pub/rtorrent/watch/!Game/*.torrent,d.set_custom1=/pub/Downloads/!Game,\"branch={d.is_private=,,{d.set_custom2=BT,view.set_visible=RatioBT}}\""
schedule =
wd_3,30,10,"load_start_verbose=/pub/rtorrent/watch/!Video/*.torrent,d.set_custom1=/pub/Downloads/!Video,\"branch={d.is_private=,,{d.set_custom2=BT,view.set_visible=RatioBT}}\""

##Ratio设定(只适用于0.8.4版本)
#注意:做种默认分享率(seeding)与group.ratio(RatioBT)同时有效,所以(seeding)必须是所有组别中最大分享率。
#如果需要对应已存在的任务,可以加上下面的一行命令(此句与分组管理无关,可不设置)
on_start = VerifyBTset
,"branch=d.is_private=,,{d.set_custom2=BT,view.set_visible=RatioBT}"
#新增system.method.set语句,必须设定,用于对应每个分享率组达到后后续处理(测试时可以在后面加上显示任务名的命令,print=$d.get_name=)。
#做种默认分享率(seeding),指当上传大于10G且分享率达到100%或最大分享率200%(如为0则是无限,直到满足10G上传和100%的要求)
ratio.enable=
ratio.min.set=100
ratio.max.set=200
ratio.upload.set=10000M
system.method.set=group.seeding.ratio.command,d.close=,d.stop=,d.set_ignore_commands=1

#BT分享率,设为最小分享率10%并上传10M,最大分享率20(下载完成后,判断分享率机制就启用,符合的就执行对应的group.group.ratio.command语句)
group.insert_persistent_view = RatioBT
group.RatioBT.ratio.enable=
group.RatioBT.ratio.min.set=10
group.RatioBT.ratio.max.set=20
group.RatioBT.ratio.upload.set=10M
system.method.set=group.RatioBT.ratio.command,d.close=,d.stop=,d.set_ignore_commands=1

#最大任务数监测脚本
自动监测下载最大任务数脚本(即incomplete中运行的任务,不计算做种的seeding数),默认设为10。
目前实现的是针对watch和queue两个目录的总数量进行管理,没有涉及分类
(实现无问题,我还有保留的程序,问题在于按什么规则?似乎没必要或仍想不到每一个分组的任务控制规则)
推荐在.rtorrent.rc配置文件加上下面两句话,功能是以tied文件是否在watch目录下开始和关闭任务:
schedule = tied_directory,180,30,start_tied=
schedule = untied_directory,180,30,close_untied=
加入此命令后,如果需要暂停任务,可以把该文件从watch转移回queue下。
但又需要注意该任务会被自动加上I标志,下次要执行任务时要到screen下按"I"键取消就可以开始下载了。

把附件里的脚本复制到/opt/bin后,要敲crontab -e加入一句*/3 * * * *
/opt/bin/RTqueue.sh
这是我根据国外脚本(不好意思,地址忘了)修改为简易实用的
max_active_dl=设最大任务数(128M内存设12为宜)
xxxxx_dir,是几个相关目录的地址(unknown须建立,用于保存后缀名不是.torrent的文件)
logfile保存脚本的纪录(须建立,可任意指定位置)
#!/opt/bin/sh
#

# rTorrent queue manager
# RTqueue.sh
# 2009/01/20

#export LC_ALL=zh_CN.UTF-8
#export TZ=CST-8
max_active_dl=11

queue_dir="/shares/mss-hdd/Public/rtorrent/queue"
watch_dir="/shares/mss-hdd/Public/rtorrent/watch"
session_dir="/shares/mss-hdd/Public/rtorrent/.session"
unknown_dir="/shares/mss-hdd/Public/rtorrent/unknown_file"
logfile="/shares/mss-hdd/Public/log/rtqm.log"

no_queue_bt=`find $queue_dir/. -type f | wc -l | awk '{print $1}'`;
no_watch_bt=`find $watch_dir/. -type f | wc -l | awk '{print $1}'`;

# check if there is torrent for download
if [ $no_queue_bt -ge 1 ]; then
# make sure active download session is less than maximum download
if [ $no_watch_bt -le $max_active_dl ]; then
loop=$(($max_active_dl-$no_watch_bt))

if [ $no_queue_bt -lt $loop ]; then
loop=$no_queue_bt;
fi

echo "" >> $logfile
date >> $logfile

#insert
i=0;
until [ $i -eq $loop ]
do

src_bt=`find $queue_dir/. -type f |sort | head -1 | sed 's/\ /\\ /g'`;
file_type=${src_bt##*.}

if [ $file_type = 'torrent' ]; then
dest_bt="${watch_dir}${src_bt#*/queue/.}"
dest_dir=$(dirname "$dest_bt")

# get the base directory
cat=${dest_dir#*/watch/*}
cat=${cat%%/*}

# move files
echo "move $dest_bt" >> $logfile
if cp -fr "$src_bt" "$dest_bt" ; then
rm -fr "$src_bt"
else
echo "unstable to copy file $src_bt" >> $logfile
fi
i=$(( $i + 1 ));
else
echo "unsupported file $src_bt" >> $logfile
mv $src_bt $unknown_dir
fi
done

fi
fi

Tips
如果要增加一个分类,要做的就是下面的步骤,反之删掉即可。
.rtorrent.rc增加一行
schedule =
wd_1,10,10,"load_start=/pub/rtorrent/watch/foo/*.torrent,d.set_custom1=/pub/Downloads/foo"
建立目录
/pub/rtorrent/watch/foo
/pub/rtorrent/queue/foo
迁移旧文件步骤(注意小心操作避免错误,也许可能造成rTorrent崩溃)
建议不熟练的话,最好把任务都close并且ctrl+q然后再启动rtorrent进行迁移)
1.如果session目录位置变更了
首先要ctrl+q关闭rtorrent,然后把旧目录下所有文件复制到新目录下
2.再启动rtorrent进行文件目录转移和设置。
比如说原有某游戏A放在/pub/downloads下,而且有关联.torrent种子文件放在旧watch目录下。
以下均要求screen -r窗口中,把光标对应到需要转移的A任务进行操作。
1.首先ctrl+k关闭任务,按U键去掉种子关联(有关联的任务状态为T)
2.笨办法:
把/pub/downloads下文件移动到/pub/downloads/game下
ctrl+x(下面显示command),输入d.set_custom1=/pub/downloads/game
按ctrl+o变更存放位置:删掉给出的目录字符串,把/pub/Downloads/game输入后回车
(或者直接ctrl+x,输入命令:d.set_directory=/pub/Downloads/game更方便)
3.新办法:
ctrl+x(下面显示command):d.set_custom1=/pub/downloads/game
ctrl+x:d.set_directory=$d.get_custom1=
;execute=mv,-u,$d.get_base_path=,$d.get_custom1=
4.ctrl+s开始这个任务确认是否转移成功。

三.自动化应用设定
这些是积累的设定总结,已有多处更新,部分已包含在分组管理中。
(1)关于共享率的设置如下即可实现(当任务下载完成后)
ratio.enable=
ratio.min.set=10
ratio.max.set=50
ratio.upload.set=20M
是指满足下面两个条件之一就关闭(close)任务,
1.当分享率达到10%并且上传大于20M时,
2.当分享率达到50%
默认设置就是close任务了(不需要下面这句),如果加上的话是关闭+删除,也可增加其他设定
注意不要用d.erase是删除任务且如果有其他设定将删掉全部文件。
#system.method.set = group.seeding.ratio.command, d.close=, d.erase=
(2)完成或者删除任务时可以设为自动转移或者执行其他命令
以下为旧版本命令,目前兼容可用:
1.删除时自动删除下载目录
on_erase = rm_complete,"d.open= ;execute=rm,-rf,$d.get_base_path="
2.完成时自动转移下载目录
on_finished =
move_complete,"execute=mv,-u,$d.get_base_path=,/shares/mss-hdd/Public/Downloads
;d.set_directory=/shares/mss-hdd/Public/Downloads"
3.完成后删除T状态(tied到watch下种子)和watch下对应的.torrent文件
on_finished = remove_tied,"d.delete_tied="
4.完成后执行4g脚本判断是否需要合并(详见第3条4g脚本)
on_finished = 4g,"execute=RT4g.sh,$d.get_base_path=,$d.get_custom2="
以上命令实测可以支持任何文件名(包括中文、字符、空格等),如果中文字符出现问题
大概的解决方法是:
ipkg install utf8proc (安装了一个utf8相关的包)
export LC_ALL=zh_CN.UTF-8(设置了一下语言)
(3)大于4g的文件合并修改版(感谢原脚本作者,只是做了一些功能修正)
修改的脚本解决两处bug(不含目录的单个文件被RT强制分割后无法进行合并和必须依赖建立link文件才能运行),
增加判断是否为PT种子的功能,默认如果是PT种子的话,不删除分割文件(000,001),保证下载继续做种(但需要以后自己动手删除文件)。
内容详见附件
(4)活用schedule命令可以做很多事情。
其实它的标准格式是schedule = 任务名称,执行时间,生效时间,命令
如:自动变更下载速率
schedule = throttle_1,01:00:00,24:00:00,download_rate=0
schedule= throttle_2,05:00:00,24:00:00,download_rate=25
自动变更加密协议(因为我的宽带是在凌晨0点解开P2P封锁)
schedule = encryption_1a,00:00:00,24:00:00,encryption=enable_retry
schedule =
encryption_1p,00:00:05,24:00:00,"print=\"encryption:enable_retry\""
schedule = encryption_2a,07:00:00,24:00:00,encryption=try_outgoing
schedule =
encryption_2p,07:00:05,24:00:00,"print=\"encryption:try_outgoing\""

(5)利用screen的外部输入方法来修改rTorrent的任何设置。
比如设定upload为30的话,可是输入下面的命令
screen -s torrent -X eval 'stuff ^Xupload_rate=30^M'
比如在screen下用命令调整上传速率。
screen -s torrent -X eval 'stuff \"ccccssss\"'
以此来结合crontab,可以做到在任意日期时间组合下修改任何rTorrent的配置。

(6)实现rTorrent的邮件提醒功能
http://bbs.baoyinet.com/viewthread.php?tid=2422

其他辅助性设定:
(1).设定rTorrent时区以保证运行
schdule设定前提必须是时间正确,结果我发现出错误的原因是时区问题。
所以必须在rTorrent启动脚本中增加"export TZ=CST-8"语句,
也就是说现在的S99rtorrent脚本开头应该是下面几句。
#!/opt/bin/sh
export HOME=/opt/root
export LC_ALL=zh_CN.UTF-8
export TZ=CST-8
rm /shares/mss-hdd/Public/bt/rtorrent/session/rtorrent.lock

(2).增加执行记录
配置文件加入一行,可以记录rtorrent执行的命令,比如下载完成后mv。
才发现/var/log在mss下是随着系统启动临时的,所以把日志放到/pub/log下可以永久保存。
execute_log = /pub/log/rtorrent.log

(3).给rTorrent增加速度记录功能的简易脚本
1.
在/opt/bin下
vi rtlog.sh
#!/bin/sh
time=`date +%Y"-"%m"-"%d" "%H":"%M":"%S`
echo "$time Down: "$1" bps Up: "$2" bps">>/pub/log/speedRT.log
wq存盘后,一定要chmod 777 rtlog.sh

2.
vi .rtorrent.rc
增加一行配置(目前时间间隔设定为15分钟)
schedule =
speedlog,600,600,"execute=/opt/bin/rtlog.sh,$get_down_rate=,$get_up_rate="
3.cat /pub/log/speedRT.log
就能看到rTorrent的速度记录了

(4)实现rTorrent单个资源多做种的超强小Tip(必须用到rT,但其他软件亦可借鉴)
http://bbs.baoyinet.com/viewthread.php?tid=2451

(5)解决screen下直接按ctrl+s,ctrl+q无效的方法
在登陆后输入命令取消这两个的绑定即可。
stty start undef
stty stop undef

一.软件介绍
两者都是linux下的BitTorrent的命令行式下载软件,且均可以被PT站下载支持。
特点都是资源占用较小,软件正规,属于linux BT软件主流之一。
rTorrent:http://libtorrent.rakshasa.no/
Transmission:http://www.transmissionbt.com/

二.软件安装
可以直接通过ipkg安装,快速简单。
ipkg update
ipkg install rtorrent
ipkg install transmission
最新版本为rtorrent 0.8.4,transmission 1.42.
安装即可完成。

三.软件界面
命令行方式:
rTrrent:screen操作,功能强大。
Tansmission:命令行+参数,功能简单。
客户端方式:
rTorrent:可以安装第三方web控制,而且还有一个容易引起崩溃的XP客户端nTorrent(最近用官网英文版的,而且注意操作,好像很久不出问题了)
Tansmission:自带web控制,直接访问http://ip:9091端口即可(需firebox浏览器),界面简单美观。

四.软件功能
Nexus
Project给出的测试报告均认定为无问题,虽然仍与Azureus、Deluge,Ktorrent这三个更高更快更强的软件有一定差距。
优点
rTorrent:功能较为强大,自定义程度高,可以利用配置和程序配合实现相当完美的Linux
BT下载(详见我的实现rTorrent系列文章)。
Tansmission:软件小巧,简单易用,在MSS上没有4G文件的问题。
缺点
rTorrent:选择部分文件下载问题(nTorrent经常造成只有部分文件off,必须在窗口下操作),在MSS的ReiserFS3分区上有不能下载超过2G文件的Bug。
Tansmission:选择部分文件下载问题(如果用daemon必须在命令行下操作,太麻烦),而且不支持dht。

五:软件性能
rTorrent:系统资源占用低,整体表现一般(有易崩溃、经常需要检查hash、偶尔出现假死等问题)
上传下载速度均有不错表现,对热门种子下载速度很快。
Tansmission:系统资源占用较低,整体表现稳定(很好,未出现崩溃等状况)
上传下载速度均有不错表现,速度高出一筹。
特别需要提出的就是在完全相同状况下单个种子的速度问题,尤其是非热门种子时,rTorrent严重弱于Transmission。
具体表现的区别就在于访问tracker服务器后仍然无法进行peer连接
做种任务A(已知有1-2个可连接leecher):
rTorrent 始终无法连接到peer提供上传(零连接)
Transmission立刻连接上(上传速度快)。
下载任务B(已知有36个seeder,6个leecher)::
rTorrent
在N次试验并手动连接Tracker的情况下,最多只能连接到4个peer,且速度小于5K。(经常零连接)
Transmission立刻连接上16个peer,虽然下载速度不快,但始终稳定。(下载速度后期很快,取决于对方)

rtorrent 使用

※ 以下含有 ^ 字符的代表Ctrl鍵

QUOTE:
常用熱鍵

1. 方向鍵 : ↑,↓,←,→
2. Torrent 開始下載 : Ctrl + S (Screen下用法為: Ctrl+ a + s)
3. Torrent 暫停下載 : Ctrl + D
4. Torrent 停止下載 : Ctrl + K
5. 清除Torrent下載列表 : [法1] 在停止狀態使用Ctrl + D, [法2]
在下載完成連續執行 Ctrl+D 二次
6. 限定最大上傳速度 : [增加]a / s / d [減少] z / x /c
7. check file hash : Ctrl + R
8. 離開rtorrent程式 : Ctrl+ q (Screen下用法為 : Ctrl+ a + q)

QUOTE:
全域熱鍵 (Global Keys)
目地 : 用來控制系統操作,全域的設定,最大速度,程式的關閉…等等。命令
說明

^q 關閉程式

QUOTE:
注意 : 在screen內用法,先按Ctrl+a 然後再按 q

up / down 選擇項目上/下
← 返回之前一頁
a | s | d 增加全域最大上傳的速度 by 1/5/50 KB. 增加下圖(1)的值
A | S | D 增加全域最大下載的速度 by 1/5/50 KB. 增加下圖(2)的值
z | x | c 減少全域最大上傳的速度 by 1/5/50 KB. 減少下圖(1)的值
Z | X | C 減全域最大下載的速度 by 1/5/50 KB. 減少下圖(1)的值

可用命令 :命令
說明

→ 觀看此種子下載狀態.

View torrent file list. Use the space-bar to change the file priority and
* to change the priority of all files.
1 - 7 切換檢視模式
Change view.

1 : 顯示全部下載 Show all downloads
2 : 以名稱排序 Show all downloads, ordered by name
3 : 目前啟動的 Show started downloads
4: 目前停止中的 Show stopped downloads
5 : 已完成的 Show complete downloads
6 : 未完成的 Show incomplete downloads
7 : hash? Show hashing downloads
^S 開始下載
Start download.

QUOTE:

注意 : 在screen內用法,先按Ctrl+a 然後再按 s

^D 停止一個正在啟動的下載,或移除一個已停止的下載
使用停止功能時會出現如圖1的(2)

Stop an active download, or remove a stopped download.
^K 關閉一個Torrent檔及其檔案

Close a torrent and its files.
^R 開始執行此Torrent檔案的hash檢查

Initiate hash check of torrent.
^O 改變下載的目地目錄。 使用前此torrent必須是關閉的 (^K)

Change the destination directory of the download. The torrent must be
closed.
+ | - 改變下載的優先權 (一共有auto,low,off,high 四種模式)

Change the priority of the download.
backspace Add torrent using an URL or file path. Use tab to view directory
content and do auto-complete.
l 觀看記錄檔,用空白鍵離開 (在第一頁才有效)

View log. Exit by pressing the space-bar.
^P 呼叫命令或是改變設定

Call commands or change settings.
U 刪除此torrent關聯的torrent檔案案,,並清除關連

Delete the file the torrent is tied to, and clear the association.

I Toggle whether torrent ignores ratio settings.

可用的命令 :命令
說明

← 回上一頁,回主畫面 如 [圖1]
→ 觀看此種子的檔案列表. 如 [圖3]
可使用空白鍵來更改某一檔案的下載優先權或是用*來更改全部的優先權

View torrent file list. Use the space-bar to change the file priority
and * to change the priority of all files.
1 | 2 調整此torrent最大上傳速度,調整[圖2]的(1)
1 -> 減少 by 1
2 -> 增加 by 1

Adjust max uploads.
3 | 4 調整最小peer數, 調整[圖2]的(2)
3 -> 減少 by 5
4 -> 增加 by 5

Adjust min peers.
5 | 6 調整最大peer數, 調整[圖2]的(3)
5 -> 減少 by 5
6 -> 增加 by 5

Adjust max peers.
u 顯示傳輸中的區塊

Display transfering blocks.
o 顯示tracker的列表. 如 [圖4]

Display the tracker list. Cycle the trackers in a group with the space-bar.
p 觀看peer和torrent的資訊, 如[圖5]為peer資訊, [圖6]為torrent資訊

View peer and torrent information.

t | T Initiate tracker request. Use capital T to force the request,
ignoring the "min interval" set by the tracker.
k 中斷此連接

Disconnect peer.
* Choke/Snub peer.

可用命令 :命令
說明

← 回上一頁,回下載詳細資訊. 如 [圖2]
1 | 2 調整此torrent最大上傳速度,調整[圖3]的(1)
1 -> 減少 by 1
2 -> 增加 by 1

Adjust max uploads.
3 | 4 調整最小peer數, 調整[圖3]的(2)
3 -> 減少 by 5
4 -> 增加 by 5

Adjust min peers.
5 | 6 調整最大peer數, 調整[圖3]的(3)
5 -> 減少 by 5
6 -> 增加 by 5

Adjust max peers.
u 顯示傳輸中的區塊

Display transfering blocks.
o 顯示tracker的列表. 如 [圖4]

Display the tracker list. Cycle the trackers in a group with the space-bar.
View peer and torrent information.
t | T Initiate tracker request. Use capital T to force the request,
ignoring the "min interval" set by the tracker

vim文本操作

●大、小写字母互换
Normal模式下,ggVGgU全部变大写,ggVGgu全部变小写,ggVGg~是大小写翻转
(解释一下,ggVG是全选,用其它方式全选,或者选一部分都行)
●去掉英文
:%s/\v\a+//g
●去掉数字
:%s/\v\d+//g
●既去除英文又去除数字
:%s/\v(\d|\a)+//g
●去掉空格
:%s/ //g
●只删末尾空格
:%s/\v\s+$//g (注意:这个是删除末尾的空白,包括空格和制表符)
●去掉"="号前面的编码含"="
:%s/\v^[^=]+\=//g
●删除空行
:%s/\v\n+/\r/g
●删除汉字及汉字词组
:%s/\v[^\x00-\xff]+//g
(注意:VIM不方便表示"汉字",只能表示"非单字节字符",包括所有汉字及双字节符号)
●提取单字
●提取词组
●提取已编码词条
●提取未编码词条
●提取带有汉字的词条
●提取带有英文的词条
●提取带有英文的词条(不含等于后的英文)
:g/正则表达式/d 表示删除所有含正则表达式的行
:v/正则表达式/d 表示删除所有不含正则表达式的行
★"提取"不易,删除不满足要求的行倒是可以。当作练习,你自己试试?就用:g或者:v命令。呵呵

●删除"="后带有中文和英文的词条
简单,嗯
●词码对调
:%s/\v^([^=]+)\=(.+)$/\2=\1/g
●词库格式变换
1、将:"计算机 进一步 为什么 科学院"变成:
计算机
进一步
科学院
:%s/ /\r/g
2、左边格式变成右边格式:
着重指出 zhuo'zhong'zhi'chu' 着重指出 zzzc
属垣有耳 zhu'yuan'you'er' 属垣有耳 syye
自怨自艾 zi'yuan'zi'yi' 自怨自艾 zyzy
:%s/\v(\a)(\a{-1,}')/\1/g
●提起并删除特定词条如:"重"
1、带编码
去除含'重'字词条的方法:
:g/重/d
提取含'重'字词条的方法
:v/重/d (我所谓的提取,就是删除不需要的,所以提前备份原始文件的好)
2、不带编码
去除含'重'字词条的方法:
提取含'重'字词条的方法
★和带编码有什么区别?
●去优化
将"yyyw 议论 言论 认识论 高度评价"
分开为:
yyyw 议论
yyyw 言论
yyyw 认识论
yyyw 高度评价
★不容易~~ 我得再想想
●提取几字词,以二字词为例
:v/\v^([\x00-\xff]*[^\x00-\xff][\x00-\xff]*){2}$/d
●编码和词之间加"="
★如何区分二者?
●删除有关词组
1、要删除所有带"了"字开头的"二字词"词组
:g/\v\=了/d
2、要删除"了"字结束的"二字词"词组
:g/了$/d

lftp使用方法

lftp是老牌,"万里长城永不倒"类型的王道unix/linux下的ftp客户端,可是很多新手总是想要找一个所谓
* 图形界面 * 中文不乱码 * 可以多线程
的ftp客户端。由于lftp的命令行特性,总觉得可能是高手才用的东东,其实不然,俺老pan也就只有几板斧,照样用的很high~下面容俺一一道来:
首先,所有的lftp终端内的命令,都可以用 代码: help 命令名
的方式来查看帮助信息。
另外,lftp支持tab自动补全,记不得命令是,多打两个tab,就可以看到可能的选项了。
1、登录ftp 代码: lftp 用户名:密码@ftp地址:传送端口(默认21)
也可以先不带用户名登录,然后在接口界面下用login命令来用指定账号登录,密码不显示。
2、查看文件与改变目录 代码: ls cd 对应ftp目录
嘿嘿,很简单吧?其实,在lftp终端中,前面带一个l的命令例如lcd,指的是local,就是在本机的操作,而对应的没有这个l的,都是对ftp
site的操作。还有就是要执行本地终端命令,也可以用前面带一个!的方式。这样,配合起来,终端,本地的操作都很放遍。
例如,查看ftp上所有的以mp3为扩展名的文件: 代码: find . -name "*.mp3"
3、下载 get当然是可以的,还可以 代码: mget -c *.pdf
把所有的pdf文件以允许断点续传的方式下载。m代表multi 代码: mirror aaa/
将aaa目录整个的下载下来,子目录也会自动复制 代码: pget -c -n 10 file.dat
以最多10个线程以允许断点续传的方式下载file.dat
可以通过设置pget:default-n的值而使用默认值。
4、上传 同样的put,mput,都是对文件的操作,和下载类似。 代码: mirror
-R 本地目录名 将本地目录以迭代(包括子目录)的方式反向上传到ftp site。
5、模式设置。 代码: set ftp:charset gbk 远程ftp
site用gbk编码,对应的要设置为utf8,只要替换gbk为utf8即可。 代码: set
file:charset utf8 本地的charset设定为utf8,如果你是gbk,相应改掉。 代码:
set ftp:passive-mode 1
使用被动模式登录,有些site要求必须用被动模式或者主动模式才可以登录,这个开关就是设置这个的。0代表不用被动模式。
6、书签 其实命令行也可以有书签,在lftp终端提示符下: 代码: bookmark
add ustc 就可以把当前正在浏览的ftp
site用ustc作为标签储存起来。以后在shell终端下,直接 代码: lftp ustc
就可以自动填好用户名,密码,进入对应的目录了。 代码: bookmark edit
会调用编辑器手动修改书签。当然,也可以看到,这个书签其实就是个简单的文本文件。密码,用户名都可以看到。
7、配置文件 /etc/lftp.conf 一般,我会添加这几行: 引用: set
ftp:charset gbk set file:charset utf8 set pget:default-n 5
这样,就不用每次进入都要打命令了。其他的set 可以自己tab然后help 来看。