linux下ftp服务器的上传下载的过程

linux下ftp服务器的上传下载的过程,第1张

在我用的所有ftp服务器中来说,首推iis7服务器管理工具,而且一直在用,感觉非常好。它可以作为FTP的客户端,想要进行FTP的上传下载操作,只需要下载安装iis7服务器管理工具就可以了,操作不复杂!

简单的介绍一下iis7服务器管理工具:可以批量管理WIN系列服务器、VPS、批量导入服务器VPS的IP,端口,账号和密码 、批量打开N个服务器VPS的远程桌面、远程桌面后,远程窗口右上角会出现 服务器备注的信息,如郑州xxx号服务器 5、远程桌面后,不影响任务栏显示。可以及时看其他窗口。支持多种方式连接,操作简洁,自身附带教程。

第一步:点击主程序图中“上传下载”键;

第二步:点击“ Ftp”;

第三步:点击“添加”;

第四步:在弹出服务器信息框中填写Ftp信息,注意:FIP ip端口、账号、密码为必填项;

第五步:选择需要打开的FTP服务器;

第六步:点击打开,即刻见FTP效果图。

用 这个命令 吧

scp 可以在 2个 linux 主机间复制文件;

命令基本格式:

scp [可选参数] file_source file_target

======

从 本地 复制到 远程

======

复制文件:

命令格式:

scp local_file remote_username@remote_ip:remote_folder

或者

scp local_file remote_username@remote_ip:remote_file

或者

scp local_file remote_ip:remote_folder

或者

scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

例子:

scp /home/space/music/1mp3 root@wwwcumteducn:/home/root/others/music

scp /home/space/music/1mp3 root@wwwcumteducn:/home/root/others/music/001mp3

scp /home/space/music/1mp3 wwwcumteducn:/home/root/others/music

scp /home/space/music/1mp3 wwwcumteducn:/home/root/others/music/001mp3

你是指的配置方法,还是上传、下载方法?

有2个上传、下载工具可用:

wget ftp://1921680100/pub/testtxt

wput testtxt ftp://1921680100/pub/demo

名称:cat

使用权限:所有使用者

使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName

说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)

参数:

-n 或 --number 由 1 开始对所有输出的行数编号

-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号

-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行

-v 或 --show-nonprinting

范例:

cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里

cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。

范例:

把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里

cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。

cat -b textfile1 textfile2 >> textfile3

cat /dev/null > /etc/testtxt 此为清空/etc/testtxt档案内容

cat 也可以用来制作 image file。例如要制作软碟的 image file,将软碟放好后打

cat /dev/fd0 > OUTFILE

相反的,如果想把 image file 写到软碟,请打

cat IMG_FILE > /dev/fd0

注:

1 OUTFILE 指输出的 image 档名。

2 IMG_FILE 指 image file。

3 若从 image file 写回 device 时,device 容量需与相当。

4 通常用在制作开机磁片。

名称 : cd

使用权限 : 所有使用者

使用方式 : cd [dirName]

说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。

另外,"~" 也表示为 home directory 的意思,"" 则是表示目前所在的目录,"" 则表示目前目录位置的上一层目录。

范例 : 跳到 /usr/bin/ :

cd /usr/bin

跳到自己的 home directory :

cd ~

跳到目前目录的上上两层 :

cd /

cd - 返回进入当前目录前所在目录

指令名称 : chmod

使用权限 : 所有使用者

使用方式 : chmod [-cfvR] [--help] [--version] mode file

说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。

参数 :

mode : 权限设定字串,格式如下 : [ugoa][[+-=][rwxX]][,],其中

u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。

-c : 若该档案权限确实已经更改,才显示其更改动作

-f : 若该档案权限无法被更改也不要显示错误讯息

-v : 显示权限变更的详细资料

-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)

--help : 显示辅助说明

--version : 显示版本

范例 :将档案 file1txt 设为所有人皆可读取 :

chmod ugo+r file1txt

将档案 file1txt 设为所有人皆可读取 :

chmod a+r file1txt

将档案 file1txt 与 file2txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :

chmod ug+w,o-w file1txt file2txt

将 ex1py 设定为只有该档案拥有者可以执行 :

chmod u+x ex1py

