101−1.Linuxのインストールと仮想マシン・コンテナの利用

システムの起動順序

  1. BIOS / UEFI
  2. Boot Loader
  3. Kernel

  4. SysVinit / Upstart / systemd
  5. SSH

ジョブ管理 fg, bg, jobs, &, Ctrl+Z 

1. 「表(座席)」は常に一人だけ

  • Linuxの操作画面(フォアグラウンド)は、一度に一つのプログラムしか座れません。
  • キーボード入力を受け取れるのは、この「表」にいるジョブだけです。

2. 「裏(棚)」には何人も置ける

  • バックグラウンドには複数のジョブを置けます。
  • & を付けて実行すれば、最初から「裏」で動かせます。
  • 実行中のものは Running、一時停止中のものは Stopped と表示されます。

3. 表と裏を入れ替える「3つの動作」

表で動かしているものを裏へ移動させ、別のものを表に呼ぶ手順は以下の通りです。

  1. Ctrl + Z : 今の作業を一時停止して、裏へ送る(座席を空ける)。
  2. bg : (必要なら)裏へ送った作業を、裏方のまま再開させる。
  3. fg %番号 : 裏にある別の作業を、**表(座席)**に呼び出す。

4. +- は「ショートカット」

  • + (カレント) : 最後に触ったジョブ。fg とだけ打てばこれが戻ります。
  • - (サブ) : その次に新しいジョブ。+ が終わると自動的に + に昇格します。

まとめの一覧表

操作・記号意味・役割
jobs現在の「表」以外のジョブ一覧を表示する
&コマンドの末尾に付け、最初から「裏」で実行する
Ctrl + Z表のジョブを「一時停止」して「裏」へ送る
fg裏のジョブを「表」に呼んで実行する
bg裏で「停止中」のジョブを、裏のまま「実行中」にする

jobs

現在バックグラウンドで動作しているジョブと一時停止中のジョブを表示するコマンド

Xサーバ

グラフィカルな画面(GUI)を表示・管理するためのソフトウェア

xauth  

Xサーバへの接続に使用される資格情報を表示したり、クライアント認証ファイルを編集する。xauthコマンドを直接叩くことで、認証情報の確認や編集ができます。

xauth add 192.168.1.8:0 MIT-MAGIC-COOKIE-1 a1b2c3d4e5f6…

操作コマンド
内容を表示xauth list
特定のディスプレイを追加xauth add <display_name> <protocol> <hex_key>
情報を削除xauth remove <display_name>
対話モードxauth (引数なしで実行)

xhost

ホスト単位でXサーバへのアクセスを許可する。主なコマンド操作。もっとも頻繁に使われるのは、許可の追加(+)と削除(-)です。

操作コマンド内容
許可を追加xhost +192.168.1.10指定したIPからの接続を許可する
すべて許可xhost +【危険】 全ネットワークからの接続を許可する
許可を削除xhost -192.168.1.10指定したホストをリストから外す
すべて拒否xhost -アクセス制御を有効にする(デフォルトに近い状態)
現在の状態xhost現在の許可リストを表示する

xeyes

目玉のグラフィックがマウスカーソルを追うプログラム。

startx

CUI環境(ランレベル3)で実行すると、X Window System(GUI環境)が起動。startx実行時の流れ。

xauth / xhost / xeyes との関係

これまでのコマンドをセットで考えると、流れがスムーズになります。

  1. startx で自分のPCにGUI環境を作る。
  2. その環境内で、外部からの接続を xhostxauth で制御する。
  3. 正しく設定できているか、xeyes を表示させて確認する。

DISPLAY

GUIアプリケーションを表示する先のXサーバを指定する環境変数。

形式: [Xサーバ]:ディスプレイ番号.スクリーン番号

DISPLAY=192.168.1.8:0.0 の読み解き方

この指定は、Xサーバー(実体)に対して「どの窓口に届けるか」を教えています。

  1. 192.168.1.8:
    • ネットワーク上の住所。 Xサーバーが動いているPCのIPアドレスです。
  2. :0 (1つ目の数字):
    • ディスプレイ番号。 1台のPCで複数のXサーバー(実体)を動かせるため、何番目のサーバーかを指定します。通常は 0 です。
    • 内部的には 「ポート番号 6000 + この数字」(例:6000番)で通信を受け付けています。
  3. .0 (2つ目の数字):
    • スクリーン番号。 1つのXサーバーが複数の物理モニターを管理している場合、そのうちの何枚目の画面に出すかを指定します。

