2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# IT未経験からインフラ学習5回目:Linuxでポート番号・localhost・HTTPサーバーを触ってみた

2
Posted at

はじめに

どうも。
インフラ/クラウドエンジニアを目指して、毎回Linuxコマンドにわからされとる新人1年目です。

ここまでの流れをざっくり振り返ると、だいたいこんな感じ。

1回目、気づいたら /root におった。
管理者権限の玉座に、なぜか強制着席。傀儡の王、ここに爆誕や。

2回目、rm -r の強さを知った。
「これ会社で雑に打ったら、たぶん普通に終わるやつやん……」と、静かに悟った。

3回目、ログ確認・リダイレクト・パイプを練習。
grep と sort | uniq -c を打って、「あれ、おれ今ちょっとインフラっぽいことしてへん?」と勘違いした。

4回目、IP・DNS・ping・curl を触った。
HTTP/2 200 が返ってきて「勝ったな」と思った。
実際は通信が通っただけ。浮かれるの、毎度早すぎる。

そして今回。
ポート番号・localhost・HTTPサーバー です。

出ました。
急にサーバーっぽい単語が並びはじめた。

「8000番ポートで待ち受ける」とか「localhostにcurlする」とか、字面だけ見たらもう完全に"仕事してる人"のそれ。
中身はまだバリバリ初心者なんやけど、見た目だけはちょっとずつインフラっぽくなってきました。
見た目から入るの、大事。知らんけど。

やることはシンプルで、Pythonの簡易HTTPサーバーを立てて、ss で待ち受けポートを見て、curl でアクセスして、最後に server.log を読む。この一連の流れを通しでやってみます。

※この記事は、Linux初心者が localhost:8000 にアクセスして、ちょっとだけサーバー運用してる気分になった記録です。


今回やること

ざっくり並べるとこのへん。

  • ポート番号の意味を知る
  • TCP / UDP をざっくり理解する
  • HTTP / HTTPS の代表的なポートを確認する
  • ss -tuln で待ち受けポートを見る
  • Pythonの簡易HTTPサーバーを起動する
  • curl で localhost:8000 にアクセスする
  • server.log を確認する
  • ps でプロセスを探す
  • kill でHTTPサーバーを止める

学習環境

項目 内容
OS Windows
Linux環境 WSL / Ubuntu
ユーザー名 tama
作業ディレクトリ /home/tama/infra-study/linux-lesson5
Python Python 3.12.3

今回のゴール

今回のゴールは、ローカルでHTTPサーバーを立てて、ポート番号・待ち受け・アクセスログの流れを通しで体験することです。

チェックリストにするとこんな感じ。

  • 5回目用フォルダを作成する
  • Python3が使えるか確認する
  • index.html を作成する
  • Pythonの簡易HTTPサーバーを起動する
  • ss -tuln で8000番ポートの待ち受けを確認する
  • curl で localhost:8000 にアクセスする
  • curl -I でヘッダーを確認する
  • server.log を読む
  • ps でプロセスを確認する
  • kill でサーバーを停止する

これ全部できたら、今回はもう合格でええことにします。


1. 5回目用フォルダを作成する

まずは今回の作業部屋を用意します。

mkdir -p ~/infra-study/linux-lesson5

やってることは、~/infra-study の中に linux-lesson5 というフォルダを作る、それだけ。
-p は、途中のフォルダがまだ無くてもまとめて作ってくれる指定です。地味やけど便利。

で、作ったフォルダへ引っ越し。

cd ~/infra-study/linux-lesson5

ちゃんと着いたか、現在地を確認します。

pwd

実行結果:

/home/tama/infra-study/linux-lesson5

うん、ちゃんと5回目用フォルダにおる。

pwd はもう反射で打ちます。
迷子防止。
Linux初心者、ほんまに気づいたら知らん場所におるので。……私です。


2. ポート番号とは何か

ネットワーク通信では、IPアドレスだけやなくて ポート番号 ってやつも使います。

ざっくりイメージするとこう。

IPアドレス = 建物の住所
ポート番号 = 建物の中の受付窓口

同じサーバー(建物)でも、

  • Webサイト用の入口
  • SSH接続用の入口
  • データベース用の入口

みたいに、用途ごとに窓口がちゃんと分かれてる、と。
入口を間違えたら門前払い、って考えると分かりやすいかもしれません。

よく見るポート番号はこのあたり。

ポート番号 用途
22 SSH
53 DNS
80 HTTP
443 HTTPS
3306 MySQL
5432 PostgreSQL
8000 開発用HTTPサーバーなど

今回の主役は 8000 番ポートです。

8000番、開発環境でめっちゃ見る顔してる。
まだ友達ではない。


3. TCP / UDP をざっくり理解する

通信には大きく分けて TCP と UDP があります。

