gabuLog

趣味と考え事をつらつらと

オンラインマニュアル

概要

Linuxでは用途に応じて様々なコマンドを実行する必要があるのだが、コマンドの数とそれに付随するオプションの数が多く「あれ、ファイル移動するmvコマンドなんだけど、どう使うんだっけ?」と迷う時がある。

コマンドの使い方を調べるために、manコマンドが用意されている。

manコマンド

man [オプション] [章番号] コマンド名 | ファイル名等

 

manコマンド実行後、表示例

mvコマンドの実行例

manコマンド実行する際のオプション一覧

manコマンドのオプションと説明
オプション 説明
-f 指定されたキーワードに一致するものがマニュアルの何章に記載されているのかを表示
-k 指定されたキーワードが含まれるものがマニュアルの何章に記載されているのかを表示

 

マニュアルページは基本的に長く画面内に収まりきらない場合が多い。その時はキー操作を用いてマニュアルページをスクロールしたり、ヘルプを表示したりする。

manコマンドのキー操作
キー 説明
Space 次ページを表示
Enter 次行を表示
b 前のページを表示
h ヘルプを表示
q manコマンドの終了
/ 文字列 文字列を検索

 

また、オンラインマニュアルは項目が多いため、章(セクション)に分類される。

オンラインマニュアルのセクションと説明
セクション 説明
1 ユーザプログラム
2 システムコール
3 ライブラリ
4 バイスファイル
5 ファイルフォーマット
6 ゲーム
7 その他
8 システム管理コマンド

 

まとめ

コマンドの種類とオプションが多くわからなくなる事は多々あります。

また、コマンドは一度実行すると確認画面など無くそのまま実行されることもあります。

後戻りできなくなる前に積極的にmanコマンドを実行してコマンドの確認をするクセをつけ

コマンドプロンプトでの表示内容

ディレクトリと作業位置について

ファイルシステム上でディレクトリやファイルを操作し、管理する方法と管理のためのコマンドを見ていこう。

その前にディレクトリには種類がある。Linuxシステムで作業する際に、利用者は必ずどこかの場所(ディレクトリ)で作業を行うことになる。

作業を行っているディレクトリをカレントディレクトリ(current directory)と呼ぶ。

ディレクトリ位置

ディレクトリ位置

ディレクトリの移動

cd [ディレクトリ]

cdコマンドディレクトリを移動する時に使用。

ディレクトリは絶対パスもしくは相対パスで指定する。

絶対パス

例:/home/user/DeskTop

絶対パスはルートディレクトリを起点として、目的のディレクトリまでの経路を全て記載する。

相対パス

例:../bin

相対パスはカレントディレクトリを起点として、目的の経路を表記する。

※カレントディレクトリをuserとし、binディレクトリを指定する場合

操作するときに使える記号

cdコマンドを実行する時に、ディレクトリ名を指定する以外に記号を用いてディレクトリの場所を指定することもできる。

ディレクトリに関する記号
記号 説明
/ (ルート) ルートディレクトリの意味。
~ (チルダ) ホームディレクトリの意味。実行ユーザの作業用ディレクトリ。
. (ドット) カレントディレクトリの意味。実行ユーザが作業を行っているディレクトリ。
.. (ドットドット) ディレクトリ。作業しているディレクトリを起点として1つ上の階層にあるディレクトリ。

cd /

どの場所で作業していてもルートディレクトリに移動。

cd ~

どの場所で作業していてもホームディレクトリに移動。

cd .

作業しているディレクトリに移動。

※なので、ディレクトリの移動はせずにそのまま。

cd ..

作業しているディレクトリの一つ上の階層に移動。

※/home/userで作業している場合、/homeに移動。

ディレクトリパスの表示

pwd

pwdコマンドは作業ディレクトリを絶対パスで表示する。

pwdコマンドの実行例

pwdコマンドの実行例

ファイルやディレクトリ情報の表示

ls [オプション] [ディレクトリorファイル名]

lsコマンドは、ファイルやディレクトリの情報を一覧で表示する。

ディレクトリ名を指定しない場合はカレントディレクトリの一覧を表示する。

 

