ローカルからのLinuxマシンへのバックアップファイルの自動ダウンロード

このQ&Aのポイント
  • ローカルのLinuxマシンから、さくらのレンタルサーバのバックアップファイルを自動でダウンロードする方法を教えてください。
  • Linuxマシンのサーバでftpコマンドを使用してバックアップファイルをダウンロードする手順を教えてください。
  • Windowsマシンからはダウンロードできるが、Linuxのローカルからはダウンロードできない場合の解決策を教えてください。
回答を見る
  • ベストアンサー

linuxマシン(ローカル)からのダウンロード

linuxマシン(ローカル)から、レンタルサーバ(さくら) のバックアップファィルを自動でダウンロードしようとしています  linuxマシンのサーバで下記のようにコマンドを順番にたたくとダウンロード できます   ================================================================ [root@linux ~]# ftp -i ***.***.***.***  Connected to ***.***.***.***. 220 ProFTPD 1.3.3g Server (SAKURA Internet FTP Server) [***.***.***.***] 500 AUTH not understood 500 AUTH not understood KERBEROS_V4 rejected as an authentication type Name (112.78.112.40:root): abcde 331 Password required for abcde Password: 230 User abcde logged in Remote system type is UNIX. Using binary mode to transfer files. ftp> passive Passive mode off. ftp> binary 200 Type set to I ftp> cd /home/abcde/backup/ 250 CWD command successful ftp> mget bak* local: bak-mysql-20111226.sql.gz remote: bak-mysql-20111226.sql.gz 200 PORT command successful 150 Opening BINARY mode data connection for bak-mysql-20111226.sql.gz (2431811 bytes) 226 Transfer complete 2431811 bytes received in 0.43 seconds (5.5e+03 Kbytes/s) local: bak-mysql-20111111.sql.gz remote: bak-mysql-20111111.sql.gz 200 PORT command successful 150 Opening BINARY mode data connection for bak-mysql-20111111.sql.gz (2459206 bytes) 226 Transfer complete 2459206 bytes received in 0.44 seconds (5.5e+03 Kbytes/s) ftp> quit 221 Goodbye. =================================================================  次に、シェル等をcronに登録して自動化したいので下記URLを http://q.hatena.ne.jp/1244629690 参考にして次のスクリプトを記載してlinuxマシンの/root に入れました =================ftp_all.sh=========================== #!/bin/csh -f #"@(#)ftp_all.sh 1995/07/01 Copyright(C)1995 ASH" # # name: ftp all files # ftp -n ***.***.***.*** << _EOD user (ユーザ名) (パスワード) passive binary cd /home/*****/backup mget bak*.* bye _EOD ======================================================== そして、ローカルサーバから # sh ftp_all.shとたたくと 下記のようになりスクリプト(?)がうまく働いてないように みえます ===================================================== : command not found AUTH not understood AUTH not understood KERBEROS_V4 rejected as an authentication type Login incorrect. Login failed. ?Invalid command ?Invalid command Please login with USER and PASS Please login with USER and PASS Passive mode refused. Turning off passive mode. Please login with USER and PASS ftp: bind: Address already in use ?Invalid command ===================================================== これとは別にWindowsマシンからのバッチファイルでは ダウンロードできるのですが、linuxのローカル側から ダウンロードしたいので・・・ どなたか、どのようにすれば自動化できるか教えていただけないで しょうか よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

