オンラインマニュアル
概要
Linuxでは用途に応じて様々なコマンドを実行する必要があるのだが、コマンドの数とそれに付随するオプションの数が多く「あれ、ファイル移動するmvコマンドなんだけど、どう使うんだっけ?」と迷う時がある。
コマンドの使い方を調べるために、manコマンドが用意されている。
manコマンド
man [オプション] [章番号] コマンド名 | ファイル名等
manコマンド実行する際のオプション一覧
オプション | 説明 |
---|---|
-f | 指定されたキーワードに一致するものがマニュアルの何章に記載されているのかを表示 |
-k | 指定されたキーワードが含まれるものがマニュアルの何章に記載されているのかを表示 |
マニュアルページは基本的に長く画面内に収まりきらない場合が多い。その時はキー操作を用いてマニュアルページをスクロールしたり、ヘルプを表示したりする。
キー | 説明 |
---|---|
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
ファイルやディレクトリ情報の表示
ls [オプション] [ディレクトリorファイル名]
lsコマンドは、ファイルやディレクトリの情報を一覧で表示する。
ディレクトリ名を指定しない場合はカレントディレクトリの一覧を表示する。
オプション | 説明 |
---|---|
-F |
ファイルタイプを表す記号の表示。 |
-a | 隠しファイルを含む全てのファイルを表示。 |
-l |
詳細な情報を含めて表示。 権限、ユーザ、グループ、サイズ、作成日時 |
-d | ディレクトリの内容ではなく、ディレクトリ自身の情報を表示。 |
まとめ
ディレクトリを移動して今いる場所がわからなくなる時は多々あります。
また、権限情報やディレクトリなのかファイルなのかもわからなくなることもあります。
そういった際によく用いるコマンドなので覚えてすぐ使えるようにしよう。
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 [サブコマンド] [サービス]
サブコマンド | 説明 |
---|---|
start | ユニットの起動 |
restart | ユニットの再起動 |
stop | ユニットの停止 |
status | ユニットの状態確認 |
enable | ユニットをenable状態にする。これにより、システム起動時にユニットは自動で開始。 |
disable | ユニットをdisable状態にする。これにより、システム起動時にユニットは自動で停止。 |
isolate | ユニット及び依存関係にあるユニットを開始し、他のユニットを全て停止する。(稼働中のターゲットを変更する時に使用) |
list-units | アクティブな全てのユニットを表示する。 |
サービス | 説明 |
---|---|
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/ディレクトリ配下にある、デバイス用のファイルを動的に作成・削除するサービス。
/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メッセージ]
オプション | 説明 |
---|---|
-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 | 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など他のシェルを利用することも可能。
コマンド実行完了までのシーケンス
- プロンプトの表示
- コマンド解析
- プロセス生成
- プロセスが処理を実行
- プロセス終了
- 結果表示
コマンドの種類
コマンドには内部コマンドと外部コマンドの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内ではあらゆる設定をしてくれている。
ブートシーケンス
電源を入れて、ログイン画面もしくはログインプロンプトが起動するまでに様々な設定を行う一連の流れのこと。
気になるのは、どういう流れで何を設定しているのか。
ブートシーケンスの流れ
コンピューター起動の流れ。
コンピューター起動には、物理的なアプローチから論理的なアプローチに切り替わるタイミングがある。
- 電源ON
- BIOSまたはEFIの起動
- デバイスの初期化 ← POST(Power On Self Test)
- ブートローダ
- カーネル(vmlinuz)とinitramfsの読み込み
- カーネルの起動
- initramfsの起動
- systemdの起動、ルートファイルシステムのマウント
- systemdの再起動
- 各種サービスの起動
- ログイン画面もしくはログインプロンプトの起動・表示。
BIOS/EFIの起動
電源ON後、BIOSもしくはUEFIがLinuxのブートローダ(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)ともいうが、一般的にEFIとUEFIは同じものを指している。
大容量ディスクへの対応(GPT:GUID Partition Table)、セキュリティの強化(Secure Boot)、リモート診断など機能が拡張されている。
Intel社によって開発された、Unified EFI Forumによって管理されている。
UEFIからOSを起動する時は、NVRAMに設定された優先順位に従ってディスクのUEFIパーティションに格納されているブートローダを起動する。
GPT(GPID Partition Table)
外部記憶装置のパーティション管理方式の一つ。
これもPCが起動して一番最初に読み込まれるハードディスクの場所。
セキュアブート(Secure Boot)
UEFIに組み込まれている公開鍵によって、ブートローダ内のデジタル証明*3を検証することで、不正なブートローダを起動させないようにする仕組み。
デジタル証明書はブートローダに組み込まれている。
BIOSとEFIの違い
BIOS | EFI | |
---|---|---|
パーティション形式 | MBR | GPT |
読み取り先 |
MBR | GPT |
起動ディスクの上限サイズ | 2TB(上限を越すとその分は使用不可) | 上限なし(起動ディスクとして設定したサイズ分全て使用可能) |
セキュアブート機能 | ✖ | ○ |
ネットワーク機能 | ✖ | ○ |
ブートローダ
ディスクからOSをメモリに読み込み、起動する役割。
LinuxではGRUB2(Grand Unified Bootloader)というプログラムがカーネル(vmlinuz)とinitramfsをディスクからメモリにロードし、カーネルを起動する役目。
GRUB2はboot.imgファイルとcore.imgファイル、その他のモジュールから構成されている。
BIOS起動プロセス
boot.imgとcore.imgはGRUB2インストール時にMRB領域に書き込まれる。
- POSTの実行。
- BIOSがブート起動に必要なシステムハードウェアを初期化。
- BIOSが MRB領域にあるboot.imgをメモリにロード、制御をboot.imgに移行。
- boot.imgによる処理実行。
- ディスクからdiskboot.imgをメモリにロード、制御をdickboot.imgに移行。
- core.imgをメモリにロード、制御をcore.imgに移行。
- core.imgによる処理実行。
- GRUB2の自己解凍処理。
- GRUB2の実行準備。
- GRUB2の実行
- ブートローダ(GRUB2)が起動。
- ブートローダがOSのカーネルをロード。
EFI起動プロセス
GRUB2はFAT32*4もしくはvfat*5でフォーマットされたEFIパーティションの中のshim.efiファイルとgrubx64.efiファイルに格納される。
EFI起動はBIOS起動ではないセキュブートのプロセスが追加される。
- POSTの実行。
- EFIがブート起動に必要なシステムハードウェアを初期化。
- EFIがNVRAM内のブートエントリを読み取り、どのEFIアプリケーションを起動するか、どこから起動するかを判断。
- ファームウェアがEFIアプリケーションを起動する。
shim.efi
セキュアブートが有効になっている状態でGRUB2を起動するブートローダ。
セキュアブートが無効になっている状態でも利用可能。
grubx64.efi
セキュアブートが無効になっている状態でGRUB2を起動するブートローダ。
カーネル(kernel)
システム起動時にメモリへ読み込まれ常駐し、CPUやメモリからのシステム始原の監理、デバイスの制御、プロセスのスケジューリングを行うOSの核となるプログラム。
カーネルの構成
- ユーザ管理・プロセス管理・時刻管理・メモリ管理などを行う本体。
- コンパイル時に静的に本体にリンクされるカーネルモジュール。
- コンパイル時に本体にリンクされず、必要な時に動的にメモリに読み込まれて本体にリンクされるローダブルカーネルモジュール(LKM)。
ブートシーケンス中のカーネル処理
- ブートローダがメモリにカーネルをロード
- カーネルの自己解凍
- カーネルの初期化処理
- ページング機能の初期化
- スケジューラの初期化
- 割り込みベクタテーブルの初期化
- タイマーの初期化
- メモリにあるinitramfmの解凍・展開
- initramfmの実行
- systemdの再実行
initramfsの実行
initramfs(Initial RAM FS)はディスク内のルートファイルシステムをルートディレクトリのマウントするためのルートファイルシステム。
カーネルがinitramfsを利用する手順。
- メモリ上に読み込まれたinitramfsを一時的にルートファイルシステムとしてマウント
- initramfsのinit(systemd)プログラムを起動し、各サービスごとにディスク内のルートファイルシステムをマウント
- ルートファイルシステムをinitramfsから、ディスク内のルートファイルシステムに切り替え
systemd
カーネルが生成する最初のユーザプロセス。プロセス番号は1。
systemdは設定ファイルを読み込み、グラフィカルターゲットかマルチユーザーターゲットまでシステムを立ち上げる。
グラフィカルターゲットまでの場合はGUI環境でログイン画面が表示される。
マルチユーザターゲットまでの場合はCUI環境でログイン画面が表示される。
ターゲットとはどのレベルまでサービスを提供するかなどのシステムの状態を定義する。
リモートログイン(Remort Login)について
リモートログインとは
ローカルホスト*1からリモートホスト*2へログインすること。
ログインする際はIDとPassWordが必要。
リモートログインのコマンド
telnet
リモートホストでtelnetサービスが起動している時に使用可能。
通信内容はプレーン(平文)なので、通信経路を盗聴されるとIDとPasswordが漏洩する。
ssh
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
ユーザ名を指定。
ssh user_name@remort_host
ログアウト
至って簡単。
exit
まとめ
簡単なsshについて学んだ。接続方式や鍵についてもまだまだ知りたいことがあるので、追記していく。
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server-ja