vsFTPd是一个开源的FTP服务器软件,全称为"Very Secure FTP daemon"。它是一种用于在计算机网络上提供FTP服务的软件。vsFTPd被广泛用于Linux和类Unix系统中,它具有高度安全性、稳定性和性能优势,被认为是一个可靠的FTP服务器解决方案

ftp

浏览器使用

help <cmd> # 查看命令帮助信息

pwd # ftp上当前工作目录
lcd # lcd 命令后面不接任何内容时,它的意思是将本地系统的当前工作目录(家目录)更改为FTP会话的默认本地目录
lcd <文件夹路径> # 更改本地工作目录 change local directory

# 用户可以在FTP客户端视图下查看和改变客户端当前的工作路径,
# 特别是在上传和下载操作时,可以直接使用此命令指定待上传文件的路径为客户端当前路径或将下载后文件保存的路径指定为客户端当前路径。

# 与pwd不同的是,lcd命令执行后显示的是FTP客户端的本地工作路径,而pwd显示的则是远端FTP服务器的工作路径。
# 而且lcd命令指定参数后,可直接在FTP客户端视图下改变当前用户的本地工作路径。

cd 目录名(进入服务器目录) lcd 目录名(进入本机目录)

cd \(退到服务器根目录) lcd \(退到本机根目录)

cd ..(退回到上一级目录) lcd ..(退回到上一级目录)

cd <目录名> # 进入指定目录
rename <fileName> <newFileName> # 重命名或移动文件,需要指定文件名
delete(del) <文件名> # 删除文件
del *.* # 删除所有

dir [*.war] # 显示服务器目录和文件列表,可以通配符显示指定文件
ls [*.war] # 显示服务器目录和文件列表,可以通配符显示指定文件
ls -l # 等价dir ,但是不能通配符形式查看

# 目录
mkdir [foldname] # 在远程Linux FTP服务器上当前路径下建立指定目录
rmdir [foldname] # 删除远程Linux FTP服务器上当前路径下的指定目录

ftp # 执行ftp命令
open <服务器地址> # 连接服务器
user # 重新登录

close # 关闭ftp会话
bye # 关闭会话并退出ftp
quit # 关闭会话并退出ftp

文件传输方式问题

type # 查看当前的传输方式
ascii # 设定传输方式为ASCII码方式
binary(bin) # 设定传输方式为二进制方式

  1. FTP在传送文件时分为ASC和Bin两种格式,只有文字文件(例如 html 文件)使用ASC,其他的通通使用Bin格式(例如图像文件、压缩文件、可执行文件等等)。
  2. 当我们使用ftp时,可简单地把文件分为两种基本类型:文本文件和二进制文件;
  3. 文本文件也称为ASCII文件,其文件内容遵循ASCII的定义,其主要特征是文件内容由若干行组成,可以使用操作系统的显示、编辑命令来显示和编辑ASCII文件的内容,它使用的传输模式是asc;
  4. 二进制文件(Binary File)是指除ASCII文件以外的所有文件格式,它使用的传输模式是bin;需要注意的是,可以将ASCII文件按二进制模式传输,但决不能将二进制文件按ASCII模式传输,否则二进制文件的内容会遭到破坏而无法使用。
  5. ASCII 切换传输模式为文字模式(只能用来传送文字文件);BINARY 切换传输模式为二进制模式(除文字文件外皆用此模式);
  6. 文字文件传输推荐ASC而程序或数据文件必须使用BIN。

ASCII是默认模式,所以我们需要转换。只有ftp需要切换sftp这种不需要,因为他们没有用ftp这种方法进行数据的传输。

文件下载

# 上传
put <文件名> [newname] # (filename为下载的FTP服务器上的文件名,newname为保存在本都计算机上时使用的名字,如果不指定newname,文件将以原名保存)

# 批量上传
mput 文件名* # 如批量上传当前本地命令下的cpam开头的文件 put cpam*
send <文件名> [newname]

