【初心者向け】AWS上でのブログシステム構築11 使用したLinuxコマンドについて(2)

今回は、前回から引き続き、ブログシステム構築の過程で使用したLinuxコマンドを中心に基本的なコマンドを紹介させて頂きます。

<スポンサーリンク>

コマンドを特権ユーザーで実行する sudo コマンド

今回インスタンスのOSとして選択したのはAmazon Linuxであり、これにはデフォルトでユーザー”ec2-user”が登録されています。SSHの接続準備のところで設定した通り、インスタンスへの接続には毎回このユーザーを使って接続しています。

ただし、このユーザーは一般ユーザーと呼ばれるもので、インスタンス上でできる操作が限られています。一方、Linuxには”root”という特権ユーザーと呼ばれるユーザーが登録されており、システム全体にかかわるようなコマンドはこのユーザーでしか実行することができません。

では、ec2-userでログインしたにも関わらず、rootユーザーの権限で操作を行うためにはどうすればよいのでしょうか?

ここで使われるのが”sudo”というコマンドです。使い方は、実行したいコマンドの前に”sudo”を付けるだけです。

$ sudo service httpd start

“service”コマンドは一般ユーザーで実施すると権限不足によりエラーとなってしまいますが、”sudo”を付けて実行することにより特権ユーザーで実行することになるため、問題なく処理を進めることができます。

ファイルの所有者を変更する chmod コマンド

上の説明にて、一般ユーザーは限られた操作しか行うことができないことを説明しました。では、具体的にはどの範囲の操作ができるのでしょうか?

これは、ファイルやディレクトリ毎に設定された「パーミッション」というものによって決まってきます。

パーミッションを理解するために、lsコマンドにオプションを付けて、”ls -l”と入力してみましょう。

$ ls -l
total 8456
-rw-rw-r-- 1 ec2-user ec2-user 8652714 Aug  7 22:30 latest-ja.tar.gz
drwxr-xr-x 5 ec2-user ec2-user    4096 Aug  7 19:05 wordpress

この出力の見方を説明します。

1 ファイルタイプ “d”はディレクトリ、”-“はファイルを指します。
2 パーミッション 3×3=9文字のアルファベットから構成されています。最初の3文字はファイル/ディレクトリの所有者に対するアクセス権限、次の3文字は所有グループに対するアクセス権限、最後の3文字はそれ以外のユーザーに対するアクセス権限を意味しています。

各3文字は、”rwx”という3文字が基本になっています。”r”は読み取り権限、”w”は書き込み権限、そして”x”は実行権限です。アルファベットの代わりに”-“が入っているのは、該当する権限がないことを指します。(例えば、”r”の代わりに”-“が入っていれば、読み取り権限がないことを意味します。)

3 リンク ファイルの場合は張られているリンクの数、ディレクトリの場合はそのディレクトリ内のファイル/ディレクトリ数を意味します。

なお、リンクには「ハードリンク」と「シンボリックリンク」の2つがあり、ここでのリンクは厳密には「ハードリンク」を指します。その違いについてはやや細かい話になりますので、ここでは割愛します。

4 所有者名 ファイル/ディレクトリの所有者であるユーザー名が記載されています。このユーザーには、パーミッションの最初の3文字が適用されます。
5 グループ名 各ユーザーにはユーザー名の他にグループという属性が付与されているのですが、ここに記載されたグループ名の付与されたユーザーに、パーミッションの中間の3文字が適用されます。
6 サイズ ファイルの場合は、ファイルサイズ(バイト表記)が記載されます。また、ディレクトリの場合は”4096″という固定数字が記載されます。
7 タイムスタンプ ファイル/ディレクトリの作成時刻または更新時刻です。
8 ファイル名/ディレクトリ名 文字通り、ファイル/ディレクトリの名称です。

ここで”chown”コマンドとは、ファイル/ディレクトリの所有者とグループを変更するためのコマンドです。

sudo chown apache:apache /var/www/html -R

上のコマンドは、WordPress導入時に実際に実行したコマンドです。var/www/htmlディレクトリの所有者とグループを”apache:apache”という表現により両方ともapacheに変更する、ということを、”sudo”とつけることにより特権ユーザーにて実行しています。なお、最後の”-R”は、/var/www/htmlの中全体に対してこの処理を適用させるためのオプションです。

