今日はインフラのサーバ基礎知識として、Linuxについて学習します。インフラ学習の最も重要な一歩となるので理解を深めていきましょう。AWSのEC2インスタンスにSSH接続していることを前提に解説をしていきますので、事前準備がまだの方は「EC2インスタンスの作成手順」の記事で復習をしておいてください。

Linuxの特徴
全てはファイル
Linuxのファイルシステムでまず認識しておくべき点は、すべてはファイルである、ということです。Windowsを使用している場合、フォルダとファイルという概念がありますが、Linux内部ではすべてはファイルなので、フォルダもファイルになります。フォルダファイル内にはフォルダファイルに紐づいたファイルのリストが記述されています。ファイルリストにはフォルダファイルも含まれるので、フォルダーファイルとそこに紐づいたファイルのツリー構造になっています。フォルダファイルのリスティングは昔の電話帳の様な扱いとなるので、ディレクトリと呼ばれています。Windowsのフォルダとの比較でLinuxではディレクトリと呼ぶこともありますが、Linux上でも便宜上フォルダと呼ぶこともあります。
ルートディレクトリ
Linuxのファイルシステムは前述したとおりツリー構造となっています。そして、その一番最上位にあるファイルをルートディレクトリと言い、スラッシュ(/)で表します。Windowsには「C:\」ドライブ、「D:\」ドライブといった様に、複数のハードドライブが存在しますが、Linuxにこういったドライブいった概念はありません。Linuxではルートディレクトリをトップとしたツリー構造内で任意の場所に、ハードディスクを追加できます。ツリー構造を拡張するイメージです。
拡張子がない
Linuxには拡張子という概念がありません。Windowsでは.txtという拡張子があれば既定のアプリケーションが自動的に開く様になっていますが、この拡張子がどのアプリケーションで開くかを決めています。Linux上でもファイル名末尾に.txtと書くことはできますが、これはLinux上で何かを意味するものではなく、単なるファイル名の一部にしか過ぎません。たまたまファイル名の末尾が.txtであるというだけにすぎません。
従って、Linuxで拡張子が単なるファイル名の一部であるということは、この拡張子を削除したりする必要もまたありません。なので、Webシステム開発環境として、ローカル環境はWindowsでリモートのサーバの稼働環境がLinuxの場合であっても、ファイルのアップロードやダウンロードは相互に行われますが、拡張子の存在を意識することもないでしょう。
ルートユーザと一般ユーザ
Linuxではルート(Root)ユーザと一般ユーザという2つのユーザタイプが存在ます。ルートユーザは最高権限を持った管理者ユーザですべてのコマンドが実行できる一方、一般ユーザは実行できるコマンドはルートユーザに比べて制限されています。ルートユーザは一般ユーザの権限を変更したり、一般ユーザが作成したファイルの強制的な変更・削除も行えます。ルートユーザはシステムファイル自体を削除できるので、ルートユーザでのコマンドの実行には注意が必要です。間違えてシステムファイルを削除するとログインできなくなったりOS自体が起動できなくなったりする可能性もあります。つまり、自己破壊みたいな事が出来てしまいます。
また、ルートユーザと一般ユーザではターミナルのプロンプトの記号が違います。ルートユーザは # サインが表示され、一般ユーザでは $ サインで表示されます。
ホームディレクトリ
Linuxにはホームディレクトリと呼ばれる、各ユーザが専用で使用できるディレクトリが存在します。ルートユーザのホームディレクトリと一般ユーザのディレクトリは別の場所となっています。
ルートユーザのディレクトリ
/root/
一般ユーザのディレクトリ
/home/{ユーザ名}/
絶対パスと相対パス
Linuxのファイルシステム内で作業をする場合、操作したいファイル・ディレクトリを指定しなければなりません。フィアル・ディレクトリの位置を指定する方法には2つあります。
- 絶対パス
-
絶対パスとはルートディレクトリからツリー構造を辿ってファイル・ディレクトリを指定するパスを指します。
例)/home/ec2-user/my-file.txt
- 相対パス
-
相対パスとは今自分がツリー構造内にいる場所から見て対象となるファイル・ディレクトリを指定するパスを指します。
例)今いる位置から下の階層をにあるファイルを指定する場合(./は省略可能)。
./directory1/directory2/my-file.txt
directory1/directory2/my-file.txt例)今いる位置から2つ上の階層から辿ってファイルを指定する場合。
../../uploaded/my-file.txtLinux上では現在位置のパスはシングルピリオド(.)、一つ上の階層のパスはダブルピリオド(..)で表されます。
改行文字コード
Windowsでは「\r\n」で表されている改行文字コードは、Linux上では「\n」で表されます。これはタイプライターで使用されていた改行作業手順が起源となっています。タイプライターではもともと改行作業は、打鍵位置を左に戻す作業のキャリッジリターンと次の行に打鍵するための紙送り作業のりラインフィードの2作((CR+LF))で改行がなされていました。それを忠実に再現したのがWindowsでこれら2つの文字コードを組み合わせた「\r\n」で改行文字としています。もう一方の、Linuxではラインフィード(LF)のみで改行を表すことになったので「\n」のみで改行文字となっています。
一般ユーザからルートユーザになってみよう
まずは、VSCode内のGit BashからEC2インスタンスにログインしてみましょう。ログインに成功したらプロンプトに表示されているユーザ名とプロンプトの記号を確認しましょう。ユーザ名はec2-uesr、プロンプトの記号は$サインになっているはずです。次に、pwdコマンドでディレクトリツリー内の現在位置を表示してみましょう。/home/ec2-user と表示されるはずです。ログイン直後は一般ユーザであるec2-userのホームディレクトリに自分がいるのが確認できます。
次に、以下のコマンドでルートユーザにスイッチしてみましょう。
sudo su -
一般ユーザの時同様に、ユーザ名とプロンプトの記号を確認してみましょう。ユーザ名はroot、プロンプトの記号は#サインになっているはずです。再度pwdコマンドを実行して自分のいるディレクトリ位置を確認しましょう。/root と表示されているはずです。
ルートユーザから一般ユーザに戻る場合はexitコマンドを実行します。一般ユーザに戻ってからサイドexitコマンドを実行するとSSH接続が切断されます。
rootユーザにスイッチしたら直接SSH接続の切断はできません。一般ユーザに戻ってからの切断が必要になるので、SSH接続を切るにはexitコマンドを2回実行する必要があります。
まとめ
今回の記事では、Linuxの学習を進めていくうえで必須となる基本的な知識について学習をしました。Linux上は全てがファイルでありツリー構造になっていることを知りました。拡張子の概念もありませんでしたね。一般ユーザとルートユーザの2タイプがあり、それぞれにホームディレクトリがありました。ルートディレクトリから辿る絶対パスと現在位置から辿る相対パスがあることも学習しました。今回学んだ基礎知識を活かしてどんどんLinuxにつての理解を深めていきましょう。
次回は「Linuxの基本コマンド」について学習していきます。