得体の知れないLinux PCやサーバーのハードウェアを調査する

# はじめに
　先輩方が残したLinuxサーバーのスペックがわからない、なんてことはありませんか？しかし、現時点で稼働しているため、止めて中を直接確認するのも大変でめんどい。そこで、CPU、メモリ、ストレージをsudoなしで、ターミナルにて確認していきます。
※OSはDebianです。古いOvert OSサーバーの表示ですが基本表示は変わりません。
※OS、ハードにより表示が異なります。

# 確認方法
## CUIで実行する場合
　CUIで紹介するコマンドを実行すると、情報が多すぎて画面外にはみ出すことがあります。その場合は、コマンドの後ろに次のコマンドを付け足してください。
~~~:長い場合
コマンド | more
~~~
これで、エンターを押すと情報が一行ずつ表示されます。中止する場合は Ctrl+c　したあとにエンターを押すと止まります。

## CPU
ターミナルにて、
~~~terminal:実行
$ lscpu
~~~
を実行します。
~~~:結果
Architecture:                      x86_64
CPU op-mode(s):                    32-bit, 64-bit
Byte Order:                        Little Endian
CPU(s):                            2
Vendor ID:                         GenuineIntel
Model name:                        Intel(R) Xeon(R) E5503 @ 2.00GHz
CPU family:                        6
model:                             156
Thread(s) per core:                1
Core(s) per socket:                2
Socket(s):                         1
Stepping:                          5
CPU MHz:                           2000.158
CPU max MHz:                       1995.0000
CPU min MHz:                       1596.0000
BogoMIPS:                          4000.31             
Virtualization:                    VT-x               
L1d cache:                         32 KiB 
L1i cache:                         32 KiB 
L2 cache:                          256 kiB 
L3 cache:                          4096 kiB
~~~
※一部省略。CPUやハードにより、表記が異なる場合もあります。
　これは実際に実行して出た表示されたものです。このようにCPUの情報が全て表示されます。本当ならCPU(s)にコア数なども正常に表示されますが、サーバーだからか正しく表記できていません。特に確認しておくといいところだけ表記します。
- **Architecture :** CPUの設計の種類のようなもの。raspberry piの場合、ここにはARMと記載される。これによって、使えるアプリなどに制限がある場合もある。linuxの場合はこれが結構ネックで、手動でアプリケーションをインストールする場合、このアーキテクチャに合うアプリをダウンロードしなければならない。間違えた場合、互換性がないため全く動かない。 
- **CPU(s) :** CPUのコア数、もしくはCPUの個数である。サーバーの場合、よっぽど古いものでなければSocketが１に対して、ここが２のときはCPUの個数を表記している。
- **Socket：** CPUをはめ込む、ソケットの数。
- **Model name:** CPUのモデル名。最悪これが分かれば、検索してスペックを把握できる。
- **Thread(s) per core :** 1コアあたりのスレッド数。例えば、4コア8スレッドのCPUならば2、4コア4スレッドのCPUなら1と表記される。

　この表示では*Intel Xeon E5503*が2つ搭載されていることになる。サーバーのため、2つのCPUが1つとして認識されているのであろう。ちなみに、CPUのスペックは2コア2スレッド、合計で4コア4スレッドのゴミでした。

　ちなみに、個人的に持っているCPUが1つのlinuxマシンでは次のように表示されました。
~~~:例
アーキテクチャ:                        x86_64
  CPU 操作モード:                      32-bit, 64-bit
  Address sizes:                      39 bits physical, 48 bits virtual
  バイト順序:                          Little Endian
CPU:                                  4
  オンラインになっている CPU のリスト:　  0-3
ベンダー ID:                           GenuineIntel
  モデル名:                            Intel(R) Celeron(R) N5105 @ 2.00GHz
    CPU ファミリー:                    6
    モデル:                           156
    コアあたりのスレッド数:             1
    ソケットあたりのコア数:             4
    ソケット数:                        1
    ステッピング:                      0
    CPU 最大 MHz:                      2900.0000
    CPU 最小 MHz:                      800.0000
    BogoMIPS:                          3993.60
Virtualization features:               
  仮想化:                              VT-x
Caches (sum of all):                   
  L1d:                                 128 KiB (4 instances)
  L1i:                                 128 KiB (4 instances)
  L2:                                  1.5 MiB (1 instance)
  L3:                                  4 MiB (1 instance)
~~~
※Ubuntu Desktop-22.04の日本語表記
ここのマシンはCPUのコア数などもちゃんと表記されています。

## メモリ
メモリの場合、知る方法は2パターンあります。
~~~:実行1
$ free
~~~
~~~:結果1
             total      used      free    shared  buff/cache  available
