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

以前もブログに書きました、「みんな大好きな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弾があるかもしれません。
ファブリカコミュニケーションズで働いてみませんか?
あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。
ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。
“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。