Envaderにて、ftpコマンドを実践しながら学ぶ


30代後半、未経験からIT業界のエンジニア転職へ挑戦している、kobakichiです。

今回もEnvaderを利用して、Linuxのコマンドについて学んだので、その振り返りと言語化を兼ねて書いていきます。

今回学んだのは、ファイルの転送などをするときに使用するコマンドftpについてです。
私は全くこのコマンドを使うことは無いので、こういった用意された環境で実践しながら学べるのは本当にありがたい。

そして、ftpコマンドも奥が深いので、あくまで私が実践しながら感じたことを記事にしていることをご理解ください。

Envaderについてついて気になる方は、リンクを貼っておきますので参考にしてください。

Envaderコース一覧

今回使用したシナリオ

参考にさせていただいた記事等

OSI参照モデル

ファイル転送の「FTP」とは?通信の仕組みやデメリットなどを解説

ftpコマンドについて詳しくまとめました 【Linuxコマンド集】

FTP

FTP(File Transfer Protocol)は、サーバとクライアントの間でファイルの転送を行う時に必要な通信プロトコル。
他にはHTTPやIMAPなどなどあると思いますが、その内の一つ。

OSI参照モデルの第7層、アプリケーション層に該当。

FTPについてはこちらの記事が分かりやすかったです。
ファイル転送の「FTP」とは?通信の仕組みやデメリットなどを解説

ftpコマンド

Linux環境において、CUIでFTPサーバーとの通信をやり取りする時に使用するコマンド。

これを使用することで、FTPサーバーへ接続して、ファイルのアップロード、ダウンロード、さらにはアクセス権を変更したりなど、FTPサーバー内を色々と操作できるようになります。

ftpコマンドの注意点

ftpコマンドは、FTPサーバーへ接続する際の認証時のパスワードやデータ送受信の内容は一切暗号化されていないので、セキュリティは考慮できていません。
なので、実際に使用する際にはsftpコマンドやscpコマンド、またはSSH接続などを使用する方が良さそうです。

ftpコマンドの使い方

ftpサーバーへの接続

ftp サーバーのアドレス

# 例
ftp 172.10.10.5

こうすることで自分の接続したいftpサーバーを指定して、ログインやパスワードを入力する段階へ進む。

サーバーのアドレスを指定しないでftpコマンドだけ叩いた場合、ftpコマンドだけが起動し、待機状態になる。
この場合には、ftp openコマンドによりサーバーアドレスを指定することでftpサーバーへ接続が可能になる。

# 待機状態
envader@172-19-1-2:~$ ftp
ftp>

# openコマンドで接続先アドレスを指定
envader@172-19-1-2:~$ ftp
ftp> open 172.19.1.11

ftpコマンドのオプション

ここで紹介するオプションは2つ

オプション 説明
-v FTPサーバーの処理後のメッセージを表示する
-i FTPサーバーの処理後の確認メッセージを省略する

この意味がなかなか理解できなかったのですが、実際にコマンドを実行することで理解できました。

オプションを使うタイミングは、FTPサーバーへ接続する時。
そうすると、サーバーへ接続した後にオプションが適用された状態でサーバーとのやり取りができるようになります。

# 確認メッセージを表示する
ftp -v 172.19.1.11

# 確認メッセージを省略する
ftp -i 172.19.1.11

これを使うことで、複数のファイルをアップロードしたり、ダウンロードしたりした時に表示される確認メッセージを全部表示させるか、省略することができるようになります。

実際に比べてみます。

# ローカルに以下のファイルがある
envader@172-19-1-2:~$ ls
mydata.txt  test1.txt  test2.txt  test3.txt

# -vオプションでftpサーバーへ接続
envader@172-19-1-2:~$ ftp -v 172.19.1.11
Connected to 172.19.1.11.
220 (vsFTPd 3.0.3)
Name (172.19.1.11:envader): envader
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

# mputコマンドで複数のファイルをftpサーバーへアップロード
ftp> mput test*.txt
mput test1.txt? y
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
mput test2.txt? y
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
mput test3.txt? y
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.

# 一つのファイルをアップロードするごとに確認される。

どうでしょうか?
イメージはこんな感じです。

続いて-iオプションで確認メッセージを省略します。

# -iオプションで確認を省略
envader@172-19-1-2:~$ ftp -i 172.19.1.11
Connected to 172.19.1.11.
220 (vsFTPd 3.0.3)
Name (172.19.1.11:envader): envader
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

# mputで複数ファイルをアップロード
ftp> mput test*.txt
local: test1.txt remote: test1.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
local: test2.txt remote: test2.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
local: test3.txt remote: test3.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.

いちいち確認メッセージが表示されることなく、一気にアップロードができました。
オプションによって、こういった違いがあるんですね。

ftpコマンドの種類

ftpサーバー内では、使えるコマンドの種類があるようです。
Linuxコマンドが全て使えるわけでは無いので注意が必要ですね。

ftpコマンド一覧

一部ですが、一覧にてまとめました。

コマンド 説明
open サーバーに接続する
close FTPサーバーから切断する
quit FTPモードを終了する(exitでも可能)
put ローカルのファイルをアップロードする
get ftpサーバーからダウンロードする
mput 複数のファイルをアップロードする
mget 複数のファイルをダウンロードする
ls FTPサーバー内のファイルやディレクトリを一覧表示する
mkdir FTPサーバー内でディレクトリを作成する
chmod ファイルのアクセス権限を変更する
delete 指定したファイルを削除する

もっと知りたい場合には、ftpモードにして?コマンドを叩くとコマンド一覧が見れます。

何か分からないことや知りたいことがあった場合には?コマンドは便利そうです。

envader@172-19-1-2:~$ ftp
ftp> ?
Commands may be abbreviated.  Commands are:

!               dir             mdelete         qc              site
$               disconnect      mdir            sendport        size
account         exit            mget            put             status
append          form            mkdir           pwd             struct
ascii           get             mls             quit            system
bell            glob            mode            quote           sunique
binary          hash            modtime         recv            tenex
bye             help            mput            reget           tick
case            idle            newer           rstatus         trace
cd              image           nmap            rhelp           type
cdup            ipany           nlist           rename          user
chmod           ipv4            ntrans          reset           umask
close           ipv6            open            restart         verbose
cr              lcd             prompt          rmdir           ?
delete          ls              passive         runique
debug           macdef          proxy           send

まとめ

Envaderを利用して、ftpについて学んでみました。

個人的には-iオプションを使って確認メッセージを省略した方が使い勝手が良さそうなイメージでしたが、実際に業務で使われている方はどういった感じなのかが気になるところです。

最後まで読んでいただき、ありがとうございました。