1. HOME
  2. テックブログ
  3. みんな大好きなbashコマンドを極めてみる ~その2~

みんな大好きなbashコマンドを極めてみる ~その2~

2022/11/09 テクノロジー

以前もブログに書きました、「みんな大好きなbashコマンドを極めてみる」の第2弾です。

ちょこっとした処理をするには非常~~~に便利なbashコマンドやbashスクリプト。

しかし、ちょっとクセがあったりして、そこまで頻繁に使うわけでないので、覚えるにはちょっと難あり。

まあここでは、極めるってほどの話しではないですが、LinuxやUnix/BSD系で、自分もよく、ちょくちょく、たまーに使う、便利そうなbashコマンドとその機能・オプション等を、私の独断と偏見で厳選して、備忘録的に記録しておきます。

※基本、Linux系メインで記載しておりますので、一部、Unix、BSD系、MAC等や、バージョンによってもオプション等が異なる場合がありますので、ご了承ください。

今回はマシン情報やネットワーク系、パフォーマンス系の調査などで使えそうなコマンドを中心に紹介していきたいと思います。

▼目次

▼ハードウェア情報系
●dmidecodeコマンド
●/proc/cpuinfoファイル(linux系のみ)
●/proc/meminfoファイル(linux系のみ)
●/var/run/dmesg.bootファイル(BSD系のみ)
●sysctlコマンド(ハードウェア情報はBSD系のみ)

▼パフォーマンス系
●topコマンド
●freeコマンド
●vmstatコマンド
●psコマンド
●サーバーの性能測定(簡易版)

▼ネットワーク系
●開いているポート一覧
●ルーティング
●pingコマンド
●tracerouteコマンド
●telnetコマンド
●tcpdumpコマンド

▼最後に

▼ハードウェア情報系

CPUやメモリ、その他ハードウェア情報を確認したいときに便利。

●dmidecodeコマンド

ハードウェア情報が見られる。

デフォルトでインストールされているケースが多い。

root権限が必要。

表示例

$ sudo dmidecode -t memory |grep 'Type:'|grep -iv Unknown|head -1
        Type: DDR4
→メモリのタイプを表示

タイプ一覧は、「-t」だけ指定。

例)
bios
system
baseboard
chassis
processor
memory
cache
connector
slot

●/proc/cpuinfoファイル(Linux系のみ)

CPU情報が見られる。

root権限不要。

表示例

$ cat /proc/cpuinfo|grep 'model name'
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
model name      : Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
→コア(スレッド)数分表示される

●/proc/meminfoファイル(Linux系のみ)

メモリ情報が見られる。

root権限不要。

表示例

$ cat /proc/meminfo
MemTotal:       32648604 kB
MemFree:        14474620 kB
MemAvailable:   14340388 kB
Buffers:             720 kB
Cached:           223828 kB
SwapCached:        23812 kB
Active:           263056 kB
Inactive:         223668 kB
Active(anon):     168208 kB
Inactive(anon):   179456 kB
Active(file):      94848 kB
Inactive(file):    44212 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      16392188 kB
SwapFree:       13677564 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        239876 kB
Mapped:            41744 kB
Shmem:             85492 kB
Slab:            4158108 kB
SReclaimable:     131276 kB
SUnreclaim:      4026832 kB
KernelStack:        6048 kB
PageTables:        11652 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    32716488 kB
Committed_AS:    3345380 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:    204800 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:    30542880 kB
DirectMap2M:     2723840 kB
DirectMap1G:     1048576 kB

●/var/run/dmesg.bootファイル(BSD系のみ)

ハードウェア情報が見られる。

root権限不要。

表示例

$ grep -E '(CPU:|FreeBSD/SMP|real memory)' /var/run/dmesg.boot
CPU: Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz (2808.12-MHz K8-class CPU)
real memory  = 68717379584 (65534 MB)
FreeBSD/SMP: Multiprocessor System Detected: 20 CPUs
FreeBSD/SMP: 1 package(s) x 10 core(s) x 2 hardware threads

●sysctlコマンド(ハードウェア情報はBSD系のみ)

カーネルのパラメータ情報のコマンドだが、BSD系であればハードウェア情報が載っている。