lsコマンドのオプション一覧
オプション 説明
-F

ファイルタイプを表す記号の表示。

[/]はルートディレクトリ。[*]は実行可能ファイル。[@]はシンボリックリンク

-a 隠しファイルを含む全てのファイルを表示。
-l

詳細な情報を含めて表示。

権限、ユーザ、グループ、サイズ、作成日時

-d ディレクトリの内容ではなく、ディレクトリ自身の情報を表示。

lsコマンドの実行例

lsコマンドの実行例

まとめ

ディレクトリを移動して今いる場所がわからなくなる時は多々あります。

また、権限情報やディレクトリなのかファイルなのかもわからなくなることもあります。

そういった際によく用いるコマンドなので覚えてすぐ使えるようにしよう。

Linuxのディレクトリ構造

Linuxディレクトリ構造

Linuxディレクトリ構造はFHS(Filesystem Hierarchy Standard)と言う標準を定めた仕様書がある。多くのLinuxディストリビューションはFHSに従ってディレクトリとファイルを配置している。

FHS(Filesystem Hierarchy Standard)

FHSはルート(/)を起点をした単一のツリー構造であり、ルート以下に目的に応じたディレクトリ階層が配置される。

FHSではディレクトリ名、各ディレクトリの役割、格納するファイルの種類、コマンドのは位置についても記載されている。

FHSでは共有可(shareable)もしくは可変(unshareable)、静的(static)もしくは動的(variable)かにより配置するディレクトリを振り分ける。

ファイルの分類と説明
分類 説明
共有可能 ネットワークを介して共有できるファイル 例)ユーティリティ、ライブラリなど
共有不可 ネットワークを介して共有できないファイル 例)ロックファイルなど
静的 システム管理者の操作以外では変更されないファイル 例)バイナリコマンド、ライブラリ、ドキュメンドなど
可変 システム稼働中に変更されるファイル 例)ログファイル、ログインユーザ情報のファイル、ロックファイルなど

 

ディレクトリ名とその役割

SHFに従ってLinuxディレクトリ構造が構成されており、各ディレクトリ名とその役割が決まっている。

こうしたディレクトリやファイルの位置を示す情報のことをパス(path)という。

ディレクトリと役割
ディレクト 役割
/ システムファイルの頂点にあたるディレクト
/bin 一般ユーザ、管理者が使用するコマンドが配置
/dev バイスファイルを配置 システム起動時に接続されているデバイスがチェックされ、自動的に作成される
/etc システム管理用の設定ファイルや、各種ソフトウェアの設定ファイルが配置
/lib /binや/sbinなどに置かれたコマンドやプログラムが利用するライブラリが配置
/lib/module カーネルモジュールが配置
/media CD/DVDなどのデータが配置
/opt Linuxインストール後、追加でインストールしたパッケージ(ソフトウェア)が配置
/proc カーネルやプロセスが保持する情報を配置 オプションによって一般ユーザも使用可能
/root rootユーザのホームディレクト
/sbin 主にシステム管理者が使用するコマンドが配置 オプションによって一般ユーザも使用可能
/tmp アプリケーションやユーザが利用する一時ファイルが配置
/var システム運用中にサイズが変更するファイルが配置
/var/log システムやアプリケーションのログファイルが配置
/boot システム起動時に必要なブートローダ関連のファイルや、カーネルイメージが配置
/usr ユーザが共有するデータが配置。ユーティリティ、ライブラリ、コマンドなどが配置
/usr/bin 一般ユーザ、管理者が使用するコマンドが配置
/usr/lib 各種コマンドが利用するライブラリが配置
/usr/sbin システム管理者飲みが実行できるコマンドが配置
/home ユーザのホームディレクトリが配置

 

サービスの管理について

 

サービス管理の仕組み

システム起動時のシステムの設定やサービスの管理はsystemdが行う。

システムが起動したら、systemctlコマンドによりD-Bus(Desktop Bus)を通じてsystemdにメッセージを送信することでサービスの起動や停止を行っている。

systemctlによるサービスの管理

systemdはユニットでシステムの管理を行う。

ユニットは12種類存在する。