将目前目录下的所有档案与子目录皆设为任何人可读取 :

chmod -R a+r

此外chmod也可以用数字来表示权限如 chmod 777 file

语法为:chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1

若要rwx属性则4+2+1=7;

若要rw-属性则4+2=6;

若要r-x属性则4+1=7。

范例:

chmod a=rwx file

chmod 777 file

效果相同

chmod ug=rwx,o=x file

chmod 771 file

效果相同

若用chmod 4755 filename可使此程序具有root的权限

指令名称 : chown

使用权限 : root

使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file

说明 : Linux/Unix 是多人多工操作系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

参数 :

user : 新的档案拥有者的使用者

IDgroup : 新的档案拥有者的使用者群体(group)

-c : 若该档案拥有者确实已经更改,才显示其更改动作

-f : 若该档案拥有者无法被更改也不要显示错误讯息

-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案

-v : 显示拥有者变更的详细资料

-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)

--help : 显示辅助说明

--version : 显示版本

范例 :

将档案 file1txt 的拥有者设为 users 群体的使用者 jessie :

chown jessie:users file1txt

将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :

chmod -R lamport:users

名称:cp

使用权限:所有使用者

使用方式:

cp [options] source dest

cp [options] source directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

参数:

-a 尽可能将档案状态、权限等资料都照原状予以复制。

-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。

-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。

范例:

将档案 aaa 复制(已存在),并命名为 bbb :

cp aaa bbb

将所有的C语言程序拷贝至 Finished 子目录中 :

cp c Finished

名称:cut

使用权限:所有使用者

用法:cut -cnum1-num2 filename

说明:显示每行从开头算起 num1 到 num2 的文字。

范例:

shell>> cat example

test2

this is test1

shell>> cut -c0-6 example ## print 开头算起前 6 个字元

test2

this i

cut其实很有用

-c m-n 表示显示每一行的第m个字元到第n个字元。例如:

---------file-----------

liubi 23 14000

---------file-----------

# cut -c 3-9,12-20 file

liubi 14000

-f m-n 表示显示第m栏到第n栏(使用tab分隔)。例如:

---------file-----------

liubi 23 14000

---------file-----------

# cut -f 1,3 file

liubi 14000

名称 : find

用法 : find

使用说明 :

将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。

find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比档案 file 更晚被读取过的档案

-atime n : 在过去 n 天过读取过的档案

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比档案 file 更新的档案

-ctime n : 在过去 n 天过修改过的档案

-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name

-ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写

-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写

-size n : 档案大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 档案类型是 c 的档案。

d: 目录

c: 字型装置档案

b: 区块装置档案

p: 具名贮列

f: 一般档案

l: 符号连结

s: socket

-pid n : process id 是 n 的档案

你可以使用 ( ) 将运算式分隔,并使用下列运算。

exp1 -and exp2

! expr

-not expr

exp1 -or exp2

exp1, exp2

范例:

将目前目录及其子目录下所有延伸档名是 c 的档案列出来。

# find -name "c"

将目前目录其其下子目录中所有一般档案列出

# find -ftype f

将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出

# find -ctime -20

find -name "" -exec grep xxx {} -print |morexxx为你想要找的字符串

名称:less

使用权限:所有使用者

使用方式:

less [Option] filename

说明:

less 的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用者往回卷动以浏览已经看过的部份,同时因为 less 并未在一开始就读入整个档案,因此在遇上大型档案的开启时,会比一般的文书编辑器(如 vi)来的快速。

指令名称 : ln

使用权限 : 所有使用者

使用方式 : ln [options] source dist,其中 option 的格式为 :

[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]

[--help] [--version] [--]

说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。

ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。

不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

参数 :

-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本

范例 :

将档案 yy 产生一个 symbolic link : zz

ln -s yy zz

将档案 yy 产生一个 hard link : zz

ln yy xx

名称:locate

使用权限:所有使用者

使用方式: locate [-q] [-d ] [--database= ]

locate [-r ] [--regexp= ]

locate [-qv] [-o ] [--output= ]

locate [-e ] [-f ] <[-l ] [-c]

<[-U ] [-u]>

locate [-Vh] [--version] [--help]

说明:

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。

在一般的 distribution 之中,数据库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用

# locate your_file_name的型式就可以了。

