🖥️

Linuxを再入門する -2022年DevOpsエンジニアロードマップ-

2022/07/19に公開
この記事の目次
  • 想定読者
  • 前提
  • 目的
  • Linuxの概要
  • Linuxディレクトリ構成
  • ファイルとディレクトリの権限
  • I/Oとリダイレクト
  • ネットワーク間のファイルのコピーと転送
  • cronによるスケジュールジョブ実行
  • パッケージとパッケージマネージャ
  • 起動プロセス
  • ディスク管理
  • ネットワーク
  • さいごに

想定読者

このシリーズでは、以下のような方々をターゲットとしています。

  • Linuxは知ってるけどよくわかっていない
  • 普段業務で触ってはいるもののなんとなくで使っている
  • Dockerなど触ってみたもののコマンドの意味がよくわからない
  • DevOpsに興味はあるけど、そもそも何から手をつけていいか迷っている

かくいう筆者もまとめながら理解をしている身ですので、誤りなどございましたらご指摘いただけますと幸いです。

前提

2022年DevOpsエンジニアロードマップの2.Understand different OS Conceptで紹介されておりました以下のudemyコースをもとに自分なりに解釈し、調べまとめたものとなります。
https://www.udemy.com/course/linux-administration-bootcamp/
Linux系コマンドの紹介については、他にも多くの記事が存在しているように見受けられるため、あまりコマンドについては詳しく記載せず、Linuxの全体像を掴めるような内容となっております。
また、内容が多くなってしまうことが予想されるため、興味のある箇所から読んでいただき問題ありません。

目的

今までアプリケーションエンジニアとして主要言語を使った開発者から、OSやハードウェアの知識を身につけることで運用についても理解を深めるきっかけとなること。

Linuxの概要

Linuxとは、OSの一種です。
OS(Operating System)とはハードウェアリソースやアプリケーションを実行する環境を管理するソフトウェアのことです。
Linuxディストリビューションとは、様々なアプリケーションソフトウェアのコレクションです。もう少し具体的に言うと、LinuxOS上に、webブラウザやEmailクライアントなどのアプリケーションがデフォルトで含まれているパッケージといえます。
RedHat Enterprize Linux(RHEL)やubuntuなどが有名どころです。

このLinuxディストリビューションには、カーネルというものが含まれています。
このカーネルは、いわばLinuxにおけるコアな要素の一つで、カーネル+アプリケーション=ディストリビューションとなります。

Linuxディレクトリ構成

Linuxにおける主なディレクトリを記載しています。

directory description
/ ルート、 ファイルディレクトリの最上位階層に位置
/bin バイナリファイルや実行ファイルを格納
/etc システムconfigファイルを格納
/home ホームディレクトリ
/opt 3rdパーティソフトウェアを格納。主にOSに付属されていないソフトウェアなどが含まれる
/tmp 一時的なファイル格納に使用。一般的なディストリビューションは、再起動時に消えてしまう
/usr 各ユーザーが共通して利用するプログラムを格納
/var 多くの場合OSやアプリケーションのログファイルを格納。よく変更がかかるようなファイルなどが置かれる
/dev システム管理者や、OSによって制御されているデバイスファイルを格納

ファイルとディレクトリの権限

パーミッション

以下のコマンドを入力し、実行するとカレントディレクトリ内のファイルやディレクトリの権限を確認できます。

$ ls -l

このように表示されます。(後半省略)

-rw-rw-r-- 1 jason users ~~~~~~~

この部分の意味について

-rw-rw-r--

冒頭1文字目は、以下の意味となります。

シンボル タイプ
- ファイル
d ディレクトリ
| シンボリックリンク

2文字目以降は、ユーザー、グループ、その他として3文字を1セットとして表します。

permission file directory
Read(r) ファイルの参照が可能 ディレクトリ内のファイル参照可能
Write(w) ファイルの変更が可能 ディレクトリ内の変更可能
Execute(x) ファイルの実行が可能 コンテンツやメタデータのアクセス可能

