これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.
1.Linux/シェル基礎
1 - 1.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) |
CentOS | RHELをベースにした無料のOSSディストリビューション。 | RPM (yum/dnf) |
AlmaLinux | CentOS 8の終了に伴い代替として注目されているディストリビューション | RPM (yum/dnf) |
Fedora | 新機能の実験場としての役割を持つ、コミュニティ駆動型のディストリビューション。 | RPM (dnf) |
Debian | OSS志向で安定性を重視するディストリビューション。 | APT (apt) |
Ubuntu | 初心者にも使いやすいデスクトップディストリビューション。 | APT (apt) |
Linux Mint | Ubuntuベースで、使いやすさと美しいデスクトップ環境に特化。 | APT (apt) |
openSUSE | ユーザーと開発者の共同作業を重視し、堅牢なシステムを提供。 | Zypper |
Arch Linux | ユーザーカスタマイズと最新ソフトウェアに重点を置くローリングリリース。 | Pacman |
Manjaro | Arch 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 行ずつ記述して作成する。 作成したシェルスクリプトを実行することで、コマンドの実行を自動化することができる。
また作成したシェルスクリプトをサーバーの起動時に実行したり、数時間毎に実行したりすることも可能。
シェルの種類
以下にいくつかの一般的なシェルとそれらの特徴を表で示す。
シェル名 | 特徴と説明 |
---|---|
Bash | Bourne Again SHellの略。Linuxシステムで広く使用されるデフォルトのシェル。豊富なコマンドとスクリプト機能を提供。 |
Zsh | オープンソースの拡張可能なシェル。Bashの拡張版で、カスタマイズ性が高く、タブ補完などの便利な機能を備えている。 |
Fish | ユーザーフレンドリーな対話型シェル。自動補完やシンタックスハイライトなど、新しいユーザーにも親しみやすい特徴がある。 |
Csh | Cシェルの略。Unixの初期から存在するシェルで、C言語に似た構文を持つ。カスタマイズ性は低いが、一部のユーザーには好まれる。 |
Ksh | Korn SHellの略。Bourne Shellの拡張版で、シェルスクリプトの開発をサポートする高度な機能を提供。 |
Dash | Debian Almquist SHellの略。軽量なシェルで、起動が速く、システムの基本的なタスクを処理するのに適している。 |
2 - 2.システムアーキテクチャ
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/cpuinfo | CPUの情報を格納したファイル |
/proc/interrupts | IPQなどの情報を格納したファイル |
/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.0 | 12Mbps |
USB 1.1 | 12Mbps |
USB 2.0 | 480Mbps |
USB 3.0 | 5Gbps |
USB 3.1 | 10Gbps |
USB 4.0 | 40Gbps |
デバイスドライバ
ハードウェアの利用にはデバイスドライバが必要となる。 ドライバはベンダーが用意した専用ドライバとLinuxシステムが提供するクラスドライバに分けられる。
USBデバイスを使用するにはデバイスドライバが必要。これはUSBデバイスがデバイスクラスに応じて異なる方法で通信するために使用される。また、クラスドライバはデバイスクラスに準拠する。
デバイスクラス | サポートするUSBデバイスの例 |
---|---|
HID: Human Interface Devices | kbd, mouse |
USB Mass Storage Device | USBメモリ、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アーキテクチャ構成の場合)
- BIOS/UEFIが起動し、ハードウェアチェックや初期化を行い、ブートローダを読み出し制御を移す
- カーネルはメモリの初期化、システムクロックの設定を行い、初期RAMディスクをマウントする
- カーネルは最初のプロセスである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による起動順序は以下の通り。
- initが/etc/inittabファイルを読み込む
- initが/etc/rc.sysinitnスクリプトを読み込む
- initが/etc/rcスクリプトを実行する
- /etc/rcスクリプトが /etc/rc<ランレベル>.dディレクトリ以下のスクリプトを実行する
SysVinitはサービスを順次起動に時間がかかる、依存関係を適切に処理できない問題があった。これらの問題を解決した起動の仕組みにはupstartやsystemdがある。
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は処理を分割して並列化することでシステム起動処理を高速化している。具体的には以下のような複数のデーモンプロセスが連携して動作する
プロセス | 説明 |
---|---|
systemd | systemdを統括するメインプロセス |
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を置き換えると以下のようになる。
ランレベル | ターゲット |
---|---|
0 | poweroff.target |
1 | rescue.target |
2 ~ 4 | multi-user.target |
5 | graphical.target (multi-user.target + ) |
6 | reboot.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-dependencies | Unitの依存関係の表示 |
2.4.4. journalctlコマンド
journalctlコマンドはsystemd-journaldが収集したログを表示するためのコマンド。パイプやgrepコマンドと組み合わせて使用することが多い。
journalctl
3 - 3.Linuxのインストールとパッケージ管理
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 Legacy | GRUB2 |
---|---|---|
Version | 0.9x | 1.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, apt | rpm, 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-upgrade | Debianのシステムを最新にアップグレードする |
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, –checksig | RPMパッケージの電子署名の検証 |
使用例は以下の通り。
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コマンド
4.1. シェル
4.1.1. シェルとシェルの種類
シェルとは
シェルはコマンドを解釈して実行するプログラムのこと。
利用可能なシェルは/etc/shells
で確認可能。
シェルの種類
シェル | 説明 |
---|---|
sh | UNIX V7から標準添付されているUNIXの基本的なシェル |
csh | C言語スタイルの構文を持ったUNIX系OSの代表的なシェル |
tcsh | Cシェルの派生版の中で特にユーザーインターフェイス部分を中心に拡張されたシェル |
ksh | Bシェルと上位互換を保ちながら、Cシェルなどから優れた機能を取り込んだシェル |
bash | UNIX系のシェルの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 | コマンド履歴を格納するファイル |
HISTFILESIZE | HISTFILEに保存する履歴数 |
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 | ディレクトリ自身の表示 |
-i | inode番号表示 |
-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 | 文字の名前 |
c | ASCII文字かバックスラッシュつきのエスケープ文字 |
d | 符号付きの10進数 |
f | 浮動小数点数 |
o | 8 進数 |
u | 符号なしの10進数 |
x | 16 進数 |
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 |
コマンド1 | tee ファイル |
teeコマンド
teeコマンドは標準入力から読み込んでファイルに書き込み、次のコマンドへ実行結果を引き渡せられるもの。 使用例は以下の通り。
オプション-a
でファイルに追記する。
ls -l | tea data.txt
4.3.3. リダイレクト
リダイレクトを使用することでコマンドの実行結果を画面上ではなくファイルに保存することが可能。
リダイレクト | 説明 |
---|---|
> | 出力のリダイレクト |
» | 出力をファイルに追記 |
< | 入力のリダイレクト |
« | 入力終端文字の指定 |
2> | エラー出力をファイルに設定し、コマンドを実行 |
2>&1 | 標準出力とエラー出力をファイルに設定し、コマンドを実行 |
4.3.4. ヒアドキュメント
ヒアドキュメントは<<EOF
で始まる特定の文字列(この例ではEOF)が現れるまで標準入力から入力を受け付けるもの。
5 - 5.Linuxのテキストエディタの使い方
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-F | 1 画面先のページを表示 |
Ctrl-D | 半画面先にスクロール |
Ctrl-B | 1 画面前のページを表示 |
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 + X | nanoの終了 |
Ctrl + K | Shift + ←→ で文字列の指定し文字列をカットする |
Ctrl + U | 文字列のペースト |
Ctrl + \ | 文字列の置換 |
alt + U | 前回の操作を取り消す |
Ctrl + W | 文字列検索 |
Ctrl + R | Ctrl + Tでカレントディレクトリ起点にファイル内容挿入 |
5.3. Vimの使用方法
6 - 6.ファイルとプロセスの管理
6.1. 基本的なファイルの管理
6.1.1. ファイルの圧縮と解凍
ファイルの圧縮解凍
ファイルの圧縮解凍を行うコマンドはいくつかあり、gzip, bzip2, xzなどがある。
gzip | bzip2 | xz | |
---|---|---|---|
圧縮コマンド | gzip | bzip2 | xz |
圧縮率 | 低い | 中 | 高い |
時間 | 短い | 中 | 長い |
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 ファイル名 | アーカイブファイル名の指定 |
-z | gzip による圧縮 ・ 展開 |
-j | bzip2 による圧縮 ・ 展開 |
-J | 7zip による圧縮 ・ 展開 |
-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で作成されるファイルやディレクトリにはアクセス権(パーミッション)が設定される。 これでユーザごとにファイルへのアクセスの許可または禁止を設定できる。
アクセス権 | 表記 | 説明 |
---|---|---|
読み取り | r | read。ファイルの読み取りが可能 ( 内容表示など ) |
書き込み | w | write。ファイルへの書き込みが可能 ( 編集や上書きコピーなど ) |
実行 | x | execute。ファイルの実行が可能 ( プログラムやシェルスクリプトの実行 ) |
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 | 実行権限 |
s | SUID または 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 | シグナル名 | 動作 |
---|---|---|
1 | HUP | ハングアップ |
2 | INT | 割り込み(Ctrl + C) |
9 | KILL | 強制終了 |
15 | TERM | 終了(デフォルト) |
18 | CONT | 停止しているプロセスを再開 |
19 | STOP | 一時停止 |
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で割って計算する | |
-l | LowメモリとHighメモリの状況も表示する ※※ |
-t | 物理メモリとスワップメモリの合計を示す行も表示する |
-s 間隔 | 再出力の間隔を「ss.tt秒」で指定する(デフォルトは1回出力して終了する) |
-c 回数 | 再出力する回数を指定する(デフォルトは1回出力して終了する) |
uptimeコマンド
システムの稼働時間、システムの平均負荷状況はuptimeコマンドにより確認できるコマンド。
uptime
以下情報が確認可能。
- システム稼働時間
- 現在ログイン中のユーザ数
- システムの平均負荷状況
unameコマンド
システムやカーネルの情報を表示するコマンド。
uname <オプション>
オプション | 説明 |
---|---|
-a, –all | 全ての情報を表示 |
-n | ネットワークノードとしてのホスト名を表示 |
-r | カーネルのリリース番号を表示 |
-s | カーネル名を表示(標準) |
-v | カーネルのバージョンを表示 |
-m | マシンのハードウェア名を表示 |
-p | プロセッサの種類を表示 |
-i | ハードウェアプラットフォームを表示 |
-o | OS名を表示 |
watchコマンド
コマンドをn秒ごと(デフォルトでは2秒間隔ごと)に繰り返し実行させるコマンド。
watch <コマンド>
短いオプション | 意味 |
---|---|
-t | ヘッダを表示しない |
-e | エラー時(実行したコマンドエラーコード0以外で終了したとき)はwatchコマンドも終了する |
-b | エラー時にはビープ音を鳴らす |
-d | 直前の実行結果から変化した箇所をハイライト表示する。「permanent」または「cumulative」オプションを付けると初回実行時から変化した箇所を表示する(「-d=permanent」のように指定) |
-c | ANSIによるスタイル指定を行う |
-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. ターミナルマルチプレクサ
ターミナルマルチプレクサは一つの端末画面の中に複数の仮想端末を作成/切り替えができる仕組み。 デタッチ/アタッチ機能、つまり各ウィンドウの作業状況を保ったまま終了/再開が可能。
有名なターミナルマルチプレクサとしてはtmux、screenがある。
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.パーティションとファイルシステム
7.1. ハードディスクとその関連規格
7.1.1. Linuxにおけるハードディスクの利用方法
Linuxでハードディスクを使用するには以下のステップを行う必要がある。
- 電源OFFの状態で、ハードディスクをシステムに物理的に接続
- 追加したハードディスクのデバイスファイルが作成されていることを確認
- ハードディスクにパーティションを切る(
fdisk
コマンド) - 各パーティションにおいてext3ファイルシステムを作成(
mke2fs
コマンド) - ファイルシステムのマウント(
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/sda | 1番目のSCSI/SATA/USBに接続したHDD |
/dev/sdb | 2番目のSCSI/SATA/USBに接続したHDD |
/dev/sdc | 3番目のSCSI/SATA/USBに接続したHDD |
/dev/sdd | 4番目のSCSI/SATA/USBに接続したHDD |
/dev/sr0 | 1番目のCD/DVDドライブ |
/dev/st0 | 1番目のテープドライブ |
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はパーティション形式。
MBR | GPT | |
---|---|---|
ハードディスク制限 | 2GB | - |
基本パーティション | 4個 | 128 |
MBR
MBR(Master Boot Record)は1983年にIBM PC DOS 2.0に初発表された古いディスクタイプのこと。 BIOSをサポートする。
MBRセクターとパーティションで構成される。 特徴は以下の通り。
- 基本パーティションと拡張パーティションといった2種類のみを作成可能
- 最大4つのパーティションが作成可能
- MBRディスクの最大容量の制限が2TB
GPT
GPT(GUIDパーティションテーブル)はMBRより新しい規格。 UEFIをサポートする。
保護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などが選択できる。 それ以上のファイルシステムは別コマンドを利用する必要がある |
パーティション情報を表示する | |
quit | partedを終了する |
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 | 標準 |
ext3 | ext2機能+ジャーナリング機能 |
ext4 | ext3+拡張機能 |
UNIX系OSから移植されたファイルシステム
ファイルシステム | 説明 |
---|---|
XFS | SGI社が開発。ジャーナリング機能あり |
JFS | IBM社が開発。ジャーナリング機能あり |
その他のファイルシステム
ファイルシステム | 説明 |
---|---|
Brtfs | 高機能なファイルシステム |
iso9660 | CD-ROMのファイルシステム |
msdos | MS-DOSのファイルシステム |
vfat | SDカードや古いwindowsのファイルシステム |
exFAT | FAT後継規格でフラッシュメモリ向けのファイルシステム |
7.5.3. ファイルシステムのマウント
マウントはあるパーティションとあるディレクトリを関連づける作業のこと。 パーティションにファイルシステムを作成した後、マウントを行う必要がある。
恒常的なマウント設定
恒常的なマウントを行うためには以下の手順でマウントを行う必要がある。
/etc/fstab
ファイルの編集mount
コマンドの実行、または再起動(init 6)の実行
/etc/fstabの書き方
/etc/fstab
ファイルは以下のように記述される。
/dev/sda5 /home ext4 defaults 1 2
左から順に以下意味となる。
- マウントするデバイスファイル名
- マウントポイント
- ファイルシステムの種類(ext2,xfsなど)
- マウントオプション(async, auto, defaults, exex, noexecなど)
- dumpコマンドによるアップデート対象かどうかの指定(0:バックアップ必要なし、1:バックアップ必要あり)
mountコマンド
ファイルシステムのマウントを行うコマンド。
mount /dev/sda6 /home3
unmountコマンド
現在マウントされているファイルシステムをアンマウントするコマンド。
unmount /dev/sda6 /home3
7.5.3. ファイルシステムの確認コマンド
dfコマンド
ファイルシステムの空き容量やinodeの使用状況が確認できるコマンド。 ファイルシステムの空き容量の表示ができる。
df <オプション> <デバイス名/ディレクトリ>
オプション | 説明 |
---|---|
-i | inodeの使用状況を表示 |
-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 ファイルシステムタイプ | ファイルシステムの種類を指定する |
-j | ext3ファイルシステムを作成する |
-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を付けると「週」 |
-j | ext2をext3ファイルシステムに変換 |
-L ラベル名 | ファイルシステムのボリュームラベルを設定 |
8 - 8.シェルとシェルスクリプト
8.1. シェル環境のカスタマイズ
8.1.1. 環境変数とシェル変数
Linuxの変数には環境変数とシェル変数がある。 特徴は以下の通り。
変数 | 説明 | 代表的な |
---|---|---|
環境変数 | シェル自身とそのシェルから起動されるすべてのプロセスに引き継がれる | PATH, HOMEなど |
シェル変数 | そのシェル内のみで有効な変数 | - |
詳しくはコチラ。
8.1.2. 環境変数/シェル変数を表示するコマンド
env/printenvコマンド
環境変数を表示するコマンド。
printenv
は環境変数名を指定可能。
env
printenv HOME
setコマンド
環境変数とシェル変数を表示するコマンド。
set <オプション>
オプション | 説明 |
---|---|
-o | 一覧表示 |
-a | 自動的にエクスポート |
–help | ヘルプ |
-o / +o | オプション有効/無効化 |
ignoreeof | Ctrl + 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.bashrc | bash起動時に実行される |
/etc/bashrc | ~/.bashrcから参照 |
~/.bash_profile | ログイン時に実行 |
~/.bash_login | ~/.bash_profileがない場合、ログイン時に実行 |
~/.profile | |
~/.bashrc | bash起動時に実行 |
~/.bash_logout | ログアウト時に実行 |
/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 | シェルスクリプトファイル名 |
$1 | 1番目の引数。※ 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とデスクトップ
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 | フォント関連のパスの設定 |
Module | Xサーバがロード予定のダイナミックモジュールの設定 |
InputDevice | Xサーバに対する入力デバイス(キーボード等)の設定 |
Monitor | システムにより使用されるモニタタイプの設定 |
Device | システム用のビデオカードの設定 |
Screen | ディスプレイの色深度と画面サイズの設定 |
Xクライアントコマンド
X Window Systemの設定確認、情報収集のためのコマンドは以下の通り。
コマンド | 説明 |
---|---|
showrgb | X 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などがある。
GNOME | KDE Plasma | |
---|---|---|
テキストエディタ | gedit | KEdit |
端末 | GNOME端末 | Konsole |
ファイルマネージャ | Nautilus | Dolphin |
GUIツールキット | GTK+ | Qt |
ディスプレイマネージャ | GDM | SDDM |
ウィンドウマネージャ | Mutter | KWin |
標準採用 | RedHat, CentOS, Fedora, Ubuntu | openSUSE, Slackware, Kubuntu |
9.2.4. リモートデスクトップ
リモートデスクトップは別のマシン上からリモートで別のマシンのデスクトップを操作できるもの。 Linux向けに制御する機能にはVNC、RDP、SPICE、XDMCPなどがある。
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.アカウント管理と管理タスク
10.1. ユーザとグループの管理
10.1.1. ユーザアカウント
Linuxは複数のユーザが同時にログインし利用できるシステムとなっている。
またユーザアカウント情報は/etc/passwd
ファイルに保存される。
/etc/passwdファイル
/etc/passwd
ファイルは以下のような構成となり、一般ユーザでも読み取り可能。
<ユーザ名>:<暗号化されたパスワード>:<UID>:<GID>:<GECOS(コメント)>:<ホームディレクトリ>:<デフォルトシェル>
デフォルトシェルはログインを想定しない場合/bin/false
や/sbin/nologin
となる。
/bin/false | /sbin/noloin | |
---|---|---|
Telnet接続 | x | x |
SSH接続 | x | x |
FTP接続 | x | o |
SFTP接続 | x | x |
シェルの実行 | x | x |
/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 UID | UIDの指定 |
-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
オプション | 説明 |
---|---|
-d | atrmのエイリアス |
-r | atrmのエイリアス |
-l | atqのエイリアス |
-f ファイルパス | STDINではなくファイルからジョブ指定 |
atrm
コマンドは予約中のジョブをジョブ番号で指定して削除できるコマンド。
atq
コマンドは予約中のジョブを表示するコマンド
crontabコマンド
cronを設定するコマンド。
crontab <オプション>
オプション | 説明 |
---|---|
-e | viエディタなどを使用して、crontabファイルを編集 |
-l | crontabファイルの内容を表示 |
-r | crontabファイルの削除 |
-i | crontabファイル削除時の確認 |
-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) | システムクロックの時刻をハードウェアクロックに反映 |
-u | UTC (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など) |
cron | cron |
daemon | 各種デーモン |
kern | カーネル |
lpr | 印刷システム |
メールサービス | |
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-pager | 1ページごとに表示せず、すべてのログを出力する |
11.2.4. ログの調査
主要なログファイルは/var/log/messages
に保存されるが、ディストリビューションにより差異がある。
ログの種類
システム状態に応じて出力される各種ログは以下表のようなログファイルに出力される。
ログファイル名 | 内容 |
---|---|
/var/log/messages | 一般的なシステム関連のメッセージ |
/var/log/secure | セキュリティに関するメッセージ |
/var/log/cron | 定期的に実行される処理結果に関するメッセージ |
/var/log/maillog | メールに関するメッセージ |
/var/log/spooler | 印刷に関するメッセージ |
/var/log/boot.log | OS起動時に関するメッセ |
ログの確認方法
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においてメールの配送はMTA、MDA,MUAにより構成/実現される。
MTA
MTA(Mail Transfer Agent)は電子メールを配信/転送するプログラム、つまりメールサーバソフトウェアを表す。 MTAにはsendmail、qmail、postfix、eximなどがある。
MTA | 処理速度 | セキュリティ | 説明 |
---|---|---|---|
sendmail | × | × | かつてMTAの標準ソフトウェアと広く普及した。 |
qmail | ○ | ◎ | セキュリティ面に優れており、非常に堅牢なつくり。パフォーマンスもsendmailより優れている。 |
postfix | ◎ | ○ | パフォーマンスが最も優れたMTA。設定が簡単でセキュリティ面も高い。sendmailとの互換性がある。 |
exim | △ | ○ | Debian系の標準のMTA。 |
MDA(Mail Delivery Agent)
メールボックスにメールを送るプログラム。
MUA(Mail User Agent)
MUAはメールクライアント(メーラ)を表しメール作成、閲覧が可能なもの。
11.3.2. メールの配送フロー
- メールクライアントソフトウェア(MUA)でメール作成
- 送信元側のメールサーバ上のMTA(1)へ送る
- 宛先側のメールサーバ上のMTA(2)へ転送(相手ドメインのDNSサーバに尋ねる)
- MTA(2)がメールを受け取ると、MDAがメールをメールボックスに格納する
- 受取人は自分のメールボックスからメールを取り出す(POP,IMAPを使用)
11.3.3. MTAの起動とメールの確認
MTAプログラムの確認
LinuxシステムでどのMTAプログラムがインストールされているのかは、以下プログラムで確認可能。
netstat -atnp | grep 25
メールの送信、受信メールの確認
mail
コマンドで確認可能。
mail # 受信メールの確認
mail -s <題名> <宛先ユーザー名 | 宛先メールアドレス> # メールの送信「.」で入力終了
メールの転送とエイリアス
メールを転送する場合以下の2つの方法がある.
/etc/aliases
ファイルに設定する方法- 各ユーザーのホームディレクトリに存在する
~.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ファイルを格納される)
- AdobeのPPD形式のファイルでデバイスドライバの設定ができる(
- Web画面での設定
- Webブラウザから設定可能(ポート631)
- プリンタクラスのサポート
- 複数のローカルプリンタを1つのクラスにグループ化
CUPSの情報は/etc/cups
ディレクトリに格納され、CUPSの設定ファイルは/etc/cups/cupsd.conf
に保存される。
CUPSの設定方法は以下の2つある。
- 設定ファイルを直接編集する方法
- WebブラウザでCUPSの設定ページにアクセスして編集する方法
印刷の流れ
- 印刷データ受け取る
- スプーラが印刷データを受け付け、スケジューリングを行う
- プリンタが直接受け付けられないデータを中間形式に変換
- PPDに定義されたフィルタにより、最終の印刷データに変換する
- 処理した印刷データをCUPSのバックエンドに送る
- CUPSバックエンドは印刷データをプリンタに渡す
11.4.2. 印刷関連のコマンド
lprコマンド
ファイルや標準入力を印刷するコマンド。
lpr <オプション> ファイル名
オプション | 説明 |
---|---|
-# 部数 | 印刷部数を指定 |
-P プリンタ名 | 指定したプリンタに出力 |
lpqコマンド
プリンタキューに登録されている印刷ジョブを確認するコマンド。
lpq <オプション> <ユーザー名> <ジョブ番号>
オプション | 説明 |
---|---|
-a | 全てのプリンタの情報を表示 |
-P プリンタ名 | 指定したプリンタの情報を表示 |
lprmコマンド
プリンタキューにある印刷ジョブを削除するコマンド。
lprm <オプション> <ジョブ番号>
オプション | 説明 |
---|---|
- | 自分の印刷ジョブを全て削除 |
-P プリンタ名 | 指定したプリンタの印刷ジョブを削除 |
12 - 12.ネットワークの設定
12.1. ポート番号
Linuxにおいてポート番号とサービスとの対応は/etc/services
に記述される。
番号 | トランスポート層 | 上位サービス・プロトコル | 説明 |
---|---|---|---|
20 | TCP | FTP | FTPのデータ転送 |
21 | TCP/UDP | FTP | FTPの制御情報 |
22 | TCP | SSH | SSH |
23 | TCP | Telnet | Telnet接続 |
25 | TCP/UDP | SMTP | 電子メール |
53 | TCP/UDP | DNS | DNS |
80 | TCP | HTTP | Web |
110 | TCP | POP3 | 電子メール(受信) |
123 | UDP | NTP | NTPサービス |
139 | TCP/UDP | NetBIOS | Microsoftネットワーク |
143 | TCP | IMAP | 電子メール(IMAP2/IMAP4) |
161 | UDP | SNMP | ネットワークの監視 |
162 | TCP/UDP | SNMP Trap | ネットワークの監視(警告通知等) |
389 | TCP/UDP | LDAP | ディレクトリサービス |
443 | TCP/UDP | HTTP over SSL/TLS | SSL/TLSによるHTTP接続 |
465 | TCP | SMTP over SSL/TLS | SSL/TLSによるSMTP接続 |
514 | UDP | Syslog | ロギングサービス |
636 | TCP/UDP | LDAP over SSL/TLS | SSL/TLSによるディレクトリサービス |
993 | TCP/UDP | IMAP over SSL/TLS | SSL/TLSによるIMAP接続 |
995 | TCP/UDP | POP3 over SSL/TLS | SSL/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 | データリンク層 |
addr | IPアドレス |
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 | ルーティングテーブルを表示 |
-t | TCPポートのみを表示 |
-u | UDPポートのみを表示 |
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/hostname | Linuxのホスト名の設定が行われる(RedHat系, Debian系) |
/etc/hosts | ホスト名とIPアドレスの対応表 |
/etc/resolv.conf | DNSサーバやドメイン名の設定。直接触らずコマンドで設定する |
/etc/nsswitch.conf | 名前解決の問い合わせ順の設定 |
12.3.2. DNS管理コマンド
hostコマンド
DNSサーバを使ってホストやドメインに関する情報を表示するコマンド。
host localhost
digコマンド
DNSサーバに対して問い合わせを行い、その応答結果を表示するコマンド。
dig <オプション> <ドメイン名 or ホスト名> <検索タイプ>
オプション | 説明 |
---|---|
-x | IPアドレスからホスト名を検索 |
検索タイプ | 説明 |
---|---|
a | IPアドレス |
any | 全ての情報 |
mx | メールサーバの情報 |
ns | ネームサーバの情報 |
whoisコマンド
調べたいドメイン名を指定しwhoisデータベースに問い合わせるコマンド。
whois < ドメイン名 >
13 - 13.Linuxのセキュリティ
13.1. Linuxサーバのセキュリティの基本
Linuxをサーバとして運用する場合はセキュリティの観点から主に以下の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サーバなどの接続頻度の高くないサーバに向いている。
スーパサーバの種類
スーパサーバにはinetd、xinetdがあり、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 <オプション> <接続先ホスト>
オプション | 説明 |
---|---|
-1 | SSHプロトコルバージョン 1 を使用 |
-2 | SSHプロトコルバージョン 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サーバとクライアントはユーザー認証を行わずホストの認証のみを行う。
認証手順は以下の通り。
- サーバの公開鍵をクライアントに送る
- クライアント側で保存されているサーバの公開鍵(場所は
~/.ssh/known_hosts
)と一致確認
またホストベース認証の鍵のファイルパスは以下に配置される。
暗号化方式 | 鍵 | 鍵のファイルパス |
---|---|---|
RSA | 秘密鍵 | /etc/ssh_host_rsa_key |
RSA | 公開鍵 | /etc/ssh_host_rsa_key.pub |
13.5.4. 公開鍵認証
公開鍵認証はユーザ認証の方式の1つ。 認証フローは以下の通り。
- クライアント側で鍵ペア作る(
ssh-keygen
) - クライアントの公開鍵をホストに渡す
- クライアントの鍵が使用できるか確認する
- クライアントの秘密鍵で署名を作る
- サーバに送る
- サーバ側の、クライアント公開鍵で署名を検証する
13.5.5. SSH Agent
SSH Agentは秘密鍵ファイルを使用する際にパスワード認証なしにログインすることができる仕組み。 秘密鍵をメモリ上に保存しておいて必要時に利用するようにすることで実現している。
利用は以下のように行う。
- ssh-agentの子プロセスとしてbashシェルの起動(
ssh-agent bash
) ssh-add
コマンドを使用して秘密鍵を登録
13.5.6. OpenSSH
OpenSSHは高いセキュリティでリモートホスト間通信できる仕組み。 SSH v1系、v2系両対応しており、ファイル転送、リモート操作が可能。
認証機能と暗号化が含まれる。
OpenSSHのインストール
インストールする際のパッケージは以下表の通り。
また設定ファイルは/etc/sshd_config
となる。
client | server | |
---|---|---|
Ubuntu, Debian | openssh-client | openssh-server |
Ret Hat系 | openssh, openssh-client | openssh-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
コマンドを使用する。