在制作自动 ftp 上传脚本时,我注意到ftp
程序的一个非常奇怪的行为:如果我想发送一个属于/tmp
目录的文件,ftp
总是会失败并给出一条错误消息:cannot create file
。
看看这个:
^_^ ~ > touch /tmp/file1
^_^ ~ > touch file2
^_^ ~ > ftp <server>
Connected to <server> (<server ip>).
220 (vsFTPd 2.2.2)
Name (<server:username>): <username>
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put /tmp/file1
local: /tmp/file1 remote: /tmp/file1
227 Entering Passive Mode (<ip>).
553 Could not create file.
ftp> put file2
local: file2 remote: file2
227 Entering Passive Mode (<ip>).
150 Ok to send data.
226 Transfer complete.
ftp>
ftp
从 读取文件有什么问题/tmp
?
服务器和客户端上都没有 SELinux 或 AppArmor ftp
。
答案1
问题不在于读取文件/tmp
——请阅读错误消息:“553 无法创建文件”。当你说
put
单个文件名
相当于
put
单个文件名 文件名又相同
因此,这put /tmp/file1
相当于put /tmp/file1 /tmp/file1
,如果 FTP 服务器没有/tmp
配置可写目录,此操作将失败。请尝试put /tmp/file1 file1
,或者也许put /tmp/file1 ./file1
。
答案2
请注意,运行时ftp
您已连接到远程计算机。使用lcd
更改本地计算机上的目录;cd
将更改远程计算机上的目录。在您的例子中
lcd /tmp
put file1
lcd <to original directory>
答案3
用于ls -l
查看文件夹的权限。您验证的用户是否具有该目录的写权限?如果没有,您需要使用chmod
来确保它确实具有该权限,否则它将永远无法工作。
通常,FTP 帐户只能访问靠近以下区域的区域:/
事实上,有些系统设置为只能写入/home/ftpUserName
答案4
在 FTP 中处理此问题的典型方法是使用cd
命令来更改偏僻的目录,同时使用lcd
(本地cd
)命令更改当地的目录(显然 FTP 的 shell 转义无用(MS-Windows 除外,也许))。然后只需put
将文件从本地目录复制到远程目录即可。