つまり、 こちらの例で言うと、タイプはファイルで、ユーザーはReadWrite権限、グループはReadWrite権限、その他はRead権限を意味します。

-rw-rw-r--

パーミッションの変更

以下の要素を活用し、パーミッションの変更が可能となります。

要素 意味
chmod Change modeコマンド
ugoa User, Group, Other, All
+-= 追加、削除、セット
rww Read, Write, Execute

具体的には、このようにしてshellで実行をします。

$ ls -l sample.data
>>> -rw-r--r--
$ chmod g+w sample.data
>>> -rw-rw-r--
$ chmod a=r sample.data
>>> -r--r--r--

気をつける点として、ディレクトリのパーミッションは、そのディレクトリ内のファイルにも影響するため、もしファイルのパーミッションが正しいが、うまく動作しない場合、ディレクトリのパーミッションを確認してみるとよいです。

I/Oとリダイレクト

I/Oとは、Input/Outputのことで、3つのタイプが存在します。

I/O名 略称 ファイルディスクリプタ
標準入力 stdin 0
標準出力 stdout 1
標準エラー stderr 2

リダイレクトを活用すると、コマンドの結果表示を画面に出力するのではなく、ファイルに出力することなどができる。上記のI/Oとともに活用することが多いです。

項目 意味
> ファイルに出力するようリダイレクトする。ファイル内に内容が記載されている場合、上書きされる
>> ファイルに出力するようリダイレクトする。ファイル内に内容が記載されている場合、追記する
< ファイルからコマンドへリダイレクトする
& ファイルディスクリプタが使用されている識別子にリダイレクトする際に使用する
2>&1 標準エラーと標準出力を合わせてリダイレクトする
2>file ファイルに標準エラーを出力するようリダイレクトする

カレントディレクトリでsample.txtというファイルを作成し、以下のコマンドを順次実行していくと、標準入力・標準出力・標準エラーが確認できます。

$ ls > sample.txt
>>> lsで出力される内容がsample.txtに出力されている
$ ls -l >> sample.txt
>>> ls -lで出力される内容がsample.txtに追記されている
$ aaa > sample.txt 2>&1
>>> -bash: aaa: command not foundが出力されている

ネットワーク間のファイルのコピーと転送

あるLinuxサーバから別のLinuxサーバへファイルをコピー及び転送したい場合は、以下の2種類の方法があります。

  • SCP(セキュアコピー)
  • SFTP(SSHファイル転送プロトコル)
    どちらもセキュアな通信プロトコルであるが、SCPではcpコマンドのような形でファイル転送するのに対して、SFTPではFTPでファイル転送を行う違いが挙げられます。
$ scp ${転送したいファイル} ${転送先}
$ sftp ${host}

cronによるスケジュールジョブ実行

cronを使うことで、定期的にバックグラウンドで実行したい処理などをジョブとして繰り返し実行させることができます。
実際の使い方としては、以下のようになります。

# 毎週月曜午前7時に実行するジョブ
0 7 * * 1 /opt/sales/bin/weekly-report
# 毎日午前2時に実行した情報をログファイルに出力するジョブ
0 2 * * * /root/backupdb > /tmp/db.log 2>&1
# 15分毎に実行するジョブ
0,15,30,45 * * * *  /opt/acme/bin/15-min-check
# または
*/15 * * * * /opt/acme/bin/15-min-check
コマンド 説明
crontab ${ファイル} ファイルから新しいジョブを追加
crontab -l 追加されているcronジョブを一覧出力
crontab -e cronジョブを編集
crontab -r cronジョブを削除

パッケージとパッケージマネージャ

パッケージとは、アプリケーションを構成するファイルのコレクションのことを指し、データやメタデータ、バージョンや依存関係などの情報が含まれています。
パッケージマネージャは、そのパッケージをインストール/アンインストール、削除など管理します。それに加え、パッケージをインストールする際に必要な依存関係も自動的に管理します。

