【初学者用】Linuxを体系的に学ぶ – Part.2

この記事について

【初学者用】Linuxを体系的に学ぶ – Part.1の続きです。
Part.1はこちら

ウズウズカレッジ様のYouTube【LinuC/LPIC合格講座】を参考にLinuxについてまとめたものです。
動画がとてもわかりやすいため、初心者の方は是非動画を見ることをお勧めいたします。

目次

  • KVM仮想マシン
  • docker
  • ブートプロセス
  • プロセス
  • ジョブ
  • デスクトップ環境
  • 終わりに

仮想マシンとは

実際のコンピュータ上に構築された仮想的なコンピュータ。
Windowsが入ったコンピュータの中に、Linuxが入ったコンピュータを作ることができる。
ホストOS型と、ハイパーバイザー型がある。

★メリット
・複数のサーバを一台で作れる。
・何台もサーバを用意する必要がない。
・様々な環境を手軽に導入できる。

★デメリット
・本来のコンピュータ自体の性能を活かせない。
・物理環境の不具合の影響が大きくなる。

ハイパーバイザー型

・Linuxで用いられる仮想化の手段。
・CPUに仮想化支援機能が搭載されている必要がある。
・効率的に仮想マシンを稼働させることができる。

ホストOS型

・仮想化ソフトをインストールすることで構築できる。
・Windows機やMac機に手軽に仮想環境を導入できる。
・コンピュータの性能を活かし切れない。

KVM仮想マシン

KVM仮想マシン=「Kernel-based Virtual Machine」
・Linuxカーネルに標準で組み込まれている仮想化システム
・ハイパーバイザー型
・CPUが対応しているか確認する必要がある

★CPUがKVMに対応しているか調べるコマンド

$ lscpu | grep Virtualization
 Virtualization:  VT-x (・・・あるいは「AMD-V」と表示されていればOK)

もしくは
$ grep -E 'vmx | svm' /proc/cpuinfo
 flags  :  大量の文字列が出てくる

KVM仮想マシンの基本操作

virsh(バーシュ)コマンドを使用する。
virsh=バーチャルシェルという意味

virshコマンド一例

★導入している仮想マシンの一覧を表示
# virsh list --all 

★仮想マシンを実行する
# virsh start centos-vm

★仮想マシンを停止する
# virsh shutdown centos-vm

virshコマンドのオプション

create ...xmlファイルから仮想マシンを作成
start ...仮想マシンを起動
resume ...仮想マシンを再開
shutdown ...仮想マシンを正常に終了
destroy ...仮想マシンを強制終了
suspend ...仮想マシンを一時停止
reboot ...仮想マシンを再起動
console ...仮想マシンのコンソールに接続
dumpxml ...仮想マシンの設定をxmlファイルで出力
list ...稼働中の仮想マシンの一覧を表示

libvirt(ライブバート)

・仮想マシンの管理を便利にするためのソフトウェアの集まり。
・「library + virtualization」を組み合わせて「libvirt」。
・様々な仮想化に対応している。
・Cライブラリを中心に構成している。

簡単にいうと、
「仮想化の手段(KVMやXen等)が色々あっても、オレ(libvirt)が間に入ってその違いを全部まとめて吸収しちゃうぜ!」です。
アプリケーションさんからすると、libvirtさんを見ればいいだけなので、とてもありがたいこと。

800px-Libvirt_support.svg.png

docker

打表的なコンテナ管理をするソフトウェア。
アイコンはこちら。dockerをまずはインストールして使用する。
docker.png

Dockerhubとは

様々なDockerイメージがWeb上に保存され、公開されている。
※「dockerレジストリ」・・・dockerイメージのストア。

Dockerイメージを取得し、起動する

①Dockerイメージをダウンロードする
# docker pull centos:8
「pull」はイメージを取得する。「centos:8」はバージョン。

②Dockerイメージからコンテナを作成し、起動する
# docker run centos:8
「run」はコンテナを作成し起動する。centos:8のイメージを元にして。

③Dockerイメージからコンテナを名前つけて起動し、操作する。
# docker run -it --name centOStest centos:8 /bin/bash
「run -it」は作成して起動して入力する。
「--name centOStest」つけたい名前を入れる。
「centos:8」のイメージを元にして。
「/bin/bash」bashを使って。

イメージやコンテナを確認する

コンテナを表示する
# docker ps -a
「ps」コンテナの一覧を表示する
「-a」終了したものも含めて全て

イメージを表示する
# docker images
「images」イメージの一覧を表示

dockerのサブコマンド

pull         ・・・ Dockerハブからイメージをダウンロード
push         ・・・ Dockerハブにイメージをアップロード
run          ・・・ 新しいコンテナを作成して実行
ps           ・・・ コンテナの一覧を表示
images        ・・・ Dockerイメージの一覧を表示
rm           ・・・ コンテナを削除
start        ・・・ 作成済みのコンテナを起動
stop         ・・・ コンテナを停止
kill         ・・・ コンテナを強制終了
attach       ・・・ コンテナに接続して操作
exec        ・・・ コンテナでコマンドを実行
Cntr + P(Q)   ・・・ コンテナに接続にしている状態から一時的に抜ける

