Pythonの組み込みHTTPサーバーで手軽にファイル転送を行う方法
ネットワーク経由でファイルを転送するニーズは頻繁に発生します。GNU/Linuxシステムには、そのためのプロトコルやツールが数多く用意されています。SMB、AFP、NFSなど比較的恒久的なファイル共有を目的としたものもあれば、Secure Copy(SCP)のように手動操作やスクリプトによる手軽なファイル転送に使われるものもあります。その中でもHTTP(HyperText Transfer Protocol)は、World Wide Webの基盤となる汎用性の高いプロトコルです。
多くのLinuxディストリビューションにデフォルトで含まれているPythonは、「SimpleHTTPServer」および「http.server」モジュールを通じてシンプルなHTTPサーバー機能を提供します。前者はPython 2の標準ライブラリに、後者はPython 3に含まれています。これらの軽量HTTPサーバーは別途インストールが不要で、コマンド1つで即座に起動できるのが大きな魅力です。
Pythonのインストール
ほとんどのシステムには、少なくとも1つのバージョンのPythonがすでにインストールされているはずです。もし入っていない場合は、各ディストリビューション標準のパッケージマネージャーを使ってPython 3をインストールしてください。
例えば、DebianやUbuntuでは以下のコマンドを実行します。
sudo apt update sudo apt install -y python3
HTTPサーバーの起動
まず、送信側マシンが使用しているIPアドレスを確認します。
ip a s

続いて、以下のコマンドでインストールされているPythonのバージョンを確認しましょう。
python --version python3 --version
同じマシン上で、転送したいファイルが格納されているディレクトリへ移動します。ここで重要な注意点として、Python HTTPサーバーが稼働している間、カレントワーキングディレクトリ内のすべての内容が、ネットワーク上の誰からでもアクセス可能になります(送信側マシンがグローバルIPアドレスを持っている場合は、インターネット全体からアクセスされる可能性もあるので要注意です)。
cd /path/to/files/
記述例:
cd /home/user/Documents/
これでHTTPサーバーを起動できます。Python 2.xの場合はSimpleHTTPServerモジュールを使用します。
python -m SimpleHTTPServer
Python 3.xの場合はhttp.serverモジュールを使用します。
python3 -m http.server
どちらもデフォルトではポート8000で待ち受けますが、モジュール名の後にポート番号を明示的に指定することも可能です。
python -m SimpleHTTPServer [port] python3 -m http.server [port]
注意: 1024未満のポート番号を使用する場合は、root権限が必要です。
ファイルのダウンロード
受信側マシンでは、任意のHTTPクライアントを使ってファイルをダウンロードできます。GUI環境を使用している場合は、コマンドラインツールよりもブラウザの方が便利なことが多いでしょう。ブラウザで「https://IP_ADDRESS:8000」にアクセスし(IP_ADDRESSは送信側コンピュータのIPアドレス)、目的のファイルをクリックしてダウンロードするだけで完了です。

あるいは、WgetやcURLといったコマンドラインツールでファイルを取得することもできます。通常、どちらか一方または両方がすでにインストールされているはずですが、もし両方ともない場合はWgetの導入をおすすめします。より使いやすく、ディレクトリ全体の一括ダウンロードにも対応しているためです。
DebianおよびUbuntuの場合:
sudo apt install wget
RHELおよびCentOS 6/7の場合:
sudo yum install wget
FedoraおよびRHEL/CentOS 8の場合:
sudo dnf install wget
Wgetを使ったダウンロード
Wgetで単一のファイルをダウンロードするには、対象ファイルのURLを指定して実行するだけです。
wget https://IP_ADDRESS:8000/filename

また、コマンドラインオプション「-r」を付けると、ディレクトリ全体を再帰的にダウンロードすることもできます。
wget -r https://IP_ADDRESS:8000/

cURLを使ったダウンロード
デフォルト設定のcurlは、ファイルの内容をターミナルに表示しようとします。ファイルとして保存したい場合は、「-o」オプションで保存先のファイル名を指定します。
curl https://IP_ADDRESS:8000/filename -o filename

まとめ
Python標準ライブラリのHTTP機能は、基本的でありながら高速かつ手軽なファイル転送手段を提供しており、一時的なファイル共有などのシナリオで非常に便利です。ただし、この方法は暗号化も認証もない素のHTTPであるため、機密性の高いファイルを誤って公開してしまわないよう、十分に注意して使用してください。
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c
-
LinuxでSCPを使ってファイルを安全に転送する方法を徹底解説
Linuxサーバーへアクセスする方法はいくつかあります。GUI(ユーザーインターフェース)付きのサーバーであればVNCを利用できますが、より一般的なのは、SSH(Secure Shell)を使ってヘッドレスサーバーにログインする方法です。SSHは暗号化された安全なプロトコルで、SSHクライアント経由でリモートシステムにアクセスできます。しかし、単にファイルをサーバーへ送りたいだけという場面もあるでしょう。そんなときに便利なのが「SCP(Secure Copy)」です。SCPは堅牢なSSHプロトコル上で動作し、ネットワーク越しに素早くファイルをリモートシステムへ転送できます。この記事では、Li