はじめのLinux入門講座⑥Linuxのプロセスとユーザー/グループ、パーミッションについて説明します!

インフラ

今回は、Linuxのプロセスとユーザー/グループ、パーミッションについてついて説明します。

プロセスとは、Linuxで動作するプログラムの単位であり、効率的なシステム運用にはその管理が欠かせません。
また、ユーザーやグループの概念は、誰が何を操作できるかを明確にするための基本です。

パーミッション(アクセス権)は、ファイルやディレクトリへのアクセスを制御するための重要な仕組みで、セキュリティの観点からも理解しておく必要があります。

この記事では、これらの基本概念を実際の画面を交えてわかりやすく解説します。

ぜひ、最後までご覧いただけると嬉しいです!

プロセスの基本

1. プロセスとは?

Linux におけるプロセスとは、システム上で実行されているプログラムの単位を指します。ユーザーが起動するアプリケーションや、システム内部で動作するバックグラウンドプロセスなど、すべての動作はプロセスとして管理されます。

2. プロセスの種類

Linux のプロセスには主に以下の種類があります。

  • フォアグラウンドプロセス:ユーザーが直接操作するプロセス。
  • バックグラウンドプロセス:ユーザーの操作なしで実行されるプロセス。
  • デーモンプロセス:システムのサービスやバックグラウンド処理を担うプロセス。
  • ゾンビプロセス:終了したが親プロセスが回収していないプロセス。
  • 孤立プロセス(オーファンプロセス):親プロセスが終了し、init プロセスが引き継いだプロセス。

3. プロセスの状態

Linux ではプロセスは以下の状態を持ちます。

状態説明
R (Running)実行中または実行可能な状態
S (Sleeping)待機中の状態(割り込み可能)
D (Uninterruptible Sleep)割り込み不可の待機状態
Z (Zombie)終了したが回収されていない状態
T (Stopped)停止状態(シグナルで一時停止)

4. プロセスの管理

Linux では、以下のコマンドを使用してプロセスを管理できます。

ps

現在のプロセスを表示。

psコマンドによる基本的な出力項目
項目意味備考
PIDProcess ID(プロセスID)各プロセスに割り当てられる一意の識別番号。killコマンドなどでプロセスを操作する際に使用します。
TTYテレタイプ端末(制御端末)プロセスが関連付けられている端末(例:pts/0)。デーモンやバックグラウンドプロセスなどは「?」と表示されることがあります。
TIME累積CPU使用時間プロセスがCPUを使用した合計時間(ユーザー時間 + システム時間)。起動時間ではなく、実際にCPUを使っていた時間です。
CMD実行されたコマンドプロセスを起動したコマンド名と引数を表示。プロセスが何を実行しているかを把握するために使用します。
psコマンドのオプション
# システムで動作している全プロセスを表示
ps aux

top

実行中のプロセスの状況をリアルタイム表示

kill

指定したプロセスにシグナルを送ります。プロセスの終了などができます。

<コマンド例>

kill <PID>
※プロセスに「正常に終了してください」とシグナルを送ります。

kill -9 <PID>
※プロセスに「強制的に終了してください」とシグナルを送ります。上記コマンドで応答がない場合等、最終手段として使用します。

pgrep

名前や条件でプロセスを検索します。以下、スクリーンショットは、[pgrep systemd]でプロセスを検索しています。

& / jobs / fg / bg

& (バックグラウンド実行)

コマンドの末尾に付けることで、そのプロセスをバックグラウンドで実行します。ターミナルの操作を続けながら、時間のかかる処理を行わせたい場合に便利です。

<コマンド例>
# sleepコマンドをバックグラウンドで100秒間実行する
sleep 100 &
jobs コマンド

現在、バックグラウンドで実行中または一時停止しているジョブ(プロセス)の一覧を表示します。表示されるジョブ番号は fgbg コマンドで対象を指定する際に使用します。

<コマンド例>
# 現在のジョブ一覧を表示する
jobs
fg コマンド

バックグラウンドで実行中のジョブを、手元で操作できるフォアグラウンド状態に戻します。ジョブ番号を指定しない場合は、直近のジョブが対象となります。