種類 ざっくり説明 使われる例
TCP 相手と接続して、届いたか確認しながら通信する HTTP, HTTPS, SSH
UDP 細かい確認は省いて、軽く速く送る DNS, 音声通話, 動画配信など

今の段階で完璧に理解しようとせんでもよさそう。
とりあえずこれくらいの粒度で覚えときます。

Web通信やSSHはだいたいTCP
DNSはUDPも使う

深掘りしたらたぶん沼。
今は入口だけ覗いて、そっと閉じます。足取られたないので。


4. Python3が使えるか確認する

今回はPythonの簡易HTTPサーバーを使うので、まずはPython3が動くか確認。

python3 --version

実行結果:

Python 3.12.3

おった。使える。

Python、ここで登場。
Linux学習してるはずやのに急にPythonが顔出してきて、「お前も来るんかい」とちょっと笑いました。

とはいえ今回はプログラムをガッツリ書くわけやなくて、Pythonにもともと付いてる簡易HTTPサーバー機能を借りるだけ。お世話になります。


5. 表示用のindex.htmlを作成する

HTTPサーバーで返すための中身を用意します。

echo "Hello from Linux lesson 5" > index.html

index.html ってファイルを作って、その中に Hello from Linux lesson 5 と書き込む、という意味。

ちゃんと書けてるか中身を確認。

cat index.html

実行結果:

Hello from Linux lesson 5

HTTPサーバーにアクセスしたら、この文字が返ってくる予定です。
予定。
初心者なんで、まだ何が起きるか完全には信じてません。


6. Pythonの簡易HTTPサーバーを起動する

いよいよ本番。8000番ポートでHTTPサーバーを立ち上げます。

python3 -m http.server 8000 > server.log 2>&1 &

一行に色々詰まってるので、分解するとこう。

部分 意味
python3 -m http.server 8000 8000番ポートで簡易HTTPサーバーを起動
> server.log 標準出力を server.log に保存
2>&1 標準エラーも標準出力と同じ場所へ送る
& バックグラウンドで実行

2>&1 が出てきた瞬間、ちょっと顔が曇った。

3回目で標準出力と標準エラーをやってるので、なんとなくは分かる。
でも、ほんま「なんとなく」。
今は「エラーも同じログにまとめとくやつ」くらいの理解で握っておきます。完璧は後回し。


7. ssで8000番ポートの待ち受けを確認する

サーバーがちゃんと立ったか、ss で確認します。

ss -tuln | grep 8000

意味は、待ち受け中のTCP / UDPポート一覧から 8000 を含む行だけ抜き出す、ということ。

実行結果:

tcp   LISTEN 0 5 0.0.0.0:8000 0.0.0.0:*

注目すべきはここ。

LISTEN
0.0.0.0:8000

要するに、

8000番ポートで接続待ちしている

ということ。
つまりPythonのHTTPサーバーが、8000番でちゃんとスタンバってる。

ss -tuln のオプション

オプション 意味
-t TCPを表示
-u UDPを表示
-l LISTEN中のものを表示
-n 名前解決せず、数字のまま表示

ss -tuln、字面はもう完全に呪文。
でも実務でめっちゃ出そうな顔してるので、覚えます。たぶん。


8. curlでlocalhost:8000にアクセスする

立てたサーバーに、curl で自分からアクセスしてみます。

curl http://localhost:8000

自分自身の8000番で動いてるHTTPサーバーへアクセスする、という意味。

実行結果:

Hello from Linux lesson 5

成功。
さっき index.html に書いた中身が、ちゃんと返ってきた。

流れにするとこう。

index.html を作る
↓
HTTPサーバーを起動する
↓
localhost:8000 にアクセスする
↓
index.html の中身が返ってくる

ちょっとサーバーっぽい。
いや、ちょっとやなくて、これもう実際サーバーやん。
簡易とはいえ、立派にサーバーしてる。


9. curl -Iでヘッダーだけ確認する

次は本文やなくて、ヘッダーだけ覗いてみます。

curl -I http://localhost:8000

ローカルHTTPサーバーにアクセスして、レスポンスヘッダーだけ表示する、という意味。

実行結果:

HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.12.3
Date: Mon, 22 Jun 2026 06:53:26 GMT
Content-type: text/html
Content-Length: 26
Last-Modified: Mon, 22 Jun 2026 06:36:23 GMT

まず見るのはここ。

HTTP/1.0 200 OK

意味はシンプルに、

HTTP通信が成功した

他の行もそれぞれ意味があります。

表示 意味
Server: SimpleHTTP/0.6 Python/3.12.3 Pythonの簡易HTTPサーバーが応答している
Content-type: text/html HTMLとして返している
Content-Length: 26 本文サイズが26バイト
Last-Modified ファイルの最終更新日時

Server: SimpleHTTP/0.6 Python/3.12.3 が出てるの、地味におもろい。

