Linuxのシステムを保守している技術者が日々直面するシーンとして、”特定のログファイルを取得する”という場面があるかと思います。
例えば、一日に1回、アプリケーションのログやミドルウェアのログを収集して、変なエラーが出てないか?を調査したりする場合ですね。
特に、サービスのローンチ直後はよくある場面かと思います。
今回は、TeraTermマクロを使って、ログイン→圧縮ファイル作成→ダウンロードを自動的に実施するマクロを紹介します。
いちいち、ログインしてー、ファイル圧縮してー、ダウンロードしてー、って面倒ですもんね!?
目次
環境情報
今回は、WindowsマシンにTeraTermがインストールされている状態を前提とします。
TeraTermを使って、Linuxサーバにログインします。
- クライアントOS:Windows7
- ターミナルエミュレータ:TeraTerm
- サーバOS:Linux
マクロを使って自動ログイン
自動ログインの部分は、以前、作成した記事を参照してください。
今回は、“パスの指定” “ダウンロード” の部分を中心に解説していきます。
マクロで自動ログインしてダウンロードまで
とりあえず、作成したマクロを紹介します。
このマクロで、“自動ログイン”→”対象フォルダへの移動”→”圧縮してダウンロード”が可能です。
; sample TeraTerm Macro ; ; FILE: fileGet.ttl ; create: 2019/07/21 ; Author: SakuSaku call login call setCur call dwnload sendln 'exit' end ; ; ログイン ; :login ; ホスト名とログインアカウントを定義 host = 'sakusaku.com:22' account = 'sakusaku' ; リモート認証に必要な固定文字列を定義 msg = 'Enter password for user ' strconcat msg account passwordbox msg 'Get password' ; 「msg」を作業領域とし、リモート認証に必要な文字列を作成する msg = host strconcat msg '/ssh /auth=password /user=' strconcat msg account strconcat msg ' /passwd=' strconcat msg inputstr ; 認証する connect msg return ; ; 指定フォルダに移動 ; :setCur ; 入力できる状態までまつ wait '$ ' ; フォルダを入力 inputbox 'フォルダを指定してください(/区切り):' 'フォルダ入力' strscan inputstr '/' if result <= 0 then messagebox '正しいパスを指定して下さい' 'エラー' end endif ; 指定されたフォルダに移動 cmd = "cd " strconcat cmd inputstr sendln cmd return ; ; ダウンロード ; :dwnload ; 入力できる状態までまつ wait '$ ' ; テキストファイルを、すべてzipファイル化 cmd = "find *.txt | zip -@ file.zip" sendln cmd ; 入力できる状態までまつ wait '$ ' ; 圧縮ファイルのフルパスを取得 sendln 'pwd' recvln recvln zipFile = inputstr strconcat zipFile '/file.zip' ; ダウンロード先のフルパスを取得 getdir localfile strconcat localfile '/file.zip' ; ファイルをダウンロード scprecv zipFile localfile return
それでは、ポイントを説明していきます。
ダウンロードマクロのポイント
loginメソッドのマクロについては、以下の記事を参照してください。
フォルダの指定はユーザ指定が可能
このマクロは、Linux上に存在する特定フォルダ配下のファイルを圧縮して、マクロが存在するクライアントPCの指定フォルダに圧縮ファイルをダウンロードします。
圧縮するファイルが存在するLinux上のフォルダですが、このマクロではユーザによる指定を可能としています。
マクロの「setCur」メソッドが、該当箇所になります。
具体的には以下の箇所。
inputbox 'フォルダを指定してください(/区切り):' 'フォルダ入力' strscan inputstr '/' if result <= 0 then messagebox '正しいパスを指定して下さい' 'エラー' end endif
inputboxで入力ダイアログを表示し、受け取った文字列に「」’/’を付加して、パスを作成しています。
マクロが存在するフォルダにダウンロード
ダウンロードするまでに、いくつかの処理があります。
まずは、圧縮ファイルを作成しています。
拡張子が「txt」のファイルを検索して、file.zipという圧縮ファイルにまとめています。
; テキストファイルを、すべてzipファイル化 cmd = "find *.txt | zip -@ file.zip" sendln cmd
次に圧縮ファイルのフルパス作成です。
ここでのフルパスは、Linux上にzipファイルのフルパスです。
現在フォルダ(pwd) + file.zip としています。
; 圧縮ファイルのフルパスを取得 sendln 'pwd' recvln recvln zipFile = inputstr strconcat zipFile '/file.zip'
最後にファイルダウンロードです。
注意しなければいけないのが、「localfile」になります。
これは、”マクロが存在する場所”になります。
ダウンロード自体は簡単で、「scprecv」を呼び出すだけです。
「scprecv」で、セキュアなファイルダウンロードが可能になります。
; ダウンロード先のフルパスを取得 getdir localfile strconcat localfile '/file.zip' ; ファイルをダウンロード scprecv zipFile localfile
まとめ
いかがでしたでしょうか?
TeraTermマクロを使って、ファイルをダウンロードするやり方がわかったかと思います。
- ユーザ入力は「inputbox 」で表示可能
- ファイルのダウンロードは「scprecv 」
それではまた。