$ DISPLAY=192.168.0.100:0.0
$ export DISPLAY

ディスプレイマネージャ

ユーザにGUI環境のログインを提供し、ログイン認証、ログイン後のデスクトップ環境の準備を行うプログラム

  • ユーザにGUI環境のログインを提供する
  • initやsystemdによりディスプレイマネージャーサービスが起動される
  • デスクトップ環境を準備する

統合デスクトップ環境

ディスプレイマネージャやウィンドウマネージャなどユーザが使用するGUI環境と、アプリケーションを統合したデスクトップ環境。代表的な統合デスクトップ環境に「GNOME」と「KDE」があります。

twm ウィンドウマネージャ

仮想化

Linuxにおける仮想化(Virtualization)は、1台の物理的なコンピューター(ホスト)の上で、実際の物理的な構成にとらわれずコンピュータリソースを、論理的に分割・統合して提供する技術。仮想化の対象となるコンピュータリソースにはサーバやOS、ストレージ、ネットワークなど。

仮想化の種類

仮想マシン(VM:Virtual Machine)

物理的なコンピューター(ハードウェア)のリソースをソフトウェアによって分割し、その上で独立して動作する「仮想的なコンピューター」の事。物理的な1台のマシンの中に、あたかも複数台のコンピューターが存在しているかのように振る舞わせることができる。

  • ネイティブ型(Type1)
    • 仕組み: 物理ハードウェア → ハイパーバイザー → 仮想マシン
    • メリット:  ホストOSを挟まないためリソースのロスが極めて少なく、ハードウェアの性能を最大限に引き出す。
    • デメリット:  試すには仮想化専用の物理マシンが必要。
    • 主なソフト: Xen、MicrosoftのHyper-V、VMwareのvSphere Hypervisorなど
  • ホスト型(Type2)
    • 仕組み:  物理ハードウェア → ホストOS → ハイパーバイザー → 仮想マシン
    • メリット:  普段使っているPCにソフトを入れるだけなので導入が非常に簡単です。
    • デメリット:  ホストOSを経由して動作するため、オーバーヘッド(無駄な負荷)が大きく、動作速度はネイティブ型に劣ります
    • 主なソフト:  Oracle VM VirtualBox、VMware Workstation Playerなど。

仮想マシンがコンテナより優れている点
・1つのホスト環境で複数のOSを共存できる
・物理マシンから構成を移行しやすい 
  ー>ハイパーバイザを通じてハードウェアをエミュレート(模倣、再現)する

コンテナ (Container)

ホストOSの「カーネル(OSの中核)」を共有し、アプリケーションの実行に必要なファイルだけを隔離した箱(コンテナ)に詰めるイメージです。

  • メリット
    • 圧倒的な起動の速さ: ホストOSの機能をそのまま使うため
    • 軽量でリソース消費が少ない: 実行に必要なライブラリと設定ファイルだけ。非常にコンパクト。
    • どこでも動く」ポータビリティ(搬送性): アプリ本体とそれが動くための環境を一つにパッケージ化できることです。
    • 構成管理の自動化(コードによる管理):コンテナの設定は「Dockerfile」などのテキストファイルで記述
  • デメリット
    • セキュリティの隔離レベルが(相対的に)低い:ホストOSの「カーネル」を共有しているため。
    • ホストOSと異なるOSは動かせない:Linux上でWindowsコンテナを動かすのは難しい。
    • データの永続化に工夫が必要:コンテナは本来「使い捨て」を前提とした設計

コンテナの作成、実行、管理を行う基本的なソフトウェアには、LXC、Dockerなどがあります。

用語覚えるべきキーワード
namespaces隔離(ホスト名、PID、ネットワークなどを分ける)
cgroups制限(CPUやメモリのリソースを割り当てる)
LXCシステムコンテナ、OS丸ごとの隔離
Dockerアプリコンテナ、イメージ管理、ポータビリティ
Kubernetesオーケストレーション、大規模運用の自動化
  • LXC: 仮想マシンに近い。OSを丸ごと仮想化するイメージ。
  • Docker: プロセスを隔離する。アプリケーションの配布に特化している。
  • cgroups / namespaces: どちらのコンテナ技術も、Linuxカーネルのこれらの機能(リソース制限と名前空間の隔離)を利用して実現されています。

