IT の基礎
Linux とコマンドライン
クラウドのサーバーの多くは Linux で動き、画面のボタンではなく文字のコマンドで操作します。ファイルは / から始まる 1 本の木に並び、誰が読み書きできるかは権限の 9 文字で決まります。
クラウドで借りるサーバー (VM) の多くは、Linux という OS で動いています。Linux のサーバーには、マウスで操作する画面がないことがほとんどです。操作は、文字でコマンドを打ち、文字で結果を受け取る形 (コマンドライン) で行います。Google Cloud を操作する Cloud Shell も Linux のコマンドラインで、PCA の学習で打つ gcloud のコマンドもここで動かします。このページでは、ファイルの場所の指し方、よく使うコマンド、権限、離れたサーバーへの入り方 (SSH) を扱います。
シェルが、打った文字を OS への指示に変える
コマンドを打つ窓をターミナル、打った文字を読んで OS に仕事を頼むプログラムをシェルと呼びます。代表的なシェルに bash があります。シェルは入力を待つ間、次のような文字 (プロンプト) を出します。
student@dojo-vm:~$ ls -l app
$ の左は「利用者 student が、dojo-vm というサーバーの ~ (ホームディレクトリ) にいる」という意味です。$ の右が打った内容で、空白で区切った最初の語 ls がコマンド、- で始まる -l がオプション (動きの変え方)、app が引数 (対象) です。
ファイルは / から始まる 1 本の木に並ぶ
Linux のファイルは、ルートと呼ぶ / を根にした木の形に並びます。フォルダのことをディレクトリと呼び、場所は / で区切ったパスで書きます。
パスの書き方は 2 通りあります。/home/student/notes.txt のように / で始まるものが、根から数える絶対パスです。notes.txt や app/config.yaml のように / で始まらないものは、いまいる場所 (カレントディレクトリ) から数える相対パスです。あわせて次の 3 つの記号を覚えます。
~は自分のホームディレクトリ (/home/student).はいまいるディレクトリ..は 1 つ上のディレクトリ
よく使うコマンド
| コマンド | すること | 例 |
|---|---|---|
pwd | いまいるディレクトリを表示する | pwd |
ls | ディレクトリの中身を一覧にする。-l で権限も出す | ls -l |
cd | ディレクトリを移る。引数なしでホームに戻る | cd app、cd .. |
cat | ファイルの中身を表示する | cat notes.txt |
mkdir | ディレクトリを作る | mkdir work |
touch | 空のファイルを作る | touch memo.txt |
chmod | 権限を変える | chmod 600 notes.txt |
本物の Linux には、ファイルを消す rm、写す cp、動かす mv、管理者の権限で実行する sudo などもあります。rm で消したファイルはごみ箱を通らずに消えるので、打つ前にパスを確かめます。
下の疑似ターミナルは、ブラウザの中だけで動く練習用です。上の表のコマンドと whoami、help、clear を打てます。cat /etc/shadow や mkdir /etc/work を打つと、次の節で扱う権限の壁に当たります。
権限は「誰が」「何をできるか」の 9 文字で決まる
ls -l の行頭に出る -rw-r--r-- が権限です。先頭の 1 文字が種類 (d ならディレクトリ、- ならファイル) で、残りの 9 文字を 3 文字ずつ、所有者、グループ、その他の利用者に割り当てます。
r は読み取り、w は書き込み、x は実行です。ディレクトリでは意味が少し変わり、r は中身の一覧を見ること、w は中にファイルを作ったり消したりすること、x はそのディレクトリに入ることを許します。
chmod には、r=4、w=2、x=1 を足した数字を 3 桁で渡します。chmod 600 notes.txt なら所有者だけが読み書きでき、ほかの利用者は何もできません。SSH の秘密鍵 (次の節) のように他人に読まれては困るファイルは、この形にします。
例外は root と呼ぶ管理者で、権限に関係なくすべてのファイルを扱えます。ふだんは一般の利用者で作業し、必要なコマンドだけを sudo で root として実行するのが基本です。必要な権限だけを渡すという考え方は、Google Cloud の IAM でも同じです。
SSH は鍵の組で本人を確かめてからつなぐ
SSH は、離れたサーバーのシェルを、暗号化した通信で手元のターミナルから使う仕組みです。サーバー側は通常 TCP の 22 番ポートで待ち受けます。本人の確認には、パスワードより、対になった 2 つの鍵を使うのが一般的です。
公開鍵は VM に登録しておくもので、誰に見られてもかまいません。秘密鍵は自分の手元だけに置き、chmod 600 で自分以外が読めないようにします。VM は、秘密鍵を持っている相手だけを本人と認めます。
Compute Engine では、コンソールや gcloud compute ssh で VM につなぐと、Compute Engine が SSH の鍵を作って管理します (VM への接続)。鍵の登録先には、IAM の権限と結び付けて管理できる OS Login を使う方法が推奨です。インターネットに 22 番ポートを開けずにつなぐ方法は、セキュリティの設計で扱います。
試してみる
Cloud Shell は、Debian 系の Linux が入った VM をブラウザから使える環境です。ホームディレクトリには 5 GB の永続ディスクが付き、VM を使い終えてもファイルは残ります (Cloud Shell の仕組み)。学習環境の準備で開いた Cloud Shell で、次を順に打ってみてください。課金はかかりません。
pwd
whoami
mkdir dojo
cd dojo
touch memo.txt
ls -l
chmod 600 memo.txt
ls -l
cd ..
2 回目の ls -l で、memo.txt の権限が -rw-r--r-- から -rw------- に変わります。最初の権限は環境の設定 (umask) によって違うことがあります。