<コマンド例>
# ジョブ番号1番をフォアグラウンドに戻す
fg %1
bg コマンド

一時停止しているジョブ(例: Ctrl+zで中断したプロセス)をバックグラウンドで実行状態に戻します。処理を裏側で再開させたいときに使います。

<コマンド例>
# ジョブ番号1番をバックグラウンドで再開する
bg %1

5. 親プロセスと子プロセス

Linuxでは、すべてのプロセスは他のプロセスから生成されるという原則に基づいて動作しています。このとき、新しく生成されたプロセスは「子プロセス(child process)」、生成元のプロセスは「親プロセス(parent process)」と呼ばれます。

プロセスの生成:fork()exec()

プロセスは、主に以下の2つのシステムコールを使って生成・実行されます:

  • fork():現在のプロセスを複製し、新たな子プロセスを作成
  • exec():プロセスのメモリ空間を置き換えて別のプログラムを実行

通常、fork()で子プロセスを作り、exec()でその子プロセスに別の処理をさせる、というパターンが多くのコマンドやスクリプトで用いられています。

親子関係の確認方法

Linuxでは、以下のコマンドで親子関係を確認できます。

ps -ef

出力にある PPID(Parent Process ID)が、各プロセスの親プロセスのPIDです。

6. systemctlによるサービス(プロセス)管理

Linux(特に多くの主要ディストリビューションで採用されている systemd)では、systemctl コマンドを用いてサービス(長期間動作するプロセス)の起動・停止・再起動・状態確認などを一元的に管理できます。特にデーモンプロセスやシステムサービスの管理には欠かせないツールです。

よく使われる systemctl コマンド

コマンド説明
systemctl status <サービス名>サービスの現在の状態を確認
systemctl start <サービス名>サービスを起動
systemctl stop <サービス名>サービスを停止
systemctl restart <サービス名>サービスを再起動
systemctl enable <サービス名>システム起動時にサービスを自動起動設定
systemctl disable <サービス名>システム起動時にサービスを自動起動しない

使用例

bashコピーする編集する# nginx サービスの状態を確認
systemctl status nginx

# apache2 サービスを起動
systemctl start apache2

# sshd サービスを再起動
systemctl restart sshd

# mysql サービスをブート時に自動起動設定
systemctl enable mysql

systemctlとプロセスの関係

systemctl が扱うサービスは、実際には Linux のプロセスとして動作しています。systemctl status コマンドを実行すると、そのサービスに紐づいたプロセスの PID や稼働状況、ログの一部が確認できます。個別のプロセスとして確認したい場合は pspgrep と組み合わせて利用すると便利です。

プロセスのまとめ

Linuxにおいてプロセスは、実行中のプログラムを管理する基本単位であり、ユーザー操作やシステム処理すべてがプロセスとして扱われます。
プロセスには種類や状態があり、それぞれの役割や挙動を理解することはシステム管理に不可欠です。
pstopkill などのコマンドでプロセスの確認・制御が可能で、systemctl を使えばサービス単位の管理も行えます。
また、プロセスは親子関係を持ち、fork()exec() により生成・実行される仕組みも押さえておくべきポイントです。これらの知識は、トラブル対応や効率的な運用を行う上で非常に役立ちます。

ユーザーとグループ

1. ユーザーとグループとは

Linux では、システムのセキュリティと管理を目的として、ユーザーとグループの概念が導入されています。

  • ユーザー (User):システムにログインし、操作を行う個々のアカウント。
  • グループ (Group):複数のユーザーをまとめ、アクセス権限を一括で管理する単位。

2. スーパーユーザー(root)

スーパーユーザーとは、システムのすべての操作できる、最も強力な権限を持つユーザーです。ユーザーを切り替える場合、以下のコマンドを使用します。

su

3. ユーザー管理

3.1 ユーザーの追加(Debian Linux)

新しいユーザーを追加するには、useradd コマンドを使用します。

sudo adduser <ユーザー名>

パスワードだけを設定するには、passwd コマンドを使用します。

sudo passwd <ユーザー名>