なお、参考まで、パーミッションを変更するためには、”chmod”というコマンドを使用します。

ファイルにシンボリックリンクを張る ln コマンド

シンボリックリンクとは、要はショートカットのことです。複数のファイルが分散して保存されているときに、それらを1つのディレクトリから一元的にアクセスしたいときなどに使うことが多いです。

$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

上のコマンドは、タイムゾーンを設定するときに入力したものです。これは具体的に何をやっているのでしょうか。

まず、lnについているオプション”-sf”の意味は以下の通りです。

  • s : ハードリンク、シンボリックリンクとリンクの種類が複数ある中、作成するリンクがシンボリックリンクであることを示します。
  • f : リンク先に同名のファイルがあるときも警告なく上書きします。”f”は”file”ではなく”force”の略です。

また、そのあとに続く2つのファイル名ですが、1つ目はリンクの元となるファイル、2つ目はシンボリックリンクファイルそのものです。つまり、2つ目のファイルを参照した際、実態としては1つ目のファイルを参照しに行くことになるのです。

パッケージの管理に使用する yum コマンド

yumコマンドにも多くの使い方がありますが、ここでは記事の中で使用した使い方に限定して説明します。なお、yumコマンドを使用するときには、sudoを付けて特権ユーザーとして実行するのをお忘れなく。

既に導入されているパッケージ全てを最新化する

# sudo yum -y update

なお、”-y”は、最新化中に、本当に最新化してよいかの確認など、システムからの問い合わせがあるとき、それに対してすべてYesと自動的に答えるためのオプションです。

パッケージを導入する

$ sudo yum -y install httpd24

パッケージを導入するときは、”install”の後に続けて、導入したいパッケージ名を指定します。この例では、”httpd24″ (=apache2.4)を導入することになります。

サービスの管理を行う service コマンド

apacheやMySQLのように、バックグラウンドで立ち上がっており、ユーザーからの要求を受けて処理を行うものをLinuxでは「サービス」と言います。

余談ですが、この「サービス」は「デーモン (daemon)」と呼ばれることもあります。さらに余談ですが、apacheの立ち上げに指定する”httpd”の”d”とはこの「デーモン」の略です。

さて、本記事では以下のコマンドを実行してapacheサービスを立ち上げました。

$ sudo service httpd start

なお、”start”のところを”stop”に変えるとサービスの停止、”restart”とすると再起動を行うことができます。

サービスの自動立ち上げを設定する chkconfig コマンド

インスタンスが起動した際、各サービスも自動で起動させるか停止したままとするかを設定するのがchkconfigコマンドです。

$ sudo chkconfig httpd on

“on”と入力すると自動起動する設定となり、ここを”off”とすると自動的には立ち上がらない設定とすることができます。

また、chkconfigコマンドでは、現在の自動起動設定がどうなっているかを調べることもできます。

$ sudo chkconfig --list httpd
httpd     0:off   1:off   2:on    3:on    4:on    5:on    6:off

実行すると、0~6の数字毎に”on”または”off”と表示されます。この数字は「ランレベル」と呼ばれるもので、Linuxそのものの起動状態を指しています。詳細は以下のように定義されています。

ランレベル 状態
0 システムの停止
1 シングルユーザモード(ネットワークログインなし、CUI)
2 マルチユーザモード(ネットワークログインなし、CUI)
3 マルチユーザモード(ネットワークログインあり、CUI)
4 未使用
5 マルチユーザモード(ネットワークログインあり、GUI)
6 システム再起動

ひとまず、サービスが自動起動するようになっているかは、ランレベル2~5が”on”になっているかを確認すればよいでしょう。

おわりに

前回と今回の記事で基本的なコマンドの使い方を紹介させて頂きました。

Linuxにはこれ以外にも便利なコマンドがたくさんありますし、紹介したコマンドについても説明した以外の使い方がたくさんあります。

しかしながら、一度に覚えられるものでもないと思いますし、今後作業を行っていく中で少しずつ使い方を覚えていくのが、コマンドを使いこなす近道だと思います。