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 のファイルは、ルートと呼ぶ / を根にした木の形に並びます。フォルダのことをディレクトリと呼び、場所は / で区切ったパスで書きます。

/ルートetc設定ファイルhome利用者ごとshadowroot だけ読めるstudentいまいる場所notes.txtapp/home/student/notes.txt
パスは根から枝をたどった道順。いまいる student から見れば、notes.txt は名前だけで指せる

パスの書き方は 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 を打つと、次の節で扱う権限の壁に当たります。

試す疑似ターミナル

例を実行する

student@dojo-vm:~$

コマンドを打って Enter を押すか、下の例を押してください。いまいる場所は利用者のホームディレクトリ /home/student です。

権限は「誰が」「何をできるか」の 9 文字で決まる

ls -l の行頭に出る -rw-r--r-- が権限です。先頭の 1 文字が種類 (d ならディレクトリ、- ならファイル) で、残りの 9 文字を 3 文字ずつ、所有者、グループ、その他の利用者に割り当てます。

-種類rw-所有者r--グループr--その他4+2+0 = 64+0+0 = 44+0+0 = 4r=4 w=2 x=1
3 文字ずつ読む。所有者は読み書きでき、それ以外は読むだけ。数字で書くと 644

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 つの鍵を使うのが一般的です。

自分の PC秘密鍵を持つVM公開鍵を登録SSH (ポート 22)外に出さない渡してよい
VM に置くのは公開鍵だけ。秘密鍵は手元から出さない

公開鍵は 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) によって違うことがあります。

理解度チェック

答えを開く前に、自分で考えてください。結果はこのブラウザにだけ残り、間違えた問題は復習のページでまとめて解き直せます。

思い出す

ls -l の行頭に -rw-r----- と出ました。所有者、グループ、その他の利用者は、それぞれこのファイルに何ができますか。chmod に渡す数字で書くといくつですか。

状況で選ぶ

自分の PC から Compute Engine の VM に、鍵の組を使って SSH でつなぎたいと考えています。PC で秘密鍵と公開鍵の組を作りました。鍵はどう置きますか。

説明する

スクリプトの中で app/config.yaml と書いたら、実行する場所によって読めたり読めなかったりしました。なぜ起きるのか、どこから実行しても同じファイルを指すにはどう書けばよいかを説明してください。