3.2 ユーザーの削除

sudo deluser <ユーザー名>
  • -r:ホームディレクトリごと削除

3.3 ユーザー情報の確認

現在のユーザー情報を確認するには、以下のコマンドを使用します。

id <ユーザー名>

4. グループ管理

4.1 グループの追加

sudo addgroup <グループ名>

4.2 ユーザーをグループに追加

sudo usermod -aG グループ名 ユーザー名
  • -aG: 指定したグループにユーザーを追加(既存のグループを維持)

4.3 グループの削除

sudo delgroup <グループ名>

5. ユーザーとグループのファイル

Linux では、以下のファイルでユーザーやグループの情報が管理されています。これらのファイルはシステムの根幹に関わるため、原則として直接編集せず、useraddusermod といった専用のコマンドで管理します。

ファイル内容
/etc/passwdユーザーアカウント情報
/etc/shadowユーザーパスワード情報
/etc/groupグループ情報

ユーザーとグループのまとめ

Linuxでは、ユーザーとグループの仕組みにより、システムの操作権限やアクセス制御が柔軟に管理されています。
スーパーユーザー(root)は特別な権限を持ち、システム全体に対する操作が可能です。ユーザーやグループの追加・削除・管理は、adduserusermod などのコマンドで行います。

また、ユーザーやグループの情報は /etc/passwd/etc/group などの重要なファイルに記録されています。
これらの知識は、Linuxシステムの安全かつ効率的な運用に不可欠です。

Linux のパーミッション(アクセス権)

Linux では、ファイルやディレクトリに対してアクセス制御を行うために「パーミッション(アクセス権)」が設定されています。本記事では、Linux のパーミッションの基本と設定方法について解説します。

1. パーミッションの基本

Linux のパーミッションは、以下の 3 つの権限で構成されます。ファイルとディレクトリでは機能が少し違うので、各々分けて説明します。

  • r(読み取り:4)
    • ファイル:ファイルの中身を閲覧できます。
    • ディレクトリ:ディレクトリに含まれるファイルやサブディレクトリの一覧を表示できます。
  • w(書き込み:2)
    • ファイル:ファイルの内容を編集・変更できます。
    • ディレクトリ:ディレクトリ内で、ファイルの作成・削除・名前の変更ができます。
  • x(実行:1)
    • ファイル: プログラムとして実行できます。
    • ディレクトリ:そのディレクトリへ移動(cd)したり、中に入ったりすることができます。x権限がないと、たとえr権限があってもlsで中身を見ることさえできません。

これらの権限は、以下の 3 つのカテゴリごとに設定されます。

  • 所有者(user, u): ファイルの作成者(所有者)
  • グループ(group, g): 所有者が属するグループ
  • その他(others, o): それ以外のユーザー

2. パーミッションの確認

ファイルのパーミッションを確認するには、ls -l コマンドを使用します。

ls -l ファイル名

<出力例>

-rwxr-xr-- 1 user group 1234 Feb 1 12:34 sample.sh

この場合、パーミッションの部分 -rwxr-xr-- は以下の意味を持ちます。

  • - : 通常のファイル(d ならディレクトリ)
  • rwx : 所有者(user)の権限(読み・書き・実行)
  • r-x : グループ(group)の権限(読み・実行)
  • r-- : その他(others)の権限(読み取りのみ)
デフォルトのパーミッション

ファイルやディレクトリを新規作成した際に、自動的に設定されるパーミッション(例えばファイルなら 644、ディレクトリなら 755)は、umask という仕組みによって決まります。

umask は「これから作成するファイルやディレクトリから、引いておく(マスクする)権限」を定義するものです。

Linuxにおけるファイルとディレクトリの最大権限は以下の通りです。

  • ファイル666 (rw-rw-rw-) ※実行権限は意図しない実行を防ぐため、デフォルトでは付与されません。
  • ディレクトリ777 (rwxrwxrwx)

一般的に、umask の値は 022 に設定されています。この 022 をそれぞれの最大権限から引くことで、デフォルトのパーミッションが計算されます。

  • ファイルの場合:666022 = 644 (rw-r–r–)
  • ディレクトリの場合:777022 = 755 (rwxr-xr-x)