ユニットの種類と説明
ユニット 説明
service デーモンの起動・停止
socket サービス起動のためのソケットを受信
device サービス起動のためのデバイスを検知
mount ファイルシステムのマウント
automount ファイルシステムのオートマウント
swap スワップ領域の設定
target ユニットのグループ

サービスの起動・停止・状態確認するコマンド

systemctlコマンド

systemstl [サブコマンド] [サービス]

systemctlの主なサブコマンド
サブコマンド 説明
start ユニットの起動
restart ユニットの再起動
stop ユニットの停止
status ユニットの状態確認
enable ユニットをenable状態にする。これにより、システム起動時にユニットは自動で開始。
disable ユニットをdisable状態にする。これにより、システム起動時にユニットは自動で停止。
isolate ユニット及び依存関係にあるユニットを開始し、他のユニットを全て停止する。(稼働中のターゲットを変更する時に使用)
list-units アクティブな全てのユニットを表示する。

 

systemctlの主なサービス
サービス 説明
udisk2 ディスクの自動マウントサービス
gdm GDMディスプレイマネージャ
lightdm LightDmディスプレイマネージャ
NetworkManager NetworkManagerマネージャ
ssh SSHサービス
postfix Postfixサービス
http HTTPサービス

サービス設定ファイル

サービス設定ファイルは/usr/lib/systemにサービス名.serviceとして置かれている。

サービス設定ファイルのオプションにより、起動するサーバプログラムや停止のためのコマンドを指定している。

サービス設定ファイルのオプション
オプション 説明
ExecStart 起動するプログラムを必要な引数をつけて絶対パスで指定
ExecReload 設定ファイルの再読込をするコマンドを必要な引数をつけて絶対パスで指定
ExecStop ExecStartで指定したプログラムを停止するのに必要な引数をつけて絶対パスで指定

systemctlによって変更できない重要なサービス

systemdは立ち上げの段階で3つのサービスを開始する。

  • systemd-journald.service
  • systemd-udevd.service
  • systemd-logind.service

これらのサービスは状態(STATE)がstatic(静的)状態になっており、enable(有効)/disable(向こう)状態にできない。

system-udevd.serviceについて

バイスにアクセスするためのdev/ディレクトリ配下にある、デバイス用のファイルを動的に作成・削除するサービス。

system-udevdサービスのシーケンス

system-udevdサービスのシーケンス
/lib/udevd/rule.dディレクト

デフォルトのUDEVルールを記述したファイルが配置されている。

カスタマイズしたい場合は/etc/udevd/rule.d配下のファイルを編集する。

/etc/udevd/rule.dディレクト

カスタマイズされたUDEVルールを記述したファイルが配置されている。

system-logind.serviceについて

ユーザーのログインを管理するサービス。

ユーザーセッションの追跡及び、セッションで生成されるプロセスの追跡、PolicyKit*1ベースでの認可、デバイスへのアクセスに対する認可などを行う。

 

システムの再起動と停止

ファイルシステムのマウント、ネットワークの起動、webサービスの起動など、システム設定やサービスの管理をグループ化して定義したものがターゲット

再起動や停止もターゲットの一つ。

サービス設定ファイルのオプション
ターゲット 説明 SysV ランレベル
halt.target 停止
poewroff.target 電源オフ 0
Ereboot.target 再起動 6

システム再起動や停止のターゲット変更は、systemctlコマンドにより行う。

systemctlはD-Busを介してsystemdにメッセージを送信する。受信したsystemdは並列に書くユニットの停止処理を行い、その中で依存関係にあるユニットについては起動時と逆の順に停止する。

initコマンド

systemdへのシンボリックリンク。プロセス制御、ランレベルを変更するコマンド。

D-Busを介することなく直接systemdを実行する。

マシンの電源オフ

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

shutdownコマンドのオプション
オプション 説明
-H --halt マシンの停止
-P --poweroff マシンの電源オフ(デフォルト)
-r --reboot マシンのリブート
-h --halt外指定された時以外は、--poweroffと同じ
-k halt,poweroff,rebootは実行せず、wallメッセージのみを送信
--no-wall halt,poweroff,rebootの実行前にwallメッセージを送信しない
-c シャットダウンのキャンセル

 