改行コードは Windows標準は CR+LF (ASCIIコード13,10と2文字使用) Linux等のunix系標準は LF (ASCIIコード10と1文字使用) です。CR+LFのファイルをそのままLinuxで使おうとすると、CRが「ただの文字」と扱われてしまいます。 そのため、CRをファイルやコマンドの一部だと解釈され、エラーになったり、なぜか消せないファイルができたりします。 # 消せないのは、見えるファイル名だけを指定するだけでは、CRが含まれないためで、*を使うとかすれば消せます。 CRは端末でカーソルを行頭へ復帰させるために使うコードでもあります。 そのため、本当は ~: command not found と表示するところが ~のあとにCRで行頭に戻って、:以降で上書きされて :ではじまったように見えている状態です。 対処法ですが ・Windows側で対応 エディタでの設定で、改行をLFにする。 大抵のまともなエディタは対応しています。 また、他の大抵のアプリでは、LFのファイルでも普通にテキストファイルとして読み込めます。 メモ帳のようにどちらもできないものもありますが。 ・転送時に対応 FTPにはASCIIモードといって、転送時の改行コードを修正するモードがあります。 これで送ると、転送相手にあったものになります。 切り替えを忘れると、変えてはいけないバイナリーデータまで変わってしまうので、注意が必要です。 ・Linux 側で対応。 CR+LFのまま転送しても、nkf,dos2unix等の変換アプリがあります。 適当なエディタで開いて、LFで保存しなおすのも手です。 漢字コードについても同様です。 mdeleteについてはわかりません。 あと、今回の範囲では問題ないですが > #!/bin/csh -f と書いてあっても > sh ftp_all.sh と実行すれば、cshではなくshで実行します。B-sh系とC-sh系では文法などいろいろ違うので、注意しましょう。 シェルスクリプトではBsh系が使われます、

city21_kum
質問者

お礼

kmee様  丁寧に説明いただきありがとうございました。  改行コードについてよくわかりました。  windowsとlinuxでの違いもあることが理解できました。    あと、スクリプトの最上位にある  > #!/bin/csh -f  これについてもわからないままに利用していました。  B-sh系とC-sh系での違いがあることも理解しました。  これも次の勉強の入口がわかりました。    次に >mdeleteについてはわかりません。 この件ですが、おそらくということなのですが、FTPツールでダウンロード  した時の状態をみていると、ダウンロードするファイルが大きいので  deleteできるようになるために結構時間がかかります  このことがあるのかと想定しています  従って、後で、時間をとるコマンドを記載するか  別のdeleteするスクリプトを作成し、数分の時間をおいてそれを走らせる  やり方でためしてみるつもりです  いずれにせよ、丁寧に教えていただいてありがとうございました。  

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

表示は : command not found でしたか? その行は:で始まっているのですか? もしそうなら、一つあやしいのは、改行コードです。 ftp_all.sh を作ったのがWindowsで、それをFTPで転送した、ってことは無いですか?

city21_kum
質問者

お礼

いつも返答ありがとうございます。 >:command not found >でしたか? その行は:で始まっているのですか? そのとおりです。「:」で始まっています >ftp_all.sh を作ったのがWindowsで、それをFTPで転送した、ってことは無いですか? 当方はいつもそのような作成をしています ftp_all.shを削除してみて、vi コマンドで直接作成してみます その結果は後で報告させていただきます なお、改行コード等は エディターは、「MKEditor」 保存する時にファイルの種類を「*.*」 文字コードは「EUC」 改行コードは「CR+LF」としました どの組み合わせが最適なのか教えていただければ幸いです

city21_kum
質問者

補足

補足させていただきます 【Viコマンドで直接たたいた場合】  うまく動作しました。ありがとうございました。 【windowsエディターで作成した場合】   文字コード・・・自動選択   改行コード・・・LF これで動作しました   ↑上記が正解でしょうか? 別の質問にすべきかもしれませんが・・・  質問のmget bak*.*のあとに  mdelete bak*.*としたのですが  ダウンロードはしているのですが、ファイル削除していません  このコマンドの利用はできないのでしょうか? わかれば教えていただけば幸いです