参数:

-u

-U

建立数据库,-u 会由根目录开始,-U 则可以指定开始的位置。

-e

将 排除在寻找的范围之外。

-l

如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。

-f

将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在数据库中。

-q

安静模式,不会显示任何错误讯息。

-n

至多显示 个输出。

-r

使用正规运算式 做寻找的条件。

-o

指定数据库存的名称。

-d

指定数据库的路径

-h

显示辅助讯息

-v

显示更多的讯息

-V

显示程序的版本讯息 范例:

locate chdrv : 寻找所有叫 chdrv 的档案

locate -n 100 aout : 寻找所有叫 aout 的档案,但最多只显示 100 个

locate -u : 建立数据库

locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)

locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如””或””等)来指定范本样式,如指定范本为kcpaner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括子目录在内的所有档案。

locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。

不过第一次在执行update后再使用locate寻找档案常会失败,此时就要执行slocate ˉu该命令(也可执行updatedb指令,其效果相同)来更新slocate数据库,该命令会在/usr/sbin下产生slocate执行档,再由locate到此数据库寻找所要找的资料。

名称 : ls

使用权限 : 所有使用者

使用方式 : ls [-alrtAFR] [name]

说明 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。

参数 :

-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为""的视为隐藏档,不会列出)

-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出

-r 将档案以相反次序显示(原定依英文字母次序)

-t 将档案依建立时间之先后次序列出

-A 同 -a ,但不列出 "" (目前目录) 及 "" (父目录)

-F 在列出的档案名称后加一符号;例如可执行档则加 "", 目录则加 "/"

-R 若目录下有档案,则以下之档案亦皆依序列出

范例:

列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 :

ls -ltr s

将 /bin 目录以下所有目录及档案详细资料列出 :

ls -lR /bin

列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "" :

ls -AF

名称: mkdir

使用权限:于目前目录有适当权限的所有使用者

使用方式:mkdir [-p] dirName

说明:建立名称为 dirName 之子目录。

参数:-p 确保目录名称存在,不存在的就建一个。

范例:

在工作目录下,建立一个名为 AAA 的子目录 :

mkdir AAA

在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。)

mkdir -p BBB/Test

名称:more

使用权限:所有使用者

使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames]

说明:类似 cat ,不过会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

参数:

-num 一次显示的行数

-d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit] ,如果使用者按错键,则会显示 [Press 'h' for instructions] 而不是 '哔' 声

-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能

-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)

-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容

-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料

-s 当遇到有连续两行以上的空白行,就代换为一行的空白行

-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)

+/ 在每个档案显示前搜寻该字串(pattern),然后从该字串之后开始显示

+num 从第 num 行开始显示

fileNames 欲显示内容的档案,可为复数个数

范例:

more -s testfile 逐页显示 testfile 之档案内容,如有连续两行以上空白行则以一行空白行显示。

more +20 testfile 从第 20 行开始显示 testfile 之档案内容。

名称:mv

使用权限:所有使用者

使用方式:

mv [options] source dest

mv [options] source directory

说明:将一个档案移至另一档案,或将数个档案移至另一目录。

参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。

范例:

将档案 aaa 更名为 bbb :

mv aaa bbb

将所有的C语言程序移至 Finished 子目录中 :

mv -i c

名称:rm

使用权限:所有使用者

使用方式:rm [options] name

说明:删除档案及目录。

参数:

-i 删除前逐一询问确认。

-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。

-r 将目录及以下之档案亦逐一删除。

范例:

删除所有C语言程序档;删除前逐一询问确认 :

rm -i c

将 Finished 子目录及子目录中所有档案删除 :

rm -r Finished

名称:rmdir

使用权限:于目前目录有适当权限的所有使用者

使用方式: rmdir [-p] dirName

说明: 删除空的目录。

参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

范例:

将工作目录下,名为 AAA 的子目录删除 :

rmdir AAA

在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。

rmdir -p BBB/Test

名称:split

使用权限:所有使用者

使用方式:split [OPTION] [INPUT [PREFIX]]

说明:

将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab;PREFIX 预设值为 `x'。若没有 INPUT 档或为 `-',则从标准输入读进资料。

选项:

-b, --bytes=SIZE