Linuxでの仮想化

  • KVM(Kernel-based Virtual Machine)
    • Linuxに標準搭載されている仮想化ソリューション
    • 仮想化の種類としては通常Type1
    • 仮想化支援機能を搭載したCPUが必要 (Intel VTやAMD-V)

libvirt と virsh

  • libvirt: KVM、QEMU、Xenなど、異なる種類のハイパーバイザーを共通のやり方で操作するための共通ライブラリ(API)です。
  • virsh: この libvirt を介して、コマンドラインから仮想マシンを操作するためのフロントエンドツールです。

一般的な Linux システムの起動順序: BIOS/UEFI → ブートローダ → カーネル → init

BIOS / UEFI

  BIOS (Basic Input Output System)

    ・ 電源起動時、記憶装置(HDD)等の機器に関して最低限の認識を行う
    ・ 基本的なハードウェアの制御。起動デバイスの順序を設定
    ・ 起動する順にデバイスの先頭セクタにあるMBRを読み込み、ブートローダをロードし制御を移す。

  UEFI (Unified Extensible Firmware Interface)

    ・ 基本的なハードウェアの制御を行う。起動時間と再開時間が短縮される。
    ・ CPUに依存しないアーキテクチャとドライバを提供する。セキュリティ機能強化。
    ・ 3TB以上のHDDからの起動をサポートする
    ・ 最初にアクセスされる領域であるESPは /boot/efi にマウントされる
    ・ ブートローダをロードし制御を移す。

Boot Loader

   記憶装置(HDD)内のカーネルをロードし、制御を移す
   Linuxの代表的なブートローダ: LILO と GRUB

Kernel

   メモリーの初期化、システムクロックの設定
   仮のルートファイルシステム(initramfs:初期RAMディスク)をマウント
   RAMディスクに組み込まれたデバイスドライバーを使ってデバイスへアクセス
   ルートファイルシステムのマウント。カーネルと初期RAMディスク(initramfs)の内容をメモリ上に展開
   init / systemdを実行
   コマンド
    dmesg    Linuxカーネルが起動時に出力したメッセージを表示
    ・ dmesg –clear   バッファーをクリアする
    ・ dmesg -k     メッセージを表示する
   modprobe  依存関係を解決してモジュールをカーネルに組み込んだり、取り外したりします。
   modprobeの設定ファイル  /etc/modprobe.d/myconfig.conf 

options各カーネルモジュールのデフォルトパラメータを指定する
aliasカーネルモジュールに別名をつける
install特定のカーネルモジュールのロード時に実行されるコマンドを指定する
remove特定のカーネルモジュールのアンロード時に実行されるコマンドを指定する
blacklistロードしたくないカーネルモジュールを指定する

   lsmod    Linuxカーネルのモジュールリストを表示するコマンド
   init / telinit  プロセス制御・ランレベルを変更するコマンド

 

SysVinit / Upstart / systemd

   SysVinit  順次実行型。起動に時間がかかる
   Upstart  イベント駆動型。並列起動可。
   systemd  ユニット単位で処理。並列起動可。

SysVinit

   プロセスをPIDによって管理。 順次実行型。起動に時間がかかる
   最初に起動されるプロセスは init 
    ・ /etc/inittab を読み込み、順に実行
        ・システム初期化スクリプトを実行 ー> /etc/rc.sysinitスクリプト
        ・ /etc/rcスクリプトを実行する
        ・ /etc/rc(ランレベル).d  ディレクトリ配下のスクリプトを実行する
    ・スクリプトのファイル名
       例)K01smartd
         1文字目:S(Start: サービスを起動)、K(Kill: サービスを停止)
         数字:実行優先順位。若番のものが先に実行される
         サービス名:任意の名前をつける
    ・ランレベル

ランレベル内容
0システム停止 
1(s/S)シングルユーザモード
2マルチユーザモード(ネット接続無し)
3マルチユーザモード(ネット接続有り)
4(マルチユーザモード)
5マルチユーザモード
6システム再起動

     デフォルトランレベルの設定
      ・ /etc/inittab に記述。
      ・ 設定を変更したい時はこれを書き換える

    ・ランレベル関係コマンド

      説明  コマンド