root権限不要。

表示例

$ sysctl -a 2>/dev/null|egrep '(hw.model|hw.ncpu|physmem)'
hw.model: Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz
hw.ncpu: 20       ←コア(スレッド)数
hw.physmem: 68320051200

▼パフォーマンス系

主にパフォーマンス計測などに便利なものなど。

●topコマンド

ロードアベレージや、CPU使用率、メモリ使用量、スワップ使用量、各プロセスの情報等をリアルタイムに取得可能。

root権限不要。

表示例

$ top
top - 11:11:17 up 1242 days, 23:17,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  97 total,   1 running,  56 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.8 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   980464 total,   245956 free,   121300 used,   613208 buff/cache
KiB Swap:  1048572 total,  1021180 free,    27392 used.   662332 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   43752   3232   2024 S   0.0  0.3  53:54.25 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:17.17 kthreadd
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:+
    6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_+
・・・

LinuxとBSD系では若干表示内容や操作方法が違うのが難点。

詳細はtopコマンド表示後、「H」キー押下でヘルプ情報が見られる。

「Q」キーで終了。

●freeコマンド(Linux系のみ)

メモリ/スワップ情報を調べるときに便利。

root権限不要。

表示例

$ free
              total        used        free      shared  buff/cache   available
Mem:         499476       58948       43100       25820      397428      377440
Swap:       2097148       68864     2028284

●vmstatコマンド

メモリやCPU使用率を調べるときに便利。

root権限不要。

表示例

$ vmstat -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 0  0 410112 3143316      0 320468    0    0    92    92    1    0  2  1 97  0  0 2022-11-04 11:22:56

AWSのEC2などでは、CPU使用率は見れても、メモリ使用量は標準では確認できないので、vmstatコマンドをcronに仕込んでおいて取得しておくと良いかと。(1行表示なので、freeコマンドより見やすい。)

※「-t」オプションは、日時表示オプションで、Linuxのみなので、BSD系の場合は別途dateコマンドを使うなどして日時を取得する必要がある。

※sarコマンドを使うことで、vmstatより細かなOSリソース情報を取得することができるが、別途、sysstatパッケージのインストールが必要で、サービス稼働させたりなどひと手間必要なので、ここでは割愛。

●psコマンド

全プロセス一覧と、各プロセスのメモリやCPU使用率を調べるときに便利。

root権限不要。

表示例

$ ps auxwww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.5 125488  2512 ?        Ss    3月17  63:51 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S     3月17   0:03 [kthreadd]
root         3  0.4  0.0      0     0 ?        S     3月17 1634:13 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<    3月17   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S     3月17   0:00 [migration/0]
・・・
root      1727  0.0  0.0  46928   412 ?        Ss    6月29   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     2793  0.0  0.1 393792   540 ?        S    10月31   0:00 php-fpm: pool www
・・・

●サーバーの性能測定(簡易版)

ディスクI/Oやネットワーク速度を調べるときに便利。

root権限不要。

表示例

$ curl -Lso- bench.sh | bash
-------------------- A Bench.sh Script By Teddysun -------------------
 Version            : v2022-06-01
 Usage              : wget -qO- bench.sh | bash
----------------------------------------------------------------------
 CPU Model          : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
 CPU Cores          : 1 @ 2397.222 MHz
 CPU Cache          : 4096 KB
 AES-NI             : Enabled
 VM-x/AMD-V         : Disabled
 Total Disk         : 19.6 GB (5.6 GB Used)
 Total Mem          : 487.8 MB (61.3 MB Used)
 Total Swap         : 2.0 GB (69.0 MB Used)
 System uptime      : 232 days, 8 hour 13 min
 Load average       : 1.02, 1.07, 1.03
 OS                 : CentOS Linux release 7.5.1804 (Core)
 Arch               : x86_64 (64 Bit)
 Kernel             : 3.10.0-862.3.3.el7.x86_64
 TCP CC             : cubic
 Virtualization     : KVM
 Organization       : AS7506 GMO Internet,Inc
 Location           : Tokyo / JP
 Region             : Tokyo
