マウスなしで請求書を探す
ネット通販の会社で、サーバに入っている先月の請求書を探すよう頼まれました。
そのサーバには、デスクトップもマウスもありません。あるのは、文字だけの黒い画面と、点滅するカーソルです。
多くのサーバは、こうして使います。短いコマンドを打って、フォルダの中を動き回ります。
このレッスンのゴール
メモ
シェルからファイルとフォルダを扱うことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| シェル | 打ったコマンドを読んで、実行するプログラム | |
| パス | ファイルやフォルダの場所を表す住所 | /home/student/projects |
| カレントディレクトリ | 今いるフォルダ | |
| リダイレクト | コマンドの結果を、画面ではなくファイルに送ること | >> |
| パイプ | 1つ目の結果を、次のコマンドに渡すこと | | |
| モード | 読む、書く、実行する権利を表す文字 | rw-r--r-- |
学生が入力するセルは、このプレビューでは空白です。
パスはファイルの住所
シェルは、いつも1つのフォルダの中にいます。これがカレントディレクトリです。何も指定しなければ、コマンドはそこで働きます。
/ で始まるパスは絶対パスです。どこにいても使えます。
/ で始まらないパスは相対パスです。今いるフォルダの中から探します。.. は1つ上のフォルダです。
例: cd で行き着く場所
| 今いる場所 | 打つコマンド | 着く場所 |
|---|---|---|
| /home/student | cd projects | /home/student/projects |
| /home/student/projects | cd app | /home/student/projects/app |
| /home/student/projects/app | cd .. | /home/student/projects |
| /home/student/projects | cd /var/log | /var/log |
| /var/log | cd projects | エラー: そのフォルダはない |
学生が入力するセルは、このプレビューでは空白です。
今どこにいるか
pwdここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ここに何があるか
lsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2つ下のフォルダへ行く
cd projects/appここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
中を見る
lsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ホームに戻る
cdここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「cd projects は、どこからでも使える」と考える人が多くいます。実際は、今いるフォルダの中しか探しません。先に pwd で確かめるか、/ で始まる絶対パスを使いましょう。
mkdir、cp、mv はものを変える
mkdir はフォルダを作ります。cp はファイルをコピーします。元のファイルは残ります。
mv はファイルを動かします。同じフォルダで名前だけ変えれば、名前の変更になります。
rm はファイルを消します。サーバにはごみ箱がないので、消したら戻りません。
次の4つを、順に実行しましょう。
フォルダを作る
mkdir -p shopfilesここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ファイルをコピーする
cp projects/docs/notes.txt shopfiles/notes.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
コピーの名前を変える
mv shopfiles/notes.txt shopfiles/todo.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
フォルダを確かめる
ls shopfilesここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
リダイレクトとパイプで組み合わせる
コマンドの結果は、ふつう画面に出ます。リダイレクトを使うと、結果をファイルに送れます。
> はファイルを作り直します。>> はファイルの終わりに足します。
パイプの | は、結果を次のコマンドに渡します。ls | wc -l は、名前を並べて行数を数えます。
ファイルに1行足す
echo "order 2043 shipped" >> shopfiles/todo.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ファイルを読む
cat shopfiles/todo.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
フォルダのファイル数を数える
ls projects/app | wc -lここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: モードを3桁の数字にする
| 文字 | 所有者 | グループ | その他 | 数字 |
|---|---|---|---|---|
| rw-r--r-- | rw- = 4+2 = 6 | r-- = 4 | r-- = 4 | 644 |
| rwxr-xr-- | rwx = 4+2+1 = 7 | r-x = 4+1 = 5 | r-- = 4 | 754 |
| rwx------ | rwx = 7 | --- = 0 | --- = 0 | 700 |
学生が入力するセルは、このプレビューでは空白です。
3文字を数字にする
# 3文字の1組を、数字1つに直します。
group = "r-x"
total = 0
if group[0] == "r":
total = total + 4
if group[1] == "w":
total = total + 2
if group[2] == "x":
total = total + 1
print(total)
# group を "rw-" に変えて、もう一度実行しましょう。
もっと先へ
1つのコマンドで、ホームに a.txt、b.txt、c.txt の3つを作りましょう(touch は名前をいくつでも受け取ります)。
次に、パイプで ls の行数を数え、その数を > で count.txt に書き込みます。cat count.txt が何を表示するか、打つ前に予想しましょう。