# 下载
get filename [newname] (filename为下载的ftp服务器上的文件名,newname为保存在本都计算机上时使用的名字,如果不指定newname,文件将以原名保存。
# 下载多个文件
mget filename [filename ....](mget命令支持通配符“*”和“?”,比如:mget *.jpg 表示下载ftp服务器当前目录下的所有扩展名为jpg的文件。)

# 上传和下载可以指定到具体路径

prompt:关闭/打开互交提示界面

# 注:可以搭配正则表达式下载

# get一次只下载一个文件;mget一次可以下载多个文件,而且支持通配符,
# 需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全部的文件,
# 可以先用prompt命令关掉交互方式(关闭:prompt off;打开:prompt on)。

# 注:如果不使用lcd指定本地目录,那么get和put时默认下载和上传的目录就是当前进入ftp时的目录

sftp

路径可以缺省,一般我们都是cd或者lcd到具体路径,直接get和put,比较方便。

sftp apple@127.0.0.1
sftp apple@127.0.0.1:/home/xx

# 上传
#上传一个本地文件到远程目录
put local-file [remote-file] put f1.txt remote_dir
#上传一个本地目录到远程目录
put -r local-dir [remote-file] put -r local_dir remote_dir
#上传多个本地文件(支持通配符*)到远程目录
mput local-files [remote-file] mput f*.txt remote_dir
#上传多个本地目录(支持通配符*)到远程目录
mput -r local-files [remote-file] mput -r local_dir* remote_dir

#下载远程文件到本地目录
get remote-file [local-file] get f1.txt local_dir
#下载远程目录到本地目录
get -r remote-dir [local-file] get -r local_dir local_dir
#下载多个远程文件(支持通配符*)到本地目录
mget remote-files [local-file] mget f*.txt local_dir
#下载多个远程目录(支持通配符*)到本地目录
mget -r remote-dirs [local-file] mget -r local_dir* local_dir

#远程文件
rm [remote-files]
#进入远程目录
cd remote-directory
#修改远程文件属性
chmod mode file-name

#执行本地文件
#查看当前目录,常规命令ls
lls
#查看当前路径,常规命令pwd
lpwd

切换目录 创建目录 显示目录 显示当前路径 删除a.txt文件
远程服务器
本地主机(local) lcd lpwd lmkdir lls !rm a.txt

#查看帮助
#直接查看
man sftp
#登录sftp后查看
help

windows上传文件到ftp

  1. bat脚本:
  2. sh 脚本:需要有能执行sh命令的客户端工具,如 Git Bash
  3. cmd ,执行ftp open ....

shell脚本从ftp上传或下载文件

ftp

在Shell脚本中, `ftp -n <<!` 是一种使用FTP命令的方式。这种方式称为"Here Document",它允许您在脚本中嵌入多行输入,而无需手动逐行输入。

具体来说,

#! /bin/sh
ftp -n <<!
open ftp.example.com
user username password
binary
put file.txt
bye
!
echo "success"

在上面的示例中,

您可以根据需要在这个Here Document中添加更多的FTP命令。当Shell脚本执行到Here Document结束的感叹号(!)时,其中的FTP命令将被执行。

执行shell脚本报
cannot create temp file for here document :No space left on device


这个错误提示意味着您的设备上的临时文件空间已满,导致无法创建临时文件来执行脚本中的"here document"(这里指的是使用 << 语法的多行输入)。这种情况通常发生在设备的磁盘空间不足时。您可以通过以下几种方法来解决这个问题:

  1. 清理磁盘空间:删除不需要的文件或移动到其他存储设备上,以释放磁盘空间。
  2. 检查临时文件目录:确保您的临时文件目录没有被设置为一个没有足够可用空间的位置。您可以通过运行df -h命令来检查磁盘空间使用情况
  3. 更改临时文件目录:您可以尝试更改临时文件目录到一个有足够可用空间的位置。在shell脚本中,您可以使用 export TMPDIR=/path/to/temp/dir来设置临时文件目录。请注意,这些解决方法可能需要具有管理员权限或超级用户权限才能执行。如果问题仍然存在,请考虑联系系统管理员或技术支持寻求进一步的帮助。

wrapper for lftp to simulate compatibity with lukemftp

# 表明需要以lftp的方式登录

lftp

lftp
open -u username,password ip;
# 登录成功

#!/bin/sh
# 连接FTP服务器
HOST="ftp.example.com"
USER="username"
PASS="password"

# 文件路径
REMOTE_FILE="/path/to/remote/file.txt"
LOCAL_FILE="/path/to/local/file.txt"

lftp -c "
open -u $USER,$PASS $HOST;
set xfer:clobber on;
get $REMOTE_FILE -o $LOCAL_FILE;
quit"


set xfer:clobber on 设置传输时自动覆盖同名文件
# set -a # lftp登录后 set查看默认设置
set -a | grep 'clobber' # 当前会话可修改为on ,但是默认配置不会改变
set -d | grep 'clobber' # 默认配置是no

help set # 查看set选项

# -o 指定要将远程文件下载到的本地文件路径