Skip to the content.

ネットワーク

OSI

OSI参照モデル レイヤー番号 TCP/IPモデル  通信規約
アプリケーション層 7 アプリケーション層 メール、web閲覧 HTTP, HTTPS, POP, SMTP, SSH, DNS, FTP
プレゼンテーション層 6 文字コード・圧縮・データ暗号/複合など文字の送り方を決める  
セッション層 5 アプリケーション感の一連の継続的な処理を規定(ログイン状態持続のこと)  
トランスポート層 4 トランスポート層 ポート番号の割当などセッションを開始するための事前の到着順序確認 TCP, UDP
ネットワーク層 3 ネットワーク層 IPアドレスの割当、ルーティング方法を規定 IP, ICMP, ARP, BGP
データリンク層 2 物理層 MACアドレスによるノード間の通信 Ethernet, PPP
物理層 1 ビットによるコンピュータ間の物理的なデータ伝送形式を規定  
         

URL

WHATWG URLの構造

┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│                                            href                                             │
├──────────┬──┬─────────────────────┬─────────────────────┬───────────────────────────┬───────┤
│ protocol │  │        auth         │        host         │           path            │ hash  │
│          │  │                     ├──────────────┬──────┼──────────┬────────────────┤       │
│          │  │                     │   hostname   │ port │ pathname │     search     │       │
│          │  │                     │              │      │          ├─┬──────────────┤       │
│          │  │                     │              │      │          │ │    query     │       │
"  https:   //    user   :   pass   @ sub.host.com : 8080   /p/a/t/h  ?  query=string   #hash "
│          │  │          │          │   hostname   │ port │          │                │       │
│          │  │          │          ├──────────────┴──────┤          │                │       │
│ protocol │  │ username │ password │        host         │          │                │       │
├──────────┴──┼──────────┴──────────┼─────────────────────┤          │                │       │
│   origin    │                     │       origin        │ pathname │     search     │ hash  │
├─────────────┴─────────────────────┴─────────────────────┴──────────┴────────────────┴───────┤
│                                            href                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

HTTP

HTTPヘッダー

User-Agentとは

Webブラウザの固有情報。ブラウザーなどの種類を表す情報で、サーバーはブラウザーなどの種類によっても、異なる結果を返す可能性がある

Referrerとは

直前にリンクされていたURL


HTTPメソッド

操作 CRUD HTTPメソッド
登録 Create POST, PUT
取得 Read GET
更新 Update PUT
削除 Delete DELETE
メソッド 主な用途 特徴・補足
GET データ取得 最もよく使われる。副作用がない(読み取り専用)。キャッシュ対象
HEAD ヘッダーのみ取得 GETと同じだが、レスポンスボディなし。確認用に使う
POST 新規作成・データ送信 フォーム送信、APIでの作成、ログインなど。副作用あり
PUT データの完全更新 指定リソースを丸ごと上書き。冪等(同じリクエストなら同じ結果)
PATCH データの部分更新 指定リソースの一部のみ変更。PUTと違って差分のみ送信
DELETE リソース削除 指定リソースを削除。冪等
OPTIONS 利用可能なメソッド確認 サーバがサポートしているメソッドを返す。CORSで使われる。
TRACE デバッグ用 クライアント→サーバ間の経路をそのまま返す(セキュリティ上ほぼ使われない)
CONNECT プロキシトンネル確立 HTTPSのトンネル接続などに使う(一般のAPIではほぼ使わない)
GET    /users/123       → ユーザー情報の取得
POST   /users           → ユーザー新規作成
PUT    /users/123       → ユーザー情報を全更新
PATCH  /users/123       → ユーザー情報を部分更新
DELETE /users/123       → ユーザー削除

システム情報

ホストネーム

# 以下どのコマンドも確認可能
cat /etc/hostname  
hostnamectl status
hostname
getent hosts
# 以下どちらでもOK
hostnamectl set-hostname ホストネーム名
hostname 'ホストネーム名'

こちらを参考

# macで操作前提
# /private/etc/hostsに記述

### ALBなどの任意のIPを登録
111.111.xxx.yyy example.com

タイムゾーン

timedatectl status
cat /etc/localtime
# まずはバックアップ
cp /etc/localtime /etc/localtime.org
# 以下どれらかでOK。元ファイルはどちら(Asia/TokyoもJapan)も同じ
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
cp /usr/share/zoneinfo/Japan /etc/localtime
timedatectl set-timezone Asia/Tokyo

ロケール

# ロケールを確認
locale
localectl

# ロケール変更するための日本語言語パックのインストール
yum install glibc-langpack-ja  # amazonlinux2やcentos7など
dnf install langpacks-ja       # amazonlinux2023やcentos8など

# 使用可能なロケール一覧
locale -a

# ロケール変更パターン1
export LC_ALL=ja_JP.UTF-8
# ロケール変更パターン2
echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n
# ロケール変更パターン3
localectl set-locale LANG=ja_JP.UTF-8
apt update && apt install -y locales

