Linux、仮想環境

Linuxとは

Linuxは、1991年にLinus Torvalds氏によって開発された、オープンソースオペレーティングシステム(OS)です。
OSとはコンピュータを動かすための基本ソフトウェアのことで、ハードウェアの制御やプログラムのインターフェイスを提供するなど、ユーザーがコンピュータを快適に利用できるようにするための役割を担っています。OSの代表的な種類としてはWindows、macOSなどがあり、Linuxもそれらに並ぶ一種です。

Linuxの特徴の1つである「オープンソース」とは、ソフトウェアのソースコードを一般に公開し、誰でも無料で自由に利用や改変・再配布ができるソフトウェアのこと。
セキュリティが高いこともあり、サーバーとしてよく使用されます。スマホOSのAndroidも、LinuxをベースにしたOSの1つです。

Linuxを扱う上での大きな特徴として、ターミナルを利用したコマンドライン操作が基本となっています。

Linuxのマスコット「Tux」

WindowsとLinuxの比較

特徴WindowsLinux
利用範囲、使用目的一般家庭、ビジネスサーバー環境、開発
特徴・初心者にも扱いやすい
・有償サポートの充実
・デファクトスタンダードのため情報が多い
・対応している周辺機器やソフトが多い
・セキュリティが高い
・低スペックのデバイスでも使える
・ディストリビューションが豊富
・トラブルがあった時は自己解決する必要がある
価格有料無料
インターフェースGUIが主流CLI (Command Line Interface)
コマンドラインインターフェース

CLI(Command Line Interface)とCUI(Character User Interface)は、ほぼ同義語です。どちらもコマンドラインを使って操作するインターフェースを指します。
CUIは「文字ベースのユーザーインターフェース」を意味する広い概念で、CLIは具体的にコマンドラインを使ってシステムとやり取りすることを指しています。

Linuxディストリビューション

実際にLinuxを使用する際、概ねLinuxディストリビューションを活用します。
Linuxディストリビューションとは、Linuxをベースに開発・再配布されている、言わばLinuxの亜種のOSです。
Linuxカーネル(ハードウェアとアプリケーションソフトの間の橋渡しを担うOSの中核のソフトウェア)を基盤に様々な周辺ソフトウェア(ライブラリ、アプリケーションなど)を組み合わせて、1つのパッケージとして配布されているOS」を指します。

Slackware系(シンプルさが大きな特徴。RedHat系、Debian系と異なり、依存関係の解決を行わない。/Slackware・Salix OS他)、
RedHat系(商業ディストリビューションとして代表格。/Red Hat Enterprise Linux(RHEL)・CentOS Stream他)、
Debian系(パッケージ管理が優秀。コミュニティの充実。/Debian・Ubuntu他)、など種類が豊富です。

参考サイト:Linuxディストリビューション15選!UbuntuやFedoraなど定番の種類も紹介| Qbook

Linuxのコマンド、関連用語

Linuxで使用するコマンドは、大まかに言うとUNIXのコマンドにGNUの機能を加えたものです。
UNIXもOSの一種で、Linuxが開発される際に参考にされたものです。元にしているだけあり、UNIXとLinuxでは共通しているコマンドが非常に多くなっています。
参考サイト:UNIXとLinuxの違いとは?共通点・よく使うコマンドについても紹介

関連用語についても押さえておきましょう。

コマンド

ユーザーがコンピュータに特定の処理を実行させるための命令や指示のこと。

シェル

ユーザーがコマンドを入力したコマンドを解釈してOSに伝えて実行するためのソフトウェア。
…WindowsではコマンドプロンプトやPowerShellがシェルとして機能する

シェルスクリプト

まとめて実行したい一連のシェルコマンドを記述したテキストファイル。拡張子としては.shや.bashが主。
関連として、Windowsのコマンドプロンプトを実行するためのバッチファイル(.batや.cmd)と言うものもある。

プロンプト

ユーザー名やホスト名、カレントディレクトリ(現在作業しているディレクトリ、現在地)などを表示し、ユーザーからの入力を促す(次のコマンドを実行できる状態を表す)表示のこと。
(例)Git Bashの場合

Bash(Bourne Again Shell)

UNIXシェルかつそのコマンド自体のこと。ほとんどのLinuxディストリビューションのデフォルトとして採用されている。
…Git BashはGit向けの機能を足したBash。cdやlsと言ったコマンドはまさにUNIXコマンドです

仮想環境、OSのインストール

