🎇

インフラエンジニアとして知っておきたいLinuxコマンド

2023/12/16に公開

インフラエンジニアとして知っておきたいLinuxコマンド

記事を見にきてくださった皆さん、こんにちは
インフラエンジニアとして4年ほど経験してきました、こうきと申します。

インフラエンジニアとして現場参画前に以下のコマンドは知っておきたかったなという
過去の思いがあったので、メモ書きとして記載させていただきました。

このページを見に来てくれた方で、「Linuxを知らない」という方は少ないと思いますが、Linuxのコマンドを熟知している、という方はかなり少ないのではないかなと思います。

これらを全て把握し、使いこなすのは容易ではありませんが
それほど難しいコマンドでもないので参考にいただければ幸いです。

最低限知っておきたいコマンド

・ユーザーとグループを設定できる(su、useradd、passwd)
・ファイルパーミッションを設定できる(ls、chmod)
・ネットワーク調査ができる(ifconfig, route, ip, iptables)
・ボトルネック調査ができる(ps, sar, vmstat)

ユーザーとグループを設定できる(su、useradd、passwd)

1.一般ユーザでログイン後rootへスイッチ

su -

※「-」の有無について
・「-」ありの場合
  rootユーザーとして直接ログインした場合と同様の処理環境が提供される
・「-」なしの場合
  切り替え前のユーザーの環境を維持したまま、ユーザーだけをrootユーザーに切り替える

2.ユーザの追加

useradd [オプション][ユーザー名]

[ユーザー名]のユーザーを作成する

▼コマンド例

useradd -s /bin/bash -m ユーザー名

ユーザーを作成する、シェルは/bin/bashとし、ホームディレクトリも同時に作成する

3.パスワードの設定

passwd [オプション][ユーザー名]

[ユーザー名]のパスワードを設定する

▼コマンド例

passwd -x 日数 ユーザー名

指定したユーザーのパスワードの有効期限を設定する

ファイルパーミッションを参照し、設定できる(ls、chmod)

hogehoge-koki@PC-0002850[~]  $ ls -l
total 41498552
drwx------@   4 hogehoge-koki  staff          128 10 18 00:51 Applications
drwxr-xr-x    8 hogehoge-koki  staff          256 11 24 23:29 Creating_repair_ticket
drwx------@  22 hogehoge-koki  staff          704  2  5 07:23 Desktop
drwx------+   5 hogehoge-koki  staff          160  1 27 15:21 Documents
drwx------@ 206 hogehoge-koki  staff         6592  2  8 22:52 Downloads

例)hogehoge-koki
①d②rwx③r-x④r-x ⑤yata-koki ⑥staff
①d=ディレクトリ -=ファイル l=リンクファイル
②hogehoge-koki(所有者)の権限
③staff(グループ)の権限
④その他ユーザの権限
⑤所有者
⑥グループ

パーミッション変更方法

chmod モード 対象ファイル名

▼コマンド例

chmod 764 hoge.txt

ネットワーク調査ができる(ifconfig, route, ip, iptables)

1.ifconfigコマンド

ネットワーク環境の状態確認、設定のためのコマンド

