- 投稿日:2020-06-25T23:44:12+09:00
Linux POSIX オプション、GNU オプションとは
コマンドラインインターフェースの種類
コマンドラインインターフェースは、主に
POSIX
とGNU
の仕様に従って設計されています。この記事はかなりの部分を以下の参考ページの記述を引用しています。詳しくご覧になりたい方はぜひ、直接参考サイトを御覧ください。
参考: Linux Command Optionの慣習(一般的なOption一覧)
POSIX (ポジックス)
POSIX 【 Portable Operating System Interface 】
POSIXとは、主にUNIX系OSに共通する機能などについて、プログラムからの呼び出し方法などの標準を定めた規格。カーネルの機能を呼び出すシステムコールをC言語から利用するためのAPI仕様や標準ライブラリ関数などを定めており、POSIX仕様のみを用いて開発されたプログラムはPOSIX準拠のOSならばどれでも同じように動作させることができる。
API以外にも、シェルのコマンド体系や、プロセスやスレッドの仕様、ファイルやディレクトリの構成、パスワードファイルなどのシステムデータベースの形式、アーカイブファイルの形式などについても標準を定めている。
参考: POSIX(Portable Operating System Interface)とは - IT用語辞典 e-Words
POSIXのオプション規格
- オプションは”-“で始め、オプション文字列は英数字1文字
- 複数のオプションを使用する場合、”-“を省略して繋げられる (例:”-a -b -c”を”-abc”と表記可)
- オプションとオプション引数の間は、空白を入れる事
- オプションは、コマンドライン引数の前に存在する事
- オプションは、コマンドライン実行時に省略できる事
GNU (グヌー)
*GNU 【 GNU is Not Unix 】 *
GNUとは、フリーソフトウェア(特に、オープンソースソフトウェア)のみでUNIX風のOSと関連するソフトウェア群を開発・公開するプロジェクト。リチャード・ストールマン(Richard M. Stallman)氏が創始し、同氏が代表を務めるフリーソフトウェア財団(FSF:Free Software Foundation)が推進している。GNUの一環として提供されるソフトウェアの名称には、その一部に「GNU」が含まれたり(GNU Emacsなど)、あるいは先頭が「g」から始まる(gcc、glibcなど)ことが多い。
GNUのオプション規格
POSIXの規格に従うことを推奨していることに加えて、以下の仕様を加えている。
- “–“およびオプションのロング名のサポート(例:”-v”に対応する”–version”)
- オプションとオプション引数が連結した形式のサポート(例:–test=path)
- “–version”(バージョン表示)および”–help”(ヘルプもしくはUsageの表示)を最低限サポートする事
一般的なオプションの一覧
Short Option Long Option 機能(オプションを実装しているCommand) a all 全ファイルや全ユーザなどを対象にした処理(du、nm、uname) b bytes、blocks バイトやブロックのサイズを設定(du、df) c cmd サブプロセスに渡すCommandおよびOptionを設定(bash、python) d debug debugメッセージを出力(多くのCommand) e exclude 除外対象(例:ファイル)を設定(rync) f file 使用するfileを設定(awk、make、sed、tar) g group グループを設定(install) h help Commandを使用する上でのhelpを表示(多くのCommand) i inodes ブロック使用量の代わりに iノード情報を表示(ls、df)
inodes以外に、interactiveも存在(rm、mv)j jobs ジョブの数を設定(make) k keep ファイル・メッセージ・リソースなどの削除を抑制(passwd、bzip) l list ファイル・ディレクトリなどのリストを表示(unzip、ls) m mode 権限の設定(install、mkdir) n number 番号(例:行番号)を表示(head、tail、grep) o output 出力ファイル名や出力ファイルパスの設定(多くのCommand) p 多種多様 参考文献を参照 q quiet メッセージの出力を抑制(多くのCommand) r recursive 再帰的に処理を実行(grep、chgrp、choen、cp、ls、diff、rm) s silent メッセージの出力を抑制(多くのCommand) t 多種多様 参考文献を参照 u update アップデートを実行(apt、yum、cp、mv、tar) v version プログラムのVersion情報を表示(多くのCommand) w width 幅の設定(ls、ptx) x extract アーカイブなどから抽出するファイル一覧を表示(tar、zip) y yes ユーザ確認する処理において、全確認項目に対してユーザがyesと回答したとみなす(apt、yum) z zip(compress) 圧縮を有効化(tar) 参考
- 投稿日:2020-06-25T22:47:01+09:00
cent8になったらこんなに楽になったのか
てか、gmone入れてたら、centos7でも同じなのか。
インストールはあんまり変わらない。centos7と同様にざくざく入れていく。
インストールが終了して、再起動したら…またインストールが開始した。
ちぇ。CDマウントしたままだからか。
インストールCDをアンマウントして、再起動したら。
なんと、GUIが立ち上がるよ。GNOMEだって。
今まで聞かれたことのない、ライセンス同意をしないとならないらしい。License Infomationをクリックすると、よくある同意画面になる。
内容はシンプルだ。ライセンス契約に同意しますにチェックを入れて、右上の完了ボタンをクリック。
初期セットアップ画面に戻ったら、ついでにユーザーの設定をおこなってしまう。
ユーザーとパスワードを入力して完了をクリック。
しばらく待つと、ユーザー名が表示される。
ユーザーをクリックすると、パスワード入力画面が表示されるので、パスワードを入力してサインインをクリック。
Welcome画面が表示される。インストール時選んだ言語がチェックされているのでそのまま次へをクリック。
キーボードのレイアウト選択。これも日本語がチェック済みなのでそのまま次へ。
位置情報サービスってなんだ。こんなものまでついてくるのか。個人的にはNO!にしたいが、とりあえずそのまま次へ。
オンラインアカウントへの接続なんて、今時な設定まである。とりあえず何もせず次へ。
準備完了!どうなったcentos!
いきなりはじめての人用の親切説明が見られる画面が開いた。なんてこった。
スクロールしてみた。
まあ、どうでもいいので右上の×で画面を閉じる。
デスクトップ画面はこんな感じ。
左上の「アクティビティ」をクリックすると、こんな画面になる。
なんかソフトが入っているよ。狐の模様をクリックして、FireFoxを立ち上げてみる。
なんと、ネットにつながらない。ネットワーク設定は自力でやれよってことか?この辺のツンデレぶりがlinux感溢れるね。
右上の▽をクリックすると、こんな画面が表示される。
「有線オフ」の右の参画をクリックしてメニューを表示させると、こんな感じ。優先設定をクリックしてみる。
ネットワークの設定画面が開く。有線の設定(歯車マーク)をクリック。
ネットワークの設定内容が表示される。
「自動接続する」って、linuxのネットワーク設定でよく見るあれじゃね?
チェック入れてみる。
興味本位でIPv4タブをクリック。とりあえず自動設定のままにして、適用をクリック。
有線が接続済みになった。これでまたFireFoxを立ち上げてみる。
なんと、centosのサイトが開いた!これだけでネットワーク設定できたらしい。
ついでにみんな大好きGoogle先生もつないでみるよ。
でも、このまんまだとホストOSのWindows10からteratermなんかで接続することができない。そういう設定をするには、一旦centosを落として、VirtualBoxの設定から変えないとならない。
設定-ネットワークのアダプター2タブを開き、ホストオンリーアダプターを割り当てる。
それからcentosを立ち上げて、再度設定を開いてみると、Ethernetが増えている!これがホストオンリーアダプターか!
追加されたEthernet(enp0s8)を開いて、接続をクリックしてみる。
表示が「オフ」から「接続…」に変わった。なんかつながったらしい。
念のため設定を見てみる。
ふたつとも接続済み。Ethernet(enp0s8)の設定を開いてみる。
IPアドレスが表示される。これが外からつなぐときのIP。
IPv4の設定を見てみる。さっきと同じ自動設定。
せっかくだから固定IPにしてみる。
一回接続をオフにして。
もう一回接続する。
それでIPアドレスを確認すると、ちゃんと変わっている。すげー。
teraterm立ち上げてみる。
つながった!
今までのコマンドの嵐はなんだったのか。こんなに簡単に設定できるなんて…
とはいえ「いやいや、儂はGUIなぞ信じないぞ!CUIこそ正義じゃ!」を言う人のために、コマンドも入れてみる。
アクティビティから端末をダブルクリック。
こんな画面が開く。
とりあえずnmtuiとか入れてみる。
よく見る画面。
ホストオンリーアダプターが「有線接続1」になっている。
さっき設定した値がちゃんと入っている。
なんか、今までコマンドがしがしで設定していたときと比較すると、あまりに手軽すぎて拍子抜けする。
細かいことは今まで通りコマンドで設定するんだろうけど、linuxもここまでハードル低くなったか…(涙)
みなさんもgnomeではっぴーlinuxらいふを!g
- 投稿日:2020-06-25T22:47:01+09:00
centos8になったらこんなに楽になったのか
てか、gmone入れてたら、centos7でも同じなのか。
インストールはあんまり変わらない。centos7と同様にざくざく入れていく。
インストールが終了して、再起動したら…またインストールが開始した。
ちぇ。CDマウントしたままだからか。
インストールCDをアンマウントして、再起動したら。
なんと、GUIが立ち上がるよ。GNOMEだって。
今まで聞かれたことのない、ライセンス同意をしないとならないらしい。License Infomationをクリックすると、よくある同意画面になる。
内容はシンプルだ。ライセンス契約に同意しますにチェックを入れて、右上の完了ボタンをクリック。
初期セットアップ画面に戻ったら、ついでにユーザーの設定をおこなってしまう。
ユーザーとパスワードを入力して完了をクリック。
しばらく待つと、ユーザー名が表示される。
ユーザーをクリックすると、パスワード入力画面が表示されるので、パスワードを入力してサインインをクリック。
Welcome画面が表示される。インストール時選んだ言語がチェックされているのでそのまま次へをクリック。
キーボードのレイアウト選択。これも日本語がチェック済みなのでそのまま次へ。
位置情報サービスってなんだ。こんなものまでついてくるのか。個人的にはNO!にしたいが、とりあえずそのまま次へ。
オンラインアカウントへの接続なんて、今時な設定まである。とりあえず何もせず次へ。
準備完了!どうなったcentos!
いきなりはじめての人用の親切説明が見られる画面が開いた。なんてこった。
スクロールしてみた。
まあ、どうでもいいので右上の×で画面を閉じる。
デスクトップ画面はこんな感じ。
左上の「アクティビティ」をクリックすると、こんな画面になる。
なんかソフトが入っているよ。狐の模様をクリックして、FireFoxを立ち上げてみる。
なんと、ネットにつながらない。ネットワーク設定は自力でやれよってことか?この辺のツンデレぶりがlinux感溢れるね。
右上の▽をクリックすると、こんな画面が表示される。
「有線オフ」の右の参画をクリックしてメニューを表示させると、こんな感じ。優先設定をクリックしてみる。
ネットワークの設定画面が開く。有線の設定(歯車マーク)をクリック。
ネットワークの設定内容が表示される。
「自動接続する」って、linuxのネットワーク設定でよく見るあれじゃね?
チェック入れてみる。
興味本位でIPv4タブをクリック。とりあえず自動設定のままにして、適用をクリック。
有線が接続済みになった。これでまたFireFoxを立ち上げてみる。
なんと、centosのサイトが開いた!これだけでネットワーク設定できたらしい。
ついでにみんな大好きGoogle先生もつないでみるよ。
でも、このまんまだとホストOSのWindows10からteratermなんかで接続することができない。そういう設定をするには、一旦centosを落として、VirtualBoxの設定から変えないとならない。
設定-ネットワークのアダプター2タブを開き、ホストオンリーアダプターを割り当てる。
それからcentosを立ち上げて、再度設定を開いてみると、Ethernetが増えている!これがホストオンリーアダプターか!
追加されたEthernet(enp0s8)を開いて、接続をクリックしてみる。
表示が「オフ」から「接続…」に変わった。なんかつながったらしい。
念のため設定を見てみる。
ふたつとも接続済み。Ethernet(enp0s8)の設定を開いてみる。
IPアドレスが表示される。これが外からつなぐときのIP。
IPv4の設定を見てみる。さっきと同じ自動設定。
せっかくだから固定IPにしてみる。
一回接続をオフにして。
もう一回接続する。
それでIPアドレスを確認すると、ちゃんと変わっている。すげー。
teraterm立ち上げてみる。
つながった!
今までのコマンドの嵐はなんだったのか。こんなに簡単に設定できるなんて…
とはいえ「いやいや、儂はGUIなぞ信じないぞ!CUIこそ正義じゃ!」を言う人のために、コマンドも入れてみる。
アクティビティから端末をダブルクリック。
こんな画面が開く。
とりあえずnmtuiとか入れてみる。
よく見る画面。
ホストオンリーアダプターが「有線接続1」になっている。
さっき設定した値がちゃんと入っている。
なんか、今までコマンドがしがしで設定していたときと比較すると、あまりに手軽すぎて拍子抜けする。
細かいことは今まで通りコマンドで設定するんだろうけど、linuxもここまでハードル低くなったか…(涙)
みなさんもgnomeではっぴーlinuxらいふを!g
- 投稿日:2020-06-25T18:02:42+09:00
私のための忘備録③viを使った基本的なファイル編集
- 投稿日:2020-06-25T11:59:30+09:00
Linux ファイルの属性を理解する(ls -l コマンド)
Mac 前提で書いております。
ファイルの属性とは?
ファイルには内容の他にも、「所有者」や「更新日時」などの情報が付属しています。これらの情報を「属性」と呼びます。
ファイルの属性は、「ls」コマンドの「-l」オプションや(画面1)、「stat」コマンドで確認できます。
-l (The lowercase letter ``ell''.) List in long format. (See below.) A total sum for all the file sizes is output on a line before the long listing.
すべてのファイルサイズの合計は、リストの前の行に出力されます。
The Long Formatとは
このフォーマットのことです。
-rw-r--r-- 1 user staff 0 6 25 11:01 test
lsのmanで以下のように説明されています。
If the -l option is given, the following information is displayed for each file:
[-lオプションを指定すると、ファイルごとに次の情報が表示されます。]
- file mode ファイルモード
- number of links リンクの数
- owner name 所有者名
- group name グループ名
- number of bytes in the file ファイル内のバイト数
- abbreviated month 省略された月
- day-of-month file was last modified 最終編集日
- hour file last modified 最終編集時間
- minute file last modified 最終編集分
- the pathname パスネーム
# ファイルの場合 -rw-r--r-- 1 user staff 0 6 25 11:01 test -rw-r--r-- 1 user staff 0 6 25 11:02 test.c # ディレクトリの場合 drwxr-xr-x 2 user staff 64 6 25 11:02 testdirファイルモード
ファイルの種類
ls -lでの表示 意味 - 普通のファイル(Regular File) d ディレクトリ l シンボリックリンク c キャラクタ型デバイスファイル(特殊ファイル) b ブロック型デバイスファイル(特殊ファイル) パーミッション
以下がわかりやすいです。
参考: 【一通り理解】Linuxパーミッションの基本とその設定方法
chmodコマンドも一緒に理解すると良いです。
chmod は change mode の略だそうです。パーミッションを指定していディレクトリを作る場合
mkdir -m 777 test
ファイルは作成時に個別にパーミッションを設定することはできないようです。
参考: パーミッションなどを設定する!chmodコマンドの詳細まとめ【Linuxコマンド集】
リンク数
ファイルのリンク数は常に1ではないということも重要なポイントです。
ハードリンクと、シンボリックリンクも異なります。
ハードリンクしている数がリンク数として表示されます。何を言っているのかさっぱりという方は、以下がわかりやすいです。
参考: Linux: ハードリンクと inode - Qiita
所有者とグループ
ファイルの所有者は通常、作成した人です。
グループについては、以下がわかりやすいです。
参考: Linux グループ一覧の確認と/etc/group ファイル
ファイル内のバイト数
ここは特に解説は不要かと思います。バイト数が表示されます。
タイムスタンプ
ここも不要ですね。更新日時が表示されます。
オプションを付けることでアクセス日などに変更することもできます。パスネーム
ファイル名が表示されます。
本記事と関係ないですが、私と同じく初心者の方は以下も参考になりますのでどうぞ。
参考: パス名について参考
参考: 「ls -l」コマンドの表示からファイルの属性を理解しよう (1/4):“応用力”をつけるためのLinux再入門(9) - @IT
- 投稿日:2020-06-25T11:38:08+09:00
Raspberry PI シリーズで分散環境構築(その7: 各ラズパイ向けの tftp ルート設定と起動試験)
序(連載一覧)
- Raspberry PI シリーズで分散環境構築(その1:モデル別、ディスクレスクライアント化の可否まとめ)
- Raspberry PI シリーズで分散環境構築(その2: PiServer の解析と代替システムの設計まで)
- Raspberry PI シリーズで分散環境構築(その3: dnsmasq のインストールと設定)
- Raspberry PI シリーズで分散環境構築(その4: NFSサーバの構築とクライアント用OSのインポート)
- Raspberry PI シリーズで分散環境構築(その5: クラスタノード向け Raspberry PI OS のカスタマイズ(1))
- Raspberry PI シリーズで分散環境構築(その6: クラスタノード向け Raspberry PI OS のカスタマイズ(2))
- Raspberry PI シリーズで分散環境構築(その7: 各ラズパイ向けの tftp ルート設定と起動試験)
- Raspberry PI シリーズで分散環境構築(その8: Webクラスタ構築のケース(前半))
本稿は その7 となります。
前回は NFS(またはPXE)サーバ上にインストールした qemu-user-static を利用して、NFSマシンにコピーしたクライアント向け OS イメージをカスタマイズしましたが、今回はこのOSイメージの /boot ディレクトリに対してシンボリックリンクを張ることで tftp ルートとして、起動試験を行います(今回は短めです)。
参考(筆者の環境)
実際の作業
NFS サーバと PXE サーバが分離されているものとして記載します。
1. PXE サーバから NFS サーバの共有ディレクトリをマウント
1.1. PXE サーバでマウントポイントを作成してマウント
- NFS サーバの IP
- 192.168.172.17
- 共有ディレクトリ名
- /exports/os4pi
NFS/PXE 両サーバ上に qemu-user-static がインストール済みで、どちらからでもラズパイ向けOSをカスタマイズしたい場合は rw 設定にしますが、PXE サーバ上でカスタマイズする必要がない場合は ro で構いません。
# mkdir /mnt/os4pi # mount -t nfs -o proto=tcp,vers=3,rw,noatime 192.168.172.17:/exports/os4pi /mnt/os4pi1.2. PXE サーバの /etc/fstab に行を追加して永続化
192.168.172.17:/exports/os4pi /mnt/os4pi nfs tcp,vers=3,rw,noatime,_netdev 0 02. dnsmasq で設定した tftp ルートにシンボリックリンクを張っていく
条件
- tftp ルート(基準ディレクトリ)
- /srv/tftp
- ラズパイ2B の MAC アドレス
- b8-27-eb-GG-HH-II
- ラズパイ2B に割り振られる固定IP
- 192.168.172.32
- ラズパイ2B 向け OS の /boot の位置
- /mnt/os4pi/raspbian/armhf/boot
- ラズパイ3B の MAC アドレス
- b8-27-eb-XX-YY-ZZ
- ラズパイ3B に割り振られる固定IP
- 192.168.172.33
- ラズパイ3B 向け OS の /boot の位置
- /mnt/os4pi/raspbian/armhf_64/boot
- ラズパイ4B の MAC アドレス
- dc-a6-32-PP-QQ-RR
- ラズパイ4B に割り振られる固定IP
- 192.168.172.34
- ラズパイ4B 向け OS の /boot の位置
- /mnt/os4pi/raspbian/aarch64/boot
# cd /srv/tftp # rm -Rf b8-27-eb-GG-HH-II # ln -sf /mnt/os4pi/raspbian/armhf/boot b8-27-eb-GG-HH-II # ln -sf /mnt/os4pi/raspbian/armhf/boot 192.168.172.32 # rm -Rf b8-27-eb-XX-YY-ZZ # ln -sf /mnt/os4pi/raspbian/armhf_64/boot b8-27-eb-XX-YY-ZZ # ln -sf /mnt/os4pi/raspbian/armhf_64/boot 192.168.172.33 # rm -Rf dc-a6-32-PP-QQ-RR # ln -sf /mnt/os4pi/raspbian/aarch64/boot dc-a6-32-PP-QQ-RR # ln -sf /mnt/os4pi/raspbian/aarch64/boot 192.168.172.34注意事項
- IP/MACアドレスはお手持ちのラズパイの実際のアドレスに直してください。
- 3B/3B+ の場合、 aarch64 にしても問題ありません
- シンボリックリンクを張る前に、その3 で作成した空フォルダを削除しています。
- 固定IPでもリンクを張っておきます。こうしておくと dnsmasq の設定を「tftp ルートを IP毎に振り分け」に変更しても対応可能となります
3. ラズパイの試験起動
3.0. 下準備
- NFSサーバ→PXEサーバの順で電源投入。ログイン可能になるまで待つ。
- その1 を参考に、各モデルをディスクレスブートが可能な状態にしておく
3.1. Raspberry PI 2B の場合
- 第1パーテーションが FAT でフォーマットされた空の microSD (容量は少なくて構わない)に、最新の RaspberryPI OS インストーライメージから bootcode.bin ファイルのみをコピーして、ラズパイに挿入
- HDMI,キーボード,LANを接続
- USB(電源)を接続
- microSD 上の bootcode.bin の読み込みが完了し、モニタにカラーグラデーションが出ることを確認。表示されない場合は、microSD が死んでいる(FATフォーマットではない場合を含む)、ラズパイの microSD ドライブが不良、bootcode.bin のファイルコピーに失敗した、のいずれかとなります。
- LAN のアクセスランプが点灯することを確認。点灯しない場合は、ラズパイの GPU/SoC が故障している、またはネットワーク接続がきちんと行われていない可能性があります。
- 画面にラズパイロゴやブートログが出て来ることを確認(tftp の設定まではOKということ)。画面が真っ黒のまま進行しない場合は tftp サーバ自体の設定ミス、tftpサーバ上にある config.txt ファイルの設定ミスとなります。
- ログイン可能な状態になることを確認。途中で止まる場合は、tftp サーバ上の cmdline.txt の設定ミス、NFSサーバの設定ミス、/etc/fstab ファイルの設定ミス等が考えられます。
3.2. Raspberry PI 3B/3B+ の場合
- microSD を抜く
- HDMI,キーボード,LANを接続
- USB(電源)を接続
- LAN のアクセスランプが点灯することを確認。点灯しない場合は、3B固有の事前準備が行われていない、ネットワークがきちんと接続されていない、または GPU/SoC が不良である可能性が有ります。1
- モニタにカラーグラデーションが表示されることを確認。この確認ができると、tftp サーバから bootcode.bin のダウンロードまでは OK ということになります。カラーグラデーションが表示されない場合は、tftp サーバの設定がおかしいことが考えられます。
- 画面にラズパイロゴやブートログが出て来ることを確認。画面が真っ黒のまま進行しない場合は tftpサーバ上にある config.txt ファイルの設定ミスとなります。
- ログイン可能な状態になることを確認。途中で止まる場合は、tftp サーバ上の cmdline.txt の設定ミス、NFSサーバの設定ミス、/etc/fstab ファイルの設定ミス等が考えられます。
3.3. Raspberry PI 4B の場合
- microSD を抜く
- HDMI,キーボード,LANを接続
- USB(電源)を接続
- LAN のアクセスランプが点灯することを確認。点灯しない場合は、事前準備が行われていない、ネットワークがきちんと接続されていない、または EEPROM/SoC が不良である可能性が有ります。
- モニタにカラーグラデーションが表示され、ブラックアウトすることを確認。EEPROM の初期不良は無い、ということが確認できます。
- 画面にラズパイロゴやブートログが出て来ることを確認。画面が真っ黒のまま進行しない場合は tftpサーバ上にある config.txt ファイルの設定ミスとなります。
- ログイン可能な状態になることを確認。途中で止まる場合は、tftp サーバ上の cmdline.txt の設定ミス、NFSサーバの設定ミス、/etc/fstab ファイルの設定ミス等が考えられます。
次回予告
今回はここまでとなります。全ラズパイで Raspberry PI OS のディスクレス(2Bは半ディスクレス)クライアント化できたはずです。ただ、このままだと、「何も連携なしのディスクレスクライアント群」に過ぎませんから、次回以降、全ノードをコントロールするコントローラPC + NFSサーバ + ラズパイノード群の構成を取る分散環境を順次構築していきたいと思います。
初回となる次回は、最も構築が簡単な分散環境、Apache を利用した負荷分散(冗長化) Web サーバを構築してみたいと思います。
実際、私は購入直後から頻繁に microSD で起動できない現象を引き起こす 3B 個体を1つ持っていました。常々「microSD が死んだ/相性が悪いんだろう」と思っていたのですが、ディスクレスブートの試験をして行く中、「これは初期不良だ」と気づきました。購入後4年経ってから初めて気づいた初期不良・・・ ↩