0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Linux】プロセス・ファイルシステム・パーミッションを一気に理解するための整理メモ

Posted at

はじめに

「プロセスとは?」「ファイルのアクセスとは?」「パーミッションって何?」**といった疑問にぶつかることが割と多いため、この記事では、それらを一度に理解できるように整理する。


プロセスとは?

プロセス = 実行中のプログラム

例:

  • php(Webアプリの実行)
  • nginx(Webサーバー)
  • git(バージョン管理)
  • /bin/bash(シェル)

これらはすべてプロセスとしてOS上で動作している存在


プロセスは独立したメモリ空間を持っている

それぞれのプロセスは独立したメモリ空間を持っている。

他のプロセスのメモリには直接アクセスできない


でも、同じファイルシステムにはアクセスできる

[phpプロセス]  →  /var/www/myproject/index.php
[gitプロセス]  →  /var/www/myproject/.git

理由は、

カーネルが1つのファイルシステムを管理していて、すべてのプロセスがそのカーネルに仲介してもらってアクセスしている。

だから、全プロセスが同じファイルシステム空間を共有できる。


ファイル操作とファイルディスクリプタの仕組み

  1. プロセスがファイルを開くと、**ファイルディスクリプタテーブル(FDテーブル)**に登録される
  2. そのテーブルはOSのオープンファイルテーブルを参照している

つまり:

どのプロセスが、どのファイルを使っているかは、オープンファイルテーブルで管理されている


プロセス間通信(IPC)が必要になる場面

プロセスがファイルではなく、データそのものを直接やりとりしたいときはどうする?

→ そこで登場するのが パイプ + fork()

int pipefd[2];
pipe(pipefd);
pid_t pid = fork();

こうすることで、親子プロセスが同じオープンファイルテーブルのエントリを共有し、pipeを通じてデータ通信が可能になる


プロセスとデータ(ファイルや通信)を分けて考える

  • プロセス = 実行されるもの(動く主体)
  • データ = ファイルやメモリ、パイプでやりとりされるもの(扱う対象)

この2つを混ぜずに、切り分けて考えることがシステムを理解するカギだと最近感じる。


ファイルのパーミッションの話

-rw-r--r-- 1 ubuntu ubuntu index.php

ファイルには:

  • 所有者(user)
  • グループ(group)
  • その他のユーザー(others)

という3つの区分があり、それぞれに読み取り(r)、書き込み(w)、実行(x) のパーミッションが設定される。

所有者とグループはどう決まる?

  • そのファイルを作成したユーザーが所有者になる
  • 作成時に所属していたグループがグループになる

所有者以外がアクセスするには?

→ パーミッションで許可されていないとアクセスできない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?