MacOSCatalinaでFTP

自分のメモがわりに書いてますが、もし誰かの役に立てればいいなって思います。

# 背景：リモートワークでファイル共有したい
2020年05月、在宅勤務に慣れてきて余裕が少し生まれました。
そこで、ファイル共有方法で何かいいのがないか探しました。今までは、社内ネットワーク経由でファイル共有をしていたので速度とかどうネットに繋がってるかとかは気にしてませんでした（管理部の方がいい環境を用意してくれてます、本当にありがたいですね・・・）

VPN接続も提供してくださって社内ファイルにアクセスはできましたが、動画などの大きいファイルを共有するときにちょっと不安定になりました。Macとの相性が悪いんでしょうか・・・？

そこで管理部の方がftpサーバを用意してくださいました。
Windows環境で試したところ、従来のアップロード方法よりも安定してあげることができました！わ〜い
でもMacでやると・・・読み取り専用になります。

## 試した方法
MacのFinderからサーバに接続することはできます。
![Screen Shot 2020-05-25 at 13.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488302/fc6fe42a-f72f-ad20-a197-d702556aa27a.png)

これを選択すると、接続したいサーバの名前やアドレスなどなど聞かれます。これでftp://なんちゃらとやって無事接続は成功しましたが、なぜか読み取り専用になりました。手元では設定を変えられず、サーバ側ではむしろちゃんと読み書きできるよう権限が付与されておりました。

なぜなの？？

### 原因
Apple側が、High SierraからTelnetやFTPを抜き取ったらしいです。セキュリティの都合上とおっしゃっているようです。
公式見解というわけじゃないのですが、[ここ](https://discussions.apple.com/thread/8093031)ではftpコマンドがないよって言われてますね。
後、[こちら](https://osxdaily.com/2018/08/07/get-install-ftp-mac-os/)にも書いてありますね。記事の中では、推測ではあるがtelnetやftpよりもSSHやSFTPの方にシフトしたんじゃない？と書いてあります。

### 解決
というわけで、brewを使ってインストールしちゃいましょう。これから入れるやつは元々Appleのものと同じみたいですが、一応自己責任でお願いします！ちなみに`inetutils`だとバグがありそうですので、こちらを使うといいみたいですよ。[ここ](https://apple.stackexchange.com/questions/299758/how-to-get-bsd-ftp-and-telnet-back-in-10-13-high-sierra/312273#312273)から引っ張ってきています。

```
# NFTP client & server (formerly known as LukeMFTP, presumably due to being developed by Luke Mewburn 
# and has been the default FTP for default FTP client included with NetBSD, FreeBSD, OpenBSD, DragonFly BSD, 
# Darwin (macOS), and MidnightBSD)
brew install tnftp 
brew install tnftpd 

# Telnet client & server
brew install telnet 
brew install telnetd
```

それか全部いっぺんに入れちゃうこっち。

```
brew install tnftp tnftpd telnet telnet
```

## れっつ使ってみましょう
(したの使い方はミスってます・・・)

```terminal
~ >> ftp user-name@WRITE.SERVER.ADDRESS.HERE
ftp: user-name@WRITE.SERVER.ADDRESS.HERE: codename nor servname provided, or not known
```

SSHの時とはやり方が違うんですね笑
こちらが正解です。

```terminal
~ >> ftp
ftp> open WRITE.SERVER.ADDRESS.HERE
(省略)
Name (WRITE.SERVER.ADDRESS.HERE:user): WRITE_SERVER_USER_NAME_HERE
331 User WRITE_SERVER_USER_NAME_HERE OK. Password required
Password:
230 OK. Current directory is /
ftp>
```
サーバのIPアドレス、ユーザネームとパスを入力するとサーバに接続できました♪

### コマンド
サーバ内の動き方やファイルの読み書きは少しだけいつもと異なります。
[こちら](https://www.dummies.com/software/how-to-use-ftp-from-terminal-to-transfer-mac-files/)に書かれております。
より詳しくは[こちらの記事](https://eng-entrance.com/linux-command-ftp#mput)がありました。下の表にある程度まとめて書きます。

|Command|Description|
|:----:|----|
|ftp|FTPを開始するときに|
|quit|FTPを終了するときに|
|ls|FTPサーバ内の現在の階層にあるファイルを表示|
|cd|FTPサーバ内を移動する、タブ補完は効かない？|
|lcd|Localデバイス内を移動するのに使います。これでサーバに移したいファイルがある階層（orサーバからコピーしたファイルを置く階層）に移りましょう。ちなみにこちらはタブ補完効きますが、毎回半角スペース付きで出てきます。|
|bin|Plain-textファイルでないファイルを転送するために使います。バイナリーモードに移行！|
|ascii|テキストファイルを転送するためにASCIIモードに移行！|
|get|単一のファイルを__FTPサーバからローカル__に転送するコマンド。`get FILENAME`|
|mget|`get`と同様ですが、転送したいファイルが複数あるときにはこちらを。*とか?が有効です。|
|put|単一のファイルを__ローカルからFTPサーバ__に転送するコマンド。ローカルの階層を参照するのでタブ補完効きますよ！`put FILENAME`|
|mput|`put`と同様ですが、転送したいファイルが複数あるときにはこちらを。*とか?が有効です。|

mputをやるとファイル一個一個、丁寧に「このファイル転送していい？」って聞いてくるので若干もどかしいです・・・全部やっていいから・・・`-y`のオプションとかないんですかね？
__あるそうです！__
~~`mput`と`mget`にオプションで`-i`がありますね。~~
最初にftpを開始する際に以下のように-iオプションをつけちゃえばいいのです。ただ、ファイルの上書きなどは自動でされるので注意しながら行いたいですね。ちなみに-vオプションもあり、これでftpサーバで処理した内容を表示させることもできますよ。

```
ftp -i
```

後もう一点。ファイル転送サービスであるため、サーバ内のファイルの移動用のコマンドは用意されていないようです・・・なので転送先には十分気を付けましょう（WindowsのFFFTPならできますよ）


それでは、以上になります。良いリモートワークライフを〜！