一つ前と現在のランレベルを表示 runlevel
 runlevel -> N 3 
ランレベルの切り替え init / telinit
 init 4 telinit 5
システムを再起動させずに即座に反映させる init / telinit
 init q telinit q

    ・telinit  telinit [ランレベル]
       SysVinit を採用している Linux システムにおいて、ランレベル(システムの動作状態)
       を変更するために使用されるコマンド

Upstart

   SysVinitの改良番。SysVinitと同様初めにinitプロセスが実行
   プロセスを並列で起動できる。起動時間を短縮できる
   /etc/event.d or /etc/init にジョブ定義ファイルがある。
   イベント駆動型。initデーモンがイベントを検知すると、イベントに対応するジョブを実行
    ・ initプロセス開始
    ・ 各ジョブが待機状態になる(指定されたイベントの実行を待つ)
    ・ システム起動イベントが発行される
    ・ イベントに対応したジョブが、並列で実行される。

systemd

   Upstartと同じく、各プロセス(ユニット)を並列起動する仕組
   systemdはUpstartと比べて
    ・ より無駄を減らして高速起動を可能
    ・ SysVinitからの移行に便利な互換モードがある
    ・ システム管理の共通化(異なるディストリビューションでも同様の操作が可能)
    ・ その他多数の追加機能

   cgroupsというLinuxカーネルの機能によってプロセスのリソースを管理
   以下のデーモンプロセスが連携して動作

種類意味
systemdsystemdの本体となるプロセス。
systemd-journald各サービスが出力するログを扱う
systemd-logindシステムへのログイン、起動停止、電源などを管理
systemd-udevdudevの代わり。デバイスの動的変更検出

/etc/lib の役割の違い

Linuxのシステム管理において、設定ファイルの置き場所には明確なルールがあります。

ディレクトリ役割性質ファイル
/etc/systemd/system/  管理者用  手動で設定した内容や、パッケージの
挙動を上書きするために使う。最優先される。
/lib/systemd/system/
シンボリックリンク
/lib/systemd/system/システム用OSインストール時やパッケージ(apt/dnf等)によって
配置されるデフォルト設定。
ファイルそのもの。オリジナル

default.target : システムがどの状態で起動する規定するファイル。

systemd は起動時、default.target を以下の順番でファイルを探します。

  1. /etc/systemd/system/default.target (もしあれば、これを最優先で採用)
  2. /run/systemd/system/default.target (実行時に生成される一時的なもの)
  3. /lib/systemd/system/default.target (上記がなければ、標準設定を採用)

例えば、システムのデフォルトを「グラフィカルモード(GUI)」に設定している場合、

  • 実体(大元): /lib/systemd/system/graphical.target
  • リンク(設定): /etc/systemd/system/default.target/lib/systemd/system/graphical.target を指している
  • /etc/systemd/system/default.target が存在するのでこのファイルが読み込まれる。

systemctl set-default multi-user.target を実行すると、システムは /etc/systemd/system/default.target の参照先を multi-user.target に書き換えます。システム起動時前回と同じ、/etc/systemd/system/default.target を読み込みますが、ターゲットはmulti-userになっています。

なぜこの構造なのか?

  • 安全: アップデートで /lib 内のファイルが更新されても、ユーザーが /etc に書いたカスタム設定は消えずに残ります。
       かつ /lib にあるOS標準の定義を汚さない。
  • 復旧: /etc 内のリンクやファイルを削除すれば、即座に /lib にあるOS標準の挙動に戻すことができます。

システム起動のための処理をUnitと言う単位で管理

種類意味
target複数のユニットをグループ化する時に使用する
serviceプロセスの開始・停止・自動起動といった管理を行う
devicesystemdで管理するデバイスを定義する
mountファイルシステムのマウントを行う
automount自動的にマウントされるマウントポイントを定義する
socket特定のソケットをListen(監視)する
swapスワップ領域を有効にする
path指定のファイルが作成されると、指定されたサービスを起動する
timer対応するserviceユニットの実行を管理する。cron の代替機能。

   実行順序
    ・ systemdプロセス開始
    ・default.targetを処理(/etc/systemd/system/default.target:graphical.targetのシンボリックリンク)
    ・リンク先のtargetを解析(/etc/systemd/system/graphical.targetなど)
    ・解析結果により、必要なサービスを起動する(依存関係順に従いながら並列に)
   default.targetの対象。/lib/systemd/system 配下に格納
    systemctlのサブコマンド「start」に、システムの再起動や停止などを実行する特定のターゲット
    (例:reboot.target、poweroff.target等)を指定すると、結果的にシステムの再起動や停止が行われます。

