2026/10/22

PHP / OS 更新チートシート(Amazon Linux 2023 / Apache + PHP-FPM)

- 対象環境:Amazon Linux 2023、PHP は AL2023 標準パッケージ(`php8.x*`)、Web サーバは Apache(`httpd`)+ PHP-FPM
- コマンド中の `php8.4` は、使用している PHP のバージョンに読み替える

---

## 1. PHP の更新

> AL2023 の dnf コマンドには `--releasever=latest` を付ける。付けないと、OS のリリースバージョンが固定されているため新しいパッケージが見えない。

### 1-1. 現状確認

```bash
# PHP バージョン(CLI / FPM の両方)
php -v
php-fpm -v

# インストール済み PHP パッケージ
rpm -qa | grep php
```

### 1-2. 未適用の修正版・セキュリティアドバイザリの確認

```bash
# 1) キャッシュを捨てて、最新の情報を取り直す(古いキャッシュだと新しいパッケージが見えない)
sudo dnf clean metadata

# 2) インストール済みの PHP パッケージに更新があるか(何も出なければ更新なし)
sudo dnf list --upgrades 'php8.4*' --releasever=latest

# 3) PHP 関連の未適用アドバイザリ(ALAS)
sudo dnf updateinfo list --security --releasever=latest | grep -i php

# 4) 特定の CVE に対応するアドバイザリがあるか(例:CVE-2026-109618)
sudo dnf updateinfo list --releasever=latest --cve CVE-2026-109618
```

- 1):2)〜4) の出力に表示される「メタデータの期限切れの最終確認」の日時が古い場合は、1) をやり直す
- 2):`dnf list available` はインストールしていないパッケージしか表示しないので、更新の確認には `dnf list --upgrades` を使う

**AWS 側の対応状況の確認先**

php.net で修正版が出ても、AL2023 のパッケージに反映されるまでは時間差がある(通常数日)。

| 確認したいこと | 確認先 |
|---|---|
| 特定の CVE の対応状況(パッケージごと) | `https://explore.alas.aws.amazon.com/<CVE番号>.html`    例:https://explore.alas.aws.amazon.com/CVE-2026-109618.html |
| AL2023 のセキュリティアドバイザリ一覧 | https://alas.aws.amazon.com/alas2023.html |

CVE ページの「Status」の見方:

| Status | 意味 | 対応 |
|---|---|---|
| Pending Fix | 影響あり、修正版を準備中 | 回避策を入れて、修正版が出るのを待つ |
| Fixed | 修正版を公開済み(ALAS 番号と公開日が載る) | 1-3 以降で更新する |
| No Fix Planned | 修正版は出ない予定(サポート終了のバージョンなど) | サポートされているバージョンへ移行する |
| Not Affected | 影響なし | 対応不要 |

PHP 本体の情報(脆弱性の内容、修正版のバージョン、回避策):

- PHP 公式のお知らせ:https://www.php.net/
- PHP のセキュリティアドバイザリ(技術的な詳細):https://github.com/php/php-src/security/advisories

### 1-3. バックアップ

- EC2 コンソールから **AMI またはスナップショットを取得**(切り戻し用)
- 複数台ある場合は、1台で更新・動作確認してから残りに展開する

### 1-4. 更新

```bash
# インストール済みの PHP 関連パッケージをすべて最新に(一覧を確認してから y)
sudo dnf upgrade --releasever=latest 'php8.4*'
```

- インストール済みの php8.4 関連パッケージ(拡張モジュールを含む)だけが最新版に置き換わる。パッケージの追加や削除はされない

### 1-5. 設定ファイルの競合を確認

```bash
# 何も出なければ競合なし
sudo find /etc/php* /etc/php-fpm* /etc/httpd -name '*.rpmnew' 2>/dev/null
```

- `/etc/php.ini`、`/etc/php.d/*.ini`、`/etc/php-fpm.d/www.conf` などの変更は上書きされない
- `*.rpmnew` が出た場合は、既存の設定との差分を確認する

### 1-6. サービスの再起動

```bash
sudo systemctl restart php-fpm   # 必須:PHP 本体の反映
sudo apachectl configtest        # 推奨:httpd の設定に問題がないか(Syntax OK を確認)
sudo systemctl reload httpd      # 推奨:httpd 用の設定ファイルの反映(接続は切れない)
```

PHP パッケージの更新では、次の2種類のファイルが置き換わるため、それぞれ反映する。

| 置き換わるもの | 反映方法 |
|---|---|
| PHP 本体(PHP-FPM で動いている) | `php-fpm` の再起動 |
| httpd 用の設定ファイル(`/etc/httpd/conf.d/php.conf` など。`.php` へのリクエストを PHP-FPM に渡す設定) | `configtest` で確認してから、httpd の `reload` |

### 1-7. 更新後の確認

```bash
# バージョン
php -v ; php-fpm -v
rpm -qa | grep php8.4

# サービスの状態
systemctl status php-fpm --no-pager   # active (running)、起動時刻が更新後になっているか
systemctl status httpd --no-pager     # active (running) か(reload では起動時刻は変わらない)

# 未適用の PHP アドバイザリが残っていないか(何も出なければ OK)
sudo dnf updateinfo list --security --releasever=latest | grep -i php

# エラーログ
sudo tail -n 50 /var/log/php-fpm/error.log
sudo tail -n 50 /var/log/httpd/error_log
```

- ブラウザで各サイトの主な画面を確認する(ログイン、DB 参照、画像やファイルのアップロードなど、使用している拡張モジュールに関わる処理)

### 1-8. 定期確認(新しい修正が出ていないか)

```bash
sudo dnf clean metadata
sudo dnf list --upgrades 'php8.4*' --releasever=latest
sudo dnf updateinfo list --security --releasever=latest | grep -i php
```