マシンの再起動と停止

halt [オプション]

poweroff [オプション]

reboot [オプション]

halt,poweroff,rebootコマンドのオプション
オプション 説明
--halt halt,poweroff,rebootいずれの場合も停止
-p --poweroff halt,poweroff,rebootいずれの場合も電源オフ
--reboot halt,poweroff,rebootいずれの場合もリブート
-f systemdを呼び出すことなく直ちに実行

-fオプションは一部のでーたが失われる危険性があるため、通常は使用を避けたほうが良い。各サービスの終了を待たずにシステム停止したい場合に使用。

ランレベルの表示と移行

runlevel [オブション] ランレベル

ランレベルの種類と説明
ランレベル 説明
0 シャットダウン(システムの停止)
1 シングルユーザーモード(rootのみ)
2 ネットワークなしのマルチユーザーモード
3 通常のマルチユーザーモード(テキストログイン)
4 未使用
5 グラフィカルログインによるマルチユーザーモード
6 システムの再起動

 

まとめ

PCの起動のみでも多種多様なサービスが複雑に起動しているんだなぁと。

全て理解するのは無謀すぎるから、なんとなく「あー、こんなん動いてんねや」ぐらいの認識でいこうかな。

資格取るとなるとそういう訳にはいかないけど、今はいいかな。

 

 

 

 

*1:システム全体の権限を制御するためのアプリケーション開発キット。これにより特権をもたないプロセスが、特権を持つプロセスと通信することが可能になる

シェル(shell)とは

シェルとは

カーネルユーザーインターフェースを繋げるユーザインターフェースのこと。

ターミナルで入力したものを、カーネルが理解できるように解釈し実行する。また、出力する時は私達に理解できるように解釈し出力する。

別名コマンドインタプリンタ。Linuxの標準はbashだが、zshなど他のシェルを利用することも可能。

コマンド実行完了までのシーケンス

  1. プロンプトの表示
  2. コマンド解析
  3. プロセス生成
  4. プロセスが処理を実行
  5. プロセス終了
  6. 結果表示

コマンドの種類

コマンドには内部コマンドと外部コマンドの2種類がある。

内部コマンド

シェルの内部に組み込まれているコマンド。

環境PATHは設定されていない。

例:echo,cdなど

外部コマンド

/usr/bin/usr/sbinなどのディレクトリに置かれたコマンド。

環境PATHによって実行するファイルのディレクトリが設定されている。

例:ls,catなど

PC環境の設定

シェルにはPCの環境を調整する為、変数を用いて環境を調整する。

変数には2種類がある。

シェル変数

設定されたシェルのみが利用できる変数(ローカル変数)。

子プロセスには引き継ぎ不可。

設定:name=value

参照:$name

削除:unset name

一覧表示:set

環境変数

設定されたシェルとこのシェルで起動したプログラムで使用できる変数(グローバル変数)。

子プロセスに引き継ぎ可能。

設定:export name=value

参照:export -p name

削除:export -n name

一覧表示:env, printenv

ブート(Boot)について

ブート(Boot)

システムを立ち上げる処理のこと。

PCに電源をいれてからログインができるようになるまで、PC内ではあらゆる設定をしてくれている。

ブートシーケンス

電源を入れて、ログイン画面もしくはログインプロンプトが起動するまでに様々な設定を行う一連の流れのこと。

気になるのは、どういう流れで何を設定しているのか。

ブートシーケンスの流れ

コンピューター起動の流れ。

コンピューター起動には、物理的なアプローチから論理的なアプローチに切り替わるタイミングがある。

  1. 電源ON
  2. BIOSまたはEFIの起動
  3. バイスの初期化 ← POST(Power On Self Test)
  4. ブートローダ
  5. カーネル(vmlinuz)とinitramfsの読み込み
  6. カーネルの起動
  7. initramfsの起動
  8. systemdの起動、ルートファイルシステムのマウント
  9. systemdの再起動
  10. 各種サービスの起動
  11. ログイン画面もしくはログインプロンプトの起動・表示。

 

BIOS/EFIの起動

電源ON後、BIOSもしくはUEFILinuxブートローダ(GRUB2)を読み込み起動する。