yum

RHEL7/CentOS7以前を使う場合は、yumコマンドを使うことができます。

コマンド 説明
yum search package パッケージを検索
yum info [package] パッケージの情報を出力
yum install [-y] package パッケージのインストール
yum remove package パッケージの削除
yum upgrade [package] パッケージのアップグレード

dnf

RHEL8/CentOS8以降を使う場合は、dnfコマンドを使うことができます。

コマンド 説明
dnf search package パッケージを検索
dnf info [package] パッケージの情報を出力
dnf install [-y] package パッケージのインストール
dnf remove package パッケージの削除
dnf upgrade [package] パッケージのアップグレード

apt

Debian、Ubuntu、Linux Mint、Kali Linuxなどを使う場合は、aptコマンドを使うことができます。
aptコマンドは、apt-cacheapt-getが統合されたようなものになっています。

コマンド 説明
apt search package パッケージを検索
apt install [-y] package パッケージのインストール
apt remove --purge package パッケージの完全削除
apt upgrade [package] パッケージのアップグレード

起動プロセス

LinuxなどのOSを起動させるとき、OSよりも先に起動して、パソコンに接続された周辺機器を制御するソフトウェアが存在します。それを、BIOS(Basic Input/Output System)と呼びます。
CPUやメモリ、ストレージなどの機器が起動時に問題ないかをテストするようになっています。
/bootディレクトリにLinuxを起動する際に必要なファイルが含まれています。
また、昨今ではBIOSに代わり、UEFI(Unified Extensible Firmware Interface)と呼ばれる仕様が使用されています。
違いとしては、ディスクのパーティション形式を規定する領域が挙げられます。詳細については、ディスク管理を参照してください。

カーネルログバッファ

Linuxカーネルからのログメッセージが格納されています。
多くのLinuxディストリビューションでは、/var/log/dmesgディレクトリに格納されています。

syslog

システムからのメッセージをファイル保存しておく仕組みのことです。
基本的には/var/logの下にログが格納されています。セキュリティの関係上、root権限でないと読み込むことができない場合が多いです。
syslogサービスとして、rsyslogがLinuxディストリビューションで採用されており、/etc/rsyslog.confに設定ファイルが格納されていることが一般的です。
このsyslogには記述ルールが存在し、書式は

# <ファシリティ>.<プライオリティ>となる
mail.*
>>> ファシリティはmail、プライオリティは全てという意
# <ファシリティ>.<プライオリティ>;<ファシリティ>.<プライオリティ>という形でセットでも指定可能
cron.*;auth.*
>>> cronとauthの全てを指定

主なファシリティとプライオリティは以下になります。

ファシリティ

ワード 説明
kern カーネルのメッセージ
user ユーザレベルのメッセージ
mail メールシステム
daemon デーモンシステム
auth セキュリティ/認証のメッセージ
syslog syslogdから生成されたメッセージ
cron cronからのメッセージ
local0-7 独自設定

プライオリティ

ワード 説明
emerg 致命的状態
alert 早急な対処が必要
crit 危険な状態
err 一般的エラー
warning 一般的警告
notice 重要な通知
info システムからの情報
debug デバッグ情報
none ファシリティの無効化 ログの除外

ディスク管理

パーティション

PCの記憶媒体、HDDやSDDその他メモリスティックなどに設けることができる「しきり」のこと。ひとつの物理ドライブを複数の論理ディスクに分割して扱うことができます。

MBR(Master Boot Record)

BIOSで起動時に、ディスクのパーティション情報などを格納する特殊な領域。およそ2TB以上のパーティションは読み込めないなどの制約があります。

GPT(GUID Partition Table)

MBRの制約を解消するための新たな方式。
UEFIで起動していれば、GPT形式でインストールされます。

