このページで解説している内容は、以下の 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
' というシェルスクリプトを実行するのではなく、'
' というファイルを読み込んだ sourceを実行することになるからです。この sourceコマンドは組み込みコマンドです。disk-memory.sh
$ 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