仮想環境(仮想化)とは、ハードウェア上で仮想的に分離または統合して独立させたOSの実行環境のことを指します。
仮想環境では実際のサーバーと同様に、既存のOS上に別のOSを複数配置しCPU・メモリを割り当ててOSを動作させることが可能です。
仮想環境を動作させる役割を担うのが仮想マシンで、複数の仮想マシンを管理・リソースの割り当て等を行うものを仮想化ソフトウェアと呼びます。

参考サイト:
仮想化技術ってなんだろう?なぜ必要なの?? – Linux技術者認定 LinuC | LPI-Japan
サルでもわかる仮想環境とは?種類別にイラスト付きで解説【注意3点】 | フリーランスの攻略本

仮想化ソフトにも有償から無償、仮想化のタイプで様々な種類があります。有名なもので言うとVMware、Hyper-V、KVM、XenServerなど。

仮想環境の構築(VirtualBox、CentOS)

ここでは、オープンソースソフトウェアであるVirtualBox(Oracle VM VirtualBox)を使用して、Windows上に仮想環境の構築、LinuxOSのインストールまで実践していきます!

VirtualBoxのインストール

下記サイトの手順に従ってインストールします。
Windows 11 への VirtualBox 7.0.10 のインストール – Qiita

CentOSの導入

LinuxOSとしてCentOSをインストールします。
基本的には下記のサイトに従ってインストールを進めます。
Virtualbox上でのLinux(CentOS Stream 9)利用環境の構築
※OSのインストールにはある程度時間がかかります。
【CentOSのダウンロード】CentOSのダウンロードではVer.9x86_64 ISOsを選択してください。
(x86_64…x86アーキテクチャの64ビット版。x86アーキテクチャは、IntelやAMDの多くのプロセッサで採用されている
ISO…CDやDVDなどの光学ディスクの情報をそのまま1つのファイルに保存したもの。LinuxディストリビューションはこのISOイメージ形式で配布されており、ダウンロードすることが可能。)

【CentOSインストール完了後】アプリケーションを選択するには、画面左上の「アクティビティ」をクリックするかWindowsキーを押します。

以上で環境は整いました。
次は具体的なコマンドを実践していきましょう。

主なコマンド

Linuxコマンドの基本

コマンドの基本書式
コマンド [オプション] [引数]

コマンド…実行したい操作を指定する命令
オプション…コマンドの動作を細かく指定する追加の指示(任意)
引数…コマンドの処理対象(基本的に任意)

・コマンド、オプション、引数 のそれぞれの間は半角スペース
・オプションの内容はコマンドごとに異なります。複数指定も可能
・オプションは一般的に、「-」が1つのときは1文字、「-」が2つのときは単語になる場合が多い。

基本コマンドの紹介、実践

CentOSのターミナルを開いて、入力・実行します。
1つ1つ紹介していきますので、表示例の画像と同等の結果になるか試してみましょう。

ディレクトリ情報の表示

Linuxコマンド説明オプション
pwd現在のディレクトリを表示する-L:論理的なディレクトリ名
-P:物理的なディレクトリ名
lsディレクトリ内の情報を一覧表示-l:ファイルの詳細まで表示
-a:すべて表示(隠しファイルも含む)
-r:逆順で表示
-t:更新時間順にソート
-S:ファイルサイズが大きい順で表示
(例)組み合わせて「ls -lr」などの実行も可能

実行例

ディレクトリ移動、操作

Linuxコマンド説明オプション
cdディレクトリを移動
mkdir [ディレクトリ名]ディレクトリ作成-m:作成するディレクトリのパーミッションを設定
-p:必要に応じて親ディレクトリも作成
rm [ディレクトリ名]ファイル・ディレクトリ削除-f:存在しないファイルを無視
-i: 削除前に確認
-v:経過を表示
-d:unlinkでディレクトリを削除
-r:ディレクトリを削除
mv [変更前] [変更後]・ファイル(ディレクトリ)名を変更
・ファイルを移動
-b:上書き・削除されるファイルのバックアップ
-f:上書き時、確認メッセージ非表示
-i:上書き時、確認メッセージを表示
-n:移動先に同名ファイル・ディレクトリが存在時、移動不可
-v:詳細を表示
cp [コピー元] [コピー先]ファイルをコピー-i:上書前に確認
-v:実行内容の表示
-n:存在するファイルの上書きを制御
-b:上書きファイルのバックアップ生成
-S [接尾辞]:バックアップファイル生成時、ファイル名末尾に付ける文字
touch [ファイル名]新規ファイルを作成