SIZE 值为每一输出档案的大小,单位为 byte。

-C, --line-bytes=SIZE

每一输出档中,单行的最大 byte 数。

-l, --lines=NUMBER

NUMBER 值为每一输出档的列数大小。

-NUMBER

与 -l NUMBER 相同。

--verbose

于每个输出档被开启前,列印出侦错资讯到标准错误输出。

--help

显示辅助资讯然后离开。

--version

列出版本资讯然后离开。

SIZE 可加入单位: b 代表 512, k 代表 1K, m 代表 1 Meg。

范例:

PostgresSQL 大型数据库备份与回存:

因 Postgres 允许表格大过你系统档案的最大容量,所以要将表格 dump 到单一的档案可能会有问题,使用 split 来进行档案分割。

% pg_dump dbname | split -b 1m - filenamedump

重新载入

% createdb dbname

% cat filenamedump | pgsql dbname

名称:touch

使用权限:所有使用者

使用方式:

touch [-acfm]

[-r reference-file] [--file=reference-file]

[-t MMDDhhmm[[CC]YY][ss]]

[-d time] [--date=time] [--time={atime,access,use,mtime,modify}]

[--no-create] [--help] [--version]

file1 [file2 ]

说明:

touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。

参数:

a 改变档案的读取时间记录。

m 改变档案的修改时间记录。

c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。

f 不使用,是为了与其他 unix 系统的相容性而保留。

r 使用参考档的时间记录,与 --file 的效果一样。

d 设定时间与日期,可以使用各种不同的格式。

t 设定档案的时间记录,格式与 date 指令相同。

--no-create 不会建立新档案。

--help 列出指令格式。

--version 列出版本讯息。

范例:

最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。

touch file

touch file1 file2

将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。

touch -c -t 05061803 file

touch -c -t 050618032000 file

将 file 的时间记录改变成与 referencefile 一样。

touch -r referencefile file

将 file 的时间记录改成 5 月 6 日 18 点 3 分,公元两千年。时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000 。

touch -d "6:03pm" file

touch -d "05/06/2000" file

touch -d "6:03pm 05/06/2000" file

touch 也可以制造一个空档(0 byte)例如DHCP Server所需的/etc/dhcpdleases,dhcpd 必须要有这个档案才能运作正常[root@/root]#touch /etc/dhcpdleases[root@/root]#ls -l /etc/dhcpdleases-rw-r--r-- 1 root root 0 Jul 3 05:50 /etc/dhcpdleases

记得上一次重灌前把/etc下的设定档tar起来,重灌好之后把原有设定还原,却发现系统检查设定档的时间有问题,这个时候用

find /etc -name -exec touch {};

就可以把设定档的时间更新到与现在一致了。

chgrp命令

功能∶改变文件或目录所属的组。

语法∶chgrp [选项] group filename

该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是 /etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列 表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件 的组。

//ftpputsh

[cpp] view plain copy

#!/bin/sh

#FileName:ftpputsh

#Function:从本地客户端向ftp服务器上传一个文件

#Version:V01

#Author:Sunrier

#Date:2012-07-20

#$#表示传递给此Shell脚本的参数个数

#-ne表示不等于

