クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

小さなスクリプトとパッケージ

このレッスンのあとで: 小さなシェルスクリプトを書いて実行でき、プログラムがどのパッケージから来たか言うことができる。

55分のレッスンコマンド13件毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

毎週月曜に打つ集計

シェルスクリプトは、何度も打つコマンドを1つのファイルに書き残し、あとは実行するだけにする方法です。打ち間違いがなくなり、同じ作業をいつでも同じ形で繰り返せます。

通販の店から、毎週、来店数のファイルが届きます。月曜になるたび、同じコマンドを3つ打って、いちばん忙しい日を調べています。ある月曜、打ち間違えて、違う日を上司に送ってしまいました。

このレッスンのゴール

メモ

小さなシェルスクリプトを書いて実行でき、プログラムがどのパッケージから来たか言うことができる。

キーワード

ことばいみれい
スクリプトコマンドをファイルに書き残したもの。何度でも実行できる
シバンスクリプトの1行目。どのプログラムで読むかを書く#!/bin/bash
引数コマンドの後ろに打つ言葉。コマンドが受け取って使う$1
終了ステータスコマンドが残す数字。0なら成功$?
パッケージプログラムと必要なファイルを1つにまとめたもの。システムが入れられる
パッケージマネージャパッケージを入れる、更新する、消す道具apt

学生が入力するセルは、このプレビューでは空白です。

1本のパイプで1つの問いに答える

ラボには、来店数の小さなファイル /srv/lab-web/report.csv があります。1行は、曜日、カンマ、人数です。ファイルは英語です。

cut -d, -f1 は1列目だけを取り出します。-d, は列がカンマで区切られているという意味です。tail -n +2 は見出しの行を飛ばします。sort -t, -k2 -n -r は2列目を数として、大きい順に並べます。head -n 1 は先頭の1行だけ残します。

1列目を取り出す

コマンド
cut -d, -f1 /srv/lab-web/report.csv

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

いちばん忙しい日を探す

コマンド
tail -n +2 /srv/lab-web/report.csv | sort -t, -k2 -n -r | head -n 1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

sort は数を大きさで並べると思われがちです。ふつうは文字として並べるので、98 は 175 の後ろに来ます。9 は 1 より後だからです。-n を外すと、上のパイプは Tuesday,98 を出します。数の列には -n を付けましょう。

スクリプトはファイルのコマンド

スクリプトは、コマンドを書いたテキストファイルです。シェルは上から順に、あなたが打ったかのように実行します。

1行目はシバンです。どのプログラムで読むかを書きます。# で始まる行はコメントで、シェルは飛ばします。

スクリプトの中の $1 は、名前の後ろに打った最初の言葉です。だから、どのファイルにも使えます。

スクリプトをファイルに書く

コマンド
printf '#!/bin/bash\n# CSV ファイルで、いちばん多い日を表示します。\ntail -n +2 "$1" | sort -t, -k2 -n -r | head -n 1\n' > busiest.sh

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

実行してみる

コマンド
./busiest.sh /srv/lab-web/report.csv

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

bash に読ませる

コマンド
bash busiest.sh /srv/lab-web/report.csv

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

実行できるようにする

コマンド
chmod +x busiest.sh

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

実行する

コマンド
./busiest.sh /srv/lab-web/report.csv

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

どのコマンドも終了ステータスを残す

コマンドは終わるとき、数字を1つ残します。0 は成功です。それ以外の数字は、何かがうまくいかなかったという印です。

$? には、直前のコマンドが残した数字が入ります。スクリプトや cron は、これで仕事が成功したかを知ります。

失敗するコマンド

コマンド
ls /nothere ; echo "status $?"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

成功するスクリプト

コマンド
./busiest.sh /srv/lab-web/report.csv ; echo "status $?"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

cat で見えるファイルなら、実行もできると思われがちです。読む権利と実行する権利は別です。新しいファイルは、だれにも x がありません。先に chmod +x を打つか、bash に読ませましょう。

ソフトはパッケージで届く

Ubuntu では、プログラムはパッケージで届きます。パッケージマネージャは、入っているものと、各ファイルがどのパッケージのものかを覚えています。

dpkg はその一覧を読みます。apt はインターネットから入れるので sudo が要ります。apt-get install に -s を付けると真似るだけなので、安心して試せます。

プログラムはどこにあるか

コマンド
command -v curl

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

そのファイルはどのパッケージのものか

コマンド
dpkg -S /usr/bin/curl

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

パッケージは入っているか

コマンド
dpkg -s curl | grep -E "^(Package|Status)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

もう一度入れる真似をする

コマンド
apt-get install -s curl 2>&1 | tail -n 3

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: apt の使い方

打つコマンド何をするかsudo は要るか
sudo apt update入れられるものの一覧を新しくする要る
sudo apt install htopパッケージと、必要なものを入れる要る
sudo apt remove htopパッケージを消す要る
apt-get install -s htop入れたらどうなるかを見せる。何も変えない要らない
dpkg -S /usr/bin/curlファイルを持つパッケージの名前を出す要らない

学生が入力するセルは、このプレビューでは空白です。

もっと先へ

自分で打ってみましょう。スクリプトを、いちばん暇な日を出すように変えます。付けるか外すのは、どのオプションですか。

次に、毎週月曜の7時30分に busiest.sh を動かす cron の時刻を考えます。サーバでは、この行を /etc/cron.d に置きます。コマンドの前にユーザーを書きます。

このラボとソースについて: 毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。