まとめてファームウェアという。

BIOS

BIOS(Basic Input Output system)はPCのマザーボードに組み込まれている不揮発性メモリ(NVRAM:Non Volatile RAM)*1に格納されたプログラムのこと。

PCの電源をONにすると、BIOSは設定されたデバイスの優先順位に従って、ディスクの先頭ブロックにあるMBR(Master Boot Record)からブートローダを検索し、最初のデバイスローダを起動する。

MBR(Master Boot Record)

外部記憶装置のパーティション管理方式の一つ。

ハードディスクなど外部記憶装置の最も先頭にある。

PCが一番最初に、起動に必要な情報やプログラムを記憶している512byteの領域。

マスターブートレコードパーティションテーブル*2、ブートサインが記載されている。

これらの情報は現在使用中のディスク組織を記憶している。

EFI

EFI(Extensible Firmware Interface)BIOSに変わるファームウェア規格。

別名をUEFI(Unified EFI)ともいうが、一般的にEFIUEFIは同じものを指している。

大容量ディスクへの対応(GPT:GUID Partition Table)、セキュリティの強化(Secure Boot)、リモート診断など機能が拡張されている。

Intel社によって開発された、Unified EFI Forumによって管理されている。

UEFIからOSを起動する時は、NVRAMに設定された優先順位に従ってディスクのUEFIパーティションに格納されているブートローダを起動する。

GPT(GPID Partition Table)

外部記憶装置のパーティション管理方式の一つ。

これもPCが起動して一番最初に読み込まれるハードディスクの場所。

セキュアブート(Secure Boot)

UEFIに組み込まれている公開鍵によって、ブートローダ内のデジタル証明*3を検証することで、不正なブートローダを起動させないようにする仕組み。

デジタル証明書はブートローダに組み込まれている。

BIOSEFIの違い

BIOSEFIの違い
  BIOS EFI
パーティション形式 MBR GPT

ブートローダ

読み取り先

MBR GPT
起動ディスクの上限サイズ 2TB(上限を越すとその分は使用不可) 上限なし(起動ディスクとして設定したサイズ分全て使用可能)
セキュアブート機能
ネットワーク機能

 

 

ブートローダ

ディスクからOSをメモリに読み込み、起動する役割。

LinuxではGRUB2(Grand Unified Bootloader)というプログラムがカーネル(vmlinuz)とinitramfsをディスクからメモリにロードし、カーネルを起動する役目。

GRUB2はboot.imgファイルとcore.imgファイル、その他のモジュールから構成されている。

GRUB2はBIOSUEFI共に採用されている。

BIOS起動プロセス

boot.imgとcore.imgはGRUB2インストール時にMRB領域に書き込まれる。

  1. POSTの実行。
  2. BIOSがブート起動に必要なシステムハードウェアを初期化。
  3. BIOSが MRB領域にあるboot.imgをメモリにロード、制御をboot.imgに移行。
  4. boot.imgによる処理実行。
  5. ディスクからdiskboot.imgをメモリにロード、制御をdickboot.imgに移行。
  6. core.imgをメモリにロード、制御をcore.imgに移行。
  7. core.imgによる処理実行。
    1. GRUB2の自己解凍処理。
    2. GRUB2の実行準備。
    3. GRUB2の実行
  8. ブートローダ(GRUB2)が起動。
  9. ブートローダがOSのカーネルをロード。

EFI起動プロセス

GRUB2はFAT32*4もしくはvfat*5でフォーマットされたEFIパーティションの中のshim.efiファイルとgrubx64.efiファイルに格納される。

EFI起動はBIOS起動ではないセキュブートのプロセスが追加される。

  1. POSTの実行。
  2. EFIがブート起動に必要なシステムハードウェアを初期化。
  3. EFIがNVRAM内のブートエントリを読み取り、どのEFIアプリケーションを起動するか、どこから起動するかを判断。
  4. ファームウェアEFIアプリケーションを起動する。

shim.efi

セキュアブートが有効になっている状態でGRUB2を起動するブートローダ

セキュアブートが無効になっている状態でも利用可能。

grubx64.efi