実行例1

上から順に
・「mkdir sampledir」:ディレクトリsampledirを作成
・「ls」:一覧表示(作成結果の確認。処理の都度「ls」を実行して結果を確認するとよい)
・「cd sampledir」:ディレクトリ移動(移動後、次のプロンプトではカレントディレクトリの表示が変わっている)
・「mkdir dir2/dir3」:オプションがないと「dir2/dir3」と多階層のディレクト作成ができない
・「mkdir -p dir2/dir3」:-pオプションを付けることで親ディレクトリもまとめて作成完了

実行例2

・「cd dir2/dir3」:ディレクトリ移動
・「cd ../」:ディレクトリ移動(../ で今いる階層の上に移動。「ファイル管理」の単元を参照)
・「cp new.txt 2nd.txt」:new.txtの内容を2nd.txtというファイル名でコピー

実行例3

・「mv 2nd.txt ../」:ファイル2nd.txtを1つ上のディレクトリ(dir2)に移動
・「mv dir3 dir4」:dir3のフォルダ名をdir4に変更
・「cp 3rd.txt dir4/4th.txt」:3rd.txtを1つ下のフォルダdir4に移動、ファイル名を4th.txtに変更

☆上記の通り、フォルダの考え方が重要になります。「ファイル管理」の単元を復習すると良いでしょう。
・カレントディレクトリにあるファイル →直接ファイル名で指定可能
・カレントディレクトリの上の階層(やその中のファイル)→階層を上げる「../」で1つ上のフォルダを指定
・カレントディレクトリの下の階層(やその中のファイル)→「dir4/」のようにディレクトリ名から指定する

ファイル編集、表示

viエディタはLinuxやUNIXで標準的に使われているエディタです。

Linuxコマンド説明オプション
cat [ファイル名]テキストファイルの内容全体を表示-n:行番号を追加
-b:行番号を追加するが、空白行には追加なし
-s:連続した空行を1行に変更
-v:TAB、改行、改ページ以外の非表示文字を表示
-e:TABを除く全ての非表示文字を表示
view [ファイル名]ファイルへの書き込み権限なしでテキストファイル内容を表示する
tail [ファイル名]ファイルの末尾部分を表示する-n[行数]:末尾から指定された行数分だけ表示
-c[バイト数]:末尾から指定されたバイト数だけ表示
-f :ファイルの末尾に追加された行を表示し続ける
vi [ファイル名]ファイルを編集モードで開く(ファイルが存在しない場合は新規作成する)
:w<viの実行時>
編集中の内容でファイルを上書き保存する
:q<viの実行時>
ファイルを保存せず終了する
:wq<viの実行時>
編集中の内容を保存して終了

【vi実行時の編集モード】:下図のように表示され、通常のテキストエディタに近い感触で自由に入力できます。

【viの編集モードを終了させるには】:Escキーを押すと、終了や保存のコマンドが有効になります。
下図は 「Escキー」→「:w」と入力したときのウィンドウ左下の表示。このままEnterキーを押すことで実行可能


実行例

参考サイト:
UNIXコマンド一覧 – Qiita
コマンドラインの基礎|【Linux 入門】ゼロから始める Linux(初心者のための Linux 入門)

その他、権限やパーミッションを変更するコマンド(次の章で扱います)や、ファイルの圧縮/解凍・アーカイブのコマンド等を始めとし、様々なコマンドが存在します。気になる方は調べてみましょう。
参考サイト:
【メモ】Linux圧縮/解凍コマンド – Qiita
ファイルの圧縮・解凍 / アーカイブの作成・展開 | 神田ITスクール

所有者とアクセス権

Linuxを業務で扱う上で必須となるのが権限パーミッションの知識です。

「ls -l」コマンドでは上記のようにファイル/ディレクトリの詳細情報が表示されますが、この内容のうち
-rw-r–r–の部分が アクセス権(パーミッション)、test testの部分が 所有者(ユーザー・グループ)です。

所有者(ユーザー・グループ)

Linuxのユーザーには大きく分けて管理者ユーザー(root)一般ユーザーがあります。(前述のCentOSのセットアップでも作成しました)
管理者ユーザーはすべてのコマンド、すべてのファイルにアクセス可能な唯一のユーザーで、一般ユーザーはコマンドやアクセスに制限があります。一般ユーザーは複数作成可能です。