ランレベルターゲットユニット詳細
runlevel0.target , poweroff.targetシステムをシャットダウンし、電源を切る
runlevel1.target , rescue.targetレスキューシェル (シングルユーザーシステム)
2,3,4runlevel2.target , multi-user.target非グラフィカルなマルチユーザーシステム
runlevel5.target , graphical.targetグラフィカルなマルチユーザーシステム
runlevel6.target , reboot.targetシステムをシャットダウンして再起動

   サービスの管理
    ・ systemctlコマンドを使ってサービスを管理 systemctl サブコマンド [ Unit名 ]
    ・ サブコマンド一覧

 コマンド説明
 list-units-files 全てのユニットとその状態を表示する。
 start指定したユニットを起動する。
 stop指定したユニットを停止する。
 haltシステムを停止しhalt状態にする。
 reloadサービスの設定ファイルを再読み込みする。
 restartユニットを再起動する。
 rescueレスキューモードに移行する。
 is-active指定したユニットが起動しているか確認する。
 isolate他のUnitを停止ぢて対象のUnitを起動する。
 status指定したユニットの実行状況を表示する。
 enableサービス自動起動有効
 disableサービス自動起動無効
 get-default 次回起動時のターゲットを表示する。
 set-default次回起動時のターゲットを設定する。
 poweroffシステムを停止し電源を遮断する。
 rebootシステムを再起動する。

systemctl isolate コマンドは、引数にターゲット名をとり、そのターゲット以外のユニット、ターゲットを停止し、
         指定したターゲットを実行出来る

# systemctl rescue 作業が終わったので通常の起動状態に戻したい
systemctl reboot コマンドを実行する/ Ctrl-Dを入力する/ systemctl default コマンドを実行する

Command

shutdown [オプション] [時間] [メッセージ]

オプション役割備考
  -h   システムを停止 (halt) または電源を切る最も一般的。--poweroff と同等。
  -rシステムを再起動 (reboot) するtelinit 6 に相当。
  -k警告メッセージのみを送信する実際にはシャットダウンしない(「ふり」をする)。
  -c実行予定のシャットダウンをキャンセルする時間指定で待機中の時に使用。
  -f次回起動時のファイルシステムチェック
をスキップ
(Fast boot) 近年のシステムでは無視されることも多い。

shutdown コマンドにおいて、時間の指定は必須(またはデフォルト値がある)です。

  • now: 直ちに実行します。
  • +10: 今から10分後に実行します。
  • 18:30: 本日の18時30分に実行します。

halt システムはすべてのプロセスを終了し、CPUを停止

オプション役割
  -p   システム停止後、電源を切る(Power off)。多くの環境でデフォルトの挙動です。
  -f強制停止。通常行うべきシャットダウンプロセス(サービスの停止やログの書き込み等)
を飛ばして、直ちに停止させます。
  -w実際には停止せず、/var/log/wtmp への終了ログの書き込みだけを行います。

poweroff  システムの電源を完全に切るためのコマンド 

オプション役割
  -f強制電源オフ。シャットダウン処理(サービスの終了等)を行わず、即座に電源を切ります。
  -w実際には電源を切らず、終了ログ(/var/log/wtmp)の書き込みだけを行います。
  -d終了ログ(wtmp)への書き込みを抑制します。

reboot  システムを再起動させるためのコマンド。

オプション役割
  -f   強制再起動。通常のシャットダウンプロセス(サービスの停止等)
を完全に飛ばして、即座に再起動します。
  -pシステム停止後、再起動ではなく電源を切る(poweroff)。
  -w実際には再起動せず、終了ログ(/var/log/wtmp)の書き込みだけを行います。