現在のumask値は、umaskコマンドで確認できます。

# 現在のumask値を表示
umask

このようにumaskは、システム全体で一貫したパーミッションを保つための重要な役割を担っています。

3. パーミッションの変更

パーミッションを変更するには、chmod コマンドを使用します。

<シンボリックモード>

chmod u+x ファイル名  # 所有者に実行権限を付与
chmod g-w ファイル名  # グループの書き込み権限を削除
chmod o+r ファイル名  # その他のユーザーに読み取り権限を付与

<数値モード(8進数表記)>

chmod 755 ファイル名  # 所有者: rwx、グループ: r-x、その他: r-x
chmod 644 ファイル名  # 所有者: rw-、グループ: r--、その他: r--
ディレクトリ配下をまとめて変更する(再帰的な変更)

ディレクトリとその中にあるすべてのファイルやサブディレクトリのパーミッションや所有者を一度に変更したい場合、-R (Recursive) オプションを使用します。これは実務でも頻繁に使われる非常に便利なオプションです。

chmodでの利用例

webディレクトリとその中身全てのパーミッションを、所有者は読み書き実行可能、グループとその他は読み取りと実行のみ可能に設定します。

# webディレクトリ配下の全ファイルのパーミッションを再帰的に755へ変更
chmod -R 755 web/
chownでの利用例

dataディレクトリとその中身全ての所有者とグループを、new_usernew_groupにまとめて変更します。

# dataディレクトリ配下の所有者とグループを再帰的に変更
chown -R new_user:new_group data/

-Rオプションを使うことで、一つ一つのファイルに対してコマンドを実行する手間が省け、作業を大幅に効率化できます。ただし、対象のディレクトリを間違えると広範囲に影響が及ぶため、実行前にはパスをよく確認しましょう。

4. 所有者・グループの変更

ファイルの所有者やグループを変更するには、chownchgrp コマンドを使用します。

chown 新しい所有者 ファイル名  # 所有者の変更
chown 新しい所有者:新しいグループ ファイル名  # 所有者とグループの変更
chgrp 新しいグループ ファイル名  # グループのみ変更

5. 特殊パーミッション

Linux には、特殊なパーミッションも存在します。

  • SUID(Set User ID): chmod u+s 実行時に所有者の権限で動作
  • SGID(Set Group ID): chmod g+s 実行時にグループの権限で動作
  • Sticky Bit: chmod +t ディレクトリ内のファイルを所有者のみが削除可能

Linux のパーミッション(アクセス権)のまとめ

Linuxのパーミッションは、ファイルやディレクトリのアクセス制御を実現する重要な仕組みです。読み取り・書き込み・実行の3つの権限を、所有者・グループ・その他ユーザーに対して設定します。

ls -l“で確認し、chmodchownumaskなどのコマンドで変更・管理が可能です。再帰オプション(-R)を使えば、ディレクトリ以下の一括操作も効率的に行えます。特殊パーミッション(SUID, SGID, Sticky Bit)も理解しておくことで、より柔軟な制御が可能になります。

まとめ

今回は、下記3点について説明しました。

  1. プロセスの基本
  2. ユーザーとグループ
  3. Linux のパーミッション(アクセス権)

今回は、Linuxのプロセス、ユーザー/グループ、パーミッションについて解説しました。
プロセスはシステム上のあらゆる動作の基本単位であり、コマンドやサービス管理と密接に関係しています。
ユーザーとグループの仕組みにより、権限やアクセス制御を柔軟かつ安全に行うことができます。
さらに、パーミッション設定を理解することで、ファイルやディレクトリへの適切なアクセス制御が可能になります。
これら3つの要素は、Linuxシステムの管理やセキュリティを支える基礎であり、日常的な操作でも頻繁に登場します。

これからも、Macのシステムエンジニアとして、日々、習得した知識や経験を発信していきますので、是非、ブックマーク登録してくれると嬉しいです!

それでは、次回のブログで!

タイトルとURLをコピーしました