Mem:      26607760   3286356  22298848     25984     1022556   22916608
Swap:     29356028         0  29356028  
~~~
freeを実行するとメモリの合計、使用量、空き容量が見れます。単位はkB(キロバイト)。この表示の場合は26GBのメモリが搭載されていると読み取ることができます。微妙な容量...。
~~~:実行2
$ lsmem
~~~
~~~:結果2
RANGE                                  SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x0000000077ffffff  1.9G online       yes  0-14
0x0000000100000000-0x0000000287ffffff  6.1G online       yes 32-80

Memory block size:       128M
Total online memory:       8G
Total offline memory:      0B
~~~
lsmemを実行すると、空き容量、使用量は表示されないが合計容量は知ることができます。**合計値は、Total online memoryとTotal offline memoryを足した値**です。この表示の場合、8GBです。

## ストレージ
ターミナルの場合、こちらも2つのパターンがあります。
~~~terminal:実行1
$ lsblk
~~~
~~~:結果１
sda      8:0    0 119.2G  0 disk 
├─sda1   8:1    0   100M  0 part /boot/efi
├─sda2   8:2    0    16M  0 part 
├─sda3   8:3    0  58.6G  0 part 
├─sda4   8:4    0  1000M  0 part 
└─sda5   8:5    0  59.6G  0 part /
sdb      8:16   0   3.6T  0 disk
└─sdb1   8:17   0   3.6T  0 part /mnt/hdd1
sdc      8:32   0 465.8G  0 disk 
└─sdc1   8:33   0 465.8G  0 part /mnt/hdd2
~~~
　ツリー状にデバイスとパーティションが両方表示されました。見やすくて容量も確認しやすいですね。マウント先も表示されています。
※roopと表示されているものはアプリが使用している仮想ディスクみたいなもので、気にしなくてOK。

　次のは、はっきり言って見づらいのでおすすめしません。lsblkが使えなかったときに使いましょう。
~~~terminal:実行2
$ df
~~~
~~~:結果2
Filesystem      1K-blocks       Used  Available Use% Mounted on
tmpfs              790048       4764     785284   1% /run
/dev/sda5        61175620   23865692   34169936  42% /
tmpfs             3950224          4    3950220   1% /dev/shm
tmpfs                5120          4       5116   1% /run/lock
/dev/sda1           98304      55150      43154  57% /boot/efi
tmpfs              790044        156     789888   1% /run/user/1000
/dev/sdc1       479596200   89814712  365345828  20% /mnt/hdd2
tmpfs              790044         84     789960   1% /run/user/128
/dev/sdb1      3844549616 1071270208 2577912192  30% /mnt/hdd1
~~~
　dfではパーティションの容量が一部表示されました。1k-blocksが容量です。単位はkB(キロバイト)。パーティションの容量のため、HDDの容量を知りたいときは、該当するパーティションを足して計算しなければなりません。

**※ハードウェアRAIDを組んでいる場合は、表示とHDDの個数が一致しないことがあります。**

# おまけ
その他のハードウェアを確認するコマンドや、sudoが使える場合の別の確認コマンドを紹介します。
- USB
~~~terminal:USB情報
$ lsusb -t
~~~
　USBに接続されているデバイスをツリー状に表示してくれます。ハブの分岐もわかるので見やすいです。

- HDD
**Ubuntuデスクトップの最強手段：ディスクをいうアプリを開いてください☆**
~~~terminal:HDD
$ sudo fdisk -l 
~~~
 日本語表記が可能で、デバイス名（型番）、ディスクのタイプ、パーティション情報、フォーマット形式なども細かく表示されます。sudoが使えるならば、これを実行したほうがいいです。
- PCI
~~~terminal:PCI情報
$ lspci
~~~
 オーディオやビデオアダプタ（グラボ）、ネットワークアダプタ・コントローラーを表示してくれます。
- 全ハードウェア
~~~terminal:全ハードウェア
$ sudo lshw
~~~
　最終手段です。全てのハードウェア情報をさらに細かくを表示してくれますが、はっきり言って見ずらいです。全てのIOポート、オーディオやビデオアダプタ、ネットワークアダプタなど、情報が多すぎます。もちろん、CPUやメモリの情報も表示されますが、調べたいものがはっきりしているのであれば、表示するものを指定しましょう。
　しかし、**こんなに多くのデバイスによってコンピュータは動いているんだと実感できる**ので、試して見るものありです。

# まとめ
　こんな感じで、ハードウェアを調べるコマンドはたくさん存在します。みなさんも、自分のパソコンのハードウェアを把握してみてください。これで、サーバーの再構築プランを組めそうです。まぁ、スペックが想像以上に低くて困ってますが・・・。