セキュアブートが無効になっている状態でGRUB2を起動するブートローダ

カーネル(kernel)

システム起動時にメモリへ読み込まれ常駐し、CPUやメモリからのシステム始原の監理、デバイスの制御、プロセスのスケジューリングを行うOSの核となるプログラム。

カーネルの構成

  • ユーザ管理・プロセス管理・時刻管理・メモリ管理などを行う本体。
  • コンパイル時に静的に本体にリンクされるカーネルモジュール。
  • コンパイル時に本体にリンクされず、必要な時に動的にメモリに読み込まれて本体にリンクされるローダブルカーネルモジュール(LKM)。

ブートシーケンス中のカーネル処理

  1. ブートローダがメモリにカーネルをロード
  2. カーネルの自己解凍
  3. カーネルの初期化処理
    1. ページング機能の初期化
    2. スケジューラの初期化
    3. 割り込みベクタテーブルの初期化
    4. タイマーの初期化
  4. メモリにあるinitramfmの解凍・展開
  5. initramfmの実行
  6. systemdの再実行
initramfsの実行

initramfs(Initial RAM FS)はディスク内のルートファイルシステムをルートディレクトリのマウントするためのルートファイルシステム

カーネルがinitramfsを利用する手順。

  1. メモリ上に読み込まれたinitramfsを一時的にルートファイルシステムとしてマウント
  2. initramfsのinit(systemd)プログラムを起動し、各サービスごとにディスク内のルートファイルシステムをマウント
  3. ルートファイルシステムをinitramfsから、ディスク内のルートファイルシステムに切り替え
systemd

カーネルが生成する最初のユーザプロセス。プロセス番号は1。

systemdは設定ファイルを読み込み、グラフィカルターゲットかマルチユーザーターゲットまでシステムを立ち上げる。

グラフィカルターゲットまでの場合はGUI環境でログイン画面が表示される。

マルチユーザターゲットまでの場合はCUI環境でログイン画面が表示される。

ターゲットとはどのレベルまでサービスを提供するかなどのシステムの状態を定義する。

 

*1:電気の供給がされていなくてもデータを保持することができるメモリ。対して供給がなくなるとデータが消えるメモリをVRAMという。

*2:パーティションの状態や場所を記載

*3:インターネット上で本人確認する時に使用される電子的な証明書

*4:windowsで使用されていたファイルシステムの一つ

*5:ファイル名を最大255文字まで使用できるようにしたファイルシステム

リモートログイン(Remort Login)について

リモートログインとは

ローカルホスト*1からリモートホスト*2へログインすること。

ログインする際はIDとPassWordが必要。

リモートログインのコマンド

telnet

リモートホストtelnetサービスが起動している時に使用可能。

通信内容はプレーン(平文)なので、通信経路を盗聴されるとIDとPasswordが漏洩する。

ssh

リモートホストsshdが起動している時に使用可能。

telnetと異なるのは、通信内容が公開鍵暗号により全て暗号化されるため、漏洩の心配がない。

sshコマンドでリモートログインに挑戦

※コマンドを記載しています。ご自身でお調べになってから実行することをお勧めします。

サーバ側

サーバ側はsshdの起動がされていることを確認。

ps aux | grep sshd

起動していない場合はsshdの起動。

sudo systemctl start ssh

クライアント側

sshdがインストールされているか確認

以下のコマンドでsshdがパッケージにインストールされているか確認。

dpkg -l | grep openssh-server

sshdのインストール

sshdがインストールされていない場合は、sshdをインストールする。

sudo apt install openssh-server

ログイン

ログインするには接続しようとしているIPアドレスもしくはドメインを必要とする。

ssh remort_host

remort_hostIPアドレスドメイン名を入れる。

ユーザ名を指定。

ssh user_name@remort_host

ログアウト

至って簡単。

exit

 

まとめ

簡単なsshについて学んだ。接続方式や鍵についてもまだまだ知りたいことがあるので、追記していく。

 

https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server-ja

 

*1:ネットワークで繋がっているコンピュータの内、自分のコンピュータのこと

*2:ネットワークで繋がっているコンピュータの内、相手のコンピュータのこと