1 - 1.Linuxの基礎知識

Linuxの歴史、有名ディストリビューション、シェルの種類に関する解説

1.1. UNIXとLinux

1.2.1 UNIXの誕生

UNIXは1969年にアメリカのAT&T社ベル研究所において誕生した。 ベル研究所ではMulticsという大規模で複雑なOSの開発に関わっていたが、そのプロジェクトは進行が遅れていた。 そこで新たなアイディアをもとに小規模なOSであるUNIXを開発することを決意した。 UNIXはKen ThompsonやDennis Ritchieらが中心となりUNIXは開発されていく。

UNIXの設計はシンプルで、モジュール性に富んでいた。 コンパクトなコードと柔軟なデザインにより、異なるハードウェア上で移植が容易であった。 この特性が、UNIXの広がりと進化を支える要因となった。

UNIXは次第に多くの機能やツールが追加されていき、大学や研究機関で広く使われるようになった。 その後、AT&Tは商用ライセンスを提供し、商業利用も広がっていった。 一方で、研究者や技術者たちはUNIXのソースコードを入手し、独自のバージョンを開発することで、新たな機能や改良を加えるようになった。

この中で、System Vと**BSD(Berkeley Software Distribution)**が注目を集めた。 System VはAT&Tが開発した商用UNIXであり、商業的な成功を収めた。 一方で、BSDはカリフォルニア大学バークレー校で開発され、OSSのUNIXとして広まった。 BSDはネットワーキング機能やセキュリティの改良に力を入れ、後のUNIX系OSに多くの影響を与えた。

1.2.2. Linuxの誕生

1980年代初頭、UNIXは主に大学や研究機関で使用されコンピュータの世界において高度な操作性と柔軟性を提供していた。 しかし、商業的なUNIXバリエーションは高価であり一般のユーザーには手が届かない状況であった。

そんな中1991年フィンランドの学生であるLinus Torvaldsは、個人用コンピュータにUNIXのようなOSを作成するアイデアを抱きそれを実現するプロジェクトを開始した。 彼はそのプロジェクトにLinuxと名付け、その最初のバージョンを公開した。この行動は、自身のものだけでなく、世界中の開発者が協力して進めるOSSの哲学を採用していた。

Linus TorvaldsはGPL(GNU General Public License)と呼ばれるライセンスを採用しソースコードを公開することで、誰もがLinuxの開発に参加できる環境を提供した。 これにより世界中の開発者がLinuxの改善に貢献し、その成長を支えることができるようになった。 GPLはソフトウェアの自由な共有と改変を促進するものであり、Linuxコミュニティの発展に大いに寄与した。

Linuxはその後急速に進化し、多くのハードウェアプラットフォームや用途に対応するようになった。 こうして、Linus TorvaldsがLinuxを生み出し、GPLというライセンスによって世界中の人々が共同で育て上げることで、UNIXを踏まえた新たなOSの誕生が実現した。

1.2. ディストリビューション

1.2.1. ディストリビューションとパッケージ

LinuxはOSSのOSで、さまざまなディストリビューションが存在する。 ディストリビューションはLinuxカーネルをベースにして独自の特徴を持ち、さまざまな用途に合わせてカスタマイズされている。 Linuxは多くの場合、高いセキュリティ、安定性、カスタマイズ可能性を提供し、さまざまなデバイスや用途に利用されている。

ディストリビューションはたくさんのパッケージと呼ばれるソフトウェアコンポーネントをまとめて提供するもの。 これらのパッケージには、アプリケーション、ライブラリ、ドライバーなどが含まれている。

パッケージはソフトウェアのインストール、アップデート、削除を簡単かつ効率的に管理するための仕組みである。

ディストリビューションごとに異なるパッケージマネージャが使われていることがある。 パッケージマネージャは、たくさんのパッケージを管理するためのツールであり、新しいソフトウェアの導入や既存ソフトウェアのアップデートを容易にする。 代表的なパッケージマネージャとしては、Debianベースのディストリビューションで使われるAPT(Advanced Package Tool)や、Red Hatベースのディストリビューションで使われるRPM(Red Hat Package Manager)などがある。

ディストリビューションは、さまざまなユーザー層やニーズに合わせて提供されており、デスクトップ、サーバー、組み込みシステム、セキュリティテストなどの用途に特化したものが存在する。 また、ディストリビューションごとに独自のユーザーインターフェース、設定ツール、サポート体制が提供されており、ユーザーは自身の好みや目的に応じて選択できる。

1.2.2. 代表的なディストリビューション

以下にいくつかの有名なLinuxディストリビューションを含む表をまとめて表示する。

ディストリビューション特徴代表的なパッケージマネージャ
Red Hat Enterprise Linux (RHEL)企業向けに設計された堅牢なディストリビューション。商用サポート提供。RPM (yum/dnf)
CentOSRHELをベースにした無料のOSSディストリビューション。RPM (yum/dnf)
AlmaLinuxCentOS 8の終了に伴い代替として注目されているディストリビューションRPM (yum/dnf)
Fedora新機能の実験場としての役割を持つ、コミュニティ駆動型のディストリビューション。RPM (dnf)
DebianOSS志向で安定性を重視するディストリビューション。APT (apt)
Ubuntu初心者にも使いやすいデスクトップディストリビューション。APT (apt)
Linux MintUbuntuベースで、使いやすさと美しいデスクトップ環境に特化。APT (apt)
openSUSEユーザーと開発者の共同作業を重視し、堅牢なシステムを提供。Zypper
Arch Linuxユーザーカスタマイズと最新ソフトウェアに重点を置くローリングリリース。Pacman
ManjaroArch Linuxベースで使いやすいデスクトップ環境を提供するディストリビューション。Pacman
Slackware歴史あるオリジナルなディストリビューション。堅牢でカスタマイズ性高い。手動インストール
Kali Linuxセキュリティテストとペネトレーションテスト向けに特化したディストリビューション。APT (apt)
Tailsプライバシーと匿名性を重視し、セキュアなOSを提供。APT (apt)
Qubes OSセキュリティ重視のディストリビューション。仮想化基盤にXenを用いている。APT (apt)

1.3. Linuxの特徴とシェル

1.3.1 カーネルとユーザランド

OSはカーネルユーザランドという領域に分かれる。

カーネル

カーネル

カーネルはOSの中核となる部分で、ハードウェアと直接やりとりするなどもっとも中心的な機能を受け持つ部分。 カーネルはハードウェアの違いを吸収して、プログラムがどのようなハードウェア上でも同じように動作する役割がある。

Linuxにおいてのカーネルはアプリケーションが動作するための基本環境を提供する。

具体的には「メモリ管理」「CPUリソースの配分」「ハードウェアにおける処理順序の割り振り」など、ユーザが意識しないバックグラウンドで動く基本機能を行う。

ユーザランド

OSが動作するのに必要なカーネル以外の部分のこと。 ファイルシステムやファイル操作コマンド、シェルなどの基本的なソフトウェア群を指す。

1.3.2. Linuxカーネルの基本動作

Linuxカーネルが提供する基本的なカーネルの機能の一部を記載する。

割り込み管理

コンピュータに接続されているさまざまな周辺機器の入出力処理の割り込みを管理するもの。

割り込み処理はプロセッサが処理を行っている最中でも,特定の信号があると処理を中断して別の処理を行わせる処理のことを指す。Linuxカーネルでは割り込みをうまく利用してさまざまな処理を効率的に処理することが可能となっている。

メモリ管理

Linuxカーネルでは、物理メモリと仮想メモリを用いてデータを管理している。プロセス一つ一つに対して、実際に物理メモリのアドレスをそのまま割り当てるのではなく、物理メモリに対応した仮想アドレスを割り当てることで、実際の物理メモリの容量よりもはるかに大きな容量のメモリを利用可能にしている。

また、各プロセスに対して固有の仮想アドレスを割り振ることで、それぞれのプロセスのメモリ空間は独立させています。そのためプロセスのメモリを犯さないようになっている。

ファイルシステム

保存されているデータに対してファイルという形でアクセスできるように提供しているもの。 全てのデータをファイルと言う形で管理しています。/(root)(ルートディレクトリ)を頂点としたツリー状の構造をしており、カーネル自体もファイル、ディレクトリの集合体として存在する。

1.3.3. シェル

シェルとシェルスクリプト

Linux にはシェルという対話型のコマンド入力環境が用意されている。

シェル自体には大きく2 つの機能があり、1つはコマンド入力を受け付けること、もう 1 つはシェルスクリプトの実行がある。 シェルスクリプトとは、「コマンドの入力を自動化する」ためのもので1 つのファイルにコマンドを 1 行ずつ記述して作成する。 作成したシェルスクリプトを実行することで、コマンドの実行を自動化することができる。

また作成したシェルスクリプトをサーバーの起動時に実行したり、数時間毎に実行したりすることも可能。

シェルの種類

以下にいくつかの一般的なシェルとそれらの特徴を表で示す。

シェル名特徴と説明
BashBourne Again SHellの略。Linuxシステムで広く使用されるデフォルトのシェル。豊富なコマンドとスクリプト機能を提供。
Zshオープンソースの拡張可能なシェル。Bashの拡張版で、カスタマイズ性が高く、タブ補完などの便利な機能を備えている。
Fishユーザーフレンドリーな対話型シェル。自動補完やシンタックスハイライトなど、新しいユーザーにも親しみやすい特徴がある。
CshCシェルの略。Unixの初期から存在するシェルで、C言語に似た構文を持つ。カスタマイズ性は低いが、一部のユーザーには好まれる。
KshKorn SHellの略。Bourne Shellの拡張版で、シェルスクリプトの開発をサポートする高度な機能を提供。
DashDebian Almquist SHellの略。軽量なシェルで、起動が速く、システムの基本的なタスクを処理するのに適している。

2 - 2.システムアーキテクチャ

BIOS/UEFIやハードウェア機能、SystemdなどのLinuxシステムに関して

2.1. ハードウェア設定と構成

2.1.1. BIOSとUEFI

BIOS

BIOS(Basic Input Output System)はキーボードなどのデバイスを制御する基本的なプログラムでマザーボードや拡張カードのフラッシュROMに書き込まれている。 これはパソコンの起動時に最初に実行されるプログラムで、コンピュータの基本的なハードウェアを制御する役割を担っている。

BIOSの役割は以下の通り。

  • OSを起動するためのプログラムをディスクから読み込んで実行する
  • デバイスの動作を設定
  • 基本的な入出力の管理

UEFI

UEFI(Unified Extensible Firmware Interface)はBIOSの容量制限がなくなったり、GUIベースのセットアップ画面を利用できるなど拡張されたBIOSの後継規格。

UEFIはBIOSと異なり、C言語などのプログラミング言語を使用して開発された。 また、BIOSよりも高速で安定性が高く、セキュリティも強化されている。

UEFIには、BIOSに比べて多くの機能があり、起動ローダーやネットワークブート機能、セキュアブート機能などがある。

UEFIの特徴は以下の通り。

  • 起動ドライブの容量制限(2TB)の撤廃
  • GUIベースのセットアップ画面

UEFIとBIOSのセットアップ

OSがインストールされているコンピュータのBIOS/UEFIに入るにはコンピュータ起動後にBIOSに入るにはDeleteやF1、F2などを連打する必要がある。なお連打するキーはマザーボードのメーカによって異なる。

BIOS/UEFIでは以下項目を設定可能。

  • 日付や時刻(ハードウェアクロック)
  • ディスクドライブや各種デバイスのパラメータ
  • キーボードの使用/不使用
  • 電源管理
  • ブートデバイスの優先順位
  • デバイスへのIRQ(割り込み要求)の割り当て
  • 各種デバイスの使用/不使用

2.1.2. デバイスの情報確認

デバイスファイル

Linuxではハードウェアのアクセスを抽象化したデバイスファイルにて行う。デバイスファイルは/dev配下にある。

なおこれらはudevという仕組みにより自動的に生成される。

/procディレクトリ

Linuxカーネルが認識しているデバイス情報は/proc配下に格納される。

