このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンド演習34

以下のコマンドの演習を行います。

実際にコマンド操作を行いながら、Linuxの操作に慣れていきましょう。

演習01:日時、ディスクの使用量、メモリの使用量をログとして保存します。

・以下のコマンドを実行します。

日時、ディスクの使用量、メモリの使用量を' system.log' ファイルに保存します。

$ date > system.log
$ df -H >> system.log
$ free -m >> system.log
$ cat system.log 
2024年  1月 31日 水曜日 01:03:32 JST
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  947M     0  947M    0% /dev
tmpfs                     964M     0  964M    0% /dev/shm
tmpfs                     964M   10M  954M    2% /run
tmpfs                     964M     0  964M    0% /sys/fs/cgroup
/dev/mapper/centos-root    19G  6.7G   12G   37% /
/dev/sda1                 1.1G  310M  754M   30% /boot
tmpfs                     193M   37k  193M    1% /run/user/1000
              total        used        free      shared  buff/cache   available
Mem:           1837         782         234          24         820         885
Swap:          2047           0        2047

演習02:簡単なシェルスクリプトを作成します。

 ディスクの使用量とメモリの使用量をログファイルとして記録するシンプルなシェルスクリプトを作成します。

・「disk-memory.sh」を作成します。

$ vi disk-memory.sh

・viエディタで「i」キーを押して、挿入モードにして下記のスクリプト内容をコピーして貼り付けて保存します。

コピーアンドペーストするには、「Ctrl」+「Shift」+「v」キーを同時押しします。

 viエディタで保存して終了するには、「Esc」キーを押してコマンドモードにして「:wq」と入力します。

#!/bin/bash

date >> system.log
df -H >> system.log
free -m >> system.log

演習03:bashコマンドで実行する。

・'disk-memory.sh'のアクセス権を確認します。

$ ls -l disk-memory.sh 
-rw-rw-r--. 1 user01 user01 73  1月 31 01:30 disk-memory.sh

実行権がありません。

 このbashコマンドで実行する方法では、スクリプトに実行権がなくてもシェルスクリプトを実行できます。

 なぜ、 'disk-memory.sh' に実行権がなくても実行できるのかというと、'disk-memory.sh' というシェルスクリプトを実行するのではなく、'disk-memory.sh' というファイルを読み込んだ bashを実行することになるからです。

・「/bin/bash」のパーミッションを確認します。

$ ls -l /bin/bash
-rwxr-xr-x. 1 root root 964536 11月 25  2021 /bin/bash

「x」があることから、実行権があるということが確認できます。

・bashコマンドでシェルスクリプトを実行します。

$ bash disk-memory.sh

・'system.log' の内容を確認します。

[user01@localhost ~]$ cat system.log 
2024年  1月 31日 水曜日 23:15:40 JST
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  947M     0  947M    0% /dev
tmpfs                     964M     0  964M    0% /dev/shm
tmpfs                     964M   10M  954M    2% /run
tmpfs                     964M     0  964M    0% /sys/fs/cgroup
/dev/mapper/centos-root    19G  6.7G   12G   37% /
/dev/sda1                 1.1G  310M  754M   30% /boot
tmpfs                     193M   37k  193M    1% /run/user/1000
              total        used        free      shared  buff/cache   available
Mem:           1837         794         226          29         816         868
Swap:          2047           0        2047
2024年  1月 31日 水曜日 23:18:15 JST
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  947M     0  947M    0% /dev
tmpfs                     964M     0  964M    0% /dev/shm
tmpfs                     964M   10M  954M    2% /run
tmpfs                     964M     0  964M    0% /sys/fs/cgroup
/dev/mapper/centos-root    19G  6.7G   12G   37% /
/dev/sda1                 1.1G  310M  754M   30% /boot
tmpfs                     193M   46k  193M    1% /run/user/1000
              total        used        free      shared  buff/cache   available
Mem:           1837         780         242          26         814         884
Swap:          2047           0        2047

演習04:sourceコマンドで実行する。

・source コマンドでシェルスクリプトを実行します。

 このコマンドでも 'disk-memory.sh' に実行権がなくても実行できます。'disk-memory.sh' というシェルスクリプトを実行するのではなく、'disk-memory.sh' というファイルを読み込んだ sourceを実行することになるからです。この sourceコマンドは組み込みコマンドです。

$ source disk-memory.sh

演習05:絶対パスを指定してシェルスクリプトを実行する。

・絶対パスを指定してシェルスクリプトを実行します。

 user01でログインしています。以下のコマンドの「user01」の部分は、ログインしているユーザー名に置き換えてください。

$ /home/user01/disk-memory.sh
bash: /home/user01/disk-memory.sh: 許可がありません

 「シェルスクリプト」ファイル名を指定して実行するには、実行権が必要なため、「許可がありません」とエラーが出力されます。

演習06:シェルスクリプトに実行権を与えます。

・ 'disk-memory.sh' に実行権を与えます。

$ chmod a+x disk-memory.sh
$ ls -l disk-memory.sh
-rwxrwxr-x. 1 user01 user01 74  1月 31 23:17 disk-memory.sh

演習07:再び、絶対パスを指定してシェルスクリプトを実行する。

・再び、絶対パスを指定してシェルスクリプトを実行します。

今度はエラーがでることなく、 シェルスクリプト(disk-memory.sh)を実行できます。

$ /home/user01/disk-memory.sh

演習08:相対パスを指定してシェルスクリプトを実行する。(失敗例)

・シェルスクリプト名のみを指定して実行します。

 カレントディレクトリを表す「.」を指定せずに実行すると「コマンドが見つかりませんでした…」というエラーになってしまいます。その理由は、現在、ログインしているユーザーのホームディレクトリ、ここでは '/home/user01' がPATH環境変数に定義されていないからです。

$ disk-memory.sh
bash: disk-memory.sh: コマンドが見つかりませんでした...

・printenv コマンドを使って環境変数PATHの内容を調べます。

$ printenv PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/user01/.local/bin:/home/user01/bin

 現在、ログインしているユーザーのホームディレクトリ、ここでは '/home/user01' がPATH環境変数に定義されていないことが分かります。

演習09:相対パスを指定してシェルスクリプトを実行する。(成功例)

・「./」を付けてシェルスクリプトを実行します。

 PATH 環境変数にシェルスクリプトのディレクトリが含まれていない場合、相対パスの先頭に「./」をつけることで、カレントディレクトリを表すことができます。この方法でシェルスクリプトを実行すると、bash はカレントディレクトリを探索し、スクリプトが見つけることができれば実行します。

$ ./disk-memory.sh

シェルスクリプトが実行されます。


 bashコマンドでの実行とsourceコマンドでの実行の違いについては、「Linuxコマンド演習35」で実際に操作を行いながら、解説していきます。

演習終了時の作業:ファイルの削除

・この演習で作成したファイルを削除します。

$ rm disk-memory.sh 
$ rm system.log