グループとは、複数のユーザーをまとめて管理する仕組みです。
Linuxではグループ単位でアクセス権を付与することができるので、複数のユーザーに同じアクセス権を付与したい場合などに便利です。また1つのユーザーが複数のグループに属することも可能です。
ユーザー作成時には、自動でユーザー名と同じ名前のグループ(プライマリグループ)に割り当てられますので、上記のファイル・ディレクトリには test test と表示されています。

アクセス権(パーミッション)

アクセス権の英字10文字はそれぞれ以下の内容を表しています。

①ファイルの種別 …「d」ならディレクトリ、「-」ならファイル
②所有者のアクセス権 
③所有者の所属グループのアクセス権
④その他のユーザーのアクセス権

また、rwxはそれぞれ以下の権限があることを示します。
Read 読み取り(内容の表示など)
Write 書き込み(編集、上書きコピーなど)
・eXecute 実行(プログラムやシェルスクリプトの実行、ディレクトリの場合はディレクトリ内へのアクセス)

アクセス権に関しては、数値(2進数)でも表現可能で
rwxは、左から順に2の2乗、1乗、0乗(4、2、1)と表現できます。
そのため、あるファイルのアクセス権「rwx r-x r-x」は、数値では「755」と表記できます。

参考サイト:
パーミッションとは。アクセス権の設定方法を紹介(Unix/Linux向け) | ミライサーバーのススメ
ファイルのアクセス権を理解する – Linux技術者認定 LinuC | LPI-Japan

所有者、アクセス権に関するコマンド

Linuxコマンド説明オプション
su [ユーザー名]特定のユーザーに切り替えるコマンド
[ユーザー名]を指定しなければrootユーザーが対象になる。
exitで終了可能
-:切り替えたユーザーのホームディレクトリに移動
sudo [コマンド]rootユーザーの権限が必要なコマンドを実行するためのコマンド
※管理ユーザーコマンドを使用できるため、扱いには注意が必要
※sudo使用を許可する設定ファイルに記載されているユーザーのみ使用可能
※CentOS(Ver.7以降)ではデフォルトで「wheel」というグループはsudoコマンドを使用可能
chmod [モード] [ファイル名]ファイル・フォルダの権限を変更する
[モード]には755といった数値で権限を指定
-v:実行結果の詳細を表示
-R:ディレクトリ配下のファイルも一括変更
useradd [ユーザー名]ユーザーを追加する
※root権限が必要
passwd [ユーザー名]ユーザーのパスワードを変更する
ユーザー名を指定しないと現在ログイン中のユーザーが対象になる
※root権限が必要
chown [所有者名] [ファイル名]ファイル・フォルダの所有者を変更する
※root権限が必要
-R:ディレクトリ配下のファイルも一括変更
chgrp [グループ名] [ファイル名]ファイル・フォルダの所有グループを変更する
※root権限が必要
-R:ディレクトリ配下のファイルも一括変更

実際にコマンドを実践してみましょう。

実行例1 (一部上表で紹介していないコマンドも含みます)

・「su」:rootユーザーに切り替え
 ☆パスワードは入力しても表示されません
 ☆「~expire in 0 days.」パスワードの期限切れといった出力がされることがありますが、ここでは無視で構いません。
・「useradd  test02」「passwd  test02」:新しいtest02ユーザーとそのパスワードを設定
・「usermod -G  wheel  test02」:test02ユーザーにwheelグループ(sudoコマンドを使用可能なグループ)を付与しています
・「id test02」:ユーザー情報、所属グループを確認しています。
・「su  test02」:ユーザー切り替え。rootは管理ユーザーのため、rootから他のユーザーに切り替える場合はパスワード入力は省略されます

実行例2

ここではファイル3rd.txtの所有者を変更しています。
・「chown test02 3rd.txt」:root権限が必要なコマンドのため、一度目は拒否されています。
・「sudo chown test02 3rd.txt」:sudoを付けることで実行可能になります。
 ☆sudoは全てのコマンドが実行できることから、あくまで常用するようなコマンドではなく、不用意な使用は避けるべきです。実務でも頻繁に使うものではありません。
 そのため、安全のために上記のような注意メッセージが表示されます。
・「ls -l」:実行後、所有者が変更されていることを確認できます。

実行例3

ファイル3rd.txtに対して、パーミッションを変更し、変更されていること(アクセスできないこと)を確認します。
・「chmod 700 3rd.txt」:パーミッションを変更しています。
・「exit」2回:ここまでtest→root→test02とユーザーを切り替えていたので、2回実行して元のtestユーザーに戻っています。
・「cat 3rd.txt」:test所属グループに対してのパーミッションは閲覧も許可されていないので、拒否されています。