----------------------------------------------------------------------
 I/O Speed(1st run) : 617 MB/s
 I/O Speed(2nd run) : 764 MB/s
 I/O Speed(3rd run) : 688 MB/s
 I/O Speed(average) : 689.7 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency
 Speedtest.net    101.94 Mbps       96.91 Mbps          0.44 ms
 Los Angeles, US  100.83 Mbps       126.45 Mbps         108.19 ms
 Dallas, US       105.83 Mbps       131.26 Mbps         128.45 ms
 Montreal, CA     80.60 Mbps        134.26 Mbps         166.58 ms
 Paris, FR        124.60 Mbps       130.38 Mbps         214.07 ms
 Amsterdam, NL    119.09 Mbps       125.91 Mbps         226.88 ms
 Shanghai, CN     2.75 Mbps         130.90 Mbps         72.13 ms
 Nanjing, CN      105.22 Mbps       1.27 Mbps           72.75 ms
 Hongkong, CN     103.70 Mbps       122.30 Mbps         53.68 ms
 Seoul, KR        104.46 Mbps       135.65 Mbps         42.43 ms
 Singapore, SG    101.41 Mbps       133.24 Mbps         72.17 ms
 Tokyo, JP        101.14 Mbps       100.18 Mbps         0.41 ms
----------------------------------------------------------------------
 Finished in        : 6 min 19 sec
 Timestamp          : 2022-11-04 15:52:03 JST
----------------------------------------------------------------------

▼ネットワーク系

ネットワークの不通調査などに便利なものなど。

●開いているポート一覧

自身のサーバーとの通信状態を調べるときに便利。

root権限不要。

表示例

$ netstat -an |grep LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::111                  :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

「ss -nlt」コマンドでも可。(Linux系のみ)

netstatコマンドは、以前はLinuxに標準でインストールされていたが、最近はssコマンドに移行されたため、別途、net-toolsパッケージをインストールしなければならない場合もあり。

●ルーティング

自身のサーバーのルーティング設定を調べるときに便利。

root権限不要。

表示例

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         xxx.xx.xx.1     0.0.0.0         UG        0 0          0 eth0
xxx.xx.xx.0     0.0.0.0         255.255.254.0   U         0 0          0 eth0

「route -n」や「ip r」コマンドでも可。

netstatコマンドは、以前はLinuxに標準でインストールされていたが、最近はssコマンドに移行されたため、別途、net-toolsパッケージをインストールしなければならない場合もあり。

●自分のグローバルIP確認

該当サーバーにグローバルIPアドレスが付与されていない場合、このサーバーのグローバルIPアドレスを、どこかグローバルIPが表示されるサイトにアクセスして確認。

いちいちルーティングやデフォルトゲートウェイを確認して辿って。。。などしなくて済むので便利。

root権限不要。

表示例

$ curl -sS https://www.cman.jp/network/support/go_access.cgi |grep \"outIp
<div class="outIp">xxx.xx.xx.xx</div>

ただし、個別にルーティングされているものがあればこの方法では確認不可。

●pingコマンド

単純な疎通確認に便利。

root権限不要。

表示例

$ ping google.com
PING google.com (172.217.174.110) 56(84) bytes of data.
64 bytes from nrt12s28-in-f14.1e100.net (172.217.174.110): icmp_seq=1 ttl=119 time=1.65 ms
64 bytes from nrt12s28-in-f14.1e100.net (172.217.174.110): icmp_seq=2 ttl=119 time=1.05 ms
64 bytes from nrt12s28-in-f14.1e100.net (172.217.174.110): icmp_seq=3 ttl=119 time=1.10 ms
・・・

ただし、相手側がpingを許可しているとは限らないので、その場合はこのコマンドでの調査は不可。

●tracerouteコマンド

ネットワークがどこの経路を辿っているか調査するのに便利。

root権限不要。

表示例