「はい、Pythonの簡易サーバーです」って、自分から自己紹介してくれてる。
礼儀正しいやん。


10. localhostとは何か

さっきから出てる localhost。これは自分自身を指します。

localhost = 自分自身
127.0.0.1 = 自分自身

なので、

curl http://localhost:8000

これは「自分自身の8000番ポートへアクセスする」という意味。

ほぼ同じことが、こっちでもできます。

curl http://127.0.0.1:8000

IPアドレス 127.0.0.1 を使って、自分自身の8000番へアクセスする、という意味。

localhost は自分自身。
ネットワーク初心者には、これかなり大事そう。

自分でサーバーを立てて、自分でアクセスする。
字面だけ見たら完全に一人芝居やけど、学習ではこれがめちゃくちゃ便利なんよな。


11. server.logを確認する

サーバーへのアクセス記録を見てみます。

cat server.log

HTTPサーバーのアクセスログを表示する、という意味。

実行結果:

127.0.0.1 - - [22/Jun/2026 15:53:06] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [22/Jun/2026 15:53:26] "HEAD / HTTP/1.1" 200 -

最初に見たときは、

127.0.0.1 - - [日時] "GET / HTTP/1.1" 200 -

みたいな謎の文字列にしか見えんかった。

またログや。
ログはいつも、無言で事実だけ突きつけてくる。

でも分解したら、意外とちゃんと読めます。


12. server.log の1行目を分解する

1行目はこれ。

127.0.0.1 - - [22/Jun/2026 15:53:06] "GET / HTTP/1.1" 200 -

バラすとこうなります。

部分 意味
127.0.0.1 アクセスしてきた相手。今回は自分自身
- - ユーザー情報など。今回は記録なし
[22/Jun/2026 15:53:06] アクセス日時
"GET / HTTP/1.1" HTTPリクエストの内容
200 ステータスコード。成功
- レスポンスサイズなど。今回は未記録

これは、さっきのこのコマンドに対応してます。

curl http://localhost:8000

ローカルHTTPサーバーにアクセスして、index.html の中身を取りに行ったやつ。

流れにすると、

curlで本文を取りに行った
↓
サーバーが200で返した
↓
server.logにGETとして記録された

ということ。
自分の行動が、ちゃんとログに刻まれてる。なんか嬉しい。


13. server.log の2行目を分解する

2行目はこれ。

127.0.0.1 - - [22/Jun/2026 15:53:26] "HEAD / HTTP/1.1" 200 -

これは、こっちのコマンドに対応してます。

curl -I http://localhost:8000

ローカルHTTPサーバーへアクセスして、レスポンスヘッダーだけ取りに行ったやつ。

curl -I は本文を取らずにヘッダーだけ確認するので、ログには GET やなくて HEAD と残ってる。
ちゃんと使い分けが記録されとるの、地味に賢い。

メソッド 意味 今回のコマンド
GET 本文も取得する curl http://localhost:8000
HEAD ヘッダーだけ取得する curl -I http://localhost:8000

今回はどっちも 200。

"GET / HTTP/1.1" 200
"HEAD / HTTP/1.1" 200

つまり、

本文取得も成功
ヘッダー確認も成功

やっとログの顔が見えてきた。
怖い顔してると思ってたら、ただの真面目な記録係やった。ごめんな。


14. プロセスを確認する

サーバーがどのプロセスで動いてるか、ps で探します。

ps aux | grep 8000

動いてるプロセス一覧から 8000 を含む行を探す、という意味。

実行結果:

tama 293 0.0 0.1 ... python3 -m http.server 8000
tama 337 0.0 0.0 ... grep --color=auto 8000

大事なのはこの行。

python3 -m http.server 8000

Pythonの簡易HTTPサーバーが、ちゃんと生きて動いてる証拠です。

先頭付近の 293 がPID。

PID = プロセスID

動いてるプログラムを識別する番号、ってことですね。

で、もう一個の、

grep --color=auto 8000

これは検索に使った grep 自身。

最初は「え、まだ何か動いてる?」ってなりがちやけど、これは検索コマンドそのものが一覧に映り込んでるだけ。
鏡に自分が写ってるだけ、みたいなもんです。びっくりせんでええ。


15. killでHTTPサーバーを停止する

確認したPIDを使って、サーバーを止めます。

kill 293

PIDが 293 のプロセスを終了する、という意味。

実行結果:

[1]+  Terminated python3 -m http.server 8000 > server.log 2>&1

Terminated = ちゃんと終わった、ということ。

念のため、止まったか確認。

ps aux | grep 8000

8000 を含むプロセスが残ってへんか見ます。

実行結果:

tama 339 0.0 0.0 ... grep --color=auto 8000

python3 -m http.server 8000 が消えて、grep だけになってる。
つまり、サーバーはちゃんと停止できました。