[hogehoge@hoge ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.21  netmask 255.255.252.0  broadcast 172.16.3.255
        ether 00:50:56:82:12:82  txqueuelen 1000  (Ethernet)
        RX packets 1191633404  bytes 92509239120 (86.1 GiB)
        RX errors 0  dropped 42325  overruns 0  frame 0
        TX packets 19474739  bytes 30073838259 (28.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.212.91.61  netmask 255.248.0.0  broadcast 10.215.255.255
        ether 00:50:56:82:23:77  txqueuelen 1000  (Ethernet)
        RX packets 147012911  bytes 11624757887 (10.8 GiB)
        RX errors 0  dropped 52979  overruns 0  frame 0
        TX packets 2253536  bytes 194286438 (185.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0=インターフェース名(接続名)
BROADCAST=ブロードキャストが有効なときに表示される
RUNNING=インターフェイスの動作準備が完了しているときに表示される
MULTICAST=マルチキャストが有効なときに表示される
mtu=1フレームの送信最大値(Maximum Transmission Unit)
inet=IPアドレス
netmask=サブネットマスク
broadcast=ブロードキャストアドレス
ether(HWADDR)=MACアドレス
RX=packets:受信パケット数
errors:エラーパケット数
TX=送信パケット数
collisions=コリジョン(衝突が発生した回数)
txqueuelen=パケット送信キュー(待機場所)の大きさ

▼インターフェースの停止、起動

[hogehoge@hoge ~]$ ifconfig eth0 down
[hogehoge@hoge ~]$ ifconfig eth0 up

▼IPアドレス設定

[hogehoge@hoge ~]$ ifconfig eth0 192.168.1.23

▼サブネットマスク、ブロードキャストアドレス設定

[hogehoge@hoge ~]$ ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.23

2.routeコマンド

ルーティングテーブルの表示と確認及び、経路の追加、削除、変更するコマンド

[hogehoge@hoge ~]$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    102    0        0 eth2
10.0.0.0        10.208.0.254    255.0.0.0       UG    101    0        0 eth1
10.208.0.0      0.0.0.0         255.248.0.0     U     101    0        0 eth1
172.16.0.0      0.0.0.0         255.255.252.0   U     100    0        0 eth0
172.26.39.64    0.0.0.0         255.255.255.240 U     102    0        0 eth2

Destination=対象となるネットワークまたはホスト。「default」はデフォルト・ゲートウエイを表す
Gataway=ゲートウエイのIPアドレス。「*」は設定されていない
Genmask=対象ネットワークのネットマスク
Flags=ルーティングのフラグ。
  「U」=ルーティングが有効
  「H」=対象がホスト
  「G」=ゲートウエイ
  「R」=回復される動的なルーティング
  「D」=デーモンまたは置き換えによって書き換えられるルーティング
  「M」=ルーティング・デーモンまたは置き換えによって書き換えられるルーティング
  「A」=addrconfで設定されたルーティング
  「C」=キャッシュのエントリ,「!」は拒否を表す
Metric=対象との距離 (※メトリックは小さい方が優先される)
Ref=ルートの参照数
Use=ルーティングの参照回数
Iface=ネットワーク・インタフェース名

▼ルーティングを追加する

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0

▼デフォルト・ゲートウェエイを指定する

# route add default gw 192.168.0.1

▼10...*ネットワークへのルーティングを拒否する

# route add -net 10.0.0.0 netnask 255.0.0.0 reject

3.ipコマンド

ルーティングテーブルの表示と確認及び、経路の追加、削除、変更するコマンド

[hogehoge@hoge ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:82:12:82 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.21/22 brd 172.16.3.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

eth0=インターフェース名(接続名)
BROADCAST=ブロードキャストが有効なときに表示される
MULTICAST=マルチキャストが有効なときに表示される
link/ether=MACアドレス
inet=IPアドレス
brd=ブロードキャストアドレス

▼MTUを変更する(※MTU とは、一回のデータ転送にて送信可能な [ IPデータグラムの最大値 ] のこと)

[hogehoge@hoge ~]$ ip link set eth0 mtu 1468

▼IPアドレス設定

[hogehoge@hoge ~]$ ip a add 192.168.5.21/255.255.255.0 eth0

▼ルーティングテーブル確認

[hogehoge@hoge ~]$ ip r
default via 172.26.39.69 dev eth2 proto static metric 102
10.0.0.0/8 via 10.208.0.254 dev eth1 proto static metric 101
10.208.0.0/13 dev eth1 proto kernel scope link src 10.212.91.61 metric 101
172.16.0.0/22 dev eth0 proto kernel scope link src 172.16.1.21 metric 100
172.26.39.64/28 dev eth2 proto kernel scope link src 172.26.39.66 metric 102
172.27.0.0/19 via 172.16.1.220 dev eth0

▼経路の追加と削除

[hogehoge@hoge ~]$ ip r add 192.168.2.0/255.255.255.0 metric 10 via 182.48.56.253 eth0

4.iptablesコマンド

特定のアクセスを制限したり、許可したりするコマンド

[hogehoge@hoge ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
  
Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
  
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

policy ACCEPT=全てのパケット通信が許可されている状態

▼チェインフォワードの意味
[INPUT]:入力
[FORWARD]:転送
[OUTPUT]:出力

▼アクセスを許可するコマンド

iptables -A INPUT -s [アクセスを許可するIPアドレス] -j ACCEPTIPアドレスを指定する場合
iptables -A INPUT -p tcp --dport 80 -j ACCEPT ←特定のポートを指定する場合

▼アクセスを制限するコマンド

iptables -A INPUT -s [アクセスを制限するIPアドレス] -j DROPIPアドレスを指定する場合
iptables -A INPUT -p tcp --dport 80 -j DROP ←特定のポートを指定する場合

ボトルネック調査ができる(ps, sar, vmstat)

1.psコマンド

[hogehoge@hoge ~]$ ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4 191300  5008 ?        Ss   Nov07   1:44 /usr/lib/system
root         2  0.0  0.0      0     0 ?        S    Nov07   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<   Nov07   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        I<   Nov07   0:00 [mm_percpu_wq]
root         7  0.0  0.0      0     0 ?        S    Nov07   0:07 [ksoftirqd/0]
root         8  0.0  0.0      0     0 ?        I    Nov07   0:15 [rcu_sched]

▼よく使うコマンドオプション
a=自分以外のユーザーのプロセスについても表示
x=デーモンプロセスを表示
u=ユーザー名と開始時刻を表示▼MTUを変更する

▼項目
USER=プロセスの実行ユーザー
%CPU=プロセスのCPU使用率(CPU利用時間/実際の時間)
%MEM=プロセスが確保している物理メモリを百分率で表示
VSZ、RSS=それぞれプロセスが仮想メモリ領域のサイズ、物理メモリ領域のサイズ
STAT=プロセスの状態

2.sarコマンド

CPU・メモリなど計算機のパフォーマンスに関わる様々なリソースの情報を出力することができる。

[root@ip-10-0-0-247 ~]# sar
Linux 4.14.186-146.268.amzn2.x86_64 (ip-10-0-0-247.us-west-2.compute.internal)  12/26/2020  _x86_64_(1 CPU)
  
12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:10:01 AM     all      0.11      0.00      0.04      0.00      0.37     99.47
12:20:01 AM     all      0.13      0.00      0.04      0.00      0.05     99.79
12:30:01 AM     all      0.12      0.00      0.03      0.00      0.06     99.79
12:40:01 AM     all      0.11      0.00      0.04      0.00      0.06     99.79
12:50:01 AM     all      0.12      0.00      0.05      0.00      0.04     99.79

▼よく使うコマンドオプション
-u=CPU
-u -P ALL=CPUを各コアごとに
-q=ロードアベレージ
-r=メモリ
-W=スワップ
-n DEV=ネットワーク
-b=ディスクIO

▼項目
USER=プロセスの実行ユーザー
%CPU=プロセスのCPU使用率(CPU利用時間/実際の時間)
%MEM=プロセスが確保している物理メモリを百分率で表示
VSZ、RSS=それぞれプロセスが仮想メモリ領域のサイズ、物理メモリ領域のサイズ
STAT=プロセスの状態

3. vmstatコマンド

メモリやCPUの情報だけでなく、スワップやプロセスの情報を出力できる。

[root@ip-10-0-0-247 ~]# vmstat -n -t 1 30
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st UTC
0 0 0 182628 0 520660 0 0 0 4 9 2 0 0 100 0 0 2020-12-26 04:44:50
0 0 0 182620 0 520692 0 0 0 0 184 430 0 0 100 0 0 2020-12-26 04:44:51
0 0 0 182620 0 520692 0 0 0 176 223 489 0 0 100 0 0 2020-12-26 04:44:52

▼よく使うコマンドオプション
-n=繰り返し表示の際にヘッダを1度だけ表示する(デフォルトでは一定の周期でヘッダを表示する)
-t=タイムスタンプを表示する▼項目

▼見方

procs

r 実行中と実行待ち中のプロセス数の合計
b 割り込み不可能なスリープ状態にあるプロセス数

memory

swpd 仮想メモリの量(KB)
使用しているスワップ領域の量。

free 空きメモリの量(KB)
純粋に未使用状態なメモリの量。

buff バッファに用いられているメモリの量(KB)
主にカーネルがバッファ領域として使用しているメモリの量。

cache キャッシュに用いられているメモリの量(KB)
ディスクアクセス時にキャッシュデータを保存しているメモリの量。

swap

si  ディスクからスワップインされているメモリの量 (KB/s)
スワップ(ディスク)⇒メモリの方向で展開したデータ量。スワップ・イン。

so ディスクにスワップしているメモリの量(KB/s)
メモリ⇒スワップ(ディスク)の方向でスワップ領域に書き込んだデータの量。スワップ・アウト。

io

bi ブロックデバイスから受け取ったブロック (blocks/s)
bo ブロックデバイスに送られたブロック (blocks/s)

system

in 一秒あたりの割り込み回数。クロック割り込みも含む
割り込み処理の回数。

cs 一秒あたりのコンテキストスイッチの回数
コンテキストスイッチの回数。
※「コンテキストスイッチ」とは、プログラムの実行を切り替えること。

cpu

us カーネルコード以外の実行に使用した時間 (ユーザー時間、nice 時間を含む)(%)。
要するに一般のプログラムが動いていた時間の割合のこと。

sy カーネルコードの実行に使用した時間 (システム時間)(%)。
カーネルコード(OS自身、またLinuxコール等を呼び出された等)の処理のために費やした時間の割合のこと。

id アイドル時間。Linux 2.5.41 以前では、IO 待ち時間を含んでいる。(%)
アイドルタイムです。完全にcpuが空いていた時間の割合のこと。

wa IO 待ち時間。Linux 2.5.41 以前では、0 と表示される。(%)
データの入出力処理(ディスクへのアクセス、ネットワークへのアクセス)を試みたものの、結果的にデータを待っていた時間の割合のこと。

st 仮想マシンから盗まれた時間。Linux 2.6.11より前では未知。(%)

Discussion