- 更新が表示されたら、1-3〜1-7 を行う
- 修正待ちの CVE がある場合は、1-2 の CVE ページで Status が「Fixed」になったかも確認する

---

## 2. OS 全体の更新

### 2-1. リリースバージョンの固定状況の確認

AL2023 のリポジトリには日付付きのバージョン(例:`2023.10.20260120`)があり、各サーバーは**起動に使った AMI のバージョンに固定**される。

- 普通の `dnf upgrade` は、固定されたバージョンの範囲内でしか更新しない
- 新しいバージョンのパッケージを入れるには `--releasever=latest`(または特定の日付)を指定する
- 自分でバージョンを進めないと、セキュリティ修正も入らない(構築時のバージョンのまま取り残される)

```bash
# 今固定されているリリースのバージョン
rpm -q system-release

# 新しいリリースがあるか(出力にリリースノートの URL も表示される)
sudo dnf check-release-update

# 未適用のアドバイザリ件数
sudo dnf updateinfo summary --releasever=latest
```

- AL2023 のリリースノート:https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html

### 2-2. 事前準備

**バックアップ**

- EC2 コンソールから AMI またはスナップショットを取得する
- 可能であれば、本番の AMI から検証用のインスタンスを起動して先に試す

```bash
# /etc 全体のバックアップ(更新後の比較用)
sudo tar czf /root/etc-backup-$(date +%Y%m%d).tar.gz /etc
```

**変更した設定ファイルの確認**

パッケージに含まれるファイルを、インストール時の状態と比べて、内容を変更したものを洗い出す(全パッケージを調べるため数分かかる)。

```bash
# 1) 内容を変更した「設定ファイル」(更新しても基本的に変更は残る)
sudo rpm -Va 2>/dev/null | grep '^..5' | awk '$2=="c"'

# 2) 内容を変更した「設定ファイル以外」(更新で上書きされて変更が消える → 要対応)
sudo rpm -Va 2>/dev/null | grep '^..5' | awk '$2!="c"'
```

出力の例と見方:

```
S.5....T.  c /etc/httpd/conf/httpd.conf     ← 1) に出る:設定ファイル
S.5....T.    /usr/lib/systemd/system/xxx.service   ← 2) に出る:設定ファイル以外
│ │    │   │
│ │    │   └ "c" があれば設定ファイル(なければ空欄)
│ │    └ T:更新日時が変わっている
│ └ 5:内容が変わっている(grep '^..5' でこれを含む行だけに絞っている)
└ S:サイズが変わっている
```

- 先頭の9文字は、インストール時から変わった項目を表す(変わっていない項目は `.`)
- `rpm -Va`:インストール済みの全パッケージ(`-a`)のファイルを検証(`-V`)する
- 2) に出たファイルは、更新前に変更内容を控えておくか、上書きされない場所(systemd なら `/etc/systemd/system/`)に移しておく

更新時の設定ファイルの扱い:

| 設定の種類 | 更新時の動き |
|---|---|
| 自分で新しく作ったファイル(例:`/etc/httpd/conf.d/サイト名.conf`) | 影響なし |
| パッケージ付属の設定ファイルを編集したもの | 基本的に残る。新しい標準設定は `*.rpmnew` として置かれる |
| 同上だが、パッケージ側が「上書き」指定にしているもの(少数) | 新しいものに置き換わり、元のファイルは `*.rpmsave` として退避される |
| パッケージ付属の、編集していない設定ファイル | 新しいバージョンのものに黙って置き換わる |
| 設定ファイル以外を直接編集したもの(例:`/usr/lib/systemd/system/*.service`) | 上書きされて変更が消える |
| サービスの自動起動設定、ユーザー、cron、`/var/www` のデータなど | 影響なし |

- `/usr/lib/systemd/system/` 配下などを直接編集している場合は、更新前に `sudo systemctl edit サービス名` で `/etc/systemd/system/` 側の上書き設定に移しておく

### 2-3. 更新

```bash
# OS 全体を最新リリースに更新(一覧を確認してから y)
sudo dnf upgrade --releasever=latest
#   特定のバージョンに揃えたい場合は日付を指定する
#   sudo dnf upgrade --releasever=2023.12.20261016

# 再起動が必要か確認して、必要なら再起動
sudo dnf needs-restarting -r
sudo reboot
```

- 更新の中で `system-release` パッケージも新しくなり、固定先がそのバージョンに進む

### 2-4. 更新後の確認

```bash
# 固定先が進んだか
rpm -q system-release            # 新しい日付になっていれば OK
sudo dnf check-release-update    # 新しいリリースが表示されなければ最新

# 設定ファイルの競合(.rpmnew:新しい標準設定 / .rpmsave:元の設定が退避されたもの)
sudo find /etc \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null

# 退避された設定がある場合は差分を確認して、必要な変更を戻す
sudo diff /etc/xxx.conf.rpmsave /etc/xxx.conf

# 起動に失敗しているサービスがないか
systemctl --failed
sudo apachectl configtest
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
```

- 1-7 と同様に、エラーログとブラウザでの動作を確認する

### 2-5. 定期的な更新の運用

- 固定先を定期的に進める(`sudo dnf upgrade --releasever=latest`)。SSM Patch Manager で自動化するのもおすすめ
- `/etc/dnf/vars/releasever` に `latest` と書くと、常に最新のリポジトリを見るようになる(ただし勝手にリリースが進むので、検証環境と本番環境でバージョンを揃えたい場合は、毎回 `--releasever` を明示的に指定する運用にする)
- 新しいサーバーを構築するときは、パッケージをインストールする前に `sudo dnf upgrade --releasever=latest` で最新リリースに上げておく(AMI 作成時点のバージョンに固定されているため)