その他

   /dev 
    ・ デバイスにアクセスするために使用する仮想ファイルの格納場所

   udev
    ・ Linuxカーネル用のデバイス管理ツール
    ・ /dev ディレクトリにあるデバイスノードの管理
    ・ライブラリ「libudev」とデーモン「udevd」、そして管理コマンド「udevadm」などからなります
    ・udevdデーモンがカーネルの内部情報を監視、
    ・カーネルが新しいデバイスを検知し、そのデバイスに応じて適切なデバイスファイルを動的に作成。
    ・udevの挙動は、/etc/udev/rules.d/ディレクトリ配下の.rulesで終わるファイル内に記述されている


   汎用のクラスドライバ

デバイスクラス対応する機器
HID (Human Interface Device)キーボード、マウス、ジョイスティック
マスストレージデバイス (Mass Storage Class)USBメモリ、HDDなど
オーディオ (Audio Class)マイク、スピーカーなど
コミュニケーション (ACM Communication Device Class)モデム、Ethernetアダプタなど
ワイヤレスコントローラーWi-Fiアダプタ、Bluetoothアダプタなど

    /proc
     システムをコントロールするために使われる。システムのさまざまな情報がここに格納されている
     メモリの中に作られるファイルシステム。「仮想ファイル」

ファイル名説明
/proc/cpuinfoCPU情報
/proc/interruptsIRQ情報
/proc/meminfoメモリの情報
/proc/ioportsI/Oポートの情報
/proc/bus/usb/devicesUSBデバイス情報
/proc/bus/pci/devicesPCIデバイス情報
/proc/scsi/scsiSCSIデバイス情報

    /var/log
     syslogをはじめ様々なログファイルが格納
      ・/var/log/messages …   システムで動作する各種アプリケーションのログ。
                   Ubuntuなど一部のディストリビューションでは「/var/log/syslog」
      ・/var/log/boot.log …    OS起動時のログ
      ・/var/log/secure …    認証に関するログ

   D-Bus(Desktop Bus)  プログラム同士が情報を伝達するプロセス間通信機構のひとつ
   大容量記憶装置の特徴
    ・容量あたりのコストパフォーマンスが高いのはHDDである
    ・SSDとUSBフラッシュドライブは、HDDのような機械的な故障が起きない
    ・SSDはSATAインターフェース以上の速度でアクセスできる
    ・OSの起動ディスクとして使用できる

   shutdown [オプション] 時間 [メッセージ]  ー> Linuxの終了
   wall [オプション]   ー> ログインしている全てのユーザーに一斉にメッセージを送信

— SSH ———————————

SSH(Secure SHell)とは、暗号化を用いたリモートホストの遠隔操作用のプロトコルです。
SSHでは通信内容が暗号化されますが、同じ遠隔操作用のプロトコルであるTELNETでは通信内容が暗号化されない。

認証の順番

ホスト認証の後ユーザー認証を行う。「ホスト認証」を先に行うことで、まず「接続先が信頼できる本物のサーバーであること」を確認し、安全な暗号化通路を確立する。その安全な通路の中を通って、初めて自分の大事なパスワードや鍵(ユーザー認証情報)を送信する

・ホスト認証

ホスト認証は、SSHクライアントが接続先のリモートホスト(SSHサーバ)が正しいホストかどうかを確認するために行う。
認証の具体的な流れ

  1. 鍵の提示: クライアントがサーバーに接続すると、サーバーは自分の「ホスト公開鍵」をクライアントに送ります。
  2. 初回接続時:
    • クライアントの known_hosts にそのサーバーの情報がない場合、画面に「このホストは未知ですが、信頼しますか?」という警告(Fingerprintの表示)が出ます。
    • yes と答えると、その公開鍵が known_hosts に保存されます。
  3. 2回目以降:
    • クライアントは、サーバーから送られてきた公開鍵が、手元の known_hosts に保存されているものと一致するか自動で照合します。
    • 一致すれば、そのままユーザー認証へと進みます。

・ユーザ認証

パスワード方式…ローカルでのログインと同様に、接続ユーザのID/パスワードで認証する
公開鍵方式…公開鍵と秘密鍵の組み合わせで認証する。パスワードを使用せず、鍵を持つ者がログインできる

