为什么“ftp”程序无法读取/tmp目录中的文件?

为什么“ftp”程序无法读取/tmp目录中的文件?

在制作自动 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将文件从本地目录复制到远程目录即可。

相关内容