# ja_JP.UTF-8の行のコメントを解除
sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen
# locale-gen を使うと、/etc/locale.gen ファイルに指定されたロケールが有効化され、システムで使用可能になる
locale-gen
# システム全体でデフォルトとして使用されるロケール設定を更新する
update-locale LANG=ja_JP.UTF-8

IPアドレス

curl httpbin.org/ip

ip

# IPアドレスの確認
ip a
ip addr show
ifconfig # 古くて今はあまり推奨されていない
hostname -i|-I

# 下記のファイルのIPADDRの変更などでIPアドレスを変更可能
/etc/sysconfig/network-scripts/ifcfg* # OSのNICに関する定義を行うファイル

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0                        # 物理デバイス名
BOOTPROTO=dhcp                     # プロトコル
ONBOOT=yes                         # ブート時にこのデバイスをONにするかどうか
BROADCAST=192.168.0.255            # ブロードキャストアドレス
IPADDR=192.168.0.125               # IPアドレス
NETMASK=255.255.255.0              # ネットマスク
NETWORK=192.168.0.0                # ネットマスク
$ cat /etc/sysconfig/network
NETWORKING=yes              # ネットワーキングを有効にするかどうか
HOSTNAME=your.domain.name   # ホスト名
DOMAINNAME=your.domain.name # ドメイン名
GATEWAY=192.168.0.1         # デフォルトゲートウェイ
NOZEROCONF=yes

iptables

参考

# インストール
yum install iptables

# 特定のアクセスを制限したり、逆に許可したりし、その制限を確認する
iptables -L
# INPUTのみ採番して制限内容を表示する
iptables -nL INPUT --line-numbers
# 制限するときの例
iptables -A INPUT -p tcp -d 対象サーバIP --dport 3000(ポート番号) -j DROP
iptables -A INPUT -p tcp -s 10.0.0.0(IPアドレス) --sport 3000(ポート番号) --tcp-flags SYN,FIN,RST,ACK FIN,ACK -j DROP
iptables -A INPUT -p tcp -s 10.0.0.0(IPアドレス) --sport 3000(ポート番号) --tcp-flags PSH,ACK PSH,ACK -j DROP

ping

ネットワーク設定を反映

systemctl restart network

ポート

netstat -an | grep ポートナンバー
ss | grep ポートナンバー
lsof -i ポートナンバー # プロセス確認可能
nc -zv 対象ホスト名 ポート番号

ネットワークマネージャー

nmcli d
nmcli device show ens160

名前解決

nslookupは非推奨、digが推奨。hostコマンドとdigコマンドはIPアドレスを入力してドメイン名を逆引きしたりも可能

nslookup
>google.com
host google.com
dig google.com
# クエリするレコードタイプをNSで指定。デフォルトはA
dig NS google.com
# ボートの状態を確認。-vは冗長化
nc -zv 対象ホスト名 ポート番号
# サーバとして待受。-lはサーバーモードで待ち受け、-pはポート番号を指定
nc -l -p ポート番号

指定したホストまでの経路(ルーティング情報)を表示する

traceroute google.com
# 出力結果に 「*」 と表示されたら、その経路で問題が発生している可能性がある

ルーティングテーブルの参照や変更が可能(廃止予定でipコマンドへ移行が進んでいる)

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ip-192-168-x-x. 0.0.0.0         UG    0      0        0 eth0
instance-data.a 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.x.x     0.0.0.0         255.255.255.0   U     0      0        0 eth0

nice値

# nice値確認
ps -l
ps -c stress -o pid,ppid,args,ni,psr,wchan
top 

# nice値を変更して実行
nice -n 5 python sample.py
nice -20 [command]

稼働時間

uptime
>0:24  up 12 days,  1:36, 3 users, load averages: 1.69 2.10 2.02

ファイル系

ファイルタイプ確認

file -s 対象ファイル

ファイル上限数確認

ulimit -n ディレクトリ名

md5sum

md5sum ファイル名

サービス

systemctl list-unit-files --type=service
systemctl list-units --state=failed
# 基本的な使い方. -u で対象サービスを指定してログを確認
journalctl -u php-fpm
# -n 表示する行数を指定する
journalctl -n 5 -u php-fpm

パフォーマンス測定

vmstat

vmstat 秒サイクル 表示回数

vmstat 2 7

netstat

# 待機中も含めて全ポートを表示
netstat -a
# ホストやユーザーの名前解決を行わずにアドレス表示する
netstat -n
# リスニング中ソケットを表示
netstat -l

ss

# 待機中も含めて全ポートを表示
ss -a
# ホストやユーザーの名前解決を行わずにアドレス表示する
ss -n | grep ポートナンバー
# リスニング中ソケットを表示
ss -l

lsof

# 全てのプロセスについて表示する
lsof
# プロセス指定
lsof -p プロセス番号
# ネットワーク接続の状態を表示
lsof -i
# ポート指定
lsof -i:ポート番号
lsof -i:ポート番号,ポート番号 # 複数指定
# 特定のファイルを開いているプロセスを特定
lsof ファイルパス
# ユーザーを指定
lsof -u ユーザー名

sar

sar (System Activity Report)

インストール

yum install sysstat

コマンド例