認証手順

  • 前準備
    • サーバ側に自分のアカウントを作製
    • クライアントで公開鍵と秘密鍵を作成
      • ssh-keygen で鍵を作る。
    • 公開鍵の方をSSHサーバの「~/.ssh/authorized_keys」(自分のアカウントのホームディレクトリ)に登録。
      • ssh-keygen で鍵を作る。
  • サーバがSSH接続を受け付けた時 (ssh コマンドでログインする時)
    • 登録されている公開鍵とユーザの秘密鍵のペアが一致するかどうかを確認
    • 一致すればランダムなデータをその公開鍵で生成しクライアントに送る。
    • クライアントは、自分の手元にある「秘密鍵」を使って、送られてきたデータのロックを解除します。中身を取り出し、証明データ(署名)を作ってサーバーに送り返す。
    • サーバーは送られてきた回答を検証します。最終判断を下す。

OpenSSHのファイル

以下はOpenSSHに関する主なファイルです。

秘密鍵/公開鍵の「rsa」の部分は、鍵生成時に指定した暗号化方式を示しています。

LinuC試験でよく出るオプション

試験対策としては、以下のオプションをセットで覚えておくと役立ちます。

  • -t (type): 鍵の種類を指定(rsa, ed25519 など)。
  • -b (bits): 鍵の長さを指定(RSAなら2048以上、推奨は4096)。
  • -f (file): 出力するファイル名を指定。
  • -C (comment): 鍵にコメント(メールアドレスなど)を付ける。
  • -p (passphrase): 秘密鍵のパスフレーズを変更する。

SSH接続

書式: ssh [オプション] [SSH接続ユーザ名@]SSHサーバアドレス
※「SSH接続ユーザ名@」を省略した場合は、実行しているユーザ名をSSH接続ユーザ名として接続する

