自動化された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
からファイルを読み取ることの何が問題になっていますか?
サーバーにもftp
クライアントにもSELinuxやAppArmorはありません。
問題は/tmp
からファイルを読み取っていないことです-エラーメッセージ「553Couldnotcreatefile」を読んでください。あなたが言う時
put
a_single_file_name
それはと同等です
put
single_file_namethat_same_file_name_again
したがって、put /tmp/file1
はput /tmp/file1 /tmp/file1
と同等であり、FTPサーバーに書き込み可能な/tmp
ディレクトリが構成されていない場合、これは失敗します。 put /tmp/file1 file1
、またはput /tmp/file1 ./file1
を試してください。
ftp
を実行すると、リモートマシンに接続されていることに注意してください。 lcd
を使用して、ローカルマシンのディレクトリを変更します。 cd
は、リモートマシンのディレクトリを変更します。あなたの場合
lcd /tmp
put file1
lcd <to original directory>
ls -l
を使用して、フォルダーのアクセス許可を表示します。認証したユーザーは、そのディレクトリへの書き込みアクセス権を持っていますか?そうでない場合は、chmod
を使用して確実に機能させる必要があります。そうしないと、機能しません。
多くの場合、FTPアカウントは、/
に近い領域へのアクセスが制限されています。実際、一部のシステムは、/home/ftpUserName
にのみ書き込むことができるように設定されています。