---

## おまけ:作業ログの記録

```bash
# プロンプトに日時を表示する(コマンドごとの時刻がログに残る。このログイン中だけ有効)
export PS1='[\D{%F %T}] \u@\h:\w\$ '

# 記録開始(入力したコマンドと出力をファイルに記録。-a:追記 / -f:すぐ書き込む)
script -a -f ~/worklog_$(date +%Y%m%d_%H%M).log

# 記録終了
exit
```

2026/10/09

nslookup チートシート

## 1. 基本の書式

```
nslookup [オプション] <調べる名前> [問い合わせ先DNSサーバー]
```

| 部分 | 内容 | 例 |
|---|---|---|
| オプション | レコードの種類の指定やデバッグ表示など | `-type=mx`、`-debug` |
| 調べる名前 | ドメイン名・ホスト名・IPアドレス(**名前の末尾に `.` を付けるのが確実**。3章参照) | `example.com.` |
| 問い合わせ先 | 省略すると、PCに設定されたDNS(ルーターやプロバイダのDNSなど)を使う | `ns1.example.net` |

### 対話モード
引数なしで実行すると、対話モードになります。

| 対話モードのコマンド | コマンドラインでの同等の指定 |
|---|---|
| `set type=mx` | `-type=mx` |
| `set debug` / `set nodebug` | `-debug` |
| `server ns1.example.net` | 末尾に問い合わせ先 `ns1.example.net` を指定 |
| `example.com.`(名前だけを入力) | 問い合わせの実行 |
| `set all` | (なし)現在の設定(type、debug、問い合わせ先など)を一覧表示する |
| `exit` | 対話モードの終了 |

---

## 2. よく使うオプション

| オプション | 意味 |
|---|---|
| `-type=<種類>` | レコードの種類を指定する(`-q=<種類>` も同じ)。省略するとA(とAAAA) |
| `-debug` | 実際に送った問い合わせ名(QUESTIONS)、応答の種類、TTLなどの詳細を表示する |
| `-norecurse` | 問い合わせ先に「代わりに調べて」と頼まない(相手のDNSが持っている情報だけを見たいとき) |
| `-timeout=<秒>` | 応答を待つ時間 |

### レコードの種類(`-type=`)

| 種類 | 内容 | 主な用途 |
|---|---|---|
| `a` | 名前 → IPv4アドレス | Webサイトやサーバーの接続先の確認 |
| `aaaa` | 名前 → IPv6アドレス | 同上(IPv6) |
| `mx` | メールの受信先サーバー(優先度付き) | メールがどこに届くかの確認 |
| `txt` | 任意の文字列 | SPF(`v=spf1 …`)、DMARC(`_dmarc.` の下)、ドメインの所有権確認 |
| `ns` | そのドメインを管理するDNSサーバー(向き先) | どのDNSでゾーンが管理されているかの確認 |
| `soa` | ゾーンの管理情報(管理元・シリアル番号・既定値など) | ゾーンの有無、変更の目安 |
| `cname` | 別名 | 別名の参照先の確認 |
| `ptr` | IPアドレス → 名前(逆引き) | IPアドレスがどのサーバーのものかの確認 |
| `any`(`all` も同じ) | 全種類 | **確認には使わない**。DNSサーバーによって返る内容が異なり、最小限の応答(`HINFO RFC8482`)しか返さないものも多い。全レコードの一覧は得られない |

---

## 3. 注意点

### 名前の末尾には `.` を付ける(Windowsの場合)
Windows の `nslookup` は、末尾に `.` のない名前を問い合わせるとき、**まずPCのDNSサフィックス(例:`isp.example.ne.jp`)を補った名前で問い合わせます**。

```
nslookup -type=ns example.com a.dns.jp
→ 実際には example.com.isp.example.ne.jp を問い合わせ、無関係な結果が表示されることがある

nslookup -type=ns example.com. a.dns.jp
→ 意図どおり example.com を問い合わせる
```
(`a.dns.jp`:.jp ドメインを管理するJPRSのDNSサーバー)

- 通常のDNSサーバーに問い合わせた場合は、補った名前が「存在しない」と返り、元の名前で問い合わせ直すので気付きにくい。
- 上位のDNSサーバー(`a.dns.jp` など)は「委任先の案内」を返すため、補った名前の結果がそのまま表示されてしまう。
- 実際に送った名前は、`-debug` の `QUESTIONS:` 欄で確認できる。
- PCに設定されているサフィックスは、`ipconfig /all` の「接続固有の DNS サフィックス」「DNS サフィックス検索一覧」で確認できる(Windowsの場合)。

### レコードの種類を必ず指定する
`-type` を省略するとAレコードとして問い合わせます。たとえばDMARC(TXTレコード)を種類なしで問い合わせると「ない」という結果になり、**設定されていないと誤認**します。

### 問い合わせ先によって結果の意味が変わる

| 問い合わせ先 | 得られるもの |
|---|---|
| 省略(PCのDNS) | キャッシュを含む結果。TTLは**残り時間**(カウントダウンされた値) |
| 権威DNS(そのゾーンを持つDNS) | ゾーンに設定されている**正の値**。TTLは設定値 |
| 上位のDNS(TLDを管理するDNS) | 「このドメインはどのDNSが管理しているか」という委任の情報 |

---

## 4. 出力の読み方
表示の文言は、Windowsの場合のものです。