関連するQ&A

  • FTPにより自動でファイルをサーバ間移動させたい

    サーバA(レンタルサーバ)のバックアップファイル(毎日生成)を サーバB(自作(Fedora-core4))から自動でFTP接続させて、サーバAの バックアップファイルをサーバBにコピーして、サーバAのバックアップファイル を消去しようとしています。 自動で抽出してくるシェルスクリプトをある方に教えてもらって下記(sample)のように 記載して、サーバBのルートに置いています ********** sample (ftp_all.sh) ************************** #!/bin/csh -f #"@(#)ftp_all.sh 1995/07/01 Copyright(C)1995 ASH" # ftp -n サーバAのIPアドレス << _EOD user username password passive binary cd /home/****/backup mget bak*.* mdelete bak*.* bye _EOD **************************************************** 実行結果は次のようになります *************** 結果 *********************** [root@linux ~]# sh ftp_all.sh AUTH not understood AUTH not understood KERBEROS_V4 rejected as an authentication type Passive mode off. mget bak-mysql-20121207.sql.gz? mget bak-root-20121207.tar.bz2? mget bak-mysql-20121206.sql.gz? mget bak-root-20121206.tar.bz2? mget bak-mysql-20121205.sql.gz? mget bak-root-20121205.tar.bz2? mget bak-mysql-20111226.sql.gz? mget bak-mysql-20111111.sql.gz? [root@linux ~]# sh ftp_all.sh AUTH not understood AUTH not understood KERBEROS_V4 rejected as an authentication type Passive mode off. mget bak-mysql-20121207.sql.gz? mget bak-root-20121207.tar.bz2? mget bak-mysql-20121206.sql.gz? mget bak-root-20121206.tar.bz2? mget bak-mysql-20121205.sql.gz? mget bak-root-20121205.tar.bz2? [root@linux ~]# ********************************************************************** ファイル名の頭に「bak」とつくファイルを全てコピーしコピーの後、消去しようとしています サーバAには「bak」とつくファイルは、bak-mysql****が5、6、7と3個、bak-root****が5、6、7と3個の全部で6個あるのですが 実際に [root@linux ~]# sh ftp_all.sh と打鍵すると、サーバBにコピーされるのは、bak-mysql****の20121207、bak-root****の20121207の2個のみで他のものは コピーされません また、実行結果をみてもらってもわかるように「mdelete bak*.*」のコマンドが実行されていません ・何故、最新のファイル(20121207)の2個のみになっているのか? ・削除されてないのはなぜか ・bak頭につくファイルのコピーそして削除ができるようにするにはどのようにしたらいいか  教えていただけないでしょうか  よろしくお願いします。

  • FTPにより自動でファイルをサーバ間移動させたい

    シェルスクリプトの作成について初心者の者です サーバA(レンタルサーバ)のバックアップファイル(毎日生成)を ・サーバB(自作(Fedora-core4))から自動でFTP接続させて、 ・サーバAのバックアップファイルをサーバBにコピーして、 ・サーバAのバックアップファイルを消去しようとしています。 皆さんに色々教えていただいて下記(sample)のように記載して 下記の実行結果まできましたが最後の所でつまずいています。 コピー元(サーバA)にあるファイルに頭に「bak***」のつくファイルを すべてコピーしてきて、コピーしたあと、そのファイルを消去しようとしています 例えば、今日(9日)はbak-mysql-*********.sql.gzとbak-root********.tar.bz2 の2種類が(20121207、20121208、20121209)の6ファイルあります つまり、この6ファイルをコピーして、その後、削除させたいと思います それで、サーバAの/rootに下記のsample (ftp_all.sh)のスクリプトを置きました ********** sample (ftp_all.sh) ************************** #!/bin/csh -f #"@(#)ftp_all.sh 1995/07/01 Copyright(C)1995 ASH" # # name: ftp all files /usr/bin/ftp -n サーバAのIPアドレス << EOF user username password passive binary cd /home/city21/backup mget bak*.* mdelete bak*.* bye EOF ********************************************* その実行結果は次のとおりです *************** 実行結果 *********************** [root@linux ~]# sh ftp_all.sh Passive mode off. mget bak-mysql-20121207.sql.gz? mget bak-root-20121207.tar.bz2? mget bak-mysql-20121209.sql.gz? mget bak-root-20121209.tar.bz2? mget bak-mysql-20121208.sql.gz? mget bak-root-20121208.tar.bz2? [root@linux ~]# ****************************************************** この実行結果をみると ・20121207.sql.gz、20121207.tar.bz2、20121209.sql.gz、20121209.tar.bz、20121208.sql.gz、20121208.tar.bz  6ファイルともmgetでファイルをコピーしているかのようにみえます  しかし、実際に、サーバB側にコピーされているのは  上記の実行結果の最初の3ファイル、(20121207.sql.gz、20121207.tar.bz2、20121209.sql.gz)しかコピーされて  いません  また、mdeleteのコマンドが全く効いていません  何故なのか、どこを直せばいいのか教えていただければ幸いです  また、今回はスクリプトの中に  /usr/bin/ftp -n サーバAのIPアドレス << EOF  ・  ・  ・  EOF  としたのですが    ftp -n サーバAのIPアドレス << _EOD  ・  ・  ・  _EOD としている例もあります  このEOF とか _EODの意味も勉強したいのですが  どこかこのあたり解説しているものがあれば教えていただければ  幸いです  よろしくお願いします。

  • FTPのコマンド「mput」について

    FTPで、ファイルを一括して、サーバーに送りたいのですが、その際に 「mput *.* *.*」などとすると、それぞれのファイルが2回putされます。これは、仕様でしょうか。 例えば、1つのファイル「A.txt」を mput した場合と、put した場合では、下記のようになります。 <mput> ************************ ftp> mput A.txt A.txt 200 PORT command successful. 150 Opening BINARY mode data connection for A.txt. 226 Transfer complete. ftp: 159232 bytes sent in 0.01Seconds 10615.47Kbytes/sec. 200 PORT command successful. 150 Opening BINARY mode data connection for A.txt. 226 Transfer complete. ftp: 159232 bytes sent in 0.00Seconds 159232000.00Kbytes/sec. ************************ <put> ************************ ftp> put A.txt A.txt 200 PORT command successful. 150 Opening BINARY mode data connection for A.txt. 226 Transfer complete. ftp: 159232 bytes sent in 0.01Seconds 10615.47Kbytes/sec. ************************

  • ダウンロードするシェルスクリプトについて

    LINUXサーバAとBの2つあります Linux-Aでは/aaa/bbbの中に(bak-A-20120218tar.bz)と(bak-B-20120218.gz)と毎日バックアップファイルを作成しています Linux-Aの容量が多くなっては困るのでLinux-Bのサーバから (1)毎日、定時にLinux-Aにアクセスし、 (2)Linux-Aの(bak-A-20120218tar.bz)と(bak-B-20120218.gz)をLinux-Bにダウンロードしたあと (3)Linux-Aの(bak-A-20120218tar.bz)と(bak-B-20120218.gz)を消去する このプロセスをシェルスクリプトに記載してCron登録したいと思っています そこでそのスクリプトを次のように考えました ************シェルスクリプト********************************* open xxx.yyy.ne.jp ・・・Linux-Aのサーバへ接続 user mmmmm nnnnnnn ・・・Linux-Aのサーバへ接続 cd /aaa/bbb/ ・・・Linux-Aの該当フォルダに切り替え binary mget bak-*.* ・・・bak以下のワイルドカードを利用して抽出(?) mdelete bak-*.* ・・・bak以下のワイルドカードを利用して削除(?) bye *************************************************************** 上記の5-6行目のように、ワイルドカードを指定して、ダウンロードとかファイル の消去をしようとしたのですがうまくいきません ワイルドカードを利用したのはbak-以下が毎日変わるのでそれを指定(プログラム)するのが難しかったのでこれを考えました まず、mgetとかmdeleteは利用できないのでしょうか このワイルドカードが利用できるダウンロードなり消去できるコマンド等あれば 教えていたただけないでしょうか または、別のいい方法があれば教えていただければ幸いです

  • ftpでファイルアップロードさせるシェルスクリプト

    Linuxで、あるftpサーバーにファイルをアップロードするシェルスクリプトを作る方法を教えてください。 例えば、このようなftpサーバーに対して、以下のスクリプトを作りました。 ■ftpサーバー ftpサーバー:ftp.hogehoge.jp User-ID: user1 Password: password1 アップロードしたいファイル:test.html アップロードしたい場所:/public_html ■シェルスクリプト #!/bin/sh ftp ftp://user1:password1@ftp.hogehoge.jp -u /public_html test.html ■結果 エラーも何も表示せず。 シェルスクリプトを、このようにすると、ftpサーバーにログインはできています。 #!/bin/sh ftp ftp://user1:password1@ftp.hogehoge.jp ここで、以下のように手でファイルをアップロードすることはできています。 ftp> cd public_html 250 CWD command successful. ftp> put test.html local: test.html remote: test.html 227 Entering Passive Mode (210,132,253,13,218,1) 150 Opening BINARY mode data connection for test.html 100% |*************************************| 62 270.29 KB/s 00:00 ETA 226 Transfer complete. 62 bytes sent in 00:00 (1.78 KB/s) ■環境 クライアント側 SuSE Linux 9.3 man ftpを見て、-uを使うのだと思ったのですが、間違ってますでしょうか? よろしくお願いします。

  • No route to hostの対処方法

    Red Hat Linux9.0同士のサーバ間でFTPを使って 一連の処理を考えております。 FTPコマンドを打っているときに、以下のような No route to hostのエラーが出てきます。 ---------------------------------------------------- $ ftp ftp.xxx.com Connected to ftp.xxx.com (203.135.XXX.XXX). 220 (vsFTPd 1.1.3) Name (ftp.xxx.com:admin): admin 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (192,168,0,224,74,195) ftp: connect: No route to host ftp> ---------------------------------------------------- 内容を調べると、「リモートホストまでのルーティング テーブルがないため接続できません。」という意味。 ログインはできているのですが、そこから先が エラーとなって進めない状況です。 ちなみに、サーバにはファイアウォールは使用していません。 この対処法についてアドバイスをお願いします。

  • Windows2000のFTPサーバについて

    室内LANからルータにつないだWindows2000をFTPサーバにして、同じく室内LANにつないだ(ルータにはつないでません)Vine LinuxをFTPのクライアントにしました。 そして、クライアントからサーバにLoginを行うことはできたのですが、"ls"コマンドを用いたファイル一覧を実行しようとすると "227 Entering Passive Mode(xxx.xxx.xxx.xxx,zzz.zzz)" と出て、その後何の反応も返ってこないため、表示させることができません。 どのようにしたら、クライアント側からのファイル一覧を実行させることができるのでしょうか?

  • FTPのアップロートとダウンロードがうまくいかない

    FTPのアップロードまたはダウンロードを行うとタイムアウトになってしまって、原因がわかりません。 Solaris10付属のFTPサーバを使っています。WindowsからFFFTPを使って、/export/homeにユーザ登録されているユーザにログイン後、Solaris10にある数MBのファイルをダウンロードまたはアップロードを行うとタイムアウトになります。また、数KBでも同じ現象なります。rootユーザでは、現象は起きず正常に、アップロード及びダウンロードは行えます。 Windows側でFTPサーバ(3CDaemon)を立て、Solaris10からFTPコマンドにてアップロードまたは、ダウンロードの操作をおこなっても同じ現象になります。 原因が、端末側にあるのかと思い、切り分けで、OSをCentOSに変えて行うと、正常にアップロード及びダウンロードが完了します。 また、端末を変えてもFFFTPを使っても同じ現象になります。 勉強不足で申し訳ありませんが、教えていただけたら幸いです。 よろしくお願いします。 操作を行った時のログは、下記の通りになります。 FFFTPログ FFFTP Ver.1.96d Copyright(C) 1997-2008 Sota. ---------------------------- ホスト 192.168.100.160 (21) に接続しています. 接続しました. 220 solaris01 FTP server ready. >USER solaristest 331 Password required for solaristest. >PASS [xxxxxx] 230 User solaristest logged in. >XPWD 257 "/export/home/solaristedt" is current directory. >TYPE A 200 Type set to A. >PASV 227 Entering Passive Mode (192,168,100,160,148,110) ダウンロードのためにホスト 192.168.100.160 (37998) に接続しています. 接続しました. >LIST 150 Opening ASCII mode data connection for /bin/ls. 226 Transfer complete. ファイル一覧の取得は正常終了しました. (383 Bytes) >>CD C:\ >>CD Documents and Settings >>CD Administrator >>CD デスクトップ >>CD solaris >TYPE I 200 Type set to I. >PASV 227 Entering Passive Mode (192,168,100,160,210,176) アップロードのためにホスト 192.168.100.160 (53936) に接続しています. 接続しました. >STOR /export/home/solaristedt/test.tar.gz 150 Opening BINARY mode data connection for /export/home/solaristedt/test.tar.gz. 送信はタイムアウトで失敗しました. 接続が切断されました. アップロードを中止しました. (91 Sec. 0 B/S). .0C Solaris側のSnoopでとったログ 192.168.100.120 -> solaris01 FTP C port=1520 192.168.100.120 -> solaris01 FTP C port=1520 solaris01 -> 192.168.100.120 FTP R port=1520 solaris01 -> 192.168.100.120 FTP R port=1520 220 solaris01 FTP se 192.168.100.120 -> solaris01 FTP C port=1520 192.168.100.120 -> solaris01 FTP C port=1520 USER solaristest\r\n solaris01 -> 192.168.100.120 FTP R port=1520 solaris01 -> 192.168.100.120 FTP R port=1520 331 Password require 192.168.100.120 -> solaris01 FTP C port=1520 192.168.100.120 -> solaris01 FTP C port=1520 PASS 123\r\n solaris01 -> 192.168.100.120 FTP R port=1520 solaris01 -> 192.168.100.120 FTP R port=1520 230 User solaristest 192.168.100.120 -> solaris01 FTP C port=1520 XPWD\r\n solaris01 -> 192.168.100.120 FTP R port=1520 257 "/export/home/so 192.168.100.120 -> solaris01 FTP C port=1520 TYPE A\r\n solaris01 -> 192.168.100.120 FTP R port=1520 200 Type set to A.\r\n 192.168.100.120 -> solaris01 FTP C port=1520 PASV\r\n solaris01 -> 192.168.100.120 FTP R port=1520 227 Entering Passive 192.168.100.120 -> solaris01 FTP C port=1520 LIST\r\n solaris01 -> 192.168.100.120 FTP R port=1520 150 Opening ASCII mo 192.168.100.120 -> solaris01 FTP C port=1520 solaris01 -> 192.168.100.120 FTP R port=1520 226 Transfer complet 192.168.100.120 -> solaris01 FTP C port=1520 192.168.100.120 -> solaris01 FTP C port=1520 TYPE I\r\n solaris01 -> 192.168.100.120 FTP R port=1520 200 Type set to I.\r\n 192.168.100.120 -> solaris01 FTP C port=1520 PASV\r\n solaris01 -> 192.168.100.120 FTP R port=1520 227 Entering Passive 192.168.100.120 -> solaris01 FTP C port=1520 STOR /export/home/so solaris01 -> 192.168.100.120 FTP R port=1520 150 Opening BINARY m 192.168.100.120 -> solaris01 FTP C port=1520

  • rftpでputできない

    rftpでファイルをputすると、ファイルが0バイトで送られます。 例えば、ファイル名"foo"をputした場合: ftp> put foo 200 PORT command successful. 150 Opening BINARY mode data connection for foo. local: foo: Bad file number 226 Transfer complete. 一方、ftpでputした場合、成功します。 ftp> put foo 200 PORT command successful. 150 Opening ASCII mode data connection for foo. 226 Transfer complete. local: foo remote: foo 13 bytes sent in 0.00019 seconds (66.82 Kbytes/s) Socksは別のマシンでSocks5-v1.0r10が動いており、設定も問題ないと考えています。いずれも、OSはSolaris 7です。明示的にbinary/asciiモードの両方で試しましたが、同じ結果です。なお、送信するファイルの種類に依存しません。 なぜ「Bad file number」でファイルのオープンがはじかれるのか、情報をお持ちの方、是非、知恵を貸して下さい。

  • Cyberduckでアップロードができません

    昨日までは普通にアップロードできていたのに、 いきなりできなくなってしまいました。 下に出てきた文章、そのままのせます。 FTP エラー:アップロードに失敗しました /index.html index.html: Read-only file system ログ NOOP 200 NOOP command successful NOOP 200 NOOP command successful CWD / 250 CWD command successful PASV 227 Entering Passive Mode (125,100,100,16,166,44). STOR index.html 550 index.html: Read-only file system FTPのこと、全くわからないので、 どなたか助けてください。お願いします。

    • 締切済み
    • Mac