ブートプロセス

Linuxが起動するまでの流れのことを、ブートプロセスという。

①電源が入る
②BIOS(UEFI)が起動
 ・ハードウェアのチェックや初期化
 ・起動デバイスに書き込まれたブートローダを読み出す
 ・ブートローダが起動デバイスからカーネルをメモリに読み込む
③Linux起動
 ・メモリや初期化やシステムクロックの設定
 ・仮のルートファイルシステムをマウント
 ・初期RAMディスクに組み込まれたデバイスドライバを使ってデバイスにアクセス
 ・init(古)かsystemd(新)でプロセスを実行
  →起動に必要なものを順次起動していく。全ての起動処理を完了させ、ログインする画面を表示させる。

systemd

Linuxの起動処理やシステム管理を行う仕組み。

★Unit(ユニット)   ・・・ systemdの処理単位(設定ファイル)
設定ファイルが一つずつ分かれているの変更が簡単に行える。

 【ユニットの種類】
 ・ターゲット:〜.target
 ・サービス:〜.service 

★様々なターゲット
ターゲットとは・・・systemdの処理単位であるUnitをまとめたもの。
ターゲット 説明
multi-user.target CUIログインを行う
graphical.target グラフィカルなログインを行う
poweroff.target システムを終了する
rescue.target シングルユーザーモード
reboot.target システムを再起動する

※シングルユーザーモードは、他の人が入って来れない状態にすること。

ターゲットを管理する

現在のデフォルトの設定を調べる
$ systemdctl get-default

システム起動時のデフォルトターゲットを変更する
# systemdctl set-default ターゲット名

ターゲットを実行する
# systemctl isolate ターゲット名

systemctlのサブコマンド

isolate ...他のUnitを停止して、指定したUnitを起動する
status ...サービスの状態を表示する
is-active ...サービスが稼働しているかを表示する
disable ...サービスの自動起動を無効にする
enable ...サービスの自動起動を有効にする
start ...サービスを起動する
stop ...サービスを停止する
set-default ...次に起動した時のターゲットを設定する
get-default ...次に起動した時のターゲットを表示する
reboot ...システムを再起動する
poweroff ...システムを終了して電源を切る

プロセス

Linux上で実行中のプログラムのこと。
プロセスは「ps」コマンドなどで確認する。
プロセスは「kill」コマンドなど終了する。

★マルチタスク ・・・ 複数のプロセスを同時に稼働できるシステム
★デーモン(守護神) ・・・ 一定の条件に従い、バックグランドで実行される常駐プロセス。普段動いていないけど常に待機している。

プロセスを確認する「ps」コマンドのオプション

a   ・・・ ユーザーが実行した全ての
f   ・・・ プロセスの親子関係をツリー状で表示する
u   ・・・ ユーザー名も表示する
x   ・・・ ユーザーが制御していないサービス(デーモン)などのプロセスを表示する
-e  ・・・ 全てのプロセスを表示する
-f  ・・・ 起動時間なども含めた詳細な情報(完全なフォーマット)を表示する
-l  ・・・ 詳細情報を表示する

(例)
$ps ax   ・・・ デーモンも含めて、全てのプロセスを表示する

コマンドで表示されるもの

PID TTY STAT TIME COMMAND
プロセスを識別するための番号(プロセスID) 端末の名前 プロセスの状態 プロセスが実行された総時間 プロセスの実行名

psコマンド以外のプロセスを確認するコマンド

★topコマンド
topコマンドはプロセス一覧をリアルタイムで監視する。
CPU利用時間が長い順から上から並んでいる。
システム稼働状況だけを見たい場合は「uptime」コマンドを実行する。
Qで終了する。

★pgrepコマンド
特定のPIDを調べたいときに実行する。

オプション
-l   ・・・ PIDに加えてプロセス名も表示する
-U   ・・・ 指定したユーザーが実行しているプロセスを表示する

★pstree
あるプロセス(親プロセス)が新たなプロセス(子プロセス)を実行することがあり、そのプロセスの親子関係を表示できる

プロセスの終了「kill」コマンドのシグナル名、シグナルID

-1(-HUP)    ・・・ 端末切断による終了・再起動
-2(-INT)    ・・・ キーボードによる割り込みで終了
-9(-KILL)   ・・・ 強制終了
-15(-TEAM)  ・・・ 通常の終了
-18(-CONT)  ・・・ 一時停止中のプロセスを再開
-19(-STOP)  ・・・ 一時停止
-20(-TSTP)  ・・・ キーボードによる割り込みで一時停止

※kill -lで上記が出てくる。

プロセスを終了するためのkill以外のコマンド