主なファイル説明
/proc/cpuinfoCPUの情報を格納したファイル
/proc/interruptsIPQなどの情報を格納したファイル
/proc/ioportsデバイスの制御とデータの受け渡しを行うI/Oポートのアドレスを格納したファイル
/proc/meminfoメモリの情報を格納したファイル
/proc/bus/usb/*USBデバイスの情報を格納したファイル
/proc/bus/pci/*PCIデバイスの情報を格納したファイル
/proc/cmdline起動時のカーネルオプションが格納したファイル

lspciコマンド

デバイスの情報を確認するためのコマンド。

lspci 
オプション説明
-v詳細に表示
-vvより詳細に表示

2.1.3. USBデバイス

USBはPCを周辺機器と接続するための規格。 特徴は以下の通り。

  • 最大127台のデバイスをUSB接続可能
  • 同一コネクタ
  • ホットプラグ
  • プラグ&プレイ
    • H/W、F/W、ドライバ、OS、アプリケーション間が自動的に協調し機器の組み込みと設定を自動的に行う
  • 電源供給

USBのバージョン

バージョン最大転送速度
USB 1.012Mbps
USB 1.112Mbps
USB 2.0480Mbps
USB 3.05Gbps
USB 3.110Gbps
USB 4.040Gbps

デバイスドライバ

ハードウェアの利用にはデバイスドライバが必要となる。 ドライバはベンダーが用意した専用ドライバとLinuxシステムが提供するクラスドライバに分けられる。

USBデバイスを使用するにはデバイスドライバが必要。これはUSBデバイスがデバイスクラスに応じて異なる方法で通信するために使用される。また、クラスドライバはデバイスクラスに準拠する。

デバイスクラスサポートするUSBデバイスの例
HID: Human Interface Deviceskbd, mouse
USB Mass Storage DeviceUSBメモリ、HDD、デジタルオーディオプレーヤー
オーディオマイク、スピーカー、サウンドカード
プリンタプリンタ
ワイヤレスコントローラーWi-Fiアダプタ、Blutoothアダプタ

なお、デバイスクラスの使用に沿ったUSBデバイスはクラスドライバで対応するため、専用のデバイスドライバは不要となる。

lsusbコマンド

接続されたUSBデバイスの情報を表示するためのコマンド。

lsusb
オプション説明
-v詳細な情報を表示
-tツリー形式でUSBデバイスを表示
-s [bus]:[device]特定のバス番号とデバイス番号で指定されたUSBデバイスの情報を表示
-d [vendor]:[product]特定のベンダーIDとデバイスIDで指定されたUSBデバイスの情報を表示

2.1.4. udev

udevはデバイスの管理とドライバの自動検出を行う仕組み。 udevはシステムに新しいデバイスが追加された場合、デバイスの属性情報を取得し、それに基づいて対応するデバイスドライバを自動的に読み込むことができる。

デバイスの情報は、D-Busと呼ばれるプロセス間通信(IPC)のための機構により、異なるアプリケーション間でデータやシグナルを送信したり、受信したりすることができる。

2.1.5. デバイスドライバのロード

lsmodコマンド

lsmodコマンドはロードされたカーネルモジュールの一覧を表示するためのコマンド。 カーネルモジュールは、カーネル内で動作するドライバーやファイルシステムなどの機能を提供している。

lsmod

modprobeコマンド

modprobeコマンドはカーネルモジュールを手動でロードするためのコマンド。modprobeコマンドを使用すると、特定のカーネルモジュールをロードしたり、モジュールの依存関係を自動的に解決したりすることができる。

modprobe <カーネルモジュール名>

2.2. システムの起動とシャットダウン

2.2.1. Linuxのシステム起動フロー

OSが起動するまでの流れは基本的には以下の通り。(x86アーキテクチャ構成の場合)

  1. BIOS/UEFIが起動し、ハードウェアチェックや初期化を行い、ブートローダを読み出し制御を移す
  2. カーネルはメモリの初期化、システムクロックの設定を行い、初期RAMディスクをマウントする
  3. カーネルは最初のプロセスであるinit(またはsystemd)プロセスを実行する

起動

2.2.2. システム起動時のイベント確認方法

システム起動時にカーネルがどのような処理を行ったかはログファイルである/var/log/message/var/log/dmesg/var/log/boot.logなどに保存される。

これらのファイルはテキストファイルなのでcatコマンドで閲覧可能となる。なお閲覧にはroot権限が必要な場合がある。

dmesgコマンド

dmesgはシステム起動時にカーネルがどのような処理を行かったか確認できるコマンド。

dmesg

journalctl -kコマンド

systemdを採用したシステムにおいてdmesgコマンドと同様にカーネルのバッファを表示することができるコマンド。 bオプションでシステム起動時のメッセージの表示が可能。

journalctl -k

2.2.5. シャットダウンと再起動

shutdownコマンド

shutdownコマンドはシステムのシャットダウンや再起動を行うことができるコマンド。

shutdown [オプション] 時間 <メッセージ>
オプション説明
-hシャットダウン後にシステムを停止する
-rシャットダウン後にシステムを再起動する
-kシャットダウンを実際には行わず、ユーザーに警告メッセージを表示する
-tシャットダウンまでの待機時間(秒)を指定する
-cシャットダウン処理をキャンセルする
-fシャットダウン処理を強制的に実行する

以下の例は30分後にシステムを停止し、ログインしているユーザに「Please logout now」とメッセージを表示するもの。

shutdown -h +30 "Please logout now."

systemctlコマンド

systemdを採用したLinuxシステムではshutdownの代わりにsystemctl rebootで再起動、systemctl poweroffでシステムの終了が行える。

systemctl reboot //再起動
systemctl poweroff //システム終了

2.3. SysVinitとランレベル

2.3.1. SysVinitによる起動

SysVinitはかつて使用されていたLinuxの起動の仕組み。 現在はsystemdのほうが主流となっている。

SysVinitによる起動順序は以下の通り。

  1. initが/etc/inittabファイルを読み込む
  2. initが/etc/rc.sysinitnスクリプトを読み込む
  3. initが/etc/rcスクリプトを実行する
  4. /etc/rcスクリプトが /etc/rc<ランレベル>.dディレクトリ以下のスクリプトを実行する

SysVinitはサービスを順次起動に時間がかかる、依存関係を適切に処理できない問題があった。これらの問題を解決した起動の仕組みにはupstartsystemdがある。

Upstart

UpstartはSysVinitを改善した新しいinitの仕組みで以下の特徴がある。

  • 依存関係を適切に処理
  • 並列起動
  • イベント駆動

2.3.2. ランレベル

ランレベルはLinuxシステムの動作モードのこと。 システムのデフォルトのランレベルは/etc/inittabに記載されている。 またこのファイルで起動する際のランレベルも設定できる。

ランレベルRedHat系Debian系
0停止停止
1シングルユーザモードシングルユーザモード
2マルチユーザモード(テキストログイン、NFSサーバは停止)マルチユーザモード
3マルチユーザモード(テキストログイン)マルチユーザモード
4未使用マルチユーザモード
5マルチユーザーモード(グラフィカルログイン)マルチユーザモード
6再起動再起動
S or sシングルユーザーモードシングルユーザモード

runlevelコマンド

現在のランレベルの確認を行うコマンド。

runlevel

表示は<以前のランレベル> <現在のランレベル>で表示される。

init/telinitコマンド

ランレベルの変更を行うコマンドで実行にはroot権限が必要。

init 1
telinit 1

wallコマンド

wallコマンドはログインしているユーザー全員の端末画面に一斉にメッセージを送信するコマンド。再起動や停止を行う際にシステム利用者に通知するために使用する。

wall [ -a ] [ -g Group ] <メッセージ>

2.3.3. 起動スクリプトのサービス管理

ランレベルごとに起動するサービスは異なり、確認は/etc/rcN,d(Nは数字)で確認できる。

例えば/etc/rc3.dではランレベル3の時に起動するスクリプトを確認できる。

2.4. Systemd

2.4.1. Systemdの概要

Systemdのシステムではinitの代わりにsystemdプロセスが起動し各サービスの管理を行う。またSystemdは処理を分割して並列化することでシステム起動処理を高速化している。具体的には以下のような複数のデーモンプロセスが連携して動作する

プロセス説明
systemdsystemdを統括するメインプロセス
systemd-journaldジャーナル管理、ログ管理
systemd-logindログイン処理
systemd-networkdネットワーク管理
systemd-timesyncdシステムクロック同期
systemd-resolved名前解決
systemd-udevdデバイス動的検知

またSystemdではUnitという処理単位でシステムの起動処理が行われる。

種類説明
service各種サービスの起動
device各種デバイスの表現
mountファイルシステムのマウント
swapスワップ領域の有効化
target複数のUnitのグループ化
timer指定した日時・間隔での処理実行

2.4.2. Systemdの起動順序

systemdにはランレベルの概念がない。 その代わりにシステム起動時には/etc/systemd/system/default.targetというUnitが処理される。

またグラフィカルログイン(ランレベル5)に相当するUnitは/etc/systemd/system/graphical.targetとなる。

SysVinitのランレベルでSystemdのUnitを置き換えると以下のようになる。

ランレベルターゲット
0poweroff.target
1rescue.target
2 ~ 4multi-user.target
5graphical.target (multi-user.target + )
6reboot.target

default.targetは、上記のターゲットのシンボリックリンクを作成することで設定することができる。

2.4.3. systemctlコマンド

systemctlコマンドはsystemdにおけるサービスを管理を行うコマンド。

systemctl [サブコマンド]
サブコマンド説明
start / stopサービスの起動 / 終了
restartサービスの再起動
reloadサービスの設定を再読み込み
statusサービスの稼働状況の出力
is-activeサービスが稼働しているかの出力
enable / disableシステム起動時にサービスを自動で起動 / 自動で起動しない
rebootシステムの再起動
list-units起動している全てのUnitの状態を表示
list-unit-files全てのUnitを表示
list-dependenciesUnitの依存関係の表示

2.4.4. journalctlコマンド

journalctlコマンドはsystemd-journaldが収集したログを表示するためのコマンド。パイプやgrepコマンドと組み合わせて使用することが多い。

journalctl

3 - 3.Linuxのインストールとパッケージ管理

Linuxのインストール際の補足(パーティションやSwap)、aptなどのパッケージマネージャに関して

3.1. ハードディスクのレイアウト設計

3.1.1. Linuxに必要なパーティション

Linuxのインストールにはルートパーティションスワップ領域の最低2つの領域が必要になる。

ルートパーティション

ルートパーティションは/で表されるシステムファイルが含まれる領域のこと。 後述するパーティション分割を行うと障害発生の復旧が容易になる。

スワップ領域

スワップ領域は仮想メモリの領域であり、物理メモリ不足時に、仮想的なメモリ領域として一時的に使用する領域。 一般的には/swapfileという名前になる。

搭載メモリの1から2倍は割り当てる必要がある。

パーティションを分割できるディレクトリ

また以下のルート以下のディレクトリはパーティションを切って割り当てることができる。 メリットは以下の通り。

  • 柔軟なシステムの管理が可能
  • ディスク障害児の復旧作業や障害の軽減
ディレクトリ説明分けるメリット
/homeユーザ別のホームディレクトリが置かれる環境引継ぎが可能(ディストリビューションの変更など)
/bootシステムブートにに使われるディレクトリ
/varログやスプールが置かれるログをルートから分離できる
/usr全体でシェアしたいプログラム/ライブラリ/ドキュメントが置かれる
/tmp一時ファイルが置かれるディレクトリ

3.1.2. パーティションのレイアウト設計

パーティションのレイアウトを設計する場合以下の点を考慮して設計する必要がある。

  • システムの用途
    • 使用規模
    • 使用目的
  • ディスクの容量
  • バックアップの方法

例: 200GBのハードディスク、1GBメモリ、ユーザ規模100人のファイルサーバを構築する場合

考慮事項としてはスワップ領域は物理メモリと同等、/bootに先頭100MB程度含まれること、/を最小化すること、/homeはユーザ数が多いファイルサーバという特性上最も多くすることがある。

  • メモリの分割
    • スワップ領域: 1GB
    • /boot: 100MB
    • /usr: 10GB
    • /var: 10GB
    • /: 1GB
    • /home: 残りのすべて(約180GB)

例: 100GBのハードディスク、4GBのメモリのWebサーバをApacheで構築する場合

考慮事項としてはスワップ領域は物理メモリと同等、/bootに先頭数100MB程度含まれること、/var/logはログファイルが沢山たまることになるので多くとることがある。

  • メモリの分割
    • スワップ領域: 4GB
    • /boot: 100MB
    • /usr: 10GB
    • /var: 20GB
    • /var/log: 50GB
    • /: 15GB

3.1.3. LVM

LVMは論理ボリューム管理と呼ばれる物理ボリュームを束ねて仮想ディスクを作る仕組みのこと。

物理ボリュームを束ねたものはボリュームグループとなり、ボリュームグループ上に仮想的なパーティションを作ることになる。 この仮想的なパーティションが論理ボリュームとなる。

3.2. ブートローダのインストール

3.2.1. ブートローダとGRUB

ブートローダは広義ではBIOSから呼び出されカーネルを呼び出すものでハードディスク等からOSを起動するためのプログラムを指す。 代表的なものにはGRUBがある。 GRUBの特徴は以下の通り。

  • 多数のファイルシステムの認識が可能
  • シェル機能の搭載

またGRUBにはバージョン0.9系のGRUB Legacyとバージョン1.9系のGRUB2があり、それぞれパーティションの数え方が異なる

項目GRUB LegacyGRUB2
Version0.9x1.9x
ディスク番号0から1から
パーティション番号0から1から

3.2.2. GRUBのインストール

GRUBのインストールは以下コマンドより行える。

sudo grub-install /dev/sda # /deb/sda の MBRに GRUB Legacyのインストール
grub-install -v # GRUBのバージョン確認
grub-install -V # GRUB2のインストール

3.2.3. GRUB Legacyの設定

GRUBの設定は/boot/grub/menu.lstまたは/boot/grub/grub.confの編集で行える。 内部の表示には(hd0,0)などと表示され0から始まる

3.2.4. GRUB2の設定

GRUB2の設定は/boot/grub/grub.cfgに自動生成されるためファイルを直接触ってはいけない。 設定の際に触るファイルは/etc/default/grubとなりgrub2-mkconfigコマンドなどで設定を反映する。

なおパーティションは1から始まる

# 設定ファイルの生成
sudo grub-mkconfig -o /boot/grub/grub.cfg 

3.3. 共有ライブラリ管理

ライブラリはよく使わられる機能をまとめ再利用するためのもの。 種類は2つあり、静的ライブラリ共有ライブラリがある。

3.3.1. 静的ライブラリ

静的ライブラリは実行プログラムにライブラリを含めた形でリンクされるライブラリ。 特徴は以下の通り。

  • 1つのプログラムだけで動作させることができ別環境で動作可能
  • プログラムのサイズが大きくなる

3.3.2. 共有ライブラリ

共有ライブラリはプログラム実行と同時にメモリ上に展開されるライブラリで複数のプログラム間で共有される。 特徴は以下の通り。

  • プログラム全体のサイズが小さくなる
  • プログラム実行時に適切に配置されたライブラリが必要となる

3.3.3. スタティックリンクとダイナミックリンク

リンクはプログラムからライブラリの機能を呼び出すことを指す。

スタティックリンク

スタティックリンクではコンパイル時に実行ファイルに埋め込む。 これにより呼び出されるのは静的ライブラリとなる。

ダイナミックリンク

ダイナミックリンクではコンパイル時では埋め込んでおかず実行時にライブラリの機能が呼び出しされる。 これにより呼び出されるのは共有ライブラリとなる。

なお共有ライブラリは/libまたは/usr/libに配置されており、Linuxのディストリビューションでは共有ファイルはlib.xxx.soという名前で構築されている。

tree -L 1 /usr/lib | grep so

3.3.4. lddコマンド

lddコマンドでは必要な共有ライブラリの確認をすることができる。

なお.soを探す場所は/etc/ld.so.confで定義される。

ldd /usr/bin/ldd

3.3.5. ldconfigコマンド

ldconfigコマンドでは共有ライブラリを認識させることができる。 これの実行によりld.so.cacheが更新される。

sudo ldconfig

3.3.6. 共有ライブラリの環境変数

共有ライブラリの検索で使用する環境変数はLD_LIBRARY_PATHとなる。

3.4. Linuxのパッケージ管理

3.4.1. パッケージとは

パッケージは実行プログラムや設定ファイル、ドキュメントを1つにまとめたもの。 パッケージの管理はディストリビューションにより異なる。

  • Debian系
    • Debian GNU/Linux
    • 拡張子は「.deb」
  • RPM系
    • Red Hat Enterprise Linux
    • 拡張子は「.rpm」

3.4.2. パッケージ管理とは

パッケージ管理システムはパッケージのインストール/アンインストール、アップデートを簡易にする仕組み。 パッケージ管理システムではどこにパッケージが保存されているか管理、依存関係競合関係の管理を行う。

  • パッケージの依存関係
    • あるパッケージに含まれるファイルを別のパッケージが利用している場合の関係
  • パッケージの競合関係
    • あるパッケージによってインストールされるファイルが、すでに別のパッケージによりインストールされている場合、すでにインストールされているファイルと競合する場合の関係

3.4.3. パッケージの管理形式

パッケージの管理形態のDebian系、RedHat系に互換性はないが、aliasコマンドで相互交換が可能。

Debian系(deb)RedHat系(rpm)
ディストリビューションDebian系RedHat系
パッケージの管理dpkg, aptrpm, yum

3.5. Debian系のパッケージ管理

3.5.1. dpkgコマンドによるパッケージ管理

パッケージファイル名の構成

パッケージであるdebファイルは以下のような構成となる。

sample_1.2.3-1_i386.deb
  • sample … パッケージ名
  • 1.2.3 … バージョン番号
  • 1 … リビジョン番号
  • i386 … CPUアーキテクチャ

コンフィグファイル(/etc/dpkg/dpkg.cfg)

dpkgのコンフィグファイルは/etc/dpkg/dpkg.cfgにある。

dpkgコマンド

dpkg -i <パッケージ名(.deb含む)>
オプション説明
-E同じバージョンがすでにインストールされている場合、インストールは行わない
-G新バージョンがすでにインストールされている場合、インストールはしない
-Rディレクトリ構造を再帰的に処理する
アクション説明
-iパッケージをインストール
-Iインストール済みの詳細情報を表示
-rパッケージをアンインストール (設定ファイルは残す)
-Pパッケージをアンインストール (設定ファイルを含めて完全に削除)
-lインストール済みパッケージを検索して表示
-Lパッケージからインストールされたファイルを一覧表示
-sインストール済みのパッケージの詳細情報の表示
-S指定したファイルが、どのパッケージからインストールされたものかを調査
-cパッケージに含まれるファイルの一覧表示
-C / –auditパッケージのインストール状態を検査

dpkg-reconfigureコマンド

dpkg-reconfigureコマンドは既にインストールされたdebパッケージの状態を再設定するもの。

3.5.2. apt-getコマンドによるパッケージ管理

apt-getコマンドはアプリケーションの依存関係を調整しながらパッケージのインストール、アップグレードを行うため依存解決までできる。 またインターネット経由で最新パッケージ取得する

apt-getコマンド

apt-get <オプション> <パッケージ名>
apt-getコマンドのオプション説明
-dインストールせずにダウンロードのみ行う
-sシステムを変更せずに動作をシミュレートする
–purge設定ファイルを含めてパッケージを削除する (removeコマンドと一緒に指定)
cleanダウンロードしたパッケージファイルを削除する
dist-upgradeDebianのシステムを最新にアップグレードする
install指定したパッケージをインストール、またはアップグレードする
remove指定したパッケージをアンインストール ( 設定ファイルは残す )
updateパッケージのリスト情報(データベース)を最新に更新する
upgradeシステムの全パッケージを最新版にアップグレードする
オプション説明
-c設定ファイルの指定(デフォルトでは/etc/apt/sources.list)
-y全部yes
-dダウンロードのみ
-sシステムを変更せず動作をエミュレートする
no-install-recommends必須ではないパッケージをインストールしない
–resinstall最新版がインストールされていてもインストール
clean取得したパッケージのローカルリポジトリを掃除する
dist-upgradeディストリビューションをアップグレードする
install新規パッケージをインストールする
removeパッケージが削除される(削除されたパッケージの設定ファイルは残る)
purgeパッケージが削除かつ完全削除(設定ファイルも含む)
update設定されたすべての取得元からパッケージ情報をダウンロードする
upgrade現在インストール済みのすべてのパッケージで利用可能なアップグレードをインストールする
full-upgradeシステムのメジャーバージョンを最新にアップグレードする(dist-upgradeと同じ)
autoremove必要なくなったパッケージの削除

パッケージの取得先(設定ファイル)

パッケージの取得先は/etc/apt/sources.list/etc/apt/sources.list.d/*に保存される。

/etc/apt/sources.listの中身は以下のように表示される。

...
deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu artful-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu artful-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu artful-security multiverse

apt-cacheコマンド

apt-cache はインストール済みとインストール可能なパッケージの情報の照会と検索が可能なコマンド。

apt-cache
サブコマンド説明使用例
search - 正規表現正規表現パターンによってパッケージ一覧を検索apt-cache search apache2 | head -n 5
show一般的な情報を表示apt-cache show apache2 | head -n 20
showpkg <パッケージ名>詳細な情報を得るapt-cache showpkg apache2
depends - <パッケージ名>パッケージの生の依存情報を表示apt-cache depends apache2

aptitudeコマンド

aptitudeコマンドはapt-getよりも高機能なコマンド。 apt-getとapt-cacheの機能をもつ。

aptコマンド

aptコマンドはapt-getの後発のコマンド。 主なオプションはapt-getと同じもの使える。

aptのリポジトリの登録

aptのリポジトリの登録はadd-apt-repositoryコマンドで可能。

3.6. RedHat系のパッケージ管理

3.6.1. rpmコマンドによるパッケージ管理

パッケージファイル名の構成

パッケージであるrpmファイルは以下のような構成となる。

sample_1.2.3-1_x86_64.rpm
  • sample … パッケージ名
  • 1.2.3 … バージョン番号
  • 1 … リビジョン番号
  • x86_64 … CPUアーキテクチャ

rpmコマンド

rpm -i <パッケージ名(.rpm含む)>
オプション説明
-v, –verbose詳細を表示
-h, –hash#で進捗表示
-i, –installインストール
-F, –freshenパッケージがインストールされていればアップグレード
-U, –upgradeパッケージがインストールされていればアップグレード。なければインストールする
-e, –eraseパッケージをアンインストール

使用例は以下の通り。

rpm -ivh nmap-5.51-2.el6.i686.rpm # nmapのインストール

rpm -qコマンド

rpmの照会モード。

rpm -q<オプション>
オプション説明
-a, –aインストール済みパッケージの全表示
-i, –info情報の表示
-f, –fileファイルをバッケージに
-l, –listパッケージ->ファイル群
-pパッケージ名でパッケージ指定
-R, –requires依存関係調べる
–changelog変更履歴見る
-K, –checksigRPMパッケージの電子署名の検証

使用例は以下の通り。

rpm -qa | grep bash # bashというパッケージ探す
rpm -qi bash # bashパッケージの情報取得
rpm -qR bash # bashの依存関係の調査

rpmパッケージの展開

rpmパッケージの展開はrpm2cpioコマンドで行う。 このコマンドではRPMバッケージをインストールせず、内容を展開を行う。

3.6.2. yumコマンドによるパッケージ管理

yumはAPTツール同様、パッケージ間の依存関係を解決しながらダウンロード、インストール、アップデート、アンインストールすることができ、またインターネット経由で最新パッケージ取得してくれるコマンド。

yumコマンド

yum <オプション> <パッケージ名>
オプション説明
installインストール
removeアンインストール
update全パッケージのアップデート
update [package]指定のパッケージのアップデート実施
check-updateアップデートパッケージが存在するパッケージを一覧表示
info [package]パッケージ情報の確認
listリポジトリにあるすべてのパッケージ情報表示
searchキーワード検索

パッケージの取得先(設定ファイル)

パッケージの設定ファイルは/etc/yum.conf/etc/yum.repos.d/*に保存される。

/etc/yum.repos.d/hogehoge.repoの中身の例は以下のように表示される。

...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

3.6.3. dnfコマンドによるパッケージ管理

dnfコマンドは基本的にyumとほぼ同じように使えるコマンド。

3.6.4. zipperコマンドによるパッケージ管理

openSUSEではzypperコマンドでパッケージ管理を行う。

3.7. 仮想環境のゲストOSとしてのLinux

3.7.1. インスタンス

インスタンスはクラウドサービス上の仮想的マシンのことを指す。 XaaSで提供される。

3.7.2. Cloud-initとは

cloud-init はクラウドにおけるインスタンスの早期初期化を行うLinuxパッケージのこと。 ディストリビューションで使用可能な場合はインストール後にインスタンスの多くの一般的なパラメータを直接設定できる。 設定できるパラメータは以下の通り。

  • ホスト名
  • SSH鍵
  • 一般ユーザー
  • インストールするパッケージ

4 - 4.UNIX/Linuxコマンド

Linuxの操作をするためのUNIX/Linuxコマンドに関する説明

4.1. シェル

4.1.1. シェルとシェルの種類

シェルとは

シェルはコマンドを解釈して実行するプログラムのこと。 利用可能なシェルは/etc/shellsで確認可能。

シェルの種類

シェル説明
shUNIX V7から標準添付されているUNIXの基本的なシェル
cshC言語スタイルの構文を持ったUNIX系OSの代表的なシェル
tcshCシェルの派生版の中で特にユーザーインターフェイス部分を中心に拡張されたシェル
kshBシェルと上位互換を保ちながら、Cシェルなどから優れた機能を取り込んだシェル
bashUNIX系のシェルの1つでLinuxで用いられる標準のシェル

ログインシェル

ログインシェルはシステムへのログイン直後に起動するシェルのことで、これはユーザごとに定義が可能。 ユーザごとのログインシェルは/etc/passwdファイルに記述される。

なお現在ログインしている自身が使用しているシェルはps $$コマンドで確認できる。

4.1.2. シェルの基本操作と設定

シェルのキーボード操作

入力キー説明
Tabキーコマンドやディレクトリ名などを補完する
Ctrl + C実行処理を中断する
Ctrl + Z実行処理を一時停止する
Ctrl + A行の先頭へカーソルを移動する
Ctrl + Dカーソル上にある文字列を1文字削除する
Ctrl + E行の最後へカーソルを移動する
Ctrl + Hカーソルの左側の文字列を1文字削除する
Ctrl + L画面をクリアして、現在の行だけを再表示する
Ctrl + Q画面への出力を再開する
Ctrl + S画面への出力を停止する

ディレクトリの指定

メタキャラクタ説明
~ホーム
.カレントディレクトリ
..1つ上のディレクトリ

4.1.3. シェル変数と環境変数

Linuxが扱う変数にはシェル変数と環境変数の2種類がある。

シェル変数

シェル変数は現在実行しているシェルの中だけで有効な変数のこと。 特徴は以下の通り。

  • シェルを終了すると失われる
  • 別のシェルから参照することはできない

利用方法はecho $変数名で行い、例は以下の通り。

echo $hoge
hoge=123

なおunset 変数名で定義した変数の削除が可能。

環境変数

環境変数は現在実行しているシェルとそのシェルで実行されたプログラムにも引き継がれる変数のこと。

利用方法はexport 変数名で行い、例は以下の通り。

hoge=123
export hoge

また主な環境変数は以下の通り。

環境変数説明
PWDカレントディレクトリ
HOSTNAMEホスト名
USER現在のユーザー
LOGNAMEログインシェルのユーザー名
HISTSIZEコマンド履歴の最大値
HISTFILEコマンド履歴を格納するファイル
HISTFILESIZEHISTFILEに保存する履歴数
LANGロケール
HOMEカレントユーザーのホームディレクトリ

またPATHは既存のパスの後ろに;区切りで追加して以下のように通す。

export PATH=$PATH:/additional/path

シェル変数/環境変数の確認

シェル変数と環境変数を確認するためにはsetコマンドを使用する。 また設定済みの環境変数を一覧表示するためには、envコマンドやprintenvコマンドを使用する。

4.1.4. コマンドの実行と引用句

コマンドの区切り文字との実行

コマンドの区切り文字でコマンドを挟むと以下のような効果がある。

<コマンド1> <区切り文字> <コマンド2>
区切り文字説明
;コマンドを同時に実行
&&最初に実行したコマンドが正常に終了できた場合のみ次コマンドを実行
||最初に正常にコマンド終了できなかった場合のみ次コマンドを実行
コマンドに引用句を使う
引用句説明
''常に文字列として扱う
""変数展開する
~~コマンド展開する
``コマンドを実行した結果を展開する

4.1.5. コマンド履歴の確認とマニュアルの確認

historyコマンド

historyコマンドはコマンド履歴を確認するコマンド

コマンド説明
history 数字数自分だけ過去の履歴を表示
!数字数字のコマンドを実行
!!直前のコマンドを実行

manコマンド

manコマンドはオンラインマニュアルページを閲覧できるコマンド。 マニュアルを構成するファイルは/usr/share/manにある。

man <オプション> コマンド | キーワード
オプション説明
-a全てのセクションのマニュアルを表示
-f指定された完全一致のキーワードを含むドキュメントを表示
-k指定された部分一致のキーワードを含むドキュメントを表示
-wマニュアルの置かれているディレクトリの表示

4.2. ファイル操作の基本コマンド

4.2.1. 基本的なコマンド

lsコマンド

カレントディレクトリを基準にそこに存在するファイルを表示するコマンド。

ls <オプション>
オプション説明
-Aすべて表示
-l詳細表示
-dディレクトリ自身の表示
-iinode番号表示
-t日付順
-hファイルサイズ表示

cpコマンド

ファイルをコピー/上書きするコマンド。

cp <オプション> <移動元> <移動先>
オプション説明
-f強制上書き
-i対話モードで上書き確認
-pアクセス権/所有者などの保護
-r再帰的にコピーする(ディレクトリコピーには必須)

mvコマンド

ファイルを移動させるコマンド。

mv <オプション> <移動元> <移動先>

mkdirコマンド

ディレクトリを作成するコマンド。

mkdir <ディレクトリ名>
オプション説明
-m指定したアクセス権でディレクトリ作成
-p親ディレクトリも作る

rmコマンド

ファイルやディレクトリを削除するコマンド。

rm -rf <ファイル名>
オプション説明
-f強制的に削除
-r再帰的に削除
-i削除に確認をする

rmdirコマンド

空のディレクトリを削除するコマンド。

rmdir <ディレクトリ名>

touchコマンド

タイムスタンプの更新やファイルの作成を行うコマンド。

touch <ファイル名>
オプション説明
-aアクセス時間の更新
-m更新時間のみの更新
-tタイムスタンプの指定

fileコマンド

ファイルがテキストかバイナリか文字コードが何か確認するコマンド。

file <ファイル名>

typeコマンド

コマンドの実態を調査するコマンド。

type <コマンド>

whichコマンド

コマンドのフルパス(どこに存在するか)を教えるコマンド。

which <コマンド>

4.2.2. メタキャラクタ(正規表現)

メタキャラクタを用いることで絞り込みなどが行える。

メタキャラクタ説明
*0文字以上の任意の文字列
?任意の1文字
[]括弧内で列挙された文字のいずれか一文字
[!]括弧内で列挙された文字にマッチしない任意の一文字
{}フレーズ展開

4.2.3. ファイル内容の確認/操作を行うコマンド

catコマンド

ファイルの内容を表示するコマンド。 -nオプションで各行ごとに行番号を付加する。

cat <ファイル名>

headコマンド

ファイルの先頭n行を表示するコマンド。

head <オプション> <ファイル名>
オプション説明
-n先頭から表示する行数の指定
-行数先頭から表示する行数の指定
-c バイト数先頭から表示するバイト数の指定

tailコマンド

ファイルの末尾n行を表示するコマンド

tail <オプション> <ファイル名>
オプション説明
-n末尾から表示する行数の指定
-行数末尾から表示する行数の指定
-c バイト数末尾から表示するバイト数の指定
-fファイルの末尾に追加された行をリアルタイムで表示

cutコマンド

テキストファイルの各行から指定した部分の文字列を取り出して表示するコマンド。

cut <オプション> <ファイル名>
オプション説明
-c 文字数指定したテキストファイルから切り出す文字位置を指定
-d 区切り文字フィールドの区切り文字を指定
-f フィールド取り出すフィールドの指定

nlコマンド

文字列の行だけでなくヘッダ、本文、フッタの部分に分けて行番号を付けるコマンド。

nl -b a data.txt
オプション説明
-b パラメータ本文に行番号を付加
-h パラメータヘッダに行番号を付加
-f パラメータフッタに行番号を付加
パラメータ説明
a全ての行に番号をつける
t空白行には番号をつけない
n行番号の付加をつけない

odコマンド

バイナリファイルの内容をASCII文字、8進数、16進数のいずれかで表示するコマンド。

od -t x data.txt
オプション説明
-jバイナリファイルの bytes の場所から表示を開始
-t表示タイプの指定(以下のようなタイプを指定可能)
タイプ指定文字説明
a文字の名前
cASCII文字かバックスラッシュつきのエスケープ文字
d符号付きの10進数
f浮動小数点数
o8 進数
u符号なしの10進数
x16 進数

joinコマンド

2つのファイルを読み込み、共通のフィールドを持つ行の連結を行うコマンド。 -j 数字オプションで連結フィールを指定できる。

join -j 1 data1.txt data2.txt

pasteコマンド

1つ以上のファイルを読み込み、一致する行を区切り文字を使用して連結するコマンド。 -d 区切り文字オプションで区切り文字の指定が可能。

 paste -d"," date1.txt date2.txt

trコマンド

文字列の変換、削除を行うコマンド。

tr <オプション> <文字列1> <文字列2>
オプション説明
-d「文字列1」で合致した文字列の削除
-s連続するパターン文字列を1文字として処理
文字列の指定方法説明
[ :alpha:]英字
[ :lower:]英小文字
[ :upper:]英大文字
[ :digit:]数字
[ :alnum:]英数字
[ :space:]スペース

sortコマンド

行単位でファイルの内容をソートするコマンド。

sort <オプション> data.txt
オプション説明
-b行頭の空白を無視
-f大文字小文字の区別を無視
-r降順にソート
-n数字を文字ではなく数字として処理

uniqコマンド

並び替え済みのデータから重複行を削除して、1行にまとめて表示するコマンド。 重複行を削除するために、ファイルの内容をsortコマンドなどにより並び替えてから実行することが多い。

sort data.txt | uniq
オプション説明
-d重複している行のみ出力
-u前後の行と異なる行を表示

splitコマンド

指定サイズでファイルを分割するコマンド。

split -l 10 data.txt
オプション説明
-l 行数指定した行数でのファイル分割。-l を省力することも可能。
-b バイト指定したバイト数でのファイル分割。

prコマンド

印刷前に使用されるファイルの書式を整えるコマンド。

pr -l 30 +1:5 data.txt
オプション説明
+開始ページ [:終了ページ]開始ページや終了ページの指定
-h ヘッダ文字列ヘッダに表示されるファイル名を、指定した文字に変更
-l ページ長ヘッダとフッタを含めたページの長さを行数で指定

fmtコマンド

テキストファイルを決められた桁に整形するコマンド。 -w 文字幅オプションで位置行幅を指定可能。

fmt <オプション> <ファイル名>

expand/unexpandコマンド

expandコマンドはテキストファイルの中にあるタブをスペースに変換するコマンド。 unexpandコマンドはスペースをタブに変換するコマンド

expand/unexpand <オプション> <ファイル名>
expandのオプション説明
-i行頭のタブのみスペースへ変換。
-t 数値置き換える桁数の指定。タブ幅のデフォルトでは8桁
unexpandのオプション説明
-a行頭以外のスペースも変換。
-t 数値置き換える桁数の指定。デフォルトでは8桁。

wcコマンド

指定したファイルの行数、単語数、文字数を表示するコマンド。

wc data.txt
オプション説明
-c文字数だけの表示
-l行数だけの表示
-w単語数だけの表示

4.3. パイプとリダイレクト

4.3.1. 標準入出力

Linuxのコマンドは、標準入力、標準出力、標準エラー出力を処理するように作成されてる。 ストリームはデータの入出力に伴うデータの流れを指し、ディスプレイ出力、キーボード入力等すべてがこれに抽象化されている。

ストリームとしての基本的なインタフェースは以下の通り。

番号(ファイルディスクリプタ)入出力名デフォルト
0標準入力キーボード
1標準出力画面(端末)
2標準エラー出力画面(端末)

4.3.2. パイプ

パイプ\|標準出力を標準入力につなぐやつもののこと。 使用例は以下の通り。

ls | wc -l 
書式説明
コマンド1コマンド2
コマンド1 2>&1コマンド2
コマンド1tee ファイル

teeコマンド

teeコマンドは標準入力から読み込んでファイルに書き込み、次のコマンドへ実行結果を引き渡せられるもの。 使用例は以下の通り。

オプション-aでファイルに追記する。

ls -l | tea data.txt

4.3.3. リダイレクト

リダイレクトを使用することでコマンドの実行結果を画面上ではなくファイルに保存することが可能。

リダイレクト説明
>出力のリダイレクト
»出力をファイルに追記
<入力のリダイレクト
«入力終端文字の指定
2>エラー出力をファイルに設定し、コマンドを実行
2>&1標準出力とエラー出力をファイルに設定し、コマンドを実行

4.3.4. ヒアドキュメント

ヒアドキュメントは<<EOFで始まる特定の文字列(この例ではEOF)が現れるまで標準入力から入力を受け付けるもの。

5 - 5.Linuxのテキストエディタの使い方

vi/vim、nano等の使い方に関する説明

5.1. viの使用方法

Escで入力モードからコマンドモードへ切り替え。

5.1.1. viの基本的なコマンド

コマンド名説明
vi <ファイル名>ファイルを開くまたは新規作成する
vi Return キー新規ファイルを開く (ファイル名は後で指定)
vi -r <ファイル名>システムクラッシュ時のファイルを復元して開く
view <ファイル名>読み取り専用でファイルを開く

5.1.2. viのカーソル操作

コマンド名説明
h左に移動
l右に移動
k上に移動
j下の行の先頭文字 (空白ではない) に移動
0行頭へ移動( カーソルのある行の左端へ移動 )
$行末へ移動( カーソルのある行の右端へ移動 )
H画面の一番上の行頭へ移動
L画面の一番下の行末へ移動
ggファイルの先頭行へ移動
Gファイルの最終行へ移動
Ctrl-F1 画面先のページを表示
Ctrl-D半画面先にスクロール
Ctrl-B1 画面前のページを表示
Ctrl-U半画面前にスクロール

5.1.3. 文字と行の挿入

コマンド名説明
aカーソルの右にテキストを追加
A行の末尾にテキストを追加
iカーソルの左にテキストを追加
I行の先頭にテキストを挿入
oカーソルがある下の行にテキストを挿入
Oカーソルがある上の行にテキストを挿入

5.1.4. テキストの削除

コマンド名説明
xカーソルの文字を削除
Xカーソルの左文字を削除
dwワードの削除
dd行の削除
yyカーソル行のコピー
pカーソルの右側に張り付け
Pカーソルの左側に張り付け

5.1.5. 検索機能

入力キー説明
/文字列カーソル位置からファイル末尾に向かって、指定した文字列の検索
?文字列カーソル位置からファイル先頭に向かって、指定した文字列の検索
n上記の検索 ( /文字列、?文字列 ) による次の文字列の検索
N上記の検索 ( /文字列、?文字列 ) による次の文字列の検索 ( 逆方向 )

5.1.6. ファイルの保存とviの終了

コマンド名説明
ZZ上書き保存しviの終了
:w内容の保存
:q!保存せずに終了
:wq編集データを保存して終了
:wq!内容を上書き保存して終了

5.2. Nanoの使用方法

5.2.1. Nanoの起動と終了方法

コマンド名説明
nano <ファイル名>nanoでファイルを開くまたは新規作成する

5.2.2. Nanoの操作

コマンド名説明
Ctrl + O編集内容の保存
Ctrl + Xnanoの終了
Ctrl + KShift + ←→ で文字列の指定し文字列をカットする
Ctrl + U文字列のペースト
Ctrl + \文字列の置換
alt + U前回の操作を取り消す
Ctrl + W文字列検索
Ctrl + RCtrl + Tでカレントディレクトリ起点にファイル内容挿入

5.3. Vimの使用方法

6 - 6.ファイルとプロセスの管理

ファイルの圧縮/解凍、ファイルの権限、プロセス/ジョブ管理などに関して

6.1. 基本的なファイルの管理

6.1.1. ファイルの圧縮と解凍

ファイルの圧縮解凍

ファイルの圧縮解凍を行うコマンドはいくつかあり、gzip, bzip2, xzなどがある。

gzipbzip2xz
圧縮コマンドgzipbzip2xz
圧縮率低い高い
時間短い長い

gzipコマンド

ファイルを圧縮と解凍するコマンド。

gzip <ファイル>
オプション説明
-d圧縮ファイルを展開 (解凍)
-c圧縮ファイルを標準出力へ出力
-rディレクトリ内の全てのファイルを圧縮
-k圧縮前ファイル残す

gunzipコマンド

ファイルを解凍するコマンド。 gunzipコマンドは gzip -d と同じ実行結果が得られる。

gunzip <ファイル名>
オプション説明
-c出力を標準出力に展開して、元ファイルは変更しない
-fすでにファイルがある場合は上書きを行い、強制的に解凍
-rディレクトリ内の全てのファイルを再帰的に解凍

bzip2コマンド

gzipよりも処理時間はかかるが圧縮効率の高いコマンド。

bzip2 <オプション> <ファイル>
オプション説明
-d圧縮ファイルを展開 ( 解凍 )
-c圧縮ファイルを標準出力へ出力
-k圧縮前ファイル残す

xzコマンド

bzip2よりも処理時間はかかるが圧縮効率の高いコマンド。

xz <オプション> <ファイル>
オプション説明
-d圧縮ファイルを展開 ( 解凍 )
-c圧縮ファイルを標準出力へ出力
-k圧縮前ファイル残す

6.1.2. 圧縮ファイルの閲覧

zcat, bzcat, xzcatなどがある。

コマンド対応拡張子
zcat.gz
bzcat.bz
xzcat.xz

6.1.3. アーカイブの作成と展開

アーカイブとは

アーカイブは複数ファイルをまとめたもの。 ディレクトリ単位で圧縮を行うにはまずディレクトリをアーカイブにする必要がある。

tarコマンド

tarコマンドはファイルやディレクトリを1つのアーカイブファイルにしたり、圧縮/展開するコマンド。 デフォルトで圧縮しないため、tarコマンドで圧縮を行うためには-zオプションや、-jオプションを指定する必要がある。

tar <オプション> <ファイル>
オプション説明
-cアーカイブの作成
-xアーカイブからファイルの取り出し
-tアーカイブの内容の確認
-f ファイル名アーカイブファイル名の指定
-zgzip による圧縮 ・ 展開
-jbzip2 による圧縮 ・ 展開
-J7zip による圧縮 ・ 展開
-v詳細な情報の表示
-uアーカイブ内にある同じ名前のファイルより新しいものだけを追加
-rアーカイブにファイルの追加
-N指定した日付より新しいデータのみを対象とする
-M複数デバイスへの分割
–deleteアーカイブからファイルの削除

cpioコマンド

cpioはファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーできるコマンド。

ls | cpio -o > /tmp/backup
オプション説明
-i オプション パターンアーカイブからファイルを抽出
-o オプションアーカイブの作成
-p オプション ディレクトリファイルを別のディレクトリにコピー
オプション説明
-A既存のアーカイブファイルに追加
-d必要な場合にディレクトリの作成
-rファイルを対話的に変更
-tコピーせず、入力内容の一覧表示
-vファイル名の一覧表示

ddコマンド

入力側に指定したファイルからの入力をファイルまたは標準出力に送るコマンド。

dd if=/dev/zero of=/dev/sda bs=446 count=1
オプション説明
if= 入力ファイル入力側ファイルの指定
of= 出力ファイル出力側ファイルの指定
bs= バイト数入出力のブロックサイズの指定
count= 回数回数分の入力ブロックをコピー

6.2. ファイルを管理する設定値

6.2.1. ファイルの情報を表すパラメータ

ファイルの情報は以下のようにls -l fugafugaを行うと表示される。

drwxr-xr-x 3 wand docker 4096  2月 26 22:54 .

これは以下の情報を含む

  • d … ファイルのタイプ
  • wxr-xr-x … アクセス権(所有者, 所有グループ, その他のユーザ)
  • 3 … リンク数
  • wand docker … 所有者,所有グループ
  • 4096 … ファイルサイズ

アクセス権

Linuxで作成されるファイルやディレクトリにはアクセス権(パーミッション)が設定される。 これでユーザごとにファイルへのアクセスの許可または禁止を設定できる。

アクセス権表記説明
読み取りrread。ファイルの読み取りが可能 ( 内容表示など )
書き込みwwrite。ファイルへの書き込みが可能 ( 編集や上書きコピーなど )
実行xexecute。ファイルの実行が可能 ( プログラムやシェルスクリプトの実行 )

SUID

ユーザはUIDと呼ばれるID番号で管理されている。 SUID(Set User ID)は一時的に別のUIDのユーザに変更できる機能のこと

chmodコマンドでSUIDを設定する場合は4000をパーミッション設定時に加算、またはu+sを追加する。

chmod 4755 testdata.txt
chmod u+s testdata.txt

SGID

SGIDはSUIDは所有者の権限で動作するのに対して、グループの権限で動作する。

chmodコマンドでSGIDを設定する場合は2000をパーミッション設定時に加算、またはg+sを追加する。

chmod 2755 testdata.txt
chmod g+s testdata.txt

スティッキービット

スティッキービットは所有者とrootユーザのみが名前の変更と削除を行えるようにする仕組み。 全ユーザーがファイルを作成できるが作成したファイルを他人がファイル名の変更や削除をできないようにしたい場合に使用する。

chmodコマンドでスティッキービットを設定する場合は1000をパーミッション設定時に加算、またはo+tを追加する。

6.2.2. パーミッションの設定変更

chmodコマンド

アクセス権を変更するコマンド。 -Rオプションで指定したディレクトリ以下の全てのファイルのアクセス権の変更が可能。

chmod 644 text.txt
chmod go+w testdata.txt
カテゴリー説明
u所有者
gグループ
oその他のユーザ
a全てのユーザ
定義説明
+アクセス権の追加
-アクセス権の削除
-アクセス権の指定
権限説明
r読み取り権限
w書き込み権限
x実行権限
sSUID または SGID
tスティッキービット

umaskコマンド

umask値の確認とumask値の設定を行うコマンドでデフォルトのアクセス権を変更できる。

umask <マスク値>

passwdコマンド

パスワードを変更できるコマンド。 /etc/passwdに変更情報が保存される。

6.2.3. ファイルの所有者の管理

chownコマンド

所有者の変更を行うコマンド。実行にはroot権限が必要。 -Rで再帰的実行が可能。

chown root piyo

chgrpコマンド

グループの変更の変更を行うコマンド。一般ユーザーでも使用が可能。 -Rで再帰的実行が可能。

chgrp wand fuga

6.2.4. ハードリンクとシンボリックリンク

ファイルの実体とファイル名をつなぐ事をリンクと呼ばれ、リンクにはシンボリックリンクとハードリンクの以下の2種類がある。

ハードリンク

ハードリンクは1つのファイルの実体を複数のファイル名で表せるリンク。同じファイルの実体を共有する方式。 特徴は以下の通り。

  • iノード番号(ファイルやディレクトリと1対1で紐づく情報の番号)が同じ
  • リンク元のファイルが移動、削除されても、ファイルの実体にはアクセスできる
  • 異なるファイルシステム上のファイルやディレクトリにリンクできない

シンボリックリンク

シンボリックリンクはリンク元ファイルが配置されている場所にリンクする方式。 プログラミング言語におけるポインタの概念に近い。

特徴は以下の通り。

  • 新しいiノード番号が付与される
  • リンク元のファイルが移動、削除されると、リンク元のファイルの実体にアクセスできない
  • 異なるファイルシステム上のファイルやディレクトリにリンクできる

6.3. プロセスの管理

6.3.1. プロセスの監視

プロセスとは

プロセスはOSが動作中のプログラムを管理する基本単位OSが動作中のプログラムを管理する基本単位のこと。 ハードディスクからメモリ上に読み出され、実行されているプログラムがそれぞれ表される。

psコマンド

プロセス情報を確認するコマンド。 オプションは-つきとそうでないもの混在する。

ps aux #全部の実行中プロセス確認
オプション説明
a他のユーザーの全てのプロセスを表示
fプロセスの親子関係を表示
uプロセスのユーザー情報を表示
x端末を利用していない全てのプロセスを表示
-e全てのプロセスを表示
-lプロセスの詳細情報の表示
-p PID指定したプロセスID(PID)の情報のみ表示
-C プロセス名指定した名前のプロセスのみ表示
-w長い行を折り返して表示

画面表示例は以下の通り。

PID  TTY      STAT   TIME COMMAND
1358 tty1     Ssl+   0:00 /usr/lib/gdm3/gdm-wayland-session gnome-session -
1362 tty1     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --aut
1380 tty1     Sl+    0:26 /usr/bin/gnome-shell

topコマンド

現在実行中のプロセスをリアルタイムに表示するためのコマンド。 デフォルトCPU使用量降順で表示される「q」で終了可能。

top

pstreeコマンド

プロセスの親子関係(親プロセス、子プロセス)を確認するコマンド。

pstree

6.3.2. プロセスの終了

killコマンド

killコマンドはプロセスにシグナルを送るコマンド。

kill <シグナルID> <プロセスID>
シグナルIDシグナル名動作
1HUPハングアップ
2INT割り込み(Ctrl + C)
9KILL強制終了
15TERM終了(デフォルト)
18CONT停止しているプロセスを再開
19STOP一時停止

pgrepコマンド

PID調べるコマンド。

pgrep <プロセス名>

killallコマンド

プロセス名指定してkillするコマンド。

killall <プロセス名>

pkillコマンド

プロセス名指定して-u, -gでプロセスの実行ユーザー・実行グループ指定しながらkillするコマンド。

pkill -u $(whoami) -SIGKILL bash

6.3.3. ジョブ管理

ジョブとは

ジョブはユーザーがコマンドやプログラムをシェル上で実行するひとまとまりの処理単位のこと。 パイプでつないだものは全体で1ジョブとなる。

フォアグラウンドジョブとバックグラウンドジョブ

ジョブにはフォアグラウンドジョブとバックグラウンドジョブの2種類がある。 通常はフォワグラウンドジョブで実行される。

ジョブ説明
フォアグラウンドジョブジョブの実行中は、シェルは停止する。
バックグラウンドジョブジョブとシェルが同時に動作して、シェルは停止しない。

コマンドラインの最後に & を追加することで、コマンドはバックグラウンドジョブで実行できる

ls -la &

jobsコマンド

実行中のジョブを確認できるコマンド。

jobs

nohupコマンド

ログアウト後も処理続行させるためのコマンド。

sudo nohup updatedb &

bgコマンド

停止中のジョブをバックグラウンドで動かすコマンド。

bg <ジョブ番号>

fgコマンド

バックグラウンドで動いているジョブをフォアグラウンドで動かすコマンド。

fg <ジョブ番号>

6.3.4. システム状況の確認

freeコマンド

システムの物理メモリとスワップメモリの使用量、空き容量を表示するコマンド。

free <オプション>
短いオプション意味
-bメモリの量をバイト単位で表示する
-kメモリの量をKB単位で表示する(デフォルト) ※
-mメモリの量をMB単位で表示する
-gメモリの量をGB単位で表示する
メモリの量をTB単位で表示する
-h読みやすい単位で表示する
単位を換算する際に1024ではなく1000で割って計算する
-lLowメモリとHighメモリの状況も表示する ※※
-t物理メモリとスワップメモリの合計を示す行も表示する
-s 間隔再出力の間隔を「ss.tt秒」で指定する(デフォルトは1回出力して終了する)
-c 回数再出力する回数を指定する(デフォルトは1回出力して終了する)

uptimeコマンド

システムの稼働時間、システムの平均負荷状況はuptimeコマンドにより確認できるコマンド。

uptime

以下情報が確認可能。

  • システム稼働時間
  • 現在ログイン中のユーザ数
  • システムの平均負荷状況

unameコマンド

システムやカーネルの情報を表示するコマンド。

uname <オプション>
オプション説明
-a, –all全ての情報を表示
-nネットワークノードとしてのホスト名を表示
-rカーネルのリリース番号を表示
-sカーネル名を表示(標準)
-vカーネルのバージョンを表示
-mマシンのハードウェア名を表示
-pプロセッサの種類を表示
-iハードウェアプラットフォームを表示
-oOS名を表示

watchコマンド

コマンドをn秒ごと(デフォルトでは2秒間隔ごと)に繰り返し実行させるコマンド。

watch <コマンド>
短いオプション意味
-tヘッダを表示しない
-eエラー時(実行したコマンドエラーコード0以外で終了したとき)はwatchコマンドも終了する
-bエラー時にはビープ音を鳴らす
-d直前の実行結果から変化した箇所をハイライト表示する。「permanent」または「cumulative」オプションを付けると初回実行時から変化した箇所を表示する(「-d=permanent」のように指定)
-cANSIによるスタイル指定を行う
-g実行結果が変化したらwatchコマンドを終了する
-n 秒数実行間隔を秒数で指定する(設定できる最小値と最小間隔は0.1秒)
-p実行のタイミングを厳密にする
-x指定したコマンドを「sh -c」ではなく「exec」コマンドで実行する

6.4. プロセスの実行優先度設定

6.4.1. プロセスの実行優先度の変更

プロセスの実行優先度を変更することにより、CPU時間を多く割り当てる事が可能。 設定はnice値(値域[-20,+20])という小さいほど優先順位高いの値で設定ができる。

6.4.2. プロセスの実行優先度に関するコマンド

niceコマンド

コマンド実行時の優先度指定を指定できるコマンド。

nice -n -10 <プロセス名>

reniceコマンド

実行中プロセスの優先度変更ができるコマンド。

renice -10 -p 1200

6.5. 複数端末の使用

6.5.1. ターミナルマルチプレクサ

ターミナルマルチプレクサは一つの端末画面の中に複数の仮想端末を作成/切り替えができる仕組み。 デタッチ/アタッチ機能、つまり各ウィンドウの作業状況を保ったまま終了/再開が可能。

有名なターミナルマルチプレクサとしてはtmuxscreenがある。

6.5.2. Tmuxの使い方

起動/操作コマンド

コマンド説明
tmuxセッションを起動
tmux new -s 名前名前付きセッションを起動
exitセッションを終了
Ctrl-b dセッションを一時的に中断してメインに戻る (Detach)
tmux a中断していたセッションに戻る (Attach)
tmux a -t 名前中断していた名前付きセッションに戻る
Ctrl-b sセッションの一覧を表示
tmux list-sessionsセッションの一覧を表示
tmux kill-session -t 名前指定したセッションを終了

ウィンドウ操作

コマンド説明
Ctrl-b c新規ウィンドウを作成 (Create)
Ctrl-b 数字数字で指定したウィンドウに移動
Ctrl-b n次のウィンドウに移動 (Next)
Ctrl-b p前のウィンドウに移動 (Prev)
Ctrl-b l以前のウィンドウに移動 (Last)
Ctrl-b wウィンドウの一覧を表示 (Window)
Ctrl-b ,ウィンドウ名を変更
Ctrl-b 'ウィンドウ番号を指定して移動
Ctrl-b .ウィンドウ番号を変更
Ctrl-b &ウィンドウ名を終了 (確認付き)
exitウィンドウを終了

7 - 7.パーティションとファイルシステム

Linuxのパーティション/ファイルシステムに関して

7.1. ハードディスクとその関連規格

7.1.1. Linuxにおけるハードディスクの利用方法

Linuxでハードディスクを使用するには以下のステップを行う必要がある。

  1. 電源OFFの状態で、ハードディスクをシステムに物理的に接続
  2. 追加したハードディスクのデバイスファイルが作成されていることを確認
  3. ハードディスクにパーティションを切る(fdiskコマンド)
  4. 各パーティションにおいてext3ファイルシステムを作成(mke2fsコマンド)
  5. ファイルシステムのマウント(mountコマンド)

7.1.2. ハードディスクの接続規格

HDDの接続規格には以下のようにある。

HDDの接続規格説明
SATA (Serial ATA)現在主流の規格。IDEよりもデータ転送速度が速い。
IDE (Integraded Drive Electronics)SATAが出てくる前まで主流だった規格。
SAS (Serial Attached SCSI)SATAより高速・高信頼性のある企画。サーバ用に使用される。
SCSI (Small Computer System Interface)さまざまな周辺機器を接続する一般的な規格。高速、高価でありSCSIカードが必要。
USB (Universal Serial Bus)USBポートを持つ外付けのHDDを接続する際に使用される規格。

7.1.3. デバイスファイル

起動中にハードディスクを新しく検出すると、検出されたデバイスを操作するためのデバイスファイルが/devディレクトリに自動的に追加される。 デバイスの命名規則は以下の通り。

デバイスファイル説明
/dev/hdaプライマリのマスターに接続したHDD
/dev/hdbプライマリのスレーブに接続したHDD
/dev/hdcセカンダリのマスターに接続したHDD
/dev/hddセカンダリのスレーブに接続したHDD
/dev/sda1番目のSCSI/SATA/USBに接続したHDD
/dev/sdb2番目のSCSI/SATA/USBに接続したHDD
/dev/sdc3番目のSCSI/SATA/USBに接続したHDD
/dev/sdd4番目のSCSI/SATA/USBに接続したHDD
/dev/sr01番目のCD/DVDドライブ
/dev/st01番目のテープドライブ

lsblkコマンド

ブロックデバイスを一覧するコマンド。

lsblk

7.2. パーティションの種類

7.2.1. パーティションとは

パーティションは1台のディスクドライブを分割する論理的な区画のこと。 パーティションごとに異なるファイルシステムを作成することが可能

パーティションには基本パーティション、拡張パーティション、論理パーティションの種類がある。

基本パーティション

基本パーティションはディスクに最大4つまで作れることができるパーティション。 ディスク/dev/sdaに対して/dev/sda1-/dev/sda4と命名される。

MBRのうち64バイト(16x4)はこの情報に充てられ、ファイルシステムが格納される。

拡張パーティション

拡張パーティションは基本パーティションの1つを拡張パーティションにしたもので、ファイルシステムではなく論理パーティションが格納される基本パーティションのうち1つのみしか拡張パーティションとして使用できない

論理パーティション

論理パーティションは拡張パーティション内に作成されたパーティションのこと。 デバイスファイルの命名測は必ず5番から始まる。

7.2.2. UEFIベースのシステム分割

UEFIでは拡張パーティション、論理パーティションは存在しない

7.2.3. パーティションに分割するメリット

パーティション分割のメリットは以下の通り。

  • 障害による被害をパーティション内に限定させる
  • 空き容量が足りなくなった場合の影響を少なくする
    • ログであふれた場合など

7.2.4. パーティション形式のMBRとGPT

MBRとGPTはパーティション形式。

MBRGPT
ハードディスク制限2GB-
基本パーティション4個128

MBR

MBR(Master Boot Record)は1983年にIBM PC DOS 2.0に初発表された古いディスクタイプのこと。 BIOSをサポートする。

MBR

MBRセクターとパーティションで構成される。 特徴は以下の通り。

  • 基本パーティションと拡張パーティションといった2種類のみを作成可能
  • 最大4つのパーティションが作成可能
  • MBRディスクの最大容量の制限が2TB

GPT

GPT(GUIDパーティションテーブル)はMBRより新しい規格。 UEFIをサポートする。

GPT

保護MBRとプライマリーGPTヘッダ、パーティションエントリで構成される。 特徴は以下の通り。

  • 基本的には無制限なパーティションが作成可能
  • windowsではパーティションを最大128個作成可能
  • 拡張パーティション、論理パーティションがない
  • MBRディスクより安全性と信頼性が高い

7.3. ルートファイルシステム

ルートファイルシステムは/を含むファイルシステムのこと。 Linuxシステムを構築する際は複数のパーティションを用意し/var, /homeなどのディレクトリは別のパーティションを割り当ててマウントするのが一般的となる。なおこの場合は/var/homeなどは独立したファイルシステムとなる。

なお必ずルートファイルシステムに置く必要のあるディレクトリは以下の通り。

  • /bin … システムに必要なコマンド、プログラム。一般ユーザー用
  • /sbin … システムに必要なコマンド、プログラム。管理者用
  • /etc … システムの設定ファイル群
  • /lib … 共有ライブラリ
  • /dev … デバイスファイル

7.4. パーティション管理のコマンド

7.4.1. fdiskコマンド

パーティションの作成、削除、変更、情報表示等ができるコマンド。

fdisk <オプション> <デバイスファイル>

情報表示

-lオプションで現在のパーティションテーブルの状態を表示する。

fdisk -l /dev/sda

対話形式でパーティションの管理を行う

パーティションの作成、削除、変更、情報表示のためには、fdiskコマンドを使用する。

fdisk /dev/sda
操作コマンド説明
m使用可能なサブコマンドの一覧表示
p現在のパーティションテーブルの表示
n新しいパーティションテーブルの作成
d既存のパーティションテーブルの削除
l設定可能なパーティションタイプの一覧表示
aブートフラグをオン、またはオフにする
tパーティションタイプの設定、変更
wパーティションテーブルの変更を保存して終了
qパーティションテーブルの変更を保存せずに終了

7.4.2. gdiskコマンド

GPTを使用してパーティションの作成、削除、変更、情報表示等ができるコマンド。

gdisk <オプション> <デバイスファイル>

情報表示

-lオプションで現在のパーティションテーブルの状態を表示する。

gdisk -l /dev/sda

対話形式でパーティションの管理を行う

パーティションの作成、削除、変更、情報表示のためには、gdiskコマンドを使用する。

gdisk /dev/sda
操作コマンド説明
lパーティションタイプを一覧表示する
nパーティションを作成する
dパーティションを作成する
pパーティションテーブルを作成する
tパーティションタイプを変更する
wパーティションテーブルの変更を保存して終了する
qパーティションテーブルの変更を保存しないで終了する
?ヘルプメニューを表示する。

7.4.3. partedコマンド

MBR,GPT両対応したパーティションの作成、削除、変更、情報表示等ができるコマンド。

parted <オプション> <デバイスファイル>

情報表示

-lオプションで現在のパーティションテーブルの状態を表示する。

parted -l /dev/sda

対話形式でパーティションの管理を行う

パーティションの作成、削除、変更、情報表示のためには、paretdコマンドを使用する。

parted /dev/sda
操作コマンド説明
mklabel ラベル新しいラベルを作成する。2TB以上のディスクの場合は「gpt」を指定してGPT、それ以下の場合は「msdos」を指定してMBRにパーティション構成を
格納する。loop/bsd/macなども使用できる。
mkpart パーティションタイプ開始場所,終了場所パーティションタイプはprimary(基本パーティション)、extend(拡張パーティション)、logicalを指定する。
指定した開始から終了までの領域でパーティションを作成する
(例:0MBから150MB、0%から15%などのように指定する)
mkfs 番号 ファイルシステム指定したパーティション番号に指定したファイルシステムを作成する。ファイルシステムにはfat16/fat32/ext2/linux-swapなどが選択できる。
それ以上のファイルシステムは別コマンドを利用する必要がある
printパーティション情報を表示する
quitpartedを終了する
resize パーティション番号開始 終了指定した番号のパーティションを開始、終了で指定する領域にサイズ変更する。ファイルシステムが既に作られている必要がある
rm パーティション番号指定した番号のパーティションを削除する
select デバイス指定したデバイスを対象に扱う
unit 単位デフォルトのサイズ単位を指定する。TB/TiB/GB/GiB/MB/MiBなどを指定できる
set パーティション番号 フラグ 状態指定したフラグを設定する。フラグは「boot」、「root」、「swap」など、状態を「on」「off」を指定する
help利用できるコマンドを表示する

7.5. ファイルシステム

7.5.1. ファイルシステムとは

ファイルシステムはパーティション上に作成されるもので、ファイルシステムの作成によりファイルが保存できるようになる。 ファイルシステムは以下要素で構成される。

  • ファイルの中身情報
  • inode(Indexノード) * ファイルの属性 * 管理データ

7.5.2. ファイルシステムの種類

ファイルシステムは以下のようなものがある。

Linux向けのファイルシステム

ファイルシステム説明
ext2標準
ext3ext2機能+ジャーナリング機能
ext4ext3+拡張機能

UNIX系OSから移植されたファイルシステム

ファイルシステム説明
XFSSGI社が開発。ジャーナリング機能あり
JFSIBM社が開発。ジャーナリング機能あり

その他のファイルシステム

ファイルシステム説明
Brtfs高機能なファイルシステム
iso9660CD-ROMのファイルシステム
msdosMS-DOSのファイルシステム
vfatSDカードや古いwindowsのファイルシステム
exFATFAT後継規格でフラッシュメモリ向けのファイルシステム

7.5.3. ファイルシステムのマウント

マウントはあるパーティションとあるディレクトリを関連づける作業のこと。 パーティションにファイルシステムを作成した後、マウントを行う必要がある。

恒常的なマウント設定

恒常的なマウントを行うためには以下の手順でマウントを行う必要がある。

  1. /etc/fstabファイルの編集
  2. mountコマンドの実行、または再起動(init 6)の実行

/etc/fstabの書き方

/etc/fstabファイルは以下のように記述される。

/dev/sda5  /home  ext4  defaults  1  2

左から順に以下意味となる。

  1. マウントするデバイスファイル名
  2. マウントポイント
  3. ファイルシステムの種類(ext2,xfsなど)
  4. マウントオプション(async, auto, defaults, exex, noexecなど)
  5. dumpコマンドによるアップデート対象かどうかの指定(0:バックアップ必要なし、1:バックアップ必要あり)

mountコマンド

ファイルシステムのマウントを行うコマンド。

mount /dev/sda6 /home3

unmountコマンド

現在マウントされているファイルシステムをアンマウントするコマンド。

unmount  /dev/sda6 /home3

7.5.3. ファイルシステムの確認コマンド

dfコマンド

ファイルシステムの空き容量やinodeの使用状況が確認できるコマンド。 ファイルシステムの空き容量の表示ができる。

df <オプション> <デバイス名/ディレクトリ>
オプション説明
-iinodeの使用状況を表示
-h容量を単位(MBやGB)で表示
-k容量をKB単位で表示
-m容量をMB単位で表示

duコマンド

ディレクトリやファイルの容量を表示するコマンド。 ディレクトリ内のファイルが使用している容量を表示できる。

du <オプション> <デバイス名/ディレクトリ>
オプション説明
-aディレクトリだけでなく、ファイル容量も表示
-c合計容量も同時に表示
-h容量を単位(MBやGB)に変換して表示
-k容量をKB単位で表示
-m容量をMB単位で表示
-s指定したファイルやディレクトリのみの合計を表示
-Sサブディレクトリ内の容量を含まずに合計を表示

7.5.4. ファイルシステムの作成と修復のコマンド

mkfsコマンド

パーティション上にファイルシステムを作成するコマンド。

mkfs -t ext4 <デバイス名>

mke2fsコマンド

パーティション上にファイルシステムを作成するコマンド。 ext2, ext3, ext4ファイルシステムを作成する場合に利用する。 デフォルトではext2を作成する。

mke2fs -t ext4 <デバイス名>
オプション説明
-t ファイルシステムタイプファイルシステムの種類を指定する
-jext3ファイルシステムを作成する
-c実行前に不良ブロックを検査する

mkswapコマンド

パーティション上にスワップ領域作成するコマンド。

mkswap /dev/sda7

fsckコマンド

ファイルシステムの整合性チェックと障害箇所の修復ができるコマンド。 システム障害によりファイルシステムに障害が発生した場合に使用する。

fsck <オプション> <デバイス名>
オプション説明
-tファイルシステムの種類の指定 ( ext2、ext3、xfsなど )
-a自動的に修復を実行
-r対話的に修復を実行
-A/etc/fstab に記述されている全てのファイルシステムの検査
-N実際には修復を行わず、コマンドが実行する内容を表示

e2fsckコマンド

ext2、ext3、ext4のファイルシステムでファイルシステムの整合性チェックと障害箇所の修復ができるコマンド。

e2fsck <オプション> <デバイス名>
オプション説明
-c不良ブロックの検査
-p全ての不良ブロックを自動的に修復
-v詳細情報を表示
-y全ての問い合わせに対して、自動的に「yes」と回答
-n全ての問い合わせに対して、自動的に「 no 」と回答

tune2fsコマンド

ext2,ext3.ext4ファイルシステムの様々なパラメーターを設定するコマンド。

tune2fs <オプション> <デバイス名>
オプション説明
-c 回数e2fsckコマンドでファイルシステムのチェックを行うまでの最大マウント回数を指定
-i 時間[d,m,w]e2fsckコマンドでファイルシステムのチェックを行うまでの最大時間間隔を指定。時間のみまたはdを付けると「日」、mを付けると「月」、wを付けると「週」
-jext2をext3ファイルシステムに変換
-L ラベル名ファイルシステムのボリュームラベルを設定

8 - 8.シェルとシェルスクリプト

Linuxの環境変数、タスク自動化のためのシェルスクリプトに関する解説

8.1. シェル環境のカスタマイズ

8.1.1. 環境変数とシェル変数

Linuxの変数には環境変数シェル変数がある。 特徴は以下の通り。

変数説明代表的な
環境変数シェル自身とそのシェルから起動されるすべてのプロセスに引き継がれるPATH, HOMEなど
シェル変数そのシェル内のみで有効な変数-

詳しくはコチラ

8.1.2. 環境変数/シェル変数を表示するコマンド

env/printenvコマンド

環境変数を表示するコマンド。 printenvは環境変数名を指定可能。

env

printenv HOME

setコマンド

環境変数とシェル変数を表示するコマンド。

set <オプション>
オプション説明
-o一覧表示
-a自動的にエクスポート
–helpヘルプ
-o / +oオプション有効/無効化
ignoreeofCtrl + D のキー入力でログアウトしないようにする
noclobber既存ファイルへの上書き出力 ( リダイレクト ) を禁止する
noglobメタキャラクタを使用したファイル名の展開を無効化する

8.1.3. エイリアス

エイリアスはコマンドに別名を付けたりコマンドとそのオプションをひとまとめにできたりするもの

ailias/unailiasコマンド

エイリアスの作成と削除ができるコマンド

ailias <エイリアス名>='<コマンド>'

unailias <エイリアス名>

8.1.4. シェル関数

シェル関数はbashシェル上で利用できる独自の関数を定義できるもの。 シェル関数はエイリアスと異なり条件分岐などを含む複雑なコマンドの組み合わせの場合に使用する。

functionコマンド

シェル上で利用できるシェル関数を定義するコマンド。

function <関数名>() { <コマンド> }

unsetコマンド

シェル関数を削除するコマンド。

unset <関数名>

declareコマンド

設定されたシェル関数一覧を見るコマンド。

declare -F

8.1.5. bashの設定ファイル

シェルの起動時と終了時に「環境変数、エイリアス、シェル関数」などの定義を自動的に行うための設定ファイルには以下のようなものがある。 /etc/以下は全ユーザーから参照される。

ファイル説明
/etc/profileログイン時に実行
/etc/bash.bashrcbash起動時に実行される
/etc/bashrc~/.bashrcから参照
~/.bash_profileログイン時に実行
~/.bash_login~/.bash_profileがない場合、ログイン時に実行
~/.profile/.bash_profileも/.bash_loginもない場合、ログイン時に実行
~/.bashrcbash起動時に実行
~/.bash_logoutログアウト時に実行

Bash

/etc/profile, /etc/profile.dディレクトリ以下

これらのファイルには基本的な環境変数などが設定される。

/etc/bash.bashrc

全ユーザから参照される。一部ディストリビューションにはない。

~/.bash_profile, ~/.bash_login, ~/.profile

ユーザごとの環境変数の設定等を行える。

~/.bashrc

対話型シェルが起動されるたびに実行される。全ユーザ設定用。

~/.bash_logout

ログインシェル終了時に実行される。

8.2. シェルスクリプト

8.2.1. シェルスクリプトとは

シェルスクリプトは特定の処理を行うために作成したプログラをシェルプログラムで記述したもの。 Bashの場合は冒頭に以下を記述する。拡張子は.sh

なおシェルスクリプトは実行したユーザの権限で動作する。 以下はシバンと呼ばれる記述。

#!/bin/bash

なおファイルの改行コードはLinuxでLF、WindowsでCRLFとなるので注意する。

8.2.2. シェルスクリプトの実行コマンド

sourceコマンド

元のbashでシェルスクリプトを実行するコマンド。

source restart.sh

bashコマンド

新しいbashサブシェルが立ち上がってシェルスクリプトを実行するコマンド。

bash start.sh

.を付けて実行

sourceと同じく元のbashでシェルスクリプトを実行するコマンド。

. start.sh

./を付けて実行

./start.sh

8.2.3. シェルスクリプトの特殊変数

スクリプトに渡す引数で特殊なものには以下のものがある。

変数名説明
$0シェルスクリプトファイル名
$11番目の引数。※ 2番目の引数の場合は $2 と指定する。
$$現在のシェルのプロセス番号
$#コマンドラインに与えられた引数の数
$?シェルが最後に実行したコマンドの終了ステータス ( 0 = 正常終了、1 = 異常終了、それ以外はエラー )
$@全ての引数 ( 区切りはスペース )
$*全ての引数 ( 区切りは環境変数IFSで指定したもの )

8.2.4. シェルスクリプトに関するコマンド

readコマンド

readコマンドはユーザーからの入力値を受け取り変数に格納してそれを次の処理で使用したい場合に使用するコマンド。

#!/bin/bash
echo -n " あなたのお名前を教えてください "
read yourname
echo " こんにちは、$yourname さん "

testコマンド

testコマンドは条件分岐が行われる条件式の真偽を判断してその結果を返すために使用されるコマンド。

test <条件式>

seqコマンド

シェルスクリプトで数値を1つずつ増加または減少させる処理を行うために使用するコマンド。

seq <開始数値> <終了数値>
seq <終了数値>

8.2.5. シェルスクリプトの制御構文

if文

if test -f data.txt
 then
    echo "data.txtファイルは存在します"
 else
    echo "data.txtファイルは存在しません"
fi

for文

for i in $(seq 1 10)
do
    echo $i
done

while文

i=1
while test $i -le 10
do
    echo $i
    let i=i+1
done

9 - 9.LinuxGUIとデスクトップ

Linuxのデスクトップに関して

9.1. LinuxのGUI

9.1.1. X windows System(X, X11)

X Windows Systemは多くのUNIXやLinuxで使用されているウィンドウシステム(GUI)。 X Window Systemではクライアント・サーバ方式(Xクライアント, Xサーバ)の構成となっている。 このGUIシステムは現在のコンピュータ環境で利用するには無理が出てきている。

X windows Systemの種類

種類説明
XFree86かつて標準実装されていた
X.Org現在の主流

Xサーバ

Xサーバはモニター、ビデオカード、キーボードなどのハードウェアの管理を行う。 ホストマシンで稼働する。

xサーバはstartxコマンドできそうできる。 なお実行の際はxinitが実行され/etc/X11/xinit/xinitrcスクリプトが実行される。

Xクライアント

XクライアントはWebブラウザなどのユーザアプリケーションを指す。 リモートホストで動かすことができるが、Xサーバと同じマシンで動かすことも可能。

X.Orgの設定

X.Orgの設定ファイルは/etc/X11/xorg.confとなりキーボード、ディスプレイ、フォント、解像度などの設定が可能。 xorg.confファイルは複数のセクションから構成される。

セクション説明
ServerLayout入力 ・ 出力用デバイスの組み合わせとスクリーンの設定
Filesフォント関連のパスの設定
ModuleXサーバがロード予定のダイナミックモジュールの設定
InputDeviceXサーバに対する入力デバイス(キーボード等)の設定
Monitorシステムにより使用されるモニタタイプの設定
Deviceシステム用のビデオカードの設定
Screenディスプレイの色深度と画面サイズの設定

Xクライアントコマンド

X Window Systemの設定確認、情報収集のためのコマンドは以下の通り。

コマンド説明
showrgbX Window Systemで利用可能な色とRGB値の情報確認
xlsclients実行中のXクライアントを表示
xwininfoコマンド実行後に指定したウィンドウのサイズ、位置、色深度の情報確認
xdpyinfoディスプレイ情報の表示

9.1.2. Wayland

Waylandはプロトコル作成フレームワークでLinux用ライブラリ。 X11と全く異なる仕組みでGUI環境を提供できる。

ウィンドウマネージャとクライアントで構成される。

ウィンドウマネージャ

ハードウェアやグラフィックを管理する。

クライアント

グラフィックライブラリ呼び出す。

9.2. グラフィカルデスクトップ

9.2.1. ディスプレイマネージャ

ディスプレイマネージャはXサーバを起動して GUI のログイン画面を表示する仕組み。 ランレベル5で起動する。

具体的にはGUIでログイン画面を表示し、ユーザー認証を行う。 有名なものは以下の通り。

  • XDM … XDMはX.Orgの標準。認証プロトコルにはXDMCPが使用される。
  • KDM … KDMはKDEで利用される
  • GDM … GDMはGNOMEで利用される

9.2.2. ウィンドウマネージャ

ウィンドウマネージャはXの外観制御を行う。 ウィンドウの外観、アイコン、メニューなどを提供しユーザが設定できるようになっている。

代表的なものには以下のようなものがある。

  • Metacity … Gnome標準のウィンドウマネージャ
  • Kwin … KDE標準のウィンドウマネージャ
  • twm … 必要最低限の機能だけを備えたウィンドウマネージャ
  • fvwm … 仮想デスクトップ機能を備えたウィンドウマネージャ
  • enlightment … 高機能でグラフィカルなウィンドウマネージャ

9.2.3. デスクトップ環境

デスクトップではウィンドウマネージャも含め、アプリケーションまで揃えて統一的な操作を提供する。 代表的なものにはGNOME、KDE Plasmaなどがある。他にはXfceやLXDEなどがある。

GNOMEKDE Plasma
テキストエディタgeditKEdit
端末GNOME端末Konsole
ファイルマネージャNautilusDolphin
GUIツールキットGTK+Qt
ディスプレイマネージャGDMSDDM
ウィンドウマネージャMutterKWin
標準採用RedHat, CentOS, Fedora, UbuntuopenSUSE, Slackware, Kubuntu

9.2.4. リモートデスクトップ

リモートデスクトップは別のマシン上からリモートで別のマシンのデスクトップを操作できるもの。 Linux向けに制御する機能にはVNCRDPSPICEXDMCPなどがある。

VNC

VNCはクロスプラットフォームのリモートデスクトップソフトウェア。 対応OSはWindows、macOS、Linux。

vncserver :1 #VNCサーバをディスプレイ番号1で起動する

vncserver -kill :1 #VNCサーバの終了

RDP

RDPはWindows標準搭載のリモートデスクトッププロトコル。 Linuxデスクトップ上にWindowsのデスクトップを表示可能。

SPICE

SPICEはOSSの画面転送プロトコルで以下の機能に対応している。

  • 通信の暗号化
  • マルチモニタ

XDMCP

XDMCPはディスプレイマネージャをネットワーク越しに利用できるプロトコル。 Xサーバとディスプレイマネージャとの間で使われるが、暗号化機能がないためSSH接続で利用する必要がある。

9.3. アクセシビリティ

アクセシビリティはコンピュータの操作の利便性を上げるもの。 障がい者の操作をサポートするソフトウェアはATと呼ばれる。

9.3.1. アクセシビリティの設定

アクセシビリティの設定は以下のようなものがある。

機能説明
スティッキーキー(固定キー)複数キーを同時に押すのが困難なユーザー向けの機能
スローキー正確にキーを入力できないユーザー向けの機能
バウンスキー連続入力を無視する機能
トグルキー光るキーの視認が難しいユーザー向けの機能。音が鳴る
マウスキーマウスを扱うのが困難なユーザー向けの機能

10 - 10.アカウント管理と管理タスク

Linuxのアカウント管理、定期実行系(Cronなど)、言語設定やローカライゼーションに関して

10.1. ユーザとグループの管理

10.1.1. ユーザアカウント

Linuxは複数のユーザが同時にログインし利用できるシステムとなっている。 またユーザアカウント情報は/etc/passwdファイルに保存される。

/etc/passwdファイル

/etc/passwdファイルは以下のような構成となり、一般ユーザでも読み取り可能。

<ユーザ名>:<暗号化されたパスワード>:<UID>:<GID>:<GECOS(コメント)>:<ホームディレクトリ>:<デフォルトシェル>

デフォルトシェルはログインを想定しない場合/bin/false/sbin/nologinとなる。

/bin/false/sbin/noloin
Telnet接続xx
SSH接続xx
FTP接続xo
SFTP接続xx
シェルの実行xx

/etc/shadowファイル

シャドウパスワードが書かれたファイルで、パスワード本体が暗号化されたものが保存されている。 root(とshadowグループ所属者)しか読み取りできない。

10.1.2. グループアカウント

/etc/groupファイル

/etc/groupファイルは以下のような構成となり、グループアカウント情報が保存される。 一般ユーザでも読み取り可能。

<グループ名>:<暗号化されたグループパスワード>:<GID>:<グループメンバー>

ユーザーにとって基本となるグループをプライマリグループと呼ばれる。 プライマリグループ以外に参加しているグループはサブグループと呼ばれる。

なおプライマリーグループは/etc/passwdのGIDフィールドで確認できる。

10.1.3. ユーザーとグループの管理のコマンド

useraddコマンド

useraddコマンドはユーザアカウントを作成するコマンド。

useradd <オプション> ユーザー名
オプション説明
-c コメントユーザー情報を表すコメントの指定
-d ディレクトリ名ホームディレクトリの指定
-g グループ名 or GIDプライマリグループの指定
-G グループ名 or GIDプライマリグループ以外に所属するグループの指定
-s ログインシェルログインシェルの指定
-u UIDUIDの指定
-mホームディレクトリの自動的な作成

なお作成するホームディレクトリに作成したいファイルのひな形は/etc/skelディレクトリに置くことでホームディレクトリに自動的にコピーされる。

usermodコマンド

既存のユーザアカウント情報を変更できるコマンド。 またユーザーアカウントをロックすることもできる。 ロックは-Lオプション、ロック解除は-Uオプションで可能。

usermod <オプション> <ユーザー名>

userdelコマンド

ユーザアカウントを削除できるコマンド。 -rオプションでホームディレクトリも削除できる。

userdel <ユーザ名>

passwdコマンド

パスワード変更するコマンド。 一般ユーザは自身のパスワードを変更でき、rootユーザは全てのユーザーのパスワードを変更することができる。 またユーザーアカウントをロックすることもできる。

passwd <ユーザ名>
オプション説明
-l指定したユーザーアカウントのロック
-u指定したユーザーアカウントのロックを解除

groupaddコマンド

グループを作るコマンド。

groupadd <グループ名>
オプション説明
-g グループIDグループIDの指定

groupmodコマンド

グループ情報変更するコマンド。

groupmod <グループ名>
オプション説明
-g グループID指定したグループIDへ変更
-n グループ名指定したグループ名へ変更

groupdelコマンド

作成済みのグループアカウントを削除するコマンド。 なお削除対象のグループをプライマリグループとするユーザーがいる場合は削除できない。

groupdel <グループ名>

idコマンド

ユーザがどのグループに所属しているのか調べられるコマンド。 UID,GUID,サブグループGUIDがわかる。

id <ユーザ名>

getentコマンド

ユーザーやグループの一覧を表示するコマンド。 データベースとキーを引数に渡すと管理データベースからエントリを取得できる。

getent <データベース/キー>

10.2. ジョブスケジューリング

10.2.1. cron

cronは定期的なジョブを実行するために使用できる仕組みでスケジュールを定義したコマンドを定期的に実行することが可能。 デーモンとも呼ばれる。

cronの構成

cronの仕組みはcrondデーモンとcrontabコマンドで構成される。 内部的にはcrondが1分ごとにcrontabファイル内容を調べることで実現している。

crontab

ユーザのcrontabは/var/spool/cron/ディレクトリに配置されるが、そのファイルを直接エディタで編集してはならない。 編集にはcrontabコマンドを用いる。

システムのcrontabは/etc/crontabファイルに保存される。 システムのcronで定期的に実行するジョブを格納するディレクトリは以下の通り。

ディレクトリ名説明
/etc/cron.hourly毎時定期的に実行するジョブのスクリプトを格納
/etc/cron.daily毎日定期的に実行するジョブのスクリプトを格納
/etc/cron.monthly毎月定期的に実行するジョブのスクリプトを格納
/etc/cron.weekly毎週定期的に実行するジョブのスクリプトを格納
/etc/cron.d上記以外のジョブのスクリプトを格納

cron/atのアクセス制限

cron/atはユーザー単位で利用制限を実施できる。 制限は/etc/cron.allow,/etc/cron.denyファイルの設定で可能。

10.2.2. cronに関するコマンド

at/atrm/atqコマンド

atコマンドは1回限りのジョブ予約を行えるコマンド。

at 
オプション説明
-datrmのエイリアス
-ratrmのエイリアス
-latqのエイリアス
-f ファイルパスSTDINではなくファイルからジョブ指定

atrmコマンドは予約中のジョブをジョブ番号で指定して削除できるコマンド。 atqコマンドは予約中のジョブを表示するコマンド

crontabコマンド

cronを設定するコマンド。

crontab <オプション>
オプション説明
-eviエディタなどを使用して、crontabファイルを編集
-lcrontabファイルの内容を表示
-rcrontabファイルの削除
-icrontabファイル削除時の確認
-u ユーザーユーザーを指定しcrontabファイルの編集 ( rootユーザーのみ使用可能 )

記述例は以下のように行う。

30 22 * * * /usr/local/bin/backup.sh # 毎日22:30に実行
0 12 * * 1,2 /usr/local/bin/backup.sh # 毎週月曜日、火曜日の12:00に実行

10.2.3. systemdによるスケジューリング

systemdでスケジューリングを行う場合タイマーUnitを使用する。 タイマーUnitには以下のような種類がある。

種類使用例
モノトニックタイマシステム起動10分後に実行、以降1週間ごとに実施
リアルタイムタイマ毎日午前4時に実行

/etc/systemd/system/以下に拡張子.timerでファイルを作成することで設定を行う。 ファイルの記述書式はman 7 systemd.timeで確認可能。

スケジュールの確認

systemctl list-timers

スケジュールの削除

systemctl stop hogehoge.timer

サービスの実行ログの確認

journalctl -u apt-daily.service

10.3. ローカライゼーションと国際化

10.3.1. ローカライゼーションと国際化

ローカライゼーションはソフトウェアのメニューやメッセージを利用者の地域や国に合わせることi18nとも呼ばれる、具体的には言語や日付、通貨単位などを合わせる。

国際化はソフトウェアを最初から多言語・他地域対応するように作ることを言う。

10.3.2. ロケール

ロケールは利用者の地域情報を表す。 これらのカテゴリは個々に設定することが可能。

ロケールの設定はlocaleコマンドで確認可能。(-aでロケールを全表示可能) またカテゴリーは以下のようなものがある。

環境変数説明
LC_CTYPE文字の種類やその比較・分類の規定
LC_COLLATE文字の照合や整列に関する規定
LC_MESSAGESメッセージ表示に使用する言語
LC_MONETARY通貨に関する規定
LC_NUMERIC数値の書式に関する規定
LC_TIME日付や時刻の書式に関する規定
LANGUAGE複数一括設定(:区切り)、最高優先度
LC_ALL一括設定、高優先度
LANG一括設定、低優先度

ロケール名は以下のようなものがある。

ロケール名説明
C, POSIX英語
ja_JP.utf8(ja_JP.UTF-8)日本語/Unicode
ja_JP.eucJP日本語/EUC-JP
ja_JP.shiftJIS日本語/シフトJIS
en_US.utf8英語(米)/Unicode

10.3.3. 文字コード

文字コードはコンピュータ上で文字を利用するために各文字に割り当てたバイトコードを指す。

iconvコマンド

文字コードを変換するために使用するコマンド。

iconv <オプション> <文字コード>
オプション説明
-l変換できる文字コードの一覧を表示
-f 入力文字コード変換元の文字コード。from。
-t 出力文字コード変換後の文字コード。to。
-o ファイル名文字コード変換した文字列を出力するファイル名。

10.3.4. タイムゾーン

タイムゾーンは地域ごとに区分された標準時間帯を指す。 UTC+N時間で決まる。日本の場合はUTC+9時間。

設定は/usr/share/zoneinfo/以下に格納される。 なお日本のタイムゾーン設定は以下のように行える。

cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime #シンボリックリンクで行う場合

tzselectコマンド

一覧から表示される情報をもとにタイムゾーンを設定できるコマンド。

tzselect

tzconfigコマンド

/etc/localtime,/etc/timezoneまとめて変更できるコマンド。

tzconfig

11 - 11.システムサービスの管理

システムクロック、システムログ、メール/プリンタなどに関して

11.1. システムクロックの設定

11.1.1. システムクロックとハードウェアクロック

Linuxのクロックシステムにはシステムクロックとハードウェアクロックがある。

システムクロック

システムクロックはメモリ上で動作する時計システム。 Linuxカーネル内に存在し、Linux起動時にハードウェアクロックと同期する。

このクロックは電源がオフになると時計情報も消える。

ハードウェアクロック

ハードウェアクロックはハードウェアとして内蔵された時計システム。 このクロックはシステム停止してもハードウェア上の内蔵バッテリーで動作する。

11.1.2. システムクロック関連コマンド

dateコマンド

システムクロックを参照して現在日時表示、時刻の変更ができるコマンド。

date
書式説明
%Y
%m月(01-12)
%d日(01-31)
%H時(00-23)
%M分(00-59)
%a曜日
%b月名

hwclockコマンド

ハードウェアクロックの参照、システムクロックをハードウェアクロックにセットできるコマンド。

hwclock <オプション>
オプション説明
-rハードウェアクロックの表示
-s (–hctosys)ハードウェアクロックの時刻をシステムクロックに反映
-w (–systohc)システムクロックの時刻をハードウェアクロックに反映
-uUTC (Universal Coordiated Time)として反映

timedatectlコマンド

systemd採用ディレクトリビューションで使用可能な日付、時刻、タイムゾーンを管理を設定できるコマンド。

timedatectl status

11.1.3. NTPによる時刻設定

ハードウェアクロック、システムクロックともに完全に正確な時刻情報ではないのでNTPというプロトコルを通じて正確な情報を取得する。 NTPは階層構造になっており、最上位は原子時計やGPSなどが位置して、その直下にあるNTPサーバを Stratum1、その下を Stratum2 と続いていく構造となっている。

ntpdateコマンド

NTPサーバから正確な時刻取得するコマンド。

ntpdate

ntpサーバの運営

NTPサーバを自前で運用することも可能。 LAN内にNTPクライアントが多いなら用意すると良い。

NTPサーバの起動はSysVinitならばsudo /etc/init.d/ntpd start、Systemdならばsudo systemctl start ntpd.serviceで行う。 なお設定は/etc/ntp.confで行える。

11.3.4. Chronyによる時刻管理

Chronyはntpd/ntpdateの代替の時刻管理システム。 ntpパッケージと同時には使えないのが特徴。

chronydデーモンとchronycクライアントで構成される。 設定ファイルは/etc/chrony.confとなる。

chronyコマンド

chronydの管理を行うコマンド。

chronyc --help

11.2. システムログの設定

11.2.1. ログとは

ログはコンピュータの動作状況の記録を行うもの。 Linuxの場合はsyslogと呼ばれるプログラムを使用することにより、発生する各種イベントをログファイルに出力したりコンソールに出力することが可能となる。 ログのシステムにはrsyslog, syslog, syslog-ngなどがある。

11.2.2. Syslog

syslogはsyslogdというデーモンにより実行される。 syslogは他のプログラムからのメッセージを受信して、出力元や優先度に従って分類を行って、syslogで定義した出力先に送信する。

syslog/rsyslogの設定

syslogの設定は/etc/syslog.confで設定を行う。 rsyslogはsyslogの上位バージョンで拡張機能などがあり、設定は/etc/rsyslog.confで行う。

設定ファイルの構文はファシリティ. プライオリティ アクションで記述する。 記述構文は以下の通り。

<ファシリティ>.<プライオリティ> <出力先(アクションフィールド)>

ファシリティ

ファシリティはログの種別メッセージの出力元を示す。 具体的にはカーネルや実行中のプロセスを表す。

ファシリティ説明
auth, authpriv認証システム(loginなど)
croncron
daemon各種デーモン
kernカーネル
lpr印刷システム
mailメールサービス
userユーザーアプリケーション
local0-local7ローカルシステム

プライオリティ

プライオリティはメッセージの重要度を表す。

重要度(降順)説明
emerg緊急事態
alert早急に対処が必要
crit深刻(システムの処理は継続できる)
err一般的なエラー
warning一般的な警告
notice一般的な通知
info一般的な情報
debug一般的な情報
noneログを記録しない

アクション(出力先)

アクションではメッセージの出力先を指定する。

表記説明
ファイル名ファイルへの出力
ユーザー名ユーザーの端末への出力
@ホスト名リモートホストのsyslogdへの出力
/dev/consoleコンソールへの出力
*全てのユーザーの端末への出力

11.2.3. ログに関するコマンド

loggerコマンド

ログメッセージ生成するコマンド。 システムログの設定の確認などに使用する。

logger [ -p <ファシリティ>.<プライオリティ> ] [ -t タグ ] <メッセージ>

syslog.infoの場合は/var/log/syslogに追記される。

systemd-catコマンド

コマンドの実行結果をジャーナルに書き込むコマンド。 /var/log/syslogに書かれる。

systemd-cat echo 'hoge'

journalctlコマンド

systemd採用システムにおいて、systemdのログ(ジャーナル)を閲覧できるコマンド。 ジャーナルは/var/log/journal/var/run/log/journalのバイナリに保存される。

journalctl
オプション説明
-f, –follow末尾を表示し続ける(tail -fとかとおなじ)
-r, –reverse新しい順(デフォルトは古い順。その逆)
-e, –pager-end末尾を表示する(ページャでさかのぼれる)
-x, –catalog説明文付き
-k, –dmesgカーネルメッセージのみ
-b, –bootブート時メッセージ
-p, –priority=プライオリティ指定したプライオリティ以上
-u, –unit=ユニット名ユニット指定
–fullエスケープ文字を除いてプレーンテキストで出力
–no-pager1ページごとに表示せず、すべてのログを出力する

11.2.4. ログの調査

主要なログファイルは/var/log/messagesに保存されるが、ディストリビューションにより差異がある。

ログの種類

システム状態に応じて出力される各種ログは以下表のようなログファイルに出力される。

ログファイル名内容
/var/log/messages一般的なシステム関連のメッセージ
/var/log/secureセキュリティに関するメッセージ
/var/log/cron定期的に実行される処理結果に関するメッセージ
/var/log/maillogメールに関するメッセージ
/var/log/spooler印刷に関するメッセージ
/var/log/boot.logOS起動時に関するメッセ

ログの確認方法

more,tail,tail - fコマンドやgrepを組み合わせてログの調査を行う。

11.2.5. ログファイルのローテーション

ログファイルはログ出力の度に追記されていくので、ファイルサイズが大きくなる。 そのためローテーション機能によりログファイルの分割などを行う。

ローテーション機能はcronを利用してlogrotateユーティリティが定期的に実行される。 logrotateの設定は/etc/logrotate.confファイルで行う。

11.2.6. ログインユーザログの確認コマンド

lastコマンド

最近ログインしたユーザーの一覧を表示するコマンド。 参照ファイルは/var/log/wtmp

last

whoコマンド

ログイン中のユーザ名、ログイン端末名、ログイン日時、ログイン元IPを表示するコマンド。 参照ファイルは/var/run/utmp

who

wコマンド

whoコマンドでの情報とシステム情報も表示するコマンド。 参照ファイルは/var/run/utmp

w

lastlogコマンド

ログファイルを参照しユーザごとに最近のログイン一覧を表示するコマンド。 参照ファイルは/var/log/lastlog

lastlog

11.3. メール管理

11.3.1. メール配送の仕組み

Linuxにおいてメールの配送はMTAMDA,MUAにより構成/実現される。

MTA

MTA(Mail Transfer Agent)は電子メールを配信/転送するプログラム、つまりメールサーバソフトウェアを表す。 MTAにはsendmail、qmail、postfix、eximなどがある。

MTA処理速度セキュリティ説明
sendmail××かつてMTAの標準ソフトウェアと広く普及した。
qmailセキュリティ面に優れており、非常に堅牢なつくり。パフォーマンスもsendmailより優れている。
postfixパフォーマンスが最も優れたMTA。設定が簡単でセキュリティ面も高い。sendmailとの互換性がある。
eximDebian系の標準のMTA。

MDA(Mail Delivery Agent)

メールボックスにメールを送るプログラム。

MUA(Mail User Agent)

MUAはメールクライアント(メーラ)を表しメール作成、閲覧が可能なもの。

11.3.2. メールの配送フロー

  1. メールクライアントソフトウェア(MUA)でメール作成
  2. 送信元側のメールサーバ上のMTA(1)へ送る
  3. 宛先側のメールサーバ上のMTA(2)へ転送(相手ドメインのDNSサーバに尋ねる)
  4. MTA(2)がメールを受け取ると、MDAがメールをメールボックスに格納する
  5. 受取人は自分のメールボックスからメールを取り出す(POP,IMAPを使用)

11.3.3. MTAの起動とメールの確認

MTAプログラムの確認

LinuxシステムでどのMTAプログラムがインストールされているのかは、以下プログラムで確認可能。

netstat -atnp | grep 25

メールの送信、受信メールの確認

mailコマンドで確認可能。

mail # 受信メールの確認
mail -s <題名> <宛先ユーザー名 | 宛先メールアドレス> # メールの送信「.」で入力終了

メールの転送とエイリアス

メールを転送する場合以下の2つの方法がある.

  1. /etc/aliasesファイルに設定する方法
  2. 各ユーザーのホームディレクトリに存在する~.forwardファイルに転送先アドレスを設定する方法

あるメールアドレスに届いたメールを別のアドレスに転送する場合は/etc/aliasesファイルに設定を記述することで可能。 書式は以下の通り。

転送元ユーザー: 転送先ユーザー

11.3.4. 送信待ちメール/受信待ちメールの確認

多数のメールを送信した場合やメール送信に失敗した場合はメールキューに蓄えられる。 具体的には、送信者側のメールサーバの/var/spool/mqueueディレクトリに保存される。 情報はmailqコマンドでできる。

なお受信成功した場合は /var/spool/mailに保存される。

mailqコマンド

メールキューを一覧するコマンド。

mailq

11.4. プリンタ管理

11.4.1. CUPS

Linuxディストリビューションでのプリンタ印刷には基本的にはCUPSと呼ばれるシステムが使われる。 CUPSの主な特徴は以下の通り。

  • IPP
    • ネットワーク上のプリンタをサポート
  • PPD
    • AdobeのPPD形式のファイルでデバイスドライバの設定ができる(/etc/cups/ppd/にPDOファイルを格納される)
  • Web画面での設定
    • Webブラウザから設定可能(ポート631)
  • プリンタクラスのサポート
    • 複数のローカルプリンタを1つのクラスにグループ化

CUPSの情報は/etc/cupsディレクトリに格納され、CUPSの設定ファイルは/etc/cups/cupsd.confに保存される。 CUPSの設定方法は以下の2つある。

  • 設定ファイルを直接編集する方法
  • WebブラウザでCUPSの設定ページにアクセスして編集する方法

印刷の流れ

  1. 印刷データ受け取る
  2. スプーラが印刷データを受け付け、スケジューリングを行う
  3. プリンタが直接受け付けられないデータを中間形式に変換
  4. PPDに定義されたフィルタにより、最終の印刷データに変換する
  5. 処理した印刷データをCUPSのバックエンドに送る
  6. CUPSバックエンドは印刷データをプリンタに渡す

11.4.2. 印刷関連のコマンド

lprコマンド

ファイルや標準入力を印刷するコマンド。

lpr <オプション> ファイル名
オプション説明
-# 部数印刷部数を指定
-P プリンタ名指定したプリンタに出力

lpqコマンド

プリンタキューに登録されている印刷ジョブを確認するコマンド。

lpq <オプション> <ユーザー名> <ジョブ番号>
オプション説明
-a全てのプリンタの情報を表示
-P プリンタ名指定したプリンタの情報を表示

lprmコマンド

プリンタキューにある印刷ジョブを削除するコマンド。

lprm <オプション> <ジョブ番号>
オプション説明
-自分の印刷ジョブを全て削除
-P プリンタ名指定したプリンタの印刷ジョブを削除

12 - 12.ネットワークの設定

Linuxのネットワークの設定に関して

12.1. ポート番号

Linuxにおいてポート番号とサービスとの対応は/etc/servicesに記述される。

番号トランスポート層上位サービス・プロトコル説明
20TCPFTPFTPのデータ転送
21TCP/UDPFTPFTPの制御情報
22TCPSSHSSH
23TCPTelnetTelnet接続
25TCP/UDPSMTP電子メール
53TCP/UDPDNSDNS
80TCPHTTPWeb
110TCPPOP3電子メール(受信)
123UDPNTPNTPサービス
139TCP/UDPNetBIOSMicrosoftネットワーク
143TCPIMAP電子メール(IMAP2/IMAP4)
161UDPSNMPネットワークの監視
162TCP/UDPSNMP Trapネットワークの監視(警告通知等)
389TCP/UDPLDAPディレクトリサービス
443TCP/UDPHTTP over SSL/TLSSSL/TLSによるHTTP接続
465TCPSMTP over SSL/TLSSSL/TLSによるSMTP接続
514UDPSyslogロギングサービス
636TCP/UDPLDAP over SSL/TLSSSL/TLSによるディレクトリサービス
993TCP/UDPIMAP over SSL/TLSSSL/TLSによるIMAP接続
995TCP/UDPPOP3 over SSL/TLSSSL/TLSによるPOP3接続

12.2. ネットワークの基本設定

12.2.1. ネットワーク関連のコマンド

ifconfigコマンド

ネットワークインターフェースの状態を表示したり一時的な設定するコマンド。

ifconfig <ネットワークインターフェース名> <オプション>
オプション説明
IPアドレスネットワークインターフェースへのIPアドレスの割り当て
netmask サブネットマスクサブネットマスクの設定
up指定したインターフェースの起動(有効化)
down指定したインターフェースの停止(無効化)

ifup/ifdownコマンド

指定したネットワークインターフェースを起動(有効化)/停止(無効化)するためのコマンド。

ifup <インターフェイス>
ifdown <インターフェイス>

routeコマンド

Linuxマシン内でルーティングの設定を行えるコマンド。

route <オプション>
オプション説明
-Fカーネルのルーティングテーブルを表示
-Cカーネルのルーティングキャッシュを表示

route addコマンド

ルーティングテーブルに新たなルーティングを追加することができるコマンド。

route add <オプション> <ターゲット>
オプション説明
-netターゲットをネットワークとみなす
-hostターゲットをホストとみなす
netmaskサブネットマスクを指定
gwゲートウェイ(ネクストホップ)を指定

ipコマンド

NIC, ルーティングテーブル、ARPテーブルの管理が行えるコマンド。

ip <操作対象> [サブコマンド] [デバイス]
操作対象説明
linkデータリンク層
addrIPアドレス
routeルーティングテーブル
サブコマンド説明
show表示する
add設定する

12.2.2. ネットワークのトラブルシューティングコマンド

pingコマンド

ip通信の疎通確認コマンド。

ping <オプション> < IPアドレス | ホスト名 >
オプション説明
-c 回数パケットを送信する回数を指定
-i 秒パケットの送信間隔を秒単位で指定

tracerouteコマンド

指定したホストまでのパケットが通過する経路を表示させるコマンド。

traceroute < IPアドレス | ホスト名 >

tracepathコマンド

tracerouteコマンドと同様の機能に加えて、経路のMTUも設定できるコマンド。

tracepath < IPアドレス | ホスト名 >

hostコマンド

DNSサーバを使用して指定したホスト情報を検索するコマンド。

host < ホスト名 >

hostnameコマンド

現在のホスト名を表示とホスト名を変更できるコマンド。

hostname

netstatコマンド

TCP/IPの統計情報、接続状況、ルーティング情報などを調査できるコマンド。 解放ポートの確認によく利用される。

netstat <オプション>
オプション説明
-a接続待ち状態にあるソケットと、接続待ち状態にないソケットを表示
-cステータスを1秒ごとにリアルタイムで表示
-iネットワークインターフェースの状態を表示
-l接続待ち状態にあるソケットのみを表示
-nホスト、ポート、ユーザーなどの名前を解決せず、数値で表示
-p各ソケットが属しているプログラムのPIDと名前を表示
-rルーティングテーブルを表示
-tTCPポートのみを表示
-uUDPポートのみを表示

nc, ncatコマンド

ネットワーク通信の確認を行えるコマンド。

12.2.3. ネットワーク関連の設定ファイル

/etc/hostnameファイル

hostnameを設定するファイル。

/etc/hostsファイル

名前解決を記述するファイル。

/etc/network/interfacesファイル

Debian系でネットワークインタフェースの設定を記述するファイル。

/etc/sysconfig/network-scriptsディレクトリ

RedHat系で様々なネットワークインタフェースの設定ファイルを配置するディレクトリ。

12.2.4. NetworkManagerによる設定

RHEL7のデフォルトのネットワークサービス。 操作はnmcliコマンドで行う。

インストールは以下(RedHat系)

yum install -y NetworkManager

デーモンの起動は以下の通り。

systemctl start NetworkManager
systemctl status NetworkManager

インターフェイスの表示

nmcli connection show

インターフェイスの追加

nmcli connection add ifname [インターフェース名] type [インタフェースのタイプ]

インターフェイスの起動停止

nmcli connection up [インターフェース名]
nmcli connection down [インターフェース名]

12.3. DNSの設定

12.3.1. DNSの設定ファイル

設定ファイル説明
/etc/sysconfig/network,/etc/hostnameLinuxのホスト名の設定が行われる(RedHat系, Debian系)
/etc/hostsホスト名とIPアドレスの対応表
/etc/resolv.confDNSサーバやドメイン名の設定。直接触らずコマンドで設定する
/etc/nsswitch.conf名前解決の問い合わせ順の設定

12.3.2. DNS管理コマンド

hostコマンド

DNSサーバを使ってホストやドメインに関する情報を表示するコマンド。

host localhost

digコマンド

DNSサーバに対して問い合わせを行い、その応答結果を表示するコマンド。

 dig <オプション> <ドメイン名 or ホスト名> <検索タイプ>
オプション説明
-xIPアドレスからホスト名を検索
検索タイプ説明
aIPアドレス
any全ての情報
mxメールサーバの情報
nsネームサーバの情報

whoisコマンド

調べたいドメイン名を指定しwhoisデータベースに問い合わせるコマンド。

whois < ドメイン名 >

13 - 13.Linuxのセキュリティ

Linuxのセキュリティやsu/sudoコマンド、sshなどに関して

13.1. Linuxサーバのセキュリティの基本

Linuxをサーバとして運用する場合はセキュリティの観点から主に以下の3点を考える必要がある。

  1. ユーザセキュリティの管理
  2. ホストレベルセキュリティの管理
  3. システムリソースの使用制限

13.1.1. ユーザセキュリティの管理

ユーザーパスワードは定期的に変更したり有効期限を設定することがセキュリティの観念から重要である。

13.1.2. ホストレベルセキュリティの管理

システムのポート情報、プロセス情報の確認がセキュリティの観念から重要である。 具体的には不要なポートが開いていないかどうかを確認する。

13.1.3. システムリソースの使用制限

1人のユーザーに大量のリソースを使用されないように、各ユーザーが使用できるプロセス数などのリソースを制限することが可能。

13.2. ユーザセキュリティの管理

13.2.1. パスワード管理に関するコマンド

chageコマンド

パスワードに有効期限を設定、パスワード変更の強制、アカウントの期限の設定が可能。 オプションを指定せずにchageコマンドを実行した場合は、対話モードで実行される。

chage < オプション > < ユーザー名 >
オプション説明
-lパスワードまたはアカウントの有効期限を表示
-mパスワード変更間隔の最低日数を設定
-Mパスワードの最大有効期限の日数を設定
-dパスワードの最終更新日を設定
-Wパスワードの有効期限切れの警告が何日前から始まるかを設定
-Iパスワードの有効期限後、アカウントロックされるまでの日数を設定
-Eユーザーアカウントが無効になる日付を設定

13.2.2. ログインの禁止設定

/etc/nologinファイル

このファイルの存在によりroot以外でのログインを禁止できる

/bin/false,/sbin/nologinファイル

ログインさせない用に制御するためのシェルファイル。 ユーザーアカウントは必要であるがユーザがログインしてシェルを利用するのは好ましくないケースで使用する。

13.2.3. ユーザーの切り替え

普段は一般ユーザ、権限が必要なときだけrootでアクセスする。

suコマンド

一時的に別ユーザになるコマンド。

su - hogehoge

sudoコマンド

特定の管理者コマンドのみを実行するコマンド。

sudo <コマンド>

なお設定は/etc/sudoersで設定、または/etc/sudoers.d/ディレクトリ以下にファイルを追加することによる設定が可能。 なお直接ファイルを編集すのではなくvisudoコマンドで設定を行う。

visudoコマンド

sudoコマンドを実行できるユーザに対するコマンドを定義できるコマンド。 書式は以下の通り。

ユーザー名 ホスト名=(実行ユーザー名) コマンド

13.2. ホストレベルセキュリティの管理

13.2.1. ホストへのアクセス

ホストのセキュリティを考える際以下点を注意することがセキュリティとして重要になる。

内部からのアクセスへの対策

  • 適切なユーザーパスワード管理
  • root権限で動作するプログラムを最小限にする

外部からのアクセスへの対策

  • 必要なソフトウェアのみインストールする
  • 不要なサービスを起動しない
  • ホストレベルの適切なアクセス制御
  • パケットフィルタリング
  • セキュリティ情報の確認を頻繁にする

13.2.2. スーパサーバの設定と管理

スーパサーバ

スーパーサーバは他のサーバプログラムに変わってサービス要求を監視して、接続確立時に本来のサーバプログラムに要求を引き渡すシステム。 これにより必要時に個々のサーバプログラムを起動することでリソースを効率的に使用することが可能。 またTCPラッパーと組み合わせることで、アクセス制御を集中管理できる。

FTPやsshサーバなどの接続頻度の高くないサーバに向いている。

スーパサーバの種類

スーパサーバにはinetdxinetdがあり、xinetdが多くのディストリビューションで採用されている。

https://www.infraexpert.com/infra/study10.html https://wand-ta.hatenablog.com/archive/category/LPIC

xinetdの設定

全体の設定は/etc/xinetd.conf、サービスごとの設定は/etc/xinetd.d/以下で設定可能。

全体設定のファイル(/etc/xinetd.conf)

 defaults
 {

   instances        = 60 # 各サービスにおける最大デーモン数
   log_type         = SYSLOG authpriv # ログの出力方法
   log_on_success   = HOST PID # 接続許可時にログに記録する内容
   log_on_failure      = HOST # 接続拒否時にログに記録する内容
   cps              = 25 30 # 1秒間に接続可能な最大コネクション数 ・ 限度に達した時のサービス休止の秒数

 }

 includedir /etc/xinetd.d # 各サービスごとの設定ファイルを格納するディレクトリ

なお設定後は/etc/init.d/xinetd restartで再起動が必要。

inetdの設定

全体の設定は/etc/inetd.conf、サービスごとの設定は/etc/inetd.d/以下で設定可能。 inetdは現在はほとんど使用されていない。

13.2.3. TCP Wrapper

TCP Wrapperはセキュリティソフトウェアで、通信で使用するTCPポートを把握していて、アクセス制御を行ったり、通信ログを保存することが可能。

具体的には外部からアクセスしてくるポートの細かい制限を行うことができる。 設定は以下2ファイルを用いて行う。

設定ファイル説明
/etc/hosts.allowアクセス制御の許可設定を行うファイル
/etc/hosts.denyアクセス制御の拒否設定を行うファイル

書式は以下形式で記述する。

デーモン名 : ホスト名またはIPアドレス

13.4. システムリソースの使用制限

13.4.1. システムリソースの制限を行うコマンド

ulimitコマンド

ユーザが利用できるリソースを制限するコマンド。 1人のユーザが全てを使い切り、システムが停止する可能性を制限する。

ulimit <オプション>
オプション意味
-a制限の設定値をすべて表示
-c サイズ生成されるコアファイルのサイズを指定
-f サイズシェルが生成できるファイルの最大サイズ
-n 数同時に開くことのできるファイルの最大数
-u プロセス数1人のユーザが利用できる最大プロセス数
-v サイズシェルとその子プロセスが利用できる最大仮想メモリサイズを指定する

13.5. SSHの設定

13.5.1. SSH

SSHの基礎

SSHはネットワークに接続した機器を遠隔操作するために使用するL7層のプロトコル。

sshコマンド

ssh接続を行うコマンド。telnetより安全性が高い。

ssh <オプション> <接続先ホスト>
オプション説明
-1SSHプロトコルバージョン 1 を使用
-2SSHプロトコルバージョン 2 を使用
-l ユーザ名ログインユーザー名を指定
-p ポート番号リモートホスト接続時に使用するポート番号を指定
-i 秘密鍵ファイル秘密鍵の指定
-o StrictHostKeyChecking=noホストキーの検証回避

ユーザーがログインしてシェルあるいはコマンドを実行する直前にSSHは、/etc/sshrcファイルに記述されているコマンドを実行する。

SSHでの接続時にはログイン時と同様、全ユーザー共通の設定ファイル(/etc/sshrc)とユーザー毎に読み込まれる設定ファイル(~/.ssh/.config)が読み込まれる。

scpコマンド

SSHの仕組みでホスト間で安全にファイルをやりとりするコマンド。

scp <オプション> コピー元パス 保存先パス
オプション説明
-i 鍵ファイルssh接続に使用する鍵ファイルを指定する
-P ポート番号(sshのポートを変更している場合などに)接続に使用するポートを指定する
-pコピー元のタイムスタンプやパーミッションを保持する
-rディレクトリごと再帰的にコピーする

13.5.2. SSH鍵の生成

ssh-keygenコマンド

SSHで公開鍵と秘密鍵のペアを作成するコマンド。 一般的には暗号化にはRSAを使用したほうが良い。

ssh-keygen <オプション>
オプション説明
-p既存の秘密鍵ファイルのパスフレーズを変更
-t生成する鍵の種類( rsa1 または rsa または dsa )を指定
-b鍵の長さを指定(2048など)

RSA暗号方式の鍵を生成した場合、秘密鍵と公開鍵は次のファイルパスに生成する。 また、生成した公開鍵は、~/.ssh/authorized_keysに公開鍵リストとして追加される。

説明
秘密鍵~/.ssh/id_rsa
公開鍵~/.ssh/id_rsa.pub

13.5.3. SSHのホストベース認証

ホストベース認証はSSHサーバに登録済みのホストからSSH通信があった場合にそのユーザーを信用して接続を許可する認証。 サーバの正当性確認するものとなっている。 このとき、SSHサーバとクライアントはユーザー認証を行わずホストの認証のみを行う。

認証手順は以下の通り。

  1. サーバの公開鍵をクライアントに送る
  2. クライアント側で保存されているサーバの公開鍵(場所は~/.ssh/known_hosts)と一致確認

またホストベース認証の鍵のファイルパスは以下に配置される。

暗号化方式鍵のファイルパス
RSA秘密鍵/etc/ssh_host_rsa_key
RSA公開鍵/etc/ssh_host_rsa_key.pub

13.5.4. 公開鍵認証

公開鍵認証はユーザ認証の方式の1つ。 認証フローは以下の通り。

  1. クライアント側で鍵ペア作る(ssh-keygen)
  2. クライアントの公開鍵をホストに渡す
  3. クライアントの鍵が使用できるか確認する
  4. クライアントの秘密鍵で署名を作る
  5. サーバに送る
  6. サーバ側の、クライアント公開鍵で署名を検証する

13.5.5. SSH Agent

SSH Agentは秘密鍵ファイルを使用する際にパスワード認証なしにログインすることができる仕組み。 秘密鍵をメモリ上に保存しておいて必要時に利用するようにすることで実現している。

利用は以下のように行う。

  1. ssh-agentの子プロセスとしてbashシェルの起動(ssh-agent bash)
  2. ssh-addコマンドを使用して秘密鍵を登録

13.5.6. OpenSSH

OpenSSHは高いセキュリティでリモートホスト間通信できる仕組み。 SSH v1系、v2系両対応しており、ファイル転送、リモート操作が可能。

認証機能と暗号化が含まれる。

OpenSSHのインストール

インストールする際のパッケージは以下表の通り。 また設定ファイルは/etc/sshd_configとなる。

clientserver
Ubuntu, Debianopenssh-clientopenssh-server
Ret Hat系openssh, openssh-clientopenssh-server

サーバの起動はSysVinitのRedHat系で/etc/init.d/sshd start、Debian系で/etc/init.d/ssh startとなる。 またSystemdではsystemctl start sshd.serviceとなる。

13.5.7. GnuPG

GPG(GnuPG)はファイルの暗号化と復号が行えるOSSソフトウェア。 公開鍵暗号を使用してファイルの暗号化と復号、電子署名することが可能。

GnuPGを使用するためにはgpgコマンドを使用する。