| 表示 | 意味 |
|---|---|
| `Non-authoritative answer:` | キャッシュDNSからの応答(権威DNSの応答ではない) |
| `auth. answer`(`-debug` のヘッダー) | 権威DNSからの応答 |
| `ttl = 3600 (1 hour)`(`-debug`) | TTL。権威DNSに問い合わせたときは設定値 |
| SOAだけが返る(`primary name server = …` だけ表示) | **その名前・種類のレコードはない**(ゾーン自体はある) |
| `can't find … : Non-existent domain` | その名前自体が存在しない |
| `Query refused` | そのDNSサーバーは、そのドメインを管理していない(または問い合わせを拒否している) |
| `HINFO CPU = RFC8482` | `-type=any` への最小限の応答。全レコードの一覧ではない |
| `??? unknown type 65 ???` | nslookupが表示に対応していない種類のレコード(例:65はHTTPSレコード) |
| `default TTL = …`(SOAの表示) | SOAの最後の項目(MINIMUM)。現在の規格では**ネガティブキャッシュの時間**(「存在しない」という応答を保持する時間) |
| 権威DNSなのにTTLが問い合わせのたびに減る | 参照先の値を返すエイリアス型(CNAMEフラットニング)のレコードと考えられる |

---

## 5. 用途別コマンド集

### 5-1. ドメインを管理しているDNSサーバーはどこか(NSレコード)

```
nslookup -type=ns example.com.
nslookup -type=ns example.jp. a.dns.jp
```
- 上位のDNSに問い合わせると、「どのDNSサーバーがこのドメインの設定(ゾーン)を管理しているか」という登録内容(委任)が分かる。**ここに出るDNSサーバーだけが外部から参照される。**
- `a.dns.jp`:.jp を管理するJPRSのDNSサーバー(a〜hの8台)。.com・.net の場合は `a.gtld-servers.net` など。
- TLDを管理するDNSサーバーの一覧は、次のコマンドで確認できる。
```
nslookup -type=ns jp.
nslookup -type=ns com.
```

### 5-2. DNSサーバーがそのドメインの設定(ゾーン)を持っているか(SOAレコード)

```
nslookup -type=soa example.com. ns1.example.net
```
- SOAが返れば、そのDNSサーバーはゾーンを持っている。
- シリアル番号は、日付形式(例:`2024010500`)で付けられていることが多く、最終変更の目安になる。

### 5-3. メールがどのサーバーに届くか(MXレコード)

```
nslookup -type=mx example.com.
nslookup -type=mx example.com. ns1.example.net
```
- 優先度(preference)の値が小さいサーバーから順に使われる。

### 5-4. どのサーバーからのメール送信が許可されているか(SPF:TXTレコード)

```
nslookup -type=txt example.com. ns1.example.net
```
- 返ってきたTXTのうち、`v=spf1` で始まるものがSPF。**1本だけ**であることを確認する(2本以上あると無効)。
- 例:`v=spf1 include:spf.example.net ~all` は、`spf.example.net` で許可された送信元を許可し、それ以外は「怪しいが受け取ってよい」(`~all`)という意味。`-all` の場合は「拒否してよい」。
- 参考:include 先の名前のTXTを問い合わせると、許可されている送信元(IPアドレスなど)を見られる。
```
nslookup -type=txt spf.example.net.
```

### 5-5. 認証に失敗したメールの扱いが指定されているか(DMARC:TXTレコード)

```
nslookup -type=txt _dmarc.example.com. ns1.example.net
```
- **`-type=txt` を必ず指定する**。
- `p=none`(何もしない)、`p=quarantine`(迷惑メール扱い)、`p=reject`(拒否)のいずれかが指定されている。

### 5-6. 送信メールの電子署名を検証する公開鍵があるか(DKIM:TXTレコード)

```
nslookup -type=txt <セレクタ>._domainkey.example.com.
```
- セレクタ名が分からないと照会できない。送信側の設定や、受信したメールのヘッダー(`DKIM-Signature` の `s=`)で確認する。

### 5-7. レコードがどれくらいの時間キャッシュされるか(TTL)

```
nslookup -debug -type=mx example.com. ns1.example.net
```
- 権威DNSに `-debug` 付きで問い合わせると、`ttl =` に設定値が表示される。
- 何度か問い合わせて値が変わらなければ固定の設定値、減っていく場合はキャッシュの残り時間か、エイリアス型のレコード。

### 5-8. 名前とIPアドレスの対応(Aレコード/逆引きのPTRレコード)

```
nslookup -type=a mail.example.com.
nslookup -type=ptr 10.2.0.192.in-addr.arpa.
nslookup 192.0.2.10                       ← IPアドレスを渡すと逆引きになる
```
- 逆引きの名前は、IPアドレスを逆順に並べて `.in-addr.arpa.` を付けたもの(192.0.2.10 → `10.2.0.192.in-addr.arpa.`)。

### 5-9. 実際にどの名前で問い合わせたか(補完の確認)

```
nslookup -debug -type=ns example.com a.dns.jp
```
- `QUESTIONS:` 欄に表示される名前が、実際に問い合わせた名前。サフィックスが補われていないかを確認できる(3章参照)。

### 5-10. DNSの変更がすべての管理サーバーに反映されたか

```
nslookup -debug -type=mx  example.com. ns1.example.net
nslookup -debug -type=mx  example.com. ns2.example.net
nslookup -debug -type=txt example.com. ns1.example.net
nslookup -debug -type=txt example.com. ns2.example.net
```
- 権威DNSが複数ある場合は、**すべてに問い合わせて**同じ新しい値が返ることを確認する(外部からは、どの権威DNSに問い合わせが行くか分からないため)。
- PCのDNS(問い合わせ先を省略)では、TTLが切れるまで古い値が返ることがある。

---