オプション詳細・用途
-p [ポート番号]接続ポートを指定。 デフォルト(22番)以外で待ち受けているサーバーに繋ぐ際に必須。(例: -p 2222
-i [秘密鍵ファイル]   使用する秘密鍵を指定。 標準の ~/.ssh/id_rsa 等とは別の鍵を使いたい時に使用。(例: -i ~/.ssh/my_key
-l [ユーザー名]ログインユーザー名を指定。 ユーザー名@ と書く代わりに使用できます。(例: -l hiroki
-vデバッグ情報を表示。 接続できない時に「どこで止まっているか」を確認する。(-vv, -vvv と増やすとより詳細に)
-X / -YX11転送。 サーバー上のGUIプログラム(ブラウザ等)の手元の画面に表示させる。(-Y の方がより信頼済みとして転送)
-fバックグラウンド実行。 コマンド実行後にSSHを背後で動かし続けたい時に便利。
-Nコマンドを実行しない。 ポートフォワーディング(トンネル作成)だけを行いたい時に使用。

SSH接続の切断

SSHサーバからログアウトするにはexitコマンドかlogoutコマンドで切断します。また、Ctrl+D(CtrlキーとDを同時に押す)

ps

現在実行中のプロセスを確認する

形式: ps [オプション]

fg

バックグラウンドで動作中または一時停止中のジョブを、フォアグラウンド動作に切り替える

形式: fg [ジョブ番号]

ジョブ番号を引数に指定しない場合は、カレントジョブ(直前にバックグラウンドで実行されたジョブ、または直前に一時停止されたジョブ)がフォアグラウンドに変更されます。

jobs

現在バックグラウンドで動作しているジョブと一時停止中のジョブを表示するコマンド

top

メモリやスワップ領域の使用状況を表示する。

uptime

現在のシステムの負荷平均を表示する。

kill

プロセスにシグナルを送ることでプロセスを終了させたり、再起動させることができます。
プロセスID(PID)を使用してプロセスにシグナルを送るにはkillコマンドを利用します。

killコマンドでシグナルを指定しない場合は、デフォルトでTERM(SIGTERM)が使用

pkill

プロセスを終了する。部分的な名前の一致に基づいてプロセスを終了する場合に特に役立ちます。

形式: pkill [-シグナル名または-シグナル番号] プロセス名(コマンド名)
    pkill –signal [-シグナル名または-シグナル番号] プロセス名(コマンド名)

HUPシグナルは、デーモンプログラムによっては、プログラムの設定ファイルを変更した後その設定ファイルをプロセスに再度読み込ませて設定を反映させる為に用いられます。

killall

プロセスを終了させることができるコマンド。 ”プロセスの名前”を指定することができる。

書式:killall [-シグナル名または-シグナル番号] プロセス名(コマンド名)
   killall -s [シグナル名またはシグナル番号] プロセス名(コマンド名)

オプション説明
-sプロセスに送るシグナル名または番号。-シグナル名、-番号でも指定可能
-u指定したユーザーのプロセスにだけシグナルを送る
-g指定したプロセスが所属しているグループにシグナルを送る
-y 時間指定時間より新しいプロセスにシグナルを送る
-o 時間指定時刻より古いプロセスにシグナルを送る
シグナル名シグナル番号説明
HUP(SIGHUP)ハングアップ(端末が制御不能もしくは切断による終了)
INT(SIGINT)キーボードからの割り込み(Ctrl+Cと同じ)
KILL(SIGKILL)強制終了(デフォルトよりも強制的に修正する)
TERM(SIGTERM)15クリーンアップして終了(デフォルトの設定だ)
CONT(SIGCONT)18一時停止のプロセスを再開
STOP(SIGSTOP)19一時停止
TSTP(SIGTSTP)20端末から入力された一時停止(Ctrl+Zキーと同じ)

使用例

ffmpegへ”ctrl−z”(終了)を送る。 killall 2 ffmpeg  / killall -s INT ffmpeg1

これらは「シグナルを送る」という目的で最も使われます。

  • kill: プロセスID (PID) を指定して送る。最も確実ですが、事前に pstop で番号を調べる必要があります。
  • pkill: プロセス名の一部を指定して送る。正規表現なども使えて便利です。
  • killall: **プロセス名(完全一致)**を指定して送る。同じ名前のプロセスが複数ある場合に一斉に送れます。

pgrep

特定の条件に一致するプロセスを検索し、そのプロセス ID (PID) を表示

書式: pgrep [オプション]

オプション説明
-g, --pgroup <PGID,...>指定されたプロセスグループ ID をマッチングする
-U, --uid <ID,...>指定された実ユーザー ID でマッチングする
-u, --euid <ID,...>指定された有効ユーザー ID でマッチングする
-G, --group <GID,...>指定された実グループ ID をマッチングする
-P, --parent <PPID,...>指定された親プロセスの子プロセスのみをマッチングする
-s, --session <SID,...>指定されたセッション ID をマッチングする
-t, --terminal <tty,...>指定されたターミナルでマッチングする
-x, --exact指定されたコマンド名と正確に一致させてマッチングする
-r, --runstates <state>指定された実行状態 [D,S,Z,…] をマッチングする
--ns <PID>指定された PID と同じ名前空間に属するプロセスをマッチングする
-v, --inverseマッチング条件にマッチしない一覧を表示する
-f, --full完全なプロセス名を使用してマッチングする
-i, --ignore-case大文字小文字を区別せずにマッチングする
-n, --newest最も最近開始されたプロセスを選択する
-o, --oldest最も古く開始されたプロセスを選択する

grep

正規表現のパターンにマッチする文字列を含む行を抽出する。

screen

仮想的な端末(ターミナル)を、現在の接続から切り離して裏で動かし続けられるツール。ログアウトしたり、ネットワークが切れたりしても、プログラムが死なない。以下のことが可能になります。

  • デタッチ (Detach): 作業中の画面を、そのまま「裏側」に放り込む。
  • アタッチ (Attach): 後で(あるいは別のPCから)その画面を「手元」に呼び戻す。

画面を分割する基本操作。screen を起動している状態で、以下のキー操作(エスケープコマンド)を使います。

操作キー入力説明
上下に分割Ctrl + A のあと S (大文字)画面を水平に2つに分ける
左右に分割Ctrl + A のあと **``** (縦棒)
領域の移動Ctrl + A のあと Tab分割された次の領域にカーソルを移す
領域を閉じるCtrl + A のあと X (大文字)現在カーソルがある領域を閉じる

分割先で作業を始める手順:

  1. Ctrl + ATab で空の領域に移動する。
  2. Ctrl + AC (Create) を押して、新しいウィンドウ(シェル)を作成する。
    • これで、分割された画面でコマンドが打てるようになります。

がよく問われます。

  • screen -ls:現在裏で動いているセッションの一覧を表示する。
  • screen -r [番号]:複数のセッションがある場合、番号を指定して戻る。
  • Ctrl + AD:デタッチのキー操作。