## 1. 使い分け
- **このサーバにインストール済みのものを調べる**:`rpm`
- **リポジトリと関わる(インストール、更新、アンインストール、提供されているパッケージやアドバイザリを調べる)**:`dnf`
| | `rpm` | `dnf` |
|---|---|---|
| 見る対象 | インストール済みのパッケージ | リポジトリとインストール済みのパッケージ |
| 依存関係 | 解決しない | 自動で解決する(必要なものを一緒にインストール・アンインストールする) |
| ネットワーク | 使わない | 使う |
| 主な用途 | 何が入っているか、ファイルがどのパッケージのものか、設定ファイルが変更されていないか | インストール、更新、アンインストール、更新や CVE の有無の確認 |
- インストール・アンインストールは `dnf` で行う(`rpm -i` / `rpm -e` は依存関係を解決しないため使わない)
---
## 2. rpm
### 2-1. オプションの組み立て
`-q`(調べる)に、対象を表すオプションを付ける。`-qa` は `-q -a` をまとめて書いたもの。
| オプション | 対象・意味 | 指定するもの |
|---|---|---|
| `-q` | パッケージ | パッケージ名 |
| `-qa` | インストール済みのすべてのパッケージ(all) | なし、または名前のパターン |
| `-qf` | ファイルを含むパッケージ(file) | ファイルのパス |
| `-ql` | パッケージに含まれるファイルの一覧(list) | パッケージ名 |
| `-qc` | パッケージに含まれる設定ファイルの一覧(config) | パッケージ名 |
| `-qi` | パッケージの詳細(info) | パッケージ名 |
| `-V` / `-Va` | インストール時の状態からの変更の検証(verify) | パッケージ名 / なし(すべて) |
| `--last` | インストール日時の新しい順に表示 | `-q` / `-qa` と組み合わせる |
| `--queryformat`(略:`--qf`) | 表示の書式 | 書式(`'%{NAME}\n'` など) |
- `-qf`(ファイルを含むパッケージ)と `--qf`(表示の書式)は別のオプション
### 2-2. よく使うコマンド
```bash
# パッケージが入っているか、バージョンは何か
rpm -q system-release
rpm -q kernel --last | head -n 1 # インストール済みの最新のカーネル
# インストール済みのパッケージの一覧
rpm -qa | sort
rpm -qa 'php8.5*' | sort # 名前で絞る
rpm -qa --last | head -n 20 # 最近インストール・更新されたもの
# パッケージ名だけを表示(バージョンなし)
rpm -qa --queryformat '%{NAME}\n' 'php8.5*' | sort
# ファイルを含むパッケージ(どのパッケージにも属さなければ、その旨が表示される)
rpm -qf /etc/php.ini
# パッケージに含まれるファイル / 設定ファイル
rpm -ql php8.5-fpm
rpm -qc php8.5-fpm
# パッケージの詳細(バージョン、ビルド日、説明など)
rpm -qi php8.5-cli
# 変更履歴(修正された CVE が書かれていることが多い)
rpm -q --changelog php8.5-cli | head -n 30
```
### 2-3. 変更されたファイルの検証
```bash
# パッケージのファイルのうち、インストール時から内容が変わったもの
sudo rpm -V php8.5-common
sudo rpm -Va 2>/dev/null | grep '^..5' # すべてのパッケージ(数分かかる)
```
```
S.5....T. c /etc/php.ini
│ │ │ └ c:設定ファイル
│ │ └ T:更新日時が変わっている
│ └ 5:内容が変わっている
└ S:サイズが変わっている
```
### 2-4. --queryformat の書式
| 書式 | 表示 |
|---|---|
| `%{NAME}` | パッケージ名 |
| `%{VERSION}` | バージョン |
| `%{RELEASE}` | リリース |
| `%{ARCH}` | アーキテクチャ |
| `%{SUMMARY}` | 一行の説明 |
| `%{SIZE}` | インストール後のサイズ(バイト) |
| `%{INSTALLTIME:date}` | インストール日時(`:date` で日時の形式にする) |
| `%{BUILDTIME:date}` | ビルド日時 |
| `\n` | 改行(付けないとすべてが 1 行につながる) |
- `NAME` などはパッケージのヘッダに記録された情報の名前(タグ)。大文字・小文字は区別しない
```bash
rpm -qa --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' 'php8.5*' | sort
rpm -qa --queryformat '%{SIZE}\t%{NAME}\n' | sort -n | tail -n 10 # サイズ(バイト)の大きいパッケージ 10 個
# 使えるタグの一覧
rpm --querytags | less
```
---
## 3. dnf
### 3-1. コマンドの組み立て
`dnf サブコマンド [オプション] [パッケージ名]` の形で使う。
| サブコマンド | 意味 |
|---|---|
| `list` | パッケージの一覧(`--installed`:インストール済み / `--available`:インストールできるもの / `--upgrades`:更新があるもの) |
| `info` | パッケージの詳細 |
| `search` | 名前や説明にキーワードを含むパッケージを探す |
| `provides` | ファイルやコマンドを含むパッケージを探す(インストールしていないものも対象) |
| `repoquery` | リポジトリにあるパッケージの情報(`-q`:余計な表示をしない / `-l`:含まれるファイル) |
| `repolist` | 有効なリポジトリの一覧 |
| `check-release-update` | 新しいリリースがあるか |
| `updateinfo` | アドバイザリ(`summary`:件数 / `list`:一覧 / `info`:詳細) |
| `install` | インストール |
| `upgrade` | 更新(パッケージ名を省略するとすべて) |
| `remove` | アンインストール |
| `needs-restarting` | 再起動が必要か(`-r`:OS の再起動が必要かだけを表示) |
| `history` | 実行した操作の履歴(`list` / `info` / `undo`) |
| `clean` | キャッシュを捨てる(`metadata` / `all`) |
| オプション | 意味 |
|---|---|
| `--releasever=latest` | 最新のリリースのリポジトリを対象にする(付けないと、サーバが固定されているリリースの範囲内だけが対象) |
| `--repo=amazonlinux` | AL2023 標準のリポジトリだけを対象にする |
| `--all` | `updateinfo` で、適用済みのアドバイザリも表示する |
| `--cve CVE番号` | `updateinfo` で、その CVE に関係するアドバイザリだけを表示する |
| `--allowerasing` | 競合するパッケージをアンインストールしてインストールする |
| `-C`(`--cacheonly`) | キャッシュだけを使い、ネットワークにつながない |
| `-y` | 確認せずに y で進める(手順では使わず、一覧を確認してから y を押す) |
- 実行前に `sudo dnf clean metadata` で最新の情報を取り直しておく
### 3-2. 調べる
```bash
# パッケージの一覧
dnf list --installed 'php8.5*' # インストール済み
sudo dnf list --available --releasever=latest 'php8.5*' # インストールできるもの
sudo dnf list --upgrades --releasever=latest # 更新があるもの
# パッケージの詳細
sudo dnf info --releasever=latest php8.5-cli
# 名前や説明にキーワードを含むパッケージ
sudo dnf search --releasever=latest imagick
# ファイルやコマンドを含むパッケージ(インストールしていないものも対象)
sudo dnf provides --releasever=latest /usr/bin/convert
# リポジトリにあるパッケージの情報(何も出なければ提供なし)
sudo dnf repoquery -q --releasever=latest php8.5-pdo
sudo dnf repoquery -l --releasever=latest php8.5-fpm # 含まれるファイル
# 有効なリポジトリ
dnf repolist
```
### 3-3. 更新・アドバイザリ・CVE
```bash
# 新しいリリースがあるか
sudo dnf check-release-update
# 未適用のアドバイザリの件数 / 一覧
sudo dnf updateinfo summary --releasever=latest
sudo dnf updateinfo list --releasever=latest
# 特定の CVE(何も出なければ未適用のものはない)
sudo dnf updateinfo list --releasever=latest --cve CVE-YYYY-NNNNN
sudo dnf updateinfo list --all --releasever=latest --cve CVE-YYYY-NNNNN # 行頭に i があれば適用済み
sudo dnf updateinfo info --releasever=latest --cve CVE-YYYY-NNNNN # 対象パッケージと修正版のバージョン
```
### 3-4. インストール・更新・アンインストール
一覧を確認してから y を押す。
```bash
# インストール
sudo dnf install --releasever=latest php8.5-pdo
# 更新
sudo dnf upgrade --releasever=latest # すべて
sudo dnf upgrade --releasever=latest 'php8.5*' # 名前で絞る
# アンインストール
sudo dnf remove 'libreoffice25.8*'
# 競合するパッケージをアンインストールしてインストール(例:php8.4 → php8.5)
sudo dnf install --releasever=latest --allowerasing php8.5-cli php8.5-fpm
# 再起動が必要か
sudo dnf needs-restarting -r
```
### 3-5. 履歴
```bash
sudo dnf history list | head -n 20 # 実行した操作の一覧(ID 付き)
sudo dnf history info ID # その操作でインストール・更新・アンインストールしたパッケージ
sudo dnf history undo ID # その操作を取り消す(一覧を確認してから y)
```
### 3-6. キャッシュ
```bash
sudo dnf clean metadata # リポジトリの情報を捨てる(次回の実行時に取り直す)
sudo dnf clean all # ダウンロードしたパッケージも含めてすべて捨てる(ディスクを空けたいとき)
```
なせ(れ)ばなる
このブログは、趣味の記録と、知的生産活動のための道具です。
2026/10/31
rpm / dnf チートシート(Amazon Linux 2023)
2026/10/30
PHP 8.4 → 8.5 アップグレード手順(Amazon Linux 2023 / Apache + PHP-FPM)
- 対象環境:Amazon Linux 2023、PHP は AL2023 標準パッケージ(`php8.4*` → `php8.5*`)、Web サーバは Apache(`httpd`)+ PHP-FPM
- 8.4 と 8.5 は同時にインストールできないため、**8.4 をアンインストールし、8.5 をインストールする**(`dnf install --allowerasing` で同時に行う)
---
## 1. 事前確認
### 1-1. OS 全体を最新のリリースに更新しておく
更新の前に、EC2 コンソールから AMI またはスナップショットを取得する。
```bash
# 更新前の状態
rpm -q system-release # 現在のリリースのバージョン
sudo find /etc \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null # 既存の設定ファイルの競合
systemctl --failed # 起動に失敗しているサービスがないか
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
# 新しいリリースがあるか(何も出なければ最新なので、1-2 へ進む)
sudo dnf check-release-update
# OS 全体を最新リリースに更新(一覧を確認してから y)
sudo dnf upgrade --releasever=latest
# 再起動が必要か確認して、必要なら再起動
sudo dnf needs-restarting -r
sudo reboot
# 再起動後の確認
rpm -q system-release # 新しい日付になっているか
sudo dnf check-release-update # 何も出なければ最新
sudo find /etc \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null # 設定ファイルの競合(更新前から増えていないか)
systemctl --failed # 起動に失敗しているサービスがないか
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
```
### 1-2. 8.5 のパッケージが提供されているか
```bash
sudo dnf clean metadata
sudo dnf list --available --repo=amazonlinux --releasever=latest 'php8.5*'
```
- `--repo=amazonlinux`:AL2023 標準のリポジトリのみ表示
- `php8.5-opcache` はない(8.5 から OPcache は PHP 本体に組み込み)
### 1-3. アプリケーションの互換性
- PHP 8.5 の移行ガイド(非互換の変更、非推奨になった機能):https://www.php.net/manual/en/migration85.php
- 使用しているフレームワーク・ライブラリが 8.5 に対応しているかを確認する
- Composer を使っている場合は、8.5 の環境で次を実行する
```bash
# composer.json / composer.lock の PHP バージョン・拡張モジュールの要件を満たしているか
composer check-platform-reqs
```
### 1-4. 自分でビルドした拡張モジュールがないか
```bash
# 拡張モジュールのディレクトリ
d=$(php -r 'echo ini_get("extension_dir");'); echo "$d"
# パッケージに含まれない拡張モジュール(pecl install などでインストールしたもの)。何も出なければなし
for f in "$d"/*.so; do rpm -qf "$f" >/dev/null 2>&1 || echo "パッケージ外: $f"; done
```
- 表示されたものは 8.5 用に再ビルドする
---
## 2. 現状の記録とバックアップ
```bash
# PHP のバージョン(CLI / FPM)
php -v
php-fpm -v
# インストール済みの PHP パッケージ(バージョン付き)
rpm -qa 'php8.4*' | sort
# インストール済みの PHP パッケージ名(バージョンなし。3. と 8. で使う)
rpm -qa --qf '%{NAME}\n' 'php8.4*' | sort | tee ~/php84-packages.txt
# 有効な拡張モジュールと設定値(アップグレード後の比較用)
php -m > ~/php84-modules.txt
php -i > ~/php84-info.txt
# エラーログの現在の行数(7. で、作業開始後に追加された行だけを表示するため)
sudo cat /var/log/php-fpm/error.log | wc -l | tee ~/php-fpm-error-lines.txt
sudo cat /var/log/httpd/error_log | wc -l | tee ~/httpd-error-lines.txt
# 設定ファイルのバックアップ
sudo tar czf /root/php84-config.tar.gz \
/etc/php.ini /etc/php.d /etc/php-fpm.conf /etc/php-fpm.d /etc/httpd/conf.d/php.conf
```
- EC2 コンソールから **AMI またはスナップショットを取得**(切り戻し用)
---
## 3. インストールするパッケージの確認
```bash
# パッケージ名の php8.4 を php8.5 に置換した一覧
sed 's/^php8\.4/php8.5/' ~/php84-packages.txt | tee ~/php85-packages.txt
# 8.5 で提供されていないパッケージを表示(何も出なければすべて提供あり)
for p in $(cat ~/php85-packages.txt); do
[ -z "$(sudo dnf repoquery -q --repo=amazonlinux --releasever=latest "$p")" ] && echo "提供なし: $p"
done
```
- 「提供なし」のパッケージは `~/php85-packages.txt` から行を削除する
- `php8.5-opcache`:削除するだけでよい
- それ以外:その拡張モジュールが必要か、別の入手方法があるかを確認する
---
## 4. 8.4 のアンインストールと 8.5 のインストール
```bash
# 8.5 をインストールし、競合する 8.4 をアンインストール(一覧を確認してから y)
sudo dnf install --releasever=latest --allowerasing $(cat ~/php85-packages.txt)
```
y を押す前に、表示される一覧で次を確認する。
| dnf の表示 | 確認すること |
|---|---|
| インストール(Installing) | `php8.5-xxx` が `~/php85-packages.txt` のとおり並んでいるか |
| 削除(Removing) | `php8.4-xxx` だけになっているか(**PHP 以外のパッケージがアンインストール対象に入っていたら中止する**) |
---
## 5. 設定ファイルの確認
```bash
# 退避・競合した設定ファイル(.rpmsave:元の設定が退避されたもの / .rpmnew:新しい標準設定)
sudo find /etc/php* /etc/httpd \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null
# バックアップを展開して、アップグレード前との差分を確認
mkdir -p ~/php84-config
sudo tar xzf /root/php84-config.tar.gz -C ~/php84-config
sudo diff ~/php84-config/etc/php.ini /etc/php.ini
sudo diff -r ~/php84-config/etc/php.d /etc/php.d
sudo diff ~/php84-config/etc/php-fpm.conf /etc/php-fpm.conf
sudo diff -r ~/php84-config/etc/php-fpm.d /etc/php-fpm.d
sudo diff ~/php84-config/etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf
```
- `.rpmnew` が出た場合(例:`/etc/php.ini.rpmnew`):現在のファイルは変更済みのためそのまま残り、8.5 の標準が `.rpmnew` として置かれている。`.rpmnew` に自分で変更した設定を反映して、現在のファイルと置き換える
```bash
# 有効な設定だけの差分(コメントと空行を除く。< が現在の設定、> が 8.5 の標準)
diff <(sudo grep -Ev '^\s*(;|$)' /etc/php.ini) <(sudo grep -Ev '^\s*(;|$)' /etc/php.ini.rpmnew)
```
- 変更した設定が消えていたら、8.5 の新しいファイルに変更点だけを反映する(8.4 のファイルで上書きしない)
- `/etc/php.d/10-opcache.ini` は 8.5 のファイルになり、`zend_extension=opcache` の行がなくなる(8.5 から OPcache は PHP 本体に組み込み)。それ以外の差分は 8.5 の標準ファイルのコメントの違い
- OPcache の設定値に変わりがないかを確認する
```bash
# OPcache の設定値の差分(何も出なければ同じ)
php -i | grep '^opcache\.' | diff <(grep '^opcache\.' ~/php84-info.txt) -
```
- `opcache.file_cache_read_only` の追加と `opcache.jit_hot_loop` の 64 → 61 は 8.5 の初期値によるもの(`jit_hot_loop` は JIT を使う場合のみ関係する)
---
## 6. サービスの再起動
```bash
# 自動起動が有効か(8.4 のアンインストール時に無効化される場合がある)
systemctl is-enabled php-fpm
sudo systemctl enable php-fpm # disabled と出た場合
sudo systemctl restart php-fpm # 必須:8.5 の php-fpm を起動
sudo apachectl configtest # Syntax OK を確認
sudo systemctl reload httpd
```
---
## 7. アップグレード後の確認
```bash
# バージョン
php -v ; php-fpm -v # 8.5 になっているか
rpm -qa 'php8.5*' | sort # インストール済みの PHP パッケージ(バージョン付き)
rpm -qa | grep php8.4 # 何も出なければ OK
# 拡張モジュールの差分(< が 8.4 にだけあったもの)
php -m | diff ~/php84-modules.txt -
# サービスの状態
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
# 作業開始後に追加されたエラーログ(Deprecated / Warning / Fatal / error が出ていないか)
sudo tail -n +$(( $(cat ~/php-fpm-error-lines.txt) + 1 )) /var/log/php-fpm/error.log
sudo tail -n +$(( $(cat ~/httpd-error-lines.txt) + 1 )) /var/log/httpd/error_log
```
- 拡張モジュールの差分に出たものは、3. で一覧から削除したもの以外なら原因を確認する
- ブラウザで各サイトの主な画面を確認する(ログイン、DB 参照、画像やファイルのアップロード、メール送信、PDF・Excel 出力など)
---
## 8. 切り戻し
問題が出た場合は、AMI から復元するか、8.5 をアンインストールして 8.4 を再インストールする。
```bash
# 8.4 を再インストールし、競合する 8.5 をアンインストール(一覧を確認してから y)
sudo dnf install --releasever=latest --allowerasing $(cat ~/php84-packages.txt)
# 設定ファイルをアップグレード前の状態に戻す
sudo tar xzf /root/php84-config.tar.gz -C /
sudo systemctl enable php-fpm
sudo systemctl restart php-fpm
sudo apachectl configtest
sudo systemctl reload httpd
# 切り戻し後の確認
php -v ; php-fpm -v # 8.4 に戻っているか
rpm -qa | grep php8.5 # 何も出なければ OK
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
```
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` を使う
- 4):適用済みかどうかの確認や詳細の表示など、CVE 指定の確認方法は 2-1「特定の CVE の確認」を参照
**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
**特定の CVE の確認**(`CVE-YYYY-NNNNN` を確認したい CVE 番号に置き換える)
```bash
# 1) その CVE に対応する未適用のアドバイザリ(何も出なければ未適用のものはない)
sudo dnf updateinfo list --releasever=latest --cve CVE-YYYY-NNNNN
# 2) 適用済みのものも含めて表示(行頭に i が付いたものは適用済み)
sudo dnf updateinfo list --all --releasever=latest --cve CVE-YYYY-NNNNN
# 3) アドバイザリの詳細(対象パッケージ、修正版のバージョン、関連する CVE)
sudo dnf updateinfo info --releasever=latest --cve CVE-YYYY-NNNNN
```
- 実行前に `sudo dnf clean metadata` で最新の情報を取り直しておく
- 1) で何も出ない場合、「適用済み」「修正版がまだ出ていない(Pending Fix)」「影響なし」のどれかなので、2) と `https://explore.alas.aws.amazon.com/CVE-YYYY-NNNNN.html` の Status(1-2 の表)で区別する
- 1) で表示された場合は、2-2 以降で更新する
### 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 # 新しいリリースが表示されなければ最新
# 起動中のカーネルが、インストール済みの最新のカーネルと同じか(同じバージョンなら OK)
uname -r # 起動中のカーネル
rpm -q kernel --last | head -n 1 # インストール済みの最新のカーネル(kernel6.12 などを使っている場合は kernel を置き換える)
# 設定ファイルの競合(.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)
登録:
投稿 (Atom)
人気の投稿
-
## News [新サービス – AWS Transfer for SFTP – Amazon S3向けフルマネージドSFTPサービス](https://aws.amazon.com/jp/blogs/aws/new-aws-transfer-for-sftp-fully-ma...
-
[AWS CloudFormation とは何ですか?](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html) ## CloudFormationの動作概要 ポイン...
-
## 作業前確認 [Amazon Linux 2023 リリースノート](https://docs.aws.amazon.com/ja_jp/linux/al2023/release-notes/relnotes.html) ### インスタンスのネットワーク設定 ``` ...
-
## プロンプト設計の原則 ### 上流工程(要件定義・基本設計・詳細設計)向け - 以下の要素で構成する - **役割の指定**:どういう立場で回答させるか(例:「業務システム開発経験豊富なシステムアナリスト」) - **背景・コンテキスト**:システムの概要・技...
-
## 1. QCD(プロジェクトマネジメントの三角形) 品質(Quality)、コスト(Cost)、納期(Delivery)は相互に制約し合う。 - プロジェクト開始時に優先順位を明確化する - 品質・コスト・納期の変更時は影響分析を行う - ステークホルダーと優先順位を合...