Tera Termによる接続

Tera Term使用の概要

Tera Termは、Windows向けのターミナルエミュレータです。TelnetまたはSSH接続でネットワークを介して別のコンピュータを操作することができます
直接サーバーに接続するのではなく、遠隔地サーバーを利用するためにTera Termを介してログイン、コマンドを実行させる方法は実務でもよく使われます。

Tera Term等でリモートサーバーに接続するには、以下の3つの要素を指定する必要があります。

ホスト (Host): 接続先のネットワークアドレス指定
接続対象となるLinuxサーバーを一意に特定するためのネットワークアドレスとして、IPアドレスまたはドメイン名を指定します。
TCPポート (TCP Port): プロセスレベルの識別子
ポート=港のイメージそのままに、指定されたホスト(サーバー)上で動作している、特定のアプリケーションプロセスを識別するための論理的な番号です。
サービス (Service): 使用するプロトコルを指定
他のサーバーににログイン、コマンドラインインターフェースを介して操作するにはSSH接続を使用します。

ここでは掘り下げませんが、上記に出てくる単語はIT基礎知識として持っておくべき知識の一つです。身に着けていきましょう。
参考サイト:
【入門】IPアドレスとは?役割や仕組み、確認方法を初心者向けに解説 – カゴヤのサーバー研究室
ポート番号とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
TCP/IPとは?通信プロトコルの階層モデルを図解で解説 | ITコラム|アイティーエム株式会社

(Telnet/SSHは、遠隔地のコンピューターにログインし、CLIを介して操作するためのアプリケーション層プロトコル。安全性を向上させたのがSSHで、Telnetは現在ではほとんど使われない。
HTTP/HTTPSは、WebブラウザとWebサーバー間でHTML文書、画像、動画などのリソースを交換するために使用されるWorld Wide Webにおけるデータ通信の基盤となるプロトコル)

実践

さっそく、ホストOS(Windows)上のTera Termから、仮想環境のゲストOS(CentOS)に接続してみましょう!

まずはTeraTermをインストールしてください。
・下記の公式サイトから、GitHub上の最新版ダウンロードページに進み、teraterm-X.X.X.exeをダウンロードします。
・インストーラーの指示に従ってインストールを進めてください。特に設定を変更する必要はありません。
Tera Term

下記サイトに従い、「ポートフォワーディング」機能で接続しましょう。
Tera Termを使ったVirtualBox仮想マシンへの接続設定ガイド│SUNPO

下記のセキュリティ警告は続行で構いません。

ユーザーIDとパスワードを要求されたら、CentOSの任意のユーザーでログインします。
プロンプトが表示されればログイン完了です。
これまで実践した各コマンドもTera Termから実行することができますので、試してみましょう。

参考情報

参考サイト:
Linux道場|IT資格といえばLPI-Japan |LinuC/OSS-DB/HTML5/OPCEL
…LPI-JapanはLinux技術者認定試験実施団体で、LPICの日本語版の実施や日本市場に特化したLinuC という資格試験を提供しています。Linuxの概要について学びたい場合に有用

【初心者向け】Linuxコマンドはここから始めよう。 – Qiita
Linux基礎 1 講座 | 神田ITスクール
…基礎学習に

JSLinux:ブラウザでLinuxコマンドをお手軽に叩く – Qiita
…手軽にコマンドを練習したい場合は「JSLinux」が便利(一部使用できないコマンドもあります)

練習問題

問1: Tera Termからアクセスし、下図のように【任意のファイルに「insert from teraterm!」と書き込み(vi)、書き込んだ内容を表示する(cat)】までをコマンドで実行してください。

問2: 以下のログ出力方法に従い、ログを保存してください。

<ログ出力方法>

1.  TeraTermで ファイル>ログ をクリックする
2. 下記に習って入力・選択する
 ・ログファイル名:参照先から選択し、spring-○○プロジェクトの【src\main\resources\static\text】フォルダにする。
 ファイル名は日付を追加して「teratermYYMMDD.log」の形式にしてください
 ・モード:テキスト、UTF-8を選択
 ・現在バッファを含む にチェック
  …これまでの入力内容も記録されます。

3. ファイル>ログを終了
 →ファイルが保存できていることを確認してください。

 (保存したファイルの例)

(補足)Tera Termでは「ls -l」のエイリアス(別名、辞書登録のイメージ)として、「ll」を使用できます。

タイトルとURLをコピーしました