目次
サーバーとは
サーバーってなに?
サーバーとは、ネットワークを介して他のコンピュータに何らかの機能やデータを提供するコンピュータです。
物理的な構造は普通のPCとほとんど変わりませんが、 他のコンピュータに機能を提供するためのソフトウェアが入っています。
サーバー上での作業
サーバーコンピュータは、サーバーソフトウェアや提供するデータが入っていなければただのコンピュータです。
サーバーとしてちゃんと機能させるためには、 サーバーにサーバーソフトウェアをインストールしたり、 提供するためのデータやアプリケーションを作成してサーバー上に設置する必要があります。
このような作業は基本的に、サーバーにログインして、サーバー上で行っていきます。
先程、「他のコンピュータに何らかの機能やデータを提供する」と書いたように、その性質上 自分自身のデスクトップの画像描写やフォルダ表示など「自分のための処理」は最低限しか入っていません。
そのため、CLIと呼ばれる黒い画面で内部の動きを想像しながら操作することになります。 (ちなみに普段触っているWindowsなどのPCの操作はGUIと呼ばれています。)
CLIは「Command Line Interface」の略称で、 「コマンド」という指示を打つことでファイルやディレクトリを開いたり、消したり、コピーしたり・・・などなどいろいろなことをすることが出来ます。
サーバーでの操作はCLI上で行われるので、まずは接続してみて慣れることから始めましょう。
サーバーでの作業を体験しよう
サーバーへのログイン
PCからサーバーにログインするためにはSSHを利用します。
SSHとは、ネットワークを介して他のコンピュータにログインし、操作するための仕組みです。
Macでは「ターミナル」でSSHコマンドを入力することによって使うことができます。
準備
SSHでサーバーにログインするためには、通常のPCにログインするときと同じように、ユーザー名とパスワードが必要です。
今回はパスワードの代わりに「秘密鍵」というファイルを使うことでログインします。
まずはこの秘密鍵を用意しましょう。
Backlogのチケットに添付された「ci-training.pem」というファイルをダウンロードしてください。 ダウンロードができたら、ドックから「ターミナル」を起動して次の2つのコマンドを入力します。
mv ~/Downloads/ci-training.pem ~/ chmod 400 ~/ci-training.pem
これでサーバーに接続するための準備ができました。
ログインしてみよう
それでは実際にサーバーにログインしてみましょう。
サーバーにログインするためには次のようなコマンドをターミナルで入力します。
ssh -i ~/ci-training.pem ec2-user@{サーバーのPublicIP}
このコマンドによって「{サーバーのPublicIP}」のIPアドレスを持ったサーバーに「ec2-user」というユーザーでログインすることができます。
backlogのチケットに書いてあるサーバーのIPアドレスを「{サーバーのPublicIP}」の部分に入力してコマンドを実行してみましょう。
初回ログイン時は以下のようなメッセージが出るので、「yes」と入力してエンターを押します。
Are you sure you want to continue connecting (yes/no)?
ターミナルに以下のようなロゴが表示されたらログイン成功です!
__| __|_ ) _| ( / Amazon Linux AMI ___|\___|___|
一見変わったようには見えませんが、これでサーバーにログインした状態になったので、コマンドでサーバーを操作することができます。
今回ログインしたサーバーには、Amazon LinuxというLinux系OSがインストールされています。
このOSはWindowsやMacのGUIとは異なり、基本的にコマンドを入力することによってのみ操作することができます。
基本的なコマンド
基本的なコマンドをいくつか使いながらサーバー上での操作を学んでいきましょう。
各コマンドは黒い画面に入力して、エンターを押すと実行されます。
pwd: 現在位置(カレントディレクトリ)を確認する
まずは、今自分がサーバー上のどこにいるのかを確認してみましょう。以下のコマンドを入力してください。
pwd
以下のように表示されたと思います。
/home/ec2-user
これが現在の自分のサーバー上での位置(カレントディレクトリ)を表しています。
homeというディレクトリの中にあるec2-userというディレクトリの中にいることを表しています。
linuxなどCUIではフォルダのことをほぼイコールでディレクトリと呼びます。
イメージとしては、WindowsのファイルエクスプローラーでCドライブ直下のhomeというフォルダの中のec2-userというフォルダを開いているような状態です。
cd: 現在位置から移動する(カレントディレクトリを変更する)
今度は違うディレクトリに移動してみましょう。以下のコマンドを入力してください。
cd /var/log/
cdは違うディレクトリに移動するためのコマンドです。cdを実行した後にpwdを実行してみてください。カレントディレクトリが変更されているのが分かると思います。
cdコマンドを実行するときはコマンドの引数として移動先の場所(パス)を指定します。
パスの指定方法には絶対パスと相対パスとがあります。詳しくは以下のページを参考にしてみてください。
https://wa3.i-3-i.info/diff21path.html
なお、cdコマンドを引数なしで実行すると、ホームディレクトリ(ログインしたときに最初にいるディレクトリ)に移動することができます。
一旦ホームディレクトリに戻っておきましょう。
cd
「~」でもホームディレクトリを表すことが出来ます。
cd ~/
touch: 空ファイルを作成する(タイムスタンプの更新)
ホームディレクトリに新しいファイルを作成してみます。
touch test.txt
これでカレントディレクトリにtest.txtというファイルを作成することができます。
mkdir: ディレクトリを作成する
今度はホームディレクトリに新しいディレクトリ(フォルダ)を作成してみます。
mkdir test_dir
これでカレントディレクトリにtestというディレクトリを作成することができます。
ls: ファイル・ディレクトリの一覧を表示する
先ほど作ったtest.txtとtestがちゃんと作れているのか確認してみましょう。
ls
lsコマンドはカレントディレクトリに存在するファイルやディレクトリを一覧表示します。
ファイル名だけだと寂しいので各ファイルの詳細情報も一覧表示してみましょう。
ls -l
「-l」をコマンドの「オプション」と呼びます。Linuxコマンドはオプションを指定することによって動作を少し変えることができます。
lsコマンドの場合は「-l」をつけることで詳細情報を表示するようになります。
詳しくは以下のページを参考にしてみてください。
http://webkaru.net/linux/ls-command/
vim(vi): ファイルを編集する
(諸説ありますが)一般的なPCでいうところの「メモ帳」にあたるものです。
とはいっても、使い方がとても独特・複雑怪奇で、使い方の説明だけで本が1冊書けるほどなので、 まずは、下記サイトを参考にして以下の作業の仕方を覚えてください。
- カーソル移動
- ファイル書き換え
- ファイル保存
- (書き換えせずに)強制終了
参考サイト:
試しに、先ほどホームディレクトリに作ったtest.txt
を適当に書き換えて保存してみましょう。
vim test.txt
cat: ファイルの中身を表示
cat
コマンドは、ファイルの中身をターミナル上に出力します。
試しに、先ほど書き換えたtest.txt
を出力してみましょう。
cat test.txt
サーバーからログアウトしてみよう
サーバーからログアウトしてみましょう。
ターミナルに以下のコマンドを入力してください。
exit
以下のように表示されます。
logout Connection to {サーバーのPublicIP} closed.
ログアウトできました。
管理者権限について
通常、SSHでログインできるユーザーは一般ユーザーで管理者権限を持っていません。
Linuxでは、サーバーにソフトウェアをインストールするといった作業は、管理者ユーザー(root)でなければ行えない仕組みになっています。
このような作業は以下のコマンドで一時的に管理者ユーザーになることで行います。
sudo su -
試しに、いくつかコマンドを実行してみましょう。
# ホームディレクトリが変わる pwd # つくったファイルの所有者がrootになる touch /tmp/test_root.txt ls -l /tmp/test_root.txt
管理者ユーザーから元のユーザーに戻るには以下のコマンドを実行します。
exit
今後のカリキュラムでは必要に応じて管理者ユーザーになって作業してください。
一般ユーザーと管理者ユーザー(root)でのプロンプトの変化
sudo su -
でrootに切り替えると、プロンプトの表示が変わります。bashの場合はプロンプトの末尾が一般ユーザーの時は
$
に rootの場合は#
にデフォルトだとなるようになっています。 そのため、この次のBashを使ってみようからbashのコマンド実行時には$
か#
がコマンドの前に表記されています。例
$ echo test $ sudo su - # echo hogevimで開いたファイル内でも
#
が使用されていますが、これはコメントです。間違えないよう注意してください。参考資料: プロンプトとは
Linuxコマンドを自分で調べて実行してみよう
このようにLinuxでは様々なコマンドによって操作していきます。
Linuxでの操作に慣れるためには、やりたいことを実現するコマンドを自分で調べていくことが一番の近道です。
練習として以下の操作を行うコマンドを調べて実行してみましょう。オプションや引数に注意してください。
今後のカリキュラムで分からないコマンドが出てきたら、 Googleなどの検索エンジンで調べて何をしているのか理解できるようにしましょう。
課題が難しいな、と思ったら
まだまだコマンドについて謎が多い場合や、実際どうやって操作していいかわからない場合には、 Progateにてアニメーション付きで詳しい解説などもあるので、もし不安があればこちらを先にやってみると良いかも知れません。
作業を早くするために
以下の記事で紹介されているLinuxの機能を扱いこなせると、作業のスピードが大幅に向上します。 今のうちに覚えておきましょう。
- 以前のコマンドを呼び出す:
↑
またはCtrl+p
- 長いファイル名・コマンド名を自動補完: (入力途中で)
tab
- 履歴探索:(入力途中で)
Ctrl+r
- カーソル移動(先頭):
Ctrl+a
- カーソル移動(末尾):
Ctrl+e
課題
SSHでサーバに接続してから行ってください。
- 管理者(root)権限で作った
/tmp/test_root.txt
を、管理者ではないec2-user
で削除してみましょう- 削除できたでしょうか?
- どんなエラーが表示されるでしょうか
- 次に、管理者(root)になって
/tmp/test_root.txt
を削除してみましょう- 削除できたでしょうか?
- ホームディレクトリで
tab
キーによる自動補完を適当に試してみましょうls test_(TABキー押下)
- 何が表示されましたか?
- 続けて
Ctrl+r
や↑キー
による履歴探索も適当に試してみましょう(Ctrl-r押下) ls
- 何が表示されましたか?
- ホームディレクトリに作成したファイル(
test.txt
)、ディレクトリ(test_dir
)を削除してみましょう- 削除コマンドを記入してください