主題1.01:Linuxのインストールと仮想マシン・コンテナの利用
1.01.1 Linuxのインストール、起動、接続、切断と停止(重要度4)
sshコマンド
書式
ssh【オプション】【ユーザー@】ホスト【コマンド】
概要
SSHによるリモート接続を行う
主なオプション
-l ユーザー
→接続に使用するユーザーを指定。引数で指定することも可能。省略した場合は現在ログイン中のユーザー名でログインを試みる
-i ファイル
→ユーザー認証の際に使用する秘密鍵ファイルを指定
引数
・ユーザー:接続に使用するユーザーを指定
・ホスト:接続先のホストの名前もしくはIPアドレスを指定
・コマンド:指定した場合、接続先でコマンドを実行して切断
使用例
ssh testuser@192.168.56.××
→testuserでIPアドレスを指定してSSH接続
ssh -l root -i linuc1_centos7.key 192.168.56.××
→ユーザー名と秘密鍵のパスを指定してSSH接続
接続後に切断できるコマンドもしくは操作
logoutコマンド
exitコマンド
Ctrl + d を押す
OpenSSHに関する主なファイル(SSHクライアント)
・設定ファイル:/etc/ssh/ssh_config
・秘密鍵:~/.ssh/id_rsa
・公開鍵:~/.ssh/id_rsa.pub
・認証鍵リスト:~/.ssh/known_hosts(SSH接続先のホスト名やIPアドレス、公開鍵が格納)
OpenSSHに関する主なファイル(SSHサーバー(sshd))
・設定ファイル:/etc/ssh/sshd_config
・秘密鍵:/etc/ssh/ssh_host_rsa_key
・公開鍵:/etc/ssh/ssh_host_rsa_key.pub
・認証鍵リスト:~/.ssh/authorized_keys
ホスト認証
・ホスト認証は、SSHクライアントが接続先のリモートホスト(SSHサーバー)が正しいホストかどうかを確認する(なりすましを防ぐ)ために行う
・クライアントからの接続時に、リモートホストは自身の公開鍵をSSHクライアントに送信する。SSHクライアントは受け取った公開鍵と、SSHクライアントの「~/.ssh/known_hosts」ファイルに格納されているSSHサーバーの公開鍵を比べることで正しいホストかどうかを確認する
ユーザー認証
・ユーザー認証は、SSHクライアントで接続してくるユーザーが正当なユーザーかどうかを確認するために行う。ユーザー認証にはパスワード方式と公開鍵方式の2種類がある
・パスワード方式・・・ローカルでのログインと同様に、接続ユーザーのID/パスワードで認証する
・公開鍵方式・・・公開鍵と秘密鍵の組み合わせで認証する。パスワードを使用せず、鍵を持つ者がログインできる
ユーザー認証の公開鍵方式
・公開鍵方式を使用する場合は、ユーザーごとに一対の公開鍵と秘密鍵を作成して、公開鍵の方をSSHサーバーの「~/.ssh/authorized_keys」に登録しておく
・サーバーはSSH接続を受け付けた際、登録されている公開鍵とユーザーの秘密鍵のペアが一致するかどうかを確認する。一致しなければログインさせない。これによりパスワード方式よりもセキュリティ上強固なユーザー認証を実現する
SSHにおける認証の流れ
ホスト認証:接続先のサーバーを認証 → ユーザー認証:接続元のユーザーを認証(パスワード認証か公開鍵認証のどちらか)
shutdownコマンド
書式
shutdown【オプション】【タイミング】【”メッセージ”】
概要
システムを安全な方法で停止・再起動させる
主なオプション
-h
→シャットダウン
-r
→再起動
-k
→実際にシャットダウンせず、メッセージのみ送信
-c
→シャットダウン・再起動の予約をキャンセル
引数
・タイミング:シャットダウン、再起動するタイミングを指定。指定できるタイミングの例は以下の通り
now → 今すぐ実行
18:00 → 18時に実行
+5 → 5分後に実行
・メッセージ:接続中の端末に送信するメッセージを指定
使用例
shutdown -h +5 “shutdown soon”
→5分後にシャットダウンするよう予約
shutdown
→オプションや引数を省略すると1分後にシャットダウンするという意味になる
シャットダウンできる別のコマンド(shutdownコマンドの使用を推奨)
halt -p
poweroff
systemctl poweroff
systemctl start poweroff.target
再起動できる別のコマンド(shutdownコマンドの使用を推奨)
reboot
systemctl reboot
systemctl start reboot.target
1.01.2 仮想マシン・コンテナの概念と利用(重要度4)
virshコマンド
書式
virsh サブコマンド【ドメイン名】【オプション】
概要
仮想環境の管理
主なサブコマンド
list
→ドメインの一覧表示。ーーallオプションで停止しているドメインも表示
start
→ドメインの起動
shutdown
→ドメインの停止。ーーmodeオプションで停止のモードを指定(acpiと指定すると電源の停止も行う)
destroy
→ドメインの強制停止
reboot
→ドメインの再起動
suspend
→ドメインの一時停止
resume
→一時停止中のドメインを再開する
dominfo
→ドメインの情報を表示
console
→シリアルコンソール経由でドメインに接続
dumpxml
→ドメインの定義ファイルをXML形式で出力
create
→XML形式のファイルから仮想マシンを作成し、新規の仮想マシンを起動
引数
・ドメイン名:制御対象となるドメインを指定
使用例
virsh start debian-live2
→debian-live2ドメインを起動する
virt-managerやvirshコマンドなどが利用する、オープンソースの仮想化管理用のライブラリ
libvirt
dockerコマンド
書式
docker サブコマンド
概要
dockerを利用したコンテナ環境の制御
主なサブコマンド
pull イメージ
→リポジトリからイメージをダウンロード
push イメージ
→リポジトリにイメージをアップロード
images
→イメージの一覧を表示
ps
→コンテナの一覧を表示。併用できるオプションは次の通り
・-a:停止中のコンテナも表示
run イメージ
→コンテナを作成して起動。併用できるオプションは次の通り
・-i:コンテナの標準入力を開く
・-t:端末(tty)を利用
・-d:バックグラウンドで実行
start コンテナ
→コンテナの作成
stop コンテナ
→コンテナの停止
kill コンテナ
→コンテナの強制停止
attach コンテナ
→コンテナに接続
exec コンテナ コマンド
→起動中のコンテナでコマンドを実行
rm コンテナ
→コンテナの削除
rmi イメージ
→イメージの削除
使用例
docker pull debian
→debianイメージをダウンロード
仮想化におけるコンテナの特徴
・ホストOSのカーネルを共有する
・ホストOSのリソースを隔離して作成した仮想環境である
・コンテナを別の環境に配布して実行できる
・cgroupによってコンテナのリソースを管理する
・namespaceによってコンテナとホスト間でユーザー権限を分離する
仮想化(Virtualization)
仮想化とは
コンピューターリソースを実際の物理的な構成にとらわれず、論理的に分割・統合して提供する技術
仮想化の種類
仮想化を実現する方法には、大きく分けて仮想マシンとコンテナがある
仮想マシン(VM:Virtual Machine)
ハイパーバイザーという仮想化ソフトウェア上で仮想的なハードウェア(仮想マシン)を起動し、ゲストOS(仮想マシンにインストールしたOS)を動作させる方式
ハイパーバイザーの種類
・ネイティブ型(Type1)
ハードウェア上でハイパーバイザーを直接起動し、その上で仮想マシンとゲストOSを動作させる。
ネイティブ型の仮想化ソフトウェアには、Xen、MicrosoftのHyper-V、VMwareのvSphere Hypervisorなどがある
・ホスト型(Type2)
ホストOS上にアプリケーションの1つとして仮想化ソフトウェアをインストールし、その上で仮想マシンとゲストOSを動作させる。
ホスト型の仮想化ソフトウェアは、Oracle VM VirtualBox、VMware Workstation、Parallels Desktopなどがある
CPUの仮想化支援機能
概要
仮想化ソフトウェアが行う処理の一部をCPUが分担することで処理を高速化する機能
KVM(Type1)を使用するためには仮想化支援機能を搭載したCPUが必要
名称
Intel VT
AMD-V
1.01.3 ブートプロセスとsystemd(重要度4)
ブートプロセス
Linuxシステムの起動順序(ブートプロセス)
BIOS/UEFI(ファームウェア) → ブートローダー → カーネル → init
BIOS
・電源を入れると起動し、記憶装置(HDD)等に関して最低限の認識を行う
・起動する順にデバイスの先頭セクタにあるMBRを読み込み、ブートローダーが得られたら制御を移す
・起動デバイスの順序を設定できる
ブートローダー
・記憶装置(HDD)内のカーネルをロードし、制御を移す
カーネル
・高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行う
・/sbin/initを起動する
init
・最近のシステムではinitプログラムとして、Upstartやsystemdが採用される
・「/etc/inittab」を設定ファイルとして使用する従来のinitプログラムは「SysVinit」と呼ばれる
systemctlコマンド
書式
systemctl サブコマンド【ユニット名】
概要
systemdにおけるユニットの制御を実行
主なサブコマンド
start
→サービスを起動
stop
→サービスを停止
restart
→サービスを再起動
reload
→サービスの設定ファイルを再読み込みする
is-active
→サービスが稼働しているかを表示する
status
→サービスの状態を確認
enable
→サービスの自動起動を有効化
disable
→サービスの自動起動を無効化
get-default
→既定のターゲットを表示
set-default
→既定のターゲットを変更
isolate
→現在のターゲットを変更
halt
→システムを停止しhalt状態にする
reboot
→システムを再起動する
poweroff
→システムを停止し電源を切断する
list-unit-files
→ユニットの状態を表示
引数
・ユニット名:制御対象となるユニットを指定
使用例
systemctl start httpd
→httpdを起動
systemctl isolate rescue.target
→現在のターゲットをrescue.targetに変更
systemdの管理単位であるユニット
device:各種デバイスを管理するUnit
mount:ファイルシステムのマウントを管理するUnit
service:サービスを制御するUnit
swap:スワップ領域を管理するUnit
target:複数のサービスを1つのグループにするためのUnit
SysVinitのランレベルとsystemdのターゲットの対応
ランレベル0:poweroff.target
ランレベル1:rescue.target→レスキューモード(シングルユーザーモード)
ランレベル2,3,4:multi-user.target→マルチユーザーモード
ランレベル5:graphical.target→グラフィカルモード
ランレベル6:reboot.target
シングルユーザーモードに変更した後に、通常の起動状態に戻す方法
systemctl rescue →シングルユーザーモードに変更
通常の起動状態に戻すには下記の3つの方法がある
systemctl reboot
systemctl default
Ctrl-Dを入力する
サーバーとして動作させるのに適切な起動時のターゲット
multi-user.target
runlevel3.target
メンテナンスを行うために最低限のシステムサービス状態で起動
rescue.target
runlevel1.target
次回起動時にグラフィカルログインさせるようにするコマンド
rm -f /etc/systemd/system/default.target
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
次回起動時のランレベルの確認作業
cd /etc/systemd/system
ls -l default.target
systemdの特徴
・扱う処理をUnitという単位で管理する
・cgroupsでプロセスのリソースを管理する
・サービスの並列起動によって高速なシステム起動や停止が行える
1.01.4 プロセスの生成、監視、終了(重要度3)
psコマンド
書式
ps【オプション】
概要
動作しているプロセスの一覧を表示
主なオプション(BSD形式)
a
→ユーザーが実行したすべてのプロセスを表示
f
→親子関係も表示する
l
→詳細情報を表示
u
→プロセスの実行ユーザー名も表示
x
→制御端末のないサービス(デーモン)などのプロセスを表示
p PID
→指定したPID(プロセスID)のプロセス情報を表示
主なオプション(Unix形式)
-e
→すべてのプロセスを表示
-f
→起動時間(STIME)などを含めた詳細情報を表示
-l
→詳細情報を表示
-p
→指定したPID(プロセスID)のプロセス情報を表示
使用例
ps ax
→動作中のすべてのプロセスを一覧表示
ps -e
→動作中のすべてのプロセスを一覧表示
psコマンドで出力される情報
PID→プロセスID
TTY→端末
STAT→プロセスの状態
TIME→CPUの稼働時間
COMMAND→プロセスの実行内容
pstreeコマンド
書式
pstree【オプション】
概要
動作しているプロセスをツリー状に表示
主なオプション
-p
→PIDを表示
pgrepコマンド
書式
pgrep【オプション】キーワード
概要
動作しているプロセスを検索して表示
主なオプション
-l
→PIDの他にプロセス名も表示
-u ユーザー
→指定したユーザー権限で実行されているプロセスを表示
引数
・キーワード:検索するプロセス名を指定
使用例
pgrep -l sshd
→sshdというキーワードでプロセスを検索
topコマンド
書式
top【オプション】
概要
現在動作しているプロセスやシステムリソースの状態をリアルタイムに表示
主なキー動作
topコマンド実行中、以下のキーにより命令を行う
・q:topコマンドの終了
・k:プロセスの停止(kill)
・d:表示間隔の指定
uptimeコマンド
書式
uptime
概要
現在動作しているシステムリソースの状態(稼働時間など)を表示
freeコマンド
書式
free
概要
システムのメモリの状態を表示
jobsコマンド
書式
jobs【オプション】
概要
実行中のジョブの一覧を表示
fgコマンド
書式
fg ジョブ番号
概要
バックグラウンドジョブをフォアグラウンドに切り替え
引数
・ジョブ番号:切り替えるジョブを指定
bgコマンド
書式
bg ジョブ番号
概要
フォアグラウンドジョブをバックグラウンドに切り替え
引数
・ジョブ番号:切り替えるジョブを指定
nohupコマンド
書式
nohup コマンド構文
概要
ログアウト後もハングアップシグナルを無視してコマンドを実行
引数
・コマンド構文:実行するコマンド構文を指定
使用例
nohup /testbin/sleep &
→ログアウト後も処理を続ける(末尾に&を付けたのでバックグラウンドジョブとして実行:シェルを占有しない)
screenコマンド
書式
screen【オプション】
概要
スクリーンによる操作を管理
主なオプション
-ls
→起動中のスクリーン一覧を表示
-r PID
→指定したスクリーンに再接続(アタッチ)
主なキー操作
・スクリーン接続中、Ctrl + a を押した後に以下のキーを押すと、スクリーン操作が可能
d→スクリーンを切断(デタッチ)
\→スクリーンを終了
使用例
screen
→新しいスクリーンが表示される
screen -r 2497
→PID2497のスクリーンにアタッチ(再接続)
tmuxコマンド
書式
tmux【サブコマンド】
概要
端末を多重化してセッション管理
主なサブコマンド
attach-session
→セッションに接続
list-sessions
→セッションの一覧を表示
kill-session
→セッションを終了
主なキー操作
・セッション接続中、Ctrl + b を押した後に以下のキーを押すと、セッション操作が可能
d→セッションを切断(デタッチ)
?→キー操作の一覧を表示
使用例
tmux
→新規セッションを生成
tmux attach-session
→セッションに接続
killコマンド
書式
kill【オプション】PID/%ジョブ番号
概要
指定したプロセスもしくはジョブにシグナルを送信
主なオプション
-シグナル名/-シグナル番号
-s シグナル名/-s シグナル番号
→送信するシグナルを指定(既定は15/SIGTERM)
-l
→シグナルの一覧を表示
主なシグナル
1:HUP:再起動
2:INT:割り込み( Ctrl + c )
9:KILL:強制終了
15:TERM:終了(既定)
18:CONT:一時停止のプロセスを再開
19:STOP:一時停止
20:TSTP:サスペンド( Ctrl + z )
引数
・PID:シグナルを送信するプロセスのIDを指定
・ジョブ番号:シグナルを送信するジョブの番号を指定
使用例
kill -9 %1
→ジョブ番号1のプロセスを強制終了
kill -s kill 2586
→PIDを指定してプロセスを強制終了
killallコマンド
書式
killall【オプション】名前
概要
指定した名前のプロセスにシグナルを送信
主なオプション
-シグナル名/-シグナル番号
-s シグナル名/-s シグナル番号
→送信するシグナルを指定(既定は15/SIGTERM)
-l
→シグナルの一覧を表示
引数
・名前:シグナルを送信するプロセスの名前を指定
pkillコマンド
書式
pkill【オプション】キーワード
概要
指定したキーワードに一致するプロセスにシグナルを送信
主なオプション
-シグナル名/-シグナル番号
→送信するシグナルを指定(既定は15/SIGTERM)
-l
→シグナルの一覧を表示
引数
・キーワード:指定したキーワードによりプロセスを検索して送信
1.01.5 デスクトップ環境の利用(重要度1)
X Window Systemと統合デスクトップ環境
X Window System(X)
LinuxでGUI環境を実装するのに、古くから利用されている
X環境を構成するソフトウェア
ウィンドウマネージャー:ウィンドウの表示や制御をする。Mutter、KWin、twmなどがある
ディスプレイマネージャー:ユーザーにGUI環境のログインを提供する、initやsystemdによりディスプレイマネージャーサービスが起動される、デスクトップ環境を準備する。GDM、KDM、XDMなどがある
統合デスクトップ環境
GUI環境とアプリケーションをまとめて統一的な操作を提供する仕組み
GNOMEとKDEで利用される規定のソフトウェア
統合デスクトップ環境:ウィンドウマネージャー:ディスプレイマネージャー
GNOME:Mutter:GDM
KDE:KWin:KDM
startxコマンド
書式
startx
概要
Xを起動するためのスクリプトを実行
DISPLAY変数
変数の値
[ホスト]:ディスプレイ番号[.モニター番号]
概要
GUIアプリケーションの出力先を指定。ホストが省略されると、ローカル端末上(Xアプリケーションの実行を指定した端末上)のディスプレイ番号のXサーバーが出力先となる。Xサーバーが1つしか存在しない場合は0。複数のモニターが接続されている場合、モニター番号で出力先のモニターを指定できる
使用例
Xserver# xhost +172.16.0.4
Xclient# DISPLAY=172.16.0.1:0
Xclient# export DISPLAY
Xclient# xeyes &
→Xクライアント上で実行したプログラム「xeyes」をXサーバーのディスプレイに表示
xauthコマンド
書式
xauth サブコマンド
概要
Xアプリケーション転送の際の認証処理を行う
主なサブコマンド
list
→認証に利用できる情報の表示
add
→認証情報の追加
remove
→認証情報の削除