$ traceroute google.com
traceroute to google.com (172.217.174.110), 30 hops max, 60 byte packets
1  xxx.xxx.xxx.xxx  0.977 ms  0.959 ms  0.941 ms
 2  yyy.yyy.yyy.yyy  1.411 ms  1.540 ms  1.761 ms
 3  150.95.5.157 (150.95.5.157)  1.540 ms  1.538 ms  1.554 ms
 4  150.95.5.77 (150.95.5.77)  1.049 ms  1.046 ms  1.036 ms
 5  as15169.ix.jpix.ad.jp (210.171.224.96)  1.212 ms  1.291 ms  1.180 ms
 6  108.170.242.97 (108.170.242.97)  1.463 ms  1.009 ms 108.170.242.129 (108.170.242.129)  2.148 ms
 7  209.85.253.59 (209.85.253.59)  1.624 ms 209.85.253.57 (209.85.253.57)  1.699 ms  1.638 ms
 8  nrt12s28-in-f14.1e100.net (172.217.174.110)  0.916 ms  0.917 ms  0.960 ms

こちらも、相手側だけでなく、途中の経路(ルーター/スイッチ類)がpingを許可しているとは限らないので、その場合はこのコマンドでの調査は不可。

●telnetコマンド

ポートの単純な疎通確認に便利。

root権限不要。

表示例

$ telnet google.com 80
Trying 172.217.174.110...
Connected to google.com.
Escape character is '^]'.

「Escape character is ‘^]’.」が返ってこれば、疎通できていることになる。

応答が返ってくるのが遅かったり、「telnet: connect to address xxx.xxx.xxx.xxx: Connection refused」などは疎通できていない。

●tcpdumpコマンド

パケットキャプチャ。パケットの詳細調査する際に便利。

root権限必要。

表示例

$ sudo tcpdump -A 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:00:50.992468 IP xxx.xxx.xxx.xxx.ssh > xxx.xxx.xxx.xxx: Flags [P.], seq 2603788451:2603788691, ack 79913839, win 824, length 240
E...R#@.@..Xv.... .
.....2....coP..8.^...........
.|..X5.$.q..q.%..t.R.@9<M..j....c.Sr.rJ..+W..kN.....?..j..@!..u.q....FZ...)
.
.       .~N.....Wh..}..>&.p...?.........."8......H..vj..pV..    .....,...'..d ..}....l..$...A.%...v.......V...S].!...n..y.Z......)...@S.nb.I..>z......E.)......9.
18:00:50.994670 IP xxx.xxx.xxx.xxx.41124 > xxx.xxx.xxx.xxx.domain: 46873+ PTR? xxx.xxx.xxx.xxx. (44)
E..H4.@.@..@v...v.<....5.4@.............. xxx.xxx.xxx.xxx.....
18:00:50.995007 IP xxx.xxx.xxx.xxx.domain > xxx.xxx.xxx.xxx.41124: 46873 1/0/0 PTR xxx.xxx.xxx.xxx. (83)
E..o....?...v.<.v....5...[.,............. xxx.xxx.xxx.xxx.in-addr.arpa......... xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx.
18:00:50.995141 IP xxx.xxx.xxx.xxx.54950 > xxx.xxx.xxx.xxx.domain: 44176+ PTR? xxx.xxx.xxx.xxx.in-addr.arpa. (43)
E..G4.@.@..@v...v.<....5.3@.............. xxx.xxx.xxx.xxx.in-addr.arpa.....
18:00:50.995398 IP xxx.xxx.xxx.xxx.domain > xxx.xxx.xxx.xxx.54950: 44176 1/0/0 PTR xxx.xxx.xxx.xxx.lzun.static.cnode.io. (91)
E..w....?...v.<.v....5...c."............. xxx.xxx.xxx.xxx.in-addr.arpa................$. xxx.xxx.xxx.xxx node.io.
・・・

バイナリで出力されちゃいますので、ファイルにリダイレクトして別途、Wiresharkなどで中身を確認します。

▼最後に

ここで挙げたコマンド等は、あくまで一例です。

まだまだbashには奥深い技やコマンドが多々ありますので、また機会があれば第3弾があるかもしれません。

ファブリカコミュニケーションズで働いてみませんか?

あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。

ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。

“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。

◎ 新卒採用の方はこちら
◎ キャリア採用の方はこちら

この記事を書いた人

インフラMr.Y
プロダクト開発本部 インフラチーム
インフラMr.Y

おすすめの記事