★killall ・・・ killコマンドと同様。完全一致の引数(プロセス名)を指定すると全て終了させる。
例)killall sleep  とした場合、「sleap」状態のものを全て終了できるという意味になる。

★pkill  ・・・ 引数を含むものを全て削除する。
例)pkill slee  とした場合、「slee」が含まれている引数(プロセス名)を指定すると全て終了させる。

ジョブ

シェル単位で管理されているコンピュータが実行している処理のこと。コンピュータに実行させる処理のまとまり。
フォアグランドジョブ・・・終了するまでシェルを操作できない。
バックグランドジョブ・・・裏で実行されているためシェルの操作ができる
 →コマンドの後ろの「&」をつけてバックグラウンドジョブにできる(例:sleep 120 &)

例:「cal」コマンドを実行  = 「cal」ジョブが実行される。
通常、ジョブが終了するまで他の作業ができない。

すでに実行中のジョブをバックグランドで実行させたい場合

①Ctrl + Z キーでジョブを一時停止(サスペンド)させる。
②jobsコマンドで実行中のジョブを表示させ、ジョブ番号を調べる。

(例)
$ jobs    ・・・ 実行中のジョブを表示する
[1]+ Stopped     sleep 60    ・・・ 停止中だよ

③「bg %ジョブ番号」コマンドを入力

$ bg %1     ・・・ 指定したジョブ番号1をバックグラウンド実行にする

※フォアグランドジョブにしたい場合は「fg %ジョブ番号」

デスクトップ環境

★「X Windows System」とは
Linux上でGUI環境を実現しているシステムのこと。
外観は複数のソフトウェアが力を合わせて実現している。

★xクライアント
入力情報が欲しい・出力したい側、ディスプレイに表示してほしいアプリケーション。
xクライアントがxサーバーにディスプレイへの表示をお願いしている感じ。

★xサーバー
入出力装置を管理している。
入出力装置の一例 ・・・ マウス、キーボード、ディスプレイなどのデバイス。
ウインドウマネージャ・・・X Windows Systemの外観を制御するソフトウェア。

※Linuxは基本的にCUI環境!
GUI環境を使いたい場合は、特別な仕組み→「X Windows System」などが必要になる。
X Windows Systemを実現するためには、「X.Org Server」というソフトウェアが必要になる。

代表的なウインドウマネージャ

名前 説明
twm 最小限の機能を持つ基本的なウィンドウマネージャ
mwm スタンドアローン(単独で機能する)ウィンドウマネージャ
fvwm 立体的なウィンドウ表示を行うウィンドウマネージャ
Englishtenment 幅広いカスタマイズが可能なウィンドウマネージャ
kWin KDEの標準ウィンドウマネージャ
Metacity GNOME2の標準ウィンドウマネージャ
Mutter GNOME3の標準ウィンドウマネージャ
WindowMaker 標準的な高機能ウィンドウマネージャ

統合デスクトップ環境

ウィンドウマネージャや様々なアプリケーションをまとめ、統一されたデスクトップの見た目や使い勝手を提供するソフトウェア。

KDE Plasma GNOME Xfce
テキストエディタ KEdit gedit Mousepad
端末 Konsole GNOME端末 xfce4端末
ファイルマネージャ Dolphin Nautilus Thunar
ウィンドウマネージャ KWin Mutter xfwm4
ディスプレイマネージャ SDDM GDM XFCE

※ディスプレイマネージャ ・・・ GUI環境で(ログイン画面を表示し)ユーザー認証を行うソフトウェア。

X Window Systemを起動する

X Window Systemの起動コマンド
$ startx

systemdが採用されていたら・・・
# systemctl isolate graphical.target
(ターゲットを実行して!という意味)

SSHを利用したX Window Systemの準備

①リモートホスト側(サービスを提供する側)の「/etc/ssh/sshd_config」に下記記述。
「X11Forwarding yes」

②設定を有効にするためにリモートホスト側(サービスを提供する側)でSSHサーバーを再起動。

# systemctl restart ssh.service
systemdについて、SSHサーバーを再起動して!

③ローカルホスト側(サービスを利用したい側)からリモートホスト側にSSHで接続する。

# ssh -X ユーザー@リモートホスト側

④DISPLAY環境変数を確認する。

$ echo $DISPLAY
ディスプレイ環境変数を表示する。
[ホスト名かIPアドレス]:ディスプレイ番号.スクリーン番号

⑤リモートホスト側(xクライアント)がローカルホスト側(xサーバー)に利用資格があるか確認する。

$ xauth list
Xサーバー接続の資格情報について表示して

⑥リモートホストにログインした状態でコマンドを実行する

$ xeyse &
xeyseをバックグラウンドで表示する

※xeyseはとあるアプリケーション

終わりに

普段パソコンがどのように動いているかを理解できた気がします。
基礎は勉強してしばらくたつと忘れてしまったりするので、
定期的に振り返っていきたいですね。

Last modified: 2023-07-03

Author