# 基本
sar 5(インターバル秒数) 3(実行回数)
# CPU使用率
sar -u
# コアごとのCPU使用率表示
sar -P ALL
# メモリ使用率
sar -r
# ネットワーク負荷
sar -n DEV
# ディスクI/O
sar -d
# I/Oと転送率の状況
sar -b
# ロードアベレージ
sar -q
# ファイル保管場所指定
sar -r -f /var/log/sa/sa日付名
# 時間指定で情報を取得 -s 開始時刻  -e 終了時刻
sar -r -f /var/log/sa/sa日付名 -s "20:00:00" -e "23:00:00"

CPU

top(CPU、メモリ、プロセスの状態表示)

# リアルタイムにプロセスの状態表示が可能
top

q 終了
? or help ヘルプ表示
P CPU率でソート
M メモリ使用率でソート
T プロセス稼働時間の長さ順でソート


top - ①18:23:27 ②up 1 day, 21:32,  ③0 users,  ④load average: 0.00, 0.00, 0.00
# ①現在時刻 ②起動時間, ③ログインユーザー数, ④ロードアベレージ(1分、5分、15分平均)スレッド数(4つなら4)以上の数字だとCPUが忙しすぎるという意味になる
⑤Tasks:   2 total,   ⑥1 running,   ⑦1 sleeping,   ⑧0 stopped,   ⑨0 zombie
# ⑤合計プロセス数 ⑥稼働プロセス数 ⑦休止プロセス数 ⑧停止プロセス数 ⑨ゾンビプロセス数
%Cpu(s):  0.7 us,  0.2 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
# waはディスクがどれだけ忙しいかを表示。0が望ましい。0.1でもずっとその表示が続いていると忙しいという意味
KiB Mem :  4026796 total,   320084 free,   482340 used,  3224372 buff/cache
KiB Swap:  1048572 total,  1039796 free,     8776 used.  3036384 avail Mem
# メモリはavail Mem欄をよく確認
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 ec2-user  20   0    5276   3112   2696 S   0.0  0.1   0:00.13 bash
   45 ec2-user  20   0   10024   3732   3232 R   0.0  0.1   0:00.01 top
# %CPUでどのプロセスが何%CPUを使用しているか確認可能。ただし4つのスレッドがあれば許容量は400%になる

htop

topのグラフ表示機能が付属した機能がある。どのスレッドが忙しいかなど視覚的に確認可能

lscpu

CPUのコア数など確認可能

メモリ

free 
free -m       # メガバイト
free -g       # ギガバイト
free -h       # 適切な形態に併せて表示
free --total  # 空き領域の合計も併せて表示する

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3932         471         310         316        3150        2964
Swap:          1023           8        1015
# availableの表示を要確認
# buff/cache - 使用していないメモリをファイルの読み書きに当てたりする数字。この数字は高くてもそこまで気にしなくてもいい
# free以上のメモリが必要になるときはbuff/cacheもメモリが解放されて使用されるようになる

ディスク

df

df
df -kP      # ブロックサイズが1kで表示 P=POSIX出力形式
df -i       # i=inode情報を表示する
df -h       # サイズに応じて読みやすい単位で表示する
df -T       # ファイルシステムタイプを含めて表示する
df --total  # 空き領域の合計も併せて表示する

du

# 各ディレクトリやファイルごとに確認
du -sh ./*
du -h -d 1 . # カレントディレクトリ下の角ファイルやディレクトリのサイズを確認

lsblk

# HDD、SSD、USBフラッシュドライブ、パーティションなどのブロック単位(ブロックデバイス)の情報を表示する
$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       123:0    0  60G  0 disk
├─nvme0n1p1   123:1    0  60G  0 part /
└─nvme0n1p128 123:2    0   1M  0 part

# メジャー番号 (MAJ) はカーネル内でデバイスドライバを特定するための番号
# マイナー番号 (MIN) は特定のデバイスドライバ内で識別されるデバイスのインスタンスを表す番号

パーティション拡張

# パーティションのサイズを拡張する
sudo growpart /dev/nvme0n1(変更を加えたいディスクを指定する) 1(変更を加えたいパーティションを指定する部分、1は最初のパーティション(通常、ルートパーティション)を指す)

ファイルシステム拡張

# xfsファイルシステムのサイズを拡張する
sudo xfs_growfs -d(デバイスでサポートされる最大サイズまで増加させる) /(拡張対象のファイルシステム)

# ext(2/3/4)ファイルシステムのサイズを拡張する
sudo resize2fs /dev/nvme0n1p1(拡張対象のファイルシステム)

CPUアーキテクチャ

アーキテクチャ 概要 OS例
amd64 「AMD社」が発表したx86アーキテクチャを64bitに拡張したもの Windows、Linux、Intel Mac
intel64 「インテル社」が発表したx86アーキテクチャを64bitに拡張したもの Windows、Linux、Intel Mac
x86-64 amd64とIntel64を含んだ総称 Windows、Linux、Intel Mac
arm64/aarch64 スマホやタブレットなどで多く利用されているARMアーキテクチャを64bitに拡張したもの iOS、M1/M2 Mac、ARM版Windows
     

トラブルシューティング

アクセスできないときの調査手順やパターンに関して