kill、名前がいちいち物騒。
でも今回は自分で立てた練習用サーバーを自分で畳んだだけなので、セーフ。完全にセーフ。


16. 今回の流れを図で整理する

ここまでの流れを通しで並べるとこう。

index.html を作成
↓
python3 -m http.server 8000 でHTTPサーバー起動
↓
ss -tuln で8000番ポートのLISTENを確認
↓
curl http://localhost:8000 で本文取得
↓
curl -I http://localhost:8000 でヘッダー確認
↓
server.log でアクセス記録を確認
↓
ps aux | grep 8000 でプロセス確認
↓
kill でサーバー停止

この流れ、かなり大事そう。

立てて、生きてるか確認して、アクセスして、ログを見て、最後にちゃんと止める。
「動かして、確かめて、片付ける」までが一周。
ちょっとだけ実務っぽい。ほんまにちょっとだけ。


17. 今回使ったコマンドまとめ

コマンド 意味
pwd 現在地を確認する
python3 --version Python3のバージョンを確認する
echo "..." > index.html index.html を作成する
python3 -m http.server 8000 8000番ポートで簡易HTTPサーバーを起動する
ss -tuln TCP / UDPの待ち受けポートを確認する
grep 8000 8000 を含む行だけ探す
curl http://localhost:8000 ローカルHTTPサーバーにアクセスする
curl -I http://localhost:8000 ヘッダーだけ確認する
cat server.log サーバーのアクセスログを表示する
ps aux 実行中のプロセスを表示する
kill PID 指定したPIDのプロセスを終了する

18. 今回のMarkdownチートシート的まとめ

今回も記事を見やすくするのにMarkdownを使いました。

Markdown記法 用途
# / ## / ### 見出し
* 箇条書き
- [x] チェックリスト
`command` インラインコード
```bash コマンド用コードブロック
```text 実行結果用コードブロック
> 補足・引用
--- 区切り線
表 コマンドやログの整理

Markdownを使うと、ただのメモでも一気に記事っぽい顔になる。

中身はまだ初心者やのに、表を挟むだけでちょっと賢そうに見える。
ありがたい話です。


19. 今回の学び

今回つかんだのはこのあたり。

ポート番号は通信先の窓口のようなもの
HTTPは基本80番、HTTPSは基本443番
開発用HTTPサーバーでは8000番などを使うことがある
ss -tuln で待ち受けポートを確認できる
LISTEN は接続待ち状態
localhost は自分自身
127.0.0.1 も自分自身
curl でHTTPアクセスを確認できる
curl -I はヘッダーだけ確認する
server.log にはHTTPサーバーへのアクセス記録が残る
GET は本文取得
HEAD はヘッダー取得
HTTPステータスコード 200 は成功
ps aux でプロセスを確認できる
kill でプロセスを停止できる

特に印象に残ったのは、ss -tuln と server.log。

ss -tuln | grep 8000 で 8000番が LISTEN してるのを見たとき、「あ、ほんまに待ち受けてるんや」って、ちょっと感動した。

あと、curl でアクセスした結果が server.log に GET や HEAD として残ってるのもおもろかった。

自分でアクセスする
↓
ログに残る
↓
ログを読む
↓
何が起きたか確認できる

これ、かなり大事そう。

ログは嘘をつかへん。
たぶん。
読み手の私が、嘘みたいに理解できてへんだけ。ぐすん。


20. 次回やること

次回はネットワーク基礎の続きとして、このへんを触りたい。

HTTP / HTTPS の違い
ステータスコードの追加確認
ポート番号の復習
DNSのもう少し詳しい仕組み
curlのオプション追加練習
ssコマンドの見方をもう少し深掘り

ここまでで curl・ping・getent hosts・ss と、通信確認っぽいコマンドがだいぶ増えてきました。

そろそろ頭の中のメモリが悲鳴あげてる。
でもまあ、地道にいきます。


まとめ

5回目は、ポート番号・localhost・HTTPサーバーを中心に学習しました。

今回できたことはこれ。

  • 5回目用フォルダを作成した
  • Python3のバージョンを確認した
  • index.html を作成した
  • Pythonの簡易HTTPサーバーを8000番ポートで起動した
  • ss -tuln | grep 8000 で待ち受けを確認した
  • curl http://localhost:8000 で本文を取得した
  • curl -I http://localhost:8000 でヘッダーを確認した
  • server.log でアクセスログを確認した
  • ps aux | grep 8000 でプロセスを確認した
  • kill でHTTPサーバーを停止した

まだまだ基礎の途中やけど、今回は「サーバーを動かして、確認して、止める」っていう一連の手触りがちゃんとあった。

今までより、少しだけインフラっぽかったです。
少しだけ。
調子には乗りません。たぶん。

次回も引き続き、ネットワーク基礎を進めていきます。

ほな、あでゆぅ!!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?