## 6. 補足:WHOIS(ドメインの登録情報)
WHOISのコマンドは、OSによっては標準で入っていない(Windowsでは、Sysinternals の Whois を別途導入する)。次のWebサービスでも確認できる。
- .jp ドメイン:JPRS WHOIS([https://whois.jprs.jp/](https://whois.jprs.jp/))
- .com・.net・.org などのgTLD:ICANN Lookup([https://lookup.icann.org/](https://lookup.icann.org/))。ドメイン名の国際的な管理団体(ICANN)の公式ページ
- その他の国別ドメイン(.uk、.de など):IANA WHOIS([https://www.iana.org/whois](https://www.iana.org/whois))でTLDを検索すると、そのTLDを管理するレジストリとWHOISサーバーが分かる

2026/10/03

CVP分析グラフ

## CVPグラフ

## 損益構造の恒等式
| 区分 | 式 |
|---|---|
| 売上 | 変動費 + 固定費 + 利益 = 費用 + 利益 = 変動費 + 限界利益 |
| 費用 | 変動費 + 固定費 = 売上 − 利益 |
| 変動費 | 売上 × 変動費率 = 売上 − 限界利益 = 費用 − 固定費 |
| 固定費 | 費用 − 変動費 = 限界利益 − 利益 |
| 利益 | 売上 − 費用 = 限界利益 − 固定費 = 売上 × 限界利益率 − 固定費 |
| 限界利益 | 売上 − 変動費 = 固定費 + 利益 = 売上 × 限界利益率 |
| 変動費率 | 変動費 ÷ 売上 = 1 − 限界利益率 |
| 限界利益率 | 限界利益 ÷ 売上 = 1 − 変動費率 |

## 損益の構造図

2026/09/29

Linux ネットワーク/Wi-Fi コマンド チートシート

## 0. コマンドの役割

| コマンド | 主な用途 | 備考 |
|---|---|---|
| `ip` | インターフェース、IPアドレス、ルート、MACアドレスの確認・一時操作 | `iproute2`に含まれる |
| `nmcli` | NetworkManagerの接続・プロファイル管理 | 設定を永続化できる |
| `iw` | Wi-Fiデバイス、接続先、周波数、電波情報の確認 | 無線LANの低レベル情報 |
| `rfkill` | Wi-Fiなどの無線機能のブロック状態確認 | ハード/ソフトブロックを確認 |
| `lsusb` | USBデバイスの認識確認 | USB Wi-Fiドングルの確認 |
| `ethtool` | NICのドライバーやリンク情報の確認 | 無線では主にドライバー確認に使用 |

> 対象: Debian/Ubuntu系およびRHEL/Rocky/AlmaLinux系。`nmcli`はNetworkManager使用環境が前提です。

## 1. インターフェース一覧

```bash
ip link
ip -br link
nmcli device status
iw dev
```

## 2. USB Wi-Fiドングルの認識確認

```bash
lsusb
sudo dmesg | grep -iE 'usb|wifi|wlan|wireless|firmware'
sudo journalctl -k | grep -iE 'usb|wifi|wlan|wireless|firmware'
sudo ethtool -i wlan1
readlink -f /sys/class/net/wlan1/device/driver
```

## 3. MACアドレスの確認

```bash
ip link show wlan1
cat /sys/class/net/wlan1/address
nmcli -g GENERAL.HWADDR device show wlan1
ip -br link
```

## 4. IPアドレスの確認

```bash
ip address
ip addr show dev wlan1
ip -br addr
nmcli device show wlan1
nmcli -g IP4.ADDRESS,IP4.GATEWAY,IP4.DNS device show wlan1
```

## 5. Wi-Fiアクセスポイントの検索

```bash
nmcli device wifi rescan
nmcli device wifi list
nmcli device wifi list ifname wlan1
nmcli -f IN-USE,SSID,BSSID,CHAN,FREQ,SIGNAL,SECURITY device wifi list ifname wlan1
sudo iw dev wlan1 scan
sudo iw dev wlan1 scan | grep -E 'BSS |SSID:|freq:|signal:'
```

## 6. Wi-Fiへ接続

### SSIDを指定

```bash
nmcli device wifi connect "SSID" password "PASSWORD" ifname wlan1
```

パスワードをコマンド履歴へ残したくない場合:

```bash
nmcli --ask device wifi connect "SSID" ifname wlan1
```

### BSSIDを指定

```bash
nmcli device wifi connect "AA:BB:CC:DD:EE:FF" password "PASSWORD" ifname wlan1
```

SSIDとBSSIDを両方指定:

```bash
nmcli device wifi connect "SSID" bssid "AA:BB:CC:DD:EE:FF" password "PASSWORD" ifname wlan1
```

### 既存プロファイルを有効化

```bash
nmcli connection up "接続名" ifname wlan1
```

## 7. 接続中のWi-Fi情報

```bash
iw dev wlan1 link
nmcli device show wlan1
nmcli -f IN-USE,SSID,BSSID,CHAN,FREQ,SIGNAL device wifi list ifname wlan1
```

`iw dev wlan1 link`の主な項目:

- `Connected to`: 接続中のBSSID
- `SSID`: 接続中のSSID
- `freq`: 中心周波数
- `signal`: 受信信号強度
- `tx bitrate`: 送信リンク速度

## 8. チャネル/周波数の確認

```bash
iw dev wlan1 link
iw dev wlan1 info
nmcli -f IN-USE,SSID,BSSID,CHAN,FREQ device wifi list ifname wlan1
```

### 代表的な周波数とチャネル

| 周波数 | チャネル |
|---:|---:|
| 2412 MHz | 1 |
| 2437 MHz | 6 |
| 2462 MHz | 11 |
| 5180 MHz | 36 |
| 5200 MHz | 40 |
| 5220 MHz | 44 |
| 5240 MHz | 48 |
| 5500 MHz | 100 |
| 5520 MHz | 104 |
| 5540 MHz | 108 |
| 5560 MHz | 112 |

## 9. 内蔵Wi-FiからUSB Wi-Fiへ切り替える

例:

- 内蔵Wi-Fi: `wlan0`
- USB Wi-Fi: `wlan1`

```bash
nmcli device disconnect wlan0
nmcli device wifi connect "SSID" password "PASSWORD" ifname wlan1
nmcli device status
iw dev wlan1 link
ip route
```

内蔵Wi-Fiを一時停止:

```bash
sudo ip link set wlan0 down
```

元に戻す:

```bash
sudo ip link set wlan0 up
```

NetworkManagerの管理対象外にする:

```bash
sudo nmcli device set wlan0 managed no
sudo nmcli device set wlan0 managed yes
```

## 10. 接続プロファイルの管理

```bash
nmcli connection show
nmcli connection show --active
nmcli connection show "接続名"
```

プロファイルを特定インターフェースへ固定:

```bash
nmcli connection modify "接続名" connection.interface-name wlan1
```

BSSIDを固定/解除:

```bash
nmcli connection modify "接続名" 802-11-wireless.bssid "AA:BB:CC:DD:EE:FF"
nmcli connection modify "接続名" 802-11-wireless.bssid ""
```

自動接続と優先度:

```bash
nmcli connection modify "接続名" connection.autoconnect yes
nmcli connection modify "接続名" connection.autoconnect-priority 100
```

設定反映:

```bash
nmcli connection down "接続名"
nmcli connection up "接続名"
```

## 11. Wi-Fi無線機能の有効/無効

```bash
nmcli radio wifi
nmcli radio wifi on
nmcli radio wifi off
rfkill list
sudo rfkill unblock wifi
sudo rfkill unblock all
```

## 12. インターフェースの有効/無効

```bash
sudo ip link set wlan1 down
sudo ip link set wlan1 up
nmcli device disconnect wlan1
nmcli connection up "接続名" ifname wlan1
```

## 13. デフォルトルートの確認

```bash
ip route
ip route get 8.8.8.8
ip -6 route
```

例:

```text
default via 192.168.1.1 dev wlan1 proto dhcp metric 600
```

この場合、デフォルト通信は`wlan1`を使用します。

## 14. インターフェースの優先順位

Linuxは通常、デフォルトルートの`metric`が小さい経路を優先します。

```bash
ip route
nmcli connection modify "USB-WiFi" ipv4.route-metric 100
nmcli connection modify "Internal-WiFi" ipv4.route-metric 600
nmcli connection modify "USB-WiFi" ipv6.route-metric 100
nmcli connection modify "Internal-WiFi" ipv6.route-metric 600
nmcli connection down "USB-WiFi"
nmcli connection up "USB-WiFi"
```

## 15. Wi-Fiの対応周波数・チャネル確認

```bash
iw phy
iw phy phy0 info
iw list
```

確認できる主な項目:

- 対応周波数・使用可能チャネル
- 無効化されたチャネル
- 対応インターフェースモード
- HT/VHT/HE/EHT対応状況
- 対応チャネル幅

## 16. リージョン/規制ドメイン

```bash
iw reg get
sudo iw reg set JP
iw reg get
iw list
```

> 恒久設定方法はディストリビューションと無線ドライバーによって異なります。

## 17. 通信状態の確認

```bash
ip -s link show wlan1
ip route
ping -c 4 192.168.1.1
ping -c 4 8.8.8.8
ping -c 4 example.com
nmcli general status
```

## 18. NetworkManagerログの確認

```bash
systemctl status NetworkManager
sudo journalctl -u NetworkManager -b
sudo journalctl -u NetworkManager -f
sudo journalctl -u NetworkManager -b | grep -iE 'wifi|wlan|802-11|supplicant'
systemctl status wpa_supplicant
```

## 19. 変更前後の確認セット

### 変更前

```bash
ip -br link
ip -br addr
ip route
nmcli device status
nmcli connection show --active
iw dev
iw dev wlan1 link
```

### 変更後

```bash
nmcli device status
nmcli connection show --active
iw dev wlan1 link
ip addr show dev wlan1
ip route
ip route get 8.8.8.8
```

## 20. トラブルシューティング基本フロー

### 1. USBデバイスとして認識されているか

```bash
lsusb
```

### 2. インターフェースが作成されているか

```bash
ip -br link
iw dev
```

### 3. ドライバー/ファームウェアエラーがないか

```bash
sudo journalctl -k -b | grep -iE 'firmware|wifi|wlan|wireless|usb|error|failed'
```

### 4. 無線機能がブロックされていないか

```bash
rfkill list
nmcli radio
```

### 5. NetworkManagerが管理しているか

```bash
nmcli device status
```

### 6. アクセスポイントを検出できるか

```bash
nmcli device wifi rescan ifname wlan1
nmcli device wifi list ifname wlan1
```

### 7. 接続できているか

```bash
iw dev wlan1 link
```

### 8. IPアドレスが割り当てられているか

```bash
ip addr show dev wlan1
```

### 9. デフォルトルートがあるか

```bash
ip route
```

### 10. 経路、外部疎通、DNSを切り分ける

```bash
ip route get 8.8.8.8
ping -c 4 8.8.8.8
ping -c 4 example.com
```

## 21. よく使うワンライナー

Wi-Fiインターフェース名:

```bash
iw dev | awk '$1=="Interface"{print $2}'
```

MACアドレス:

```bash
cat /sys/class/net/wlan1/address
```

接続中のBSSID:

```bash
iw dev wlan1 link | awk '/Connected to/{print $3}'
```

接続中のSSID:

```bash
iw dev wlan1 link | sed -n 's/^[[:space:]]*SSID: //p'
```

現在の周波数:

```bash
iw dev wlan1 link | awk '/freq:/{print $2 " MHz"}'
```

デフォルトルートで使用中のインターフェース:

```bash
ip route show default | awk '/default/{print $5}'
```

Wi-Fi接続情報をまとめて確認:

```bash
printf '%s\n' '=== Device ===' &&
nmcli device status &&
printf '%s\n' '=== Link ===' &&
iw dev wlan1 link &&
printf '%s\n' '=== Address ===' &&
ip -br addr show wlan1 &&
printf '%s\n' '=== Route ===' &&
ip route
```

## 注意事項

- `ip link set ... down`による変更は一時的です。
- `nmcli connection modify`は保存された接続プロファイルを変更します。
- `device`はインターフェースの現在状態、`connection`はNetworkManagerの設定プロファイルです。
- SSH接続中に使用中のインターフェースを停止すると、接続が切断されます。
- インターフェース名は`wlan0`、`wlp2s0`、`wlx...`など環境によって異なります。
- BSSID固定中は別のアクセスポイントへのローミングが制限されます。
- 実行前に対象インターフェース名と接続プロファイル名を確認してください。

Claude の共有範囲まとめ(claude.ai / デスクトップ / ターミナル / Web)

> 調査日: 2026-09-29
> 出典: Anthropic 公式ドキュメント(末尾の参考リンク)。

---

## 基本の考え方

分ける軸は「Web / デスクトップ / ターミナル」ではなく、**どこに保存されるか**。

1. **アカウント(クラウド)に保存** → どの端末からでも見える
2. **PC のローカル(`~/.claude/` 配下)に保存** → そのPCの中ならターミナルとデスクトップで共有される。別のPCには同期されない
3. **Git リポジトリに保存** → push / pull で共有される

---

## ① claude.ai チャット

| 項目 | Web / デスクトップ(Chat) / モバイル | Claude Code |
|---|---|---|
| チャット履歴 | ✅ 同期 | ❌ 見えない |
| Projects(チャット用)、メモリ、カスタム指示、スタイル | ✅ 同期 | ❌ 読み込まれない |
| コネクタ(claude.ai/customize/connectors で追加) | ✅ 同期 | ✅ 同じアカウントでログインすれば使える |

- チャットと Claude Code は別の製品として扱われる。チャットの内容や claude.ai のメモリは Claude Code に引き継がれない。

---

## ② Claude Code のセッション

| 種類 | 保存場所 | 他の環境から見えるか |
|---|---|---|
| ターミナル(CLI) | そのPCの `~/.claude/projects/...jsonl` | 同じPCなら `claude --resume` や `/resume` で再開できる。別のPCからは基本的に見えない |
| デスクトップ版 Code タブ(ローカル) | そのPC | ほかのPCや Web からは見えない |
| Claude Code on the web(クラウド) | Anthropic のクラウド | ✅ Web(claude.ai/code)、モバイル、デスクトップから見える。`claude --teleport` でターミナルに取り込める |
| Remote Control | ローカルで動いているセッションのまま | ローカルセッションをスマホやブラウザから操作する仕組み。PCの電源が切れたりスリープしたりすると止まる |

- ローカルセッションを別の端末から扱いたいとき → **クラウドセッション** にするか **Remote Control** を使う

---

## ③ 設定・メモリ・スキル・MCP(Claude Code)

| 項目 | 場所 | 同じPC内(CLI ⇔ デスクトップ) | 別のPC |
|---|---|---|---|
| ユーザー用 CLAUDE.md、settings.json | `~/.claude/` | ✅ 共有 | ❌ 同期なし(自分でコピーする) |
| 自動メモリ(auto memory) | `~/.claude/projects//memory/` | ✅ 共有 | ❌ 同期なし |
| ユーザー用スキル | `~/.claude/skills/` | ✅ 共有 | ❌ 同期なし |
| ユーザー/ローカル用 MCP | `~/.claude.json` | ✅ 共有 | ❌ 同期なし |
| プロジェクト用 CLAUDE.md、`.claude/settings.json`、`.claude/skills/`、`.mcp.json` | リポジトリ | ✅ 共有 | ✅ Git 経由で共有 |
| `settings.local.json`、`CLAUDE.local.md` | リポジトリ(Git の管理外) | ✅ 共有 | ❌ 同期なし |

---

## 実務上のポイント

- デスクトップ版の Code タブも、CLI と同じ `~/.claude` を使う。同じPCなら、メモリ、スキル、設定は共通。
- **どこでも使いたいスキルや指示はリポジトリ側(`.claude/skills/`、`CLAUDE.md`)に置く**。別のPCでもクラウドセッションでも、clone すれば同じように使える。
- クラウドセッションはリポジトリを clone して動くため、ローカルにしかない `~/.claude` の自動メモリやユーザー用スキルは読み込まれない。

---

## 参考

- [Sessions](https://code.claude.com/docs/en/sessions.md)
- [Claude Code on the web](https://code.claude.com/docs/en/claude-code-on-the-web.md)
- [Remote Control](https://code.claude.com/docs/en/remote-control.md)
- [Desktop](https://code.claude.com/docs/en/desktop.md)
- [Memory](https://code.claude.com/docs/en/memory.md)
- [Settings](https://code.claude.com/docs/en/settings.md)
- [MCP](https://code.claude.com/docs/en/mcp-quickstart.md)

2026/08/26

AWS Transfer Family (SFTP → S3)

## News
[新サービス – AWS Transfer for SFTP – Amazon S3向けフルマネージドSFTPサービス](https://aws.amazon.com/jp/blogs/aws/new-aws-transfer-for-sftp-fully-managed-sftp-service-for-amazon-s3/)

## 全体構成
```
SFTPクライアント(IP指定/Port22)
        │
        ▼
   Elastic IP
        │
        ▼
Transfer Family サーバー (SFTP / VPCエンドポイント)
        │
        ▼
      S3バケット
```

## 構築手順

### 1. Elastic IP を確保
- 新規EIPを1つ取得(対象リージョン)

### 2. サブネット・セキュリティグループ準備
- 既存VPC内の対象AZの**パブリックサブネット**を選択
  - プライベートサブネットの場合、EIP付与不可(NAT経由では不可)
- セキュリティグループ
  - インバウンド: TCP/22、送信元は接続元IPで絞る

### 3. IAMロール作成
- 信頼ポリシー: プリンシパル `transfer.amazonaws.com`
- 許可アクション: `s3:GetObject` `s3:PutObject` `s3:ListBucket` `s3:DeleteObject`
- Resourceは対象バケット/プレフィックスに限定推奨

### 4. S3バケット準備
- 既存流用 or 新規作成
- 複数ユーザー分離が必要ならプレフィックス設計(例: `bucket/user1/`)

### 5. Transfer Family サーバー作成
| 項目 | 設定値 |
|---|---|
| プロトコル | SFTP |
| エンドポイントタイプ | **VPC**(PUBLICだとIP固定不可) |
| VPC | 既存VPC |
| サブネット | 手順2の単一サブネット |
| セキュリティグループ | 手順2のもの |
| アイデンティティプロバイダー | サービスマネージド |
| Elastic IP | サーバー作成時にサブネットと合わせて指定可能(作成後の紐付け作業は不要) |

### 6. ユーザー作成

**事前準備(クライアント側で鍵ペア生成)**
```bash
ssh-keygen -t rsa -b 4096 -f ./transfer_user_key -C "user1"
```
- `transfer_user_key`(秘密鍵): クライアントが保管
- `transfer_user_key.pub`(公開鍵): AWS側に登録

**コンソール設定**

| 項目 | 内容 |
|---|---|
| ユーザー名 | 英数字・アンダースコアのみ |
| ロール | 手順3のIAMロール |
| ホームディレクトリタイプ | S3バケット |
| ホームディレクトリ | 下表参照 |
| 制限付き(Restricted) | 有効推奨(指定パス配下のみ表示) |
| SSH公開鍵 | `.pub`ファイルの中身をそのまま貼り付け |

**ホームディレクトリの指定でアップロード先が変わる**

| 設定 | アップロード先 |
|---|---|
| `my-bucket/user1` | `user1/` フォルダ配下 |
| `my-bucket`(プレフィックスなし) | バケット直下 |


- 複数ユーザーで同一バケット直下を共有する場合、ディレクトリ分離はされないためIAMロールでのアクセス制御が唯一の分離手段。誤って他ユーザーのファイルを上書き/削除するリスクがあるため、複数ユーザー運用時はプレフィックス分離推奨。

### 7. 接続確認

**sftpコマンド**
```bash
sftp -i ./transfer_user_key user1@<EIPのIPアドレス>
```
- 初回はknown_hostsの確認プロンプトが出る
- `ls` でホームディレクトリ配下が見えることを確認

**WinSCP等のGUIクライアント**
- WinSCP(PuTTY系エンジン)はPPK形式を要求する場合あり
  - PuTTYgenで「Import key」→「Save private key」で`.ppk`に変換して指定
  - WinSCP 5.x以降はOpenSSH形式の秘密鍵を直接読み込める場合もあるため、まずはそのまま指定してみる

2026/08/17

PMが知っておくべき代表的な法則

## 1. QCD(プロジェクトマネジメントの三角形)

品質(Quality)、コスト(Cost)、納期(Delivery)は相互に制約し合う。

- プロジェクト開始時に優先順位を明確化する
- 品質・コスト・納期の変更時は影響分析を行う
- ステークホルダーと優先順位を合意する

---

## 2. コーンの不確実性の円錐

プロジェクト初期の見積りには大きな誤差が存在する。

- 初期見積りを確定値として扱わない
- 要件確定後に再見積りを行う
- 見積りの前提条件を明確にする

---

## 3. ブルックスの法則

遅れているプロジェクトへの安易な増員は、さらに遅延を招く。

- 増員前に遅延原因を分析する
- スコープ削減や優先順位変更を検討する
- 早期にリスクを検知し対処する

---

## 4. パレートの法則(80:20の法則)

成果や問題の大部分は、少数の重要な要因から生じる。

- 重要タスクを特定する
- クリティカルパスを重点管理する
- 障害頻発箇所を優先的に改善する

---

## 5. マーフィーの法則

失敗する可能性があるものはいずれ失敗する。

- 障害発生を前提に計画する
- リスク管理計画を作成する
- バックアップや復旧手順を準備する

---

## 6. パーキンソンの法則

仕事は与えられた時間を使い切るまで膨張する。

- 適切な期限を設定する
- 短いマイルストーンを設ける
- 中間レビューを実施する

---

## 7. 学生症候群

人は締切直前まで作業着手を先送りしやすい。

- 中間マイルストーンを設定する
- 定期的に進捗を確認する
- 早期着手を促す仕組みを作る

---

## 8. コンウェイの法則

システム構造は組織構造を反映する。

- システム設計と組織設計を整合させる
- 責任分界点を明確にする
- 組織横断のコミュニケーションを確保する

---

## 9. リングルマン効果

チーム人数が増えるほど、一人当たりの生産性は低下する。

- 役割と責任を明確にする
- 小規模なチームへ分割する
- 意思決定経路を簡素化する

---

## 10. コミュニケーション経路数

コミュニケーション経路数は n(n-1)/2 で増加する。

例:

- 5人 → 10経路
- 10人 → 45経路
- 20人 → 190経路

- 情報共有ルールを統一する
- 窓口や責任者を明確にする
- チームを適切な規模に分割する

人気の投稿