ファイルシステム

ファイルシステムとは、ハードディスクなどの記憶装置にあるデータをファイル名・更新日付などの属性データや、ファイルデータ自体を管理するための仕組みです。
Linuxでは、ext2、ext3、ext4など機能の違いにより数多くの種類があります。

マウント

Linuxのディレクトリ構造は、「/」(ルートディレクトリ)から始まるツリー構造になっており、記憶装置をコンピュータへ接続した場合、その記憶装置をこのツリー状のディレクトリ構造のどこかのディレクトリとして機能させます。マウントとは、接続した記憶装置を、このツリー構造のあるポイントへ登録することを指します。

LVM(Logical Volume Manager)

LVMは、ユーザーが扱うパーティションとして、論理ボリュームと呼ばれる単位でパーティションを提供して、物理的なディスクの存在を隠蔽します。その結果、物理的なディスクの増設や変更などがユーザやアプリケーションに対して隠蔽されてディスクデバイスの管理の柔軟性を向上させます。

ネットワーク

IPアドレス

IPアドレスの確認方法。

$ ip address

実行すると色々出力されますが、「lo」はlocalhostloopbackのことであり、動作させているコンピュータ自身のことを指しています。

inet 127.0.0.1/8

などIPアドレスが確認できると思います。

ホスト名

ホスト名の確認方法。

$ hostname

ホスト名とIPアドレスを対応させるためのファイルは/etc/hostsに以下のような内容で記述されています。

127.0.0.1   localhost 
192.168.0.10  webprod01.mycompany.com webprod01
192.168.0.11  webprod02.mycompany.com  webprod02

また、名前解決を行う優先順位を指定するファイルが、/etc/nsswitch.confに記述されており、

hosts: files dns

という設定であれば、ローカルにあるファイル→DNSサーバへ名前解決を行うという順となります。

DHCP

DHCP(Dynamic Host Configuration Protocol)とは、ネットワーク接続に必要な情報を自動的に割り当てるプロトコルのことです。
DHCPクライアントがDHCPサーバへネットワークの設定情報をリクエストし、レスポンスとしてDHCPサーバがDHCPクライアントに設定情報を割り当てるような構成となっており、設定情報として「IPアドレス」「サブネットマスク」「ゲートウェイ」「DNSサーバ」などが含まれます。

トラブルシューティング

ping

$ ping HOST
$ ping -c COUNT HOST

google.comを例にすると、以下のようになります。

$ ping -c 3 google.com

localhostへpingをしてヘルスチェックをするような使い方ができます。

traceroute

tracerouteは、あるホストから別のホストまでのネットワーク経路をリスト表示するコマンドです。
pingで相手ホストから正常な応答がなかった場合などに、ホスト自身や経路上のルーターのルーティング設定が正しいかどうかを確認するために用いられます。また、経路上のボトルネックを調査するようなことにも役立ちます。

$ traceroute -n google.com

netstat

ホストのネットワーク接続状態やネットワーク統計などを確認するためのコマンドです。
ホストが現在実行している接続一覧とそのステータスを確認できるほか、IPやTCP/UDP以下の各パケット統計やエラー状態なども調査できます。

オプション 説明
-n IPアドレスとポートなど数値のみ表示
-i ネットワークインターフェイスのリストを表示
-r ルートテーブルを表示(-rn)
-p プロセスIDとプログラム名を表示
-l listen状態の接続のみ表示(-nlp)
-t TCPのみ表示(-ntlp)
-u UDPのみ表示(-nulp)

さいごに

インフラに取り組んだ経験がない中で、DevOpsに取り組もうとすると、どうしても基礎が身についてない状態でなんとなくの理解で進めてしまうこともあり、今一度基礎に立ち返って学び直しました。
同じような境遇の方の理解に少しでも貢献できましたらとても嬉しく思います。
最後までお読みいただきありがとうございました。

Discussion