if [ $# -ne 2 ]

then

echo "Usage $0 <local_dir/filename> <remote_dir>"

exit 1

fi

#IP表示ftp的服务器ip地址

IP=127001

#IP=19216861

#FULLNAME获取本地文件全路径名

FULLNAME=$1

#DESTDIR获取需要上传的ftp远程目录路径

DESTDIR=$2

#basename返回一个路径中的文件名部分

#如FULLNAME="/home/Sunrier/Proj/log/testlog";

#当local_filename=`basename $FULLNAME`

#最终local_filename="testlog"

local_filename=`basename $FULLNAME`

#DESTFILE表示ftp服务器的路径,以及保存后的文件名

DESTFILE=$DESTDIR/$local_filename

#ftp -i -n $IP <<FTPIT

ftp -i -n <<FTPIT

open $IP

user Sunrier redhat

bin

passive

cd /home/remote/log/ftpfile

put $FULLNAME $DESTFILE

quit

FTPIT

exit 0

//注释:

[cpp] view plain copy

#!/bin/sh

#FileName:ftpputsh

#Function:从本地客户端向ftp服务器上传一个文件

#Version:V01

#Author:Sunrier

#Date:2012-07-20

#$#表示传递给此Shell脚本的参数个数

#-lt表示小于

#-eq表示等于

#-ne表示不等于

if [ $# -ne 2 ]

then

echo "Usage $0 <local_dir/filename> <remote_dir>"

exit 1

fi

#IP表示ftp的服务器ip地址

#IP=127001

IP=19216861

#FULLNAME获取本地文件全路径名

FULLNAME=$1

#DESTDIR获取需要上传的ftp远程目录路径

DESTDIR=$2

#basename返回一个路径中的文件名部分

#如FULLNAME="/home/Sunrier/Proj/log/testlog";

#当local_filename=`basename $FULLNAME`

#最终local_filename="testlog"

local_filename=`basename $FULLNAME`

#DESTFILE表示ftp服务器的路径,以及保存后的文件名

DESTFILE=$DESTDIR/$local_filename

#-i表示在多个文件传输期间关闭交互提示

#-n表示禁止自动登录到初始连接

#<<FTPIT 和最后的 FTPIT:术语叫:当前文档here documents here document 就是一段特殊目的的代码块,

#它使用I/O重定向的形式来将一个命令序列传递到一个交互程序或者命令中,比如ftp、cat,或者ex文本编辑器

#本句可以理解从<<FTPIT开始以非对话模式的ftp连接,直到输入FTPIT为止的所有命令

#当然FTPIT这个名字是可以随便取的,不一定必须是FTPIT,可以取其它的名字。

#ftp -i -n $IP <<FTPIT

ftp -i -n <<FTPIT

#连接到指定ftp服务器上

open $IP

#连接到指定ftp服务器上,并指定端口

#open $IP $PORT

#登陆ftp服务器上的用户名和密码

#user username password

user Sunrier redhat

#bin表示以二进制方式传输

#bin等价于bi,binary等

#另一种方式传输是ascii,默认情况下,将文件传输类型设置为ASCII

bin

#主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口

#被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTP服务器的情况

#因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过

#因此在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作

#passive表示设置为被动模式的FTP

passive

#cd表示更改ftp服务器上(即远程计算机)的工作目录

cd /home/remote/log/ftpfile

#lcd表示更改本地计算机的工作目录

#lcd /home/Sunrier/Proj/log/

#put local_file [ remote_file ]

#其中local_file是指定要复制的本地文件,remote_file是指定要复制的远程计算机上的文件名,

#remote_file为可选项,如果不指定的话是和本地计算机上的文件名同名

#put表示把本地路径下的文件复制到FTP服务器(远程计算机)上设置的路径下的文件

put $FULLNAME $DESTFILE

#quit表示结束与远程计算机的FTP会话,并退出FTP

#还有个等价的命令为bye(或by)结束与远程计算机的FTP会话并退出FTP

quit

#here document块结束

FTPIT

#正式写这个Shell脚本时,here document中的#和空行都会执行,

#所以为了消除警告最好去掉here document块中#开头的语句以及空行,

#暂时我还没有找到here document中有效的注释语句的方法

exit 0

//ftpgetsh

[cpp] view plain copy

#!/bin/sh

#FileName:ftpgetsh

#Function:从ftp服务器上下载一个文件到本地计算机上

#Version:V01

#Author:Sunrier

#Date:2012-07-20

#$#表示传递给此Shell脚本的参数个数

#-ne表示不等于

if [ $# -ne 2 ]

then

echo "Usage $0 <remote_dir/filename> <local_dir>"

exit 1

fi

#IP表示ftp的服务器ip地址

IP=127001

#IP=19216861

#FULLNAME获取从ftp服务器上下载的文件全路径名

FULLNAME=$1

#DESTDIR获取从ftp服务器上下载的文件所存放的本地计算机的目录路径

DESTDIR=$2

#remote_filename获取从ftp服务器上下载的文件名

remote_filename=`basename $FULLNAME`

#DESTFILE表示下载文件所存放的本地路径,以及本地保存后的文件名

DESTFILE=$DESTDIR/$remote_filename

#ftp -i -n $IP <<FTPIT

ftp -i -n <<FTPIT

open $IP

user Sunrier redhat

bin

cd /home/remote/log/ftpfile

get $FULLNAME $DESTFILE

quit

FTPIT

exit 0

#get remote_file [ local_file ]

#remote_file是指定要复制的文件,local_file是指定本地计算机上的文件名,

#local_file为可选项,没有指定的话则跟remote_file同名。

//20120726改进版本

[cpp] view plain copy

#!/bin/sh

#FileName:ftpputsh

#Function:从本地客户端向ftp服务器上传一个文件(添加远程目录是否存在判断功能)

#Version:V02

#Author:Sunrier

#Date:2012-07-26

#$#表示传递给此Shell脚本的参数个数

#-ne表示不等于

if [ $# -ne 2 ]

then

echo "Usage $0 <local_dir/filename> <remote_dir>"

exit 1

fi

#IP表示ftp的服务器ip地址

IP=127001

#IP=19216861

#FULLNAME获取本地文件全路径名

FULLNAME=$1

#DESTDIR获取需要上传的ftp远程目录路径

DESTDIR=$2

#dirname返回路径中的目录部分

#DESTDIR="/home/Sunrier/Proj/log/testlog";

#当PREDESTDIR=`dirname $DESTDIR`

#最终PREDESTDIR="/home/Sunrier/Proj/log"

PREDESTDIR=`dirname $DESTDIR`

SUFFIXDESTDIR=`basename $DESTDIR`

LOCALDIR=`dirname $FULLNAME`

#basename返回一个路径中的文件名部分

#如FULLNAME="/home/Sunrier/Proj/log/testlog";

#当local_filename=`basename $FULLNAME`

#最终local_filename="testlog"

local_filename=`basename $FULLNAME`

#DESTFILE表示ftp服务器的路径,以及保存后的文件名

DESTFILE=$DESTDIR/$local_filename

#ftp -i -n $IP <<FTPIT

ftp -i -n <<FTPIT

open $IP

user Sunrier redhat

dir $PREDESTDIR $LOCALDIR/tmptxt

quit

FTPIT

#find $LOCALDIR -name "tmptxt" -type f | xargs grep "^d$SUFFIXDESTDIR$"

#find -name "tmptxt" -type f | xargs grep "^d$SUFFIXDESTDIR$"

#find ! -name "" -type d -prune -o -type f -iname "tmptxt" -print | xargs grep "^d$SUFFIXDESTDIR$"

#grep "^d$SUFFIXDESTDIR$" \$LOCALDIR/tmptxt

#grep后面查找字符两边加不加引号效果相同

grep ^d$SUFFIXDESTDIR$ $LOCALDIR/tmptxt >/dev/null 2>&1

#$表示上一个命令的运行结果,0表示成功,其它值表示失败

#if [ $ != 0 ]

if [ $ -ne 0 ]

then

rm $LOCALDIR/tmptxt

exit 1

fi

#mkdir创建远程目录

#mkdir $DESTDIR

#ftp -i -n $IP <<FTPIT

ftp -i -n <<FTPIT

open $IP

user Sunrier redhat

bin

passive

cd /home/remote/log/ftpfile

put $FULLNAME $DESTFILE

quit

FTPIT

rm $LOCALDIR/tmptxt

exit 0

[cpp] view plain copy

注:

FTP服务器的启动:

[root@localhost ~]# service vsftpd start

为 vsftpd 启动 vsftpd: [确定]

FTP服务器的端口一般默认为21:

[root@localhost ~]# netstat -nat

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 127001:2208 0000: LISTEN

tcp 0 0 0000:523 0000: LISTEN

tcp 0 0 0000:111 0000: LISTEN

tcp 0 0 0000:50000 0000: LISTEN

tcp 0 0 0000:21 0000: LISTEN

tcp 0 0 127001:631 0000: LISTEN

tcp 0 0 127001:25 0000: LISTEN

tcp 0 0 0000:601 0000: LISTEN

tcp 0 0 127001:2207 0000: LISTEN

tcp 0 0 :::22 ::: LISTEN

[root@localhost ~]#

在使用system执行Shell脚本时,如system("ftpputsh"),system返回值低8位为system执行脚本所接收到的信号值,9~16位为Shell脚本所设置的exit退出值

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » linux下ftp服务器的上传下载的过程

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情