LoginSignup
6
2

More than 5 years have passed since last update.

ビット演算を覚えればlinuxのパーミッションの数字が理解できる

Last updated at Posted at 2019-03-11

TL;DR

linuxでパーミッションを変更したい場合数字で指定することが多いですよね。
でもエンジニアなりたての人等は、パーミッションの意味は理解してても、パーミッションの数字については訳分からん状態だと思います。
例えば↓とか

  • 777 (rwxrwxrwx)
  • 755 (rwxr-xr-x)
  • 744 (rwxr--r--)
  • 644 (rw-r--r--)

( ゚Д゚)ハァ?  
って感じですよね。

そんな人でもビット演算の方法を学べば、パーミッションの数字が理解できます!

ビット演算とは?

ざっくり言うと2進数の計算です。

2進数って?

01で表す数字です。

例えば10進数の0~9を2進数で表す場合は以下

10進数 2進数
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001

2進数の法則

上の表でお気づきの方もいるかと思いますが、2進数にはある法則があります。
それは 2の累乗は一番左の値のみ1になり、0が1つずつ増えていく というものです。
例えば上の表から2の累乗を抜き出したものが以下の表

10進数 2進数
2 10
4 100
8 1000

位が1つずつ増えてますよね。

ビット演算の方法

ビット演算ではこの2の累乗を基準に計算をします。

例えば以下の2進数があったとします。
- 1111

これを10進数に直す計算として、まずは分かりやすく2進数を分解してみます。

# 頭の0は計算に関係ありません。桁数をそろえるために分かりやすくしています。
1000
0100
0010
0001

それぞれを10進数に直すと

1000 => 8
0100 => 4
0010 => 2
0001 => 1

ですね。
あとは10進数に直した数字を足すと……

1   1   1   1  ←2進数
8   4   2   1  ←10進数

となり111115ということが分かります。

で、それが何になるんや?

はい、本題はlinuxパーミッションの数字の意味でしたね。

linuxのパーミッションはrwxで表されます。
これはある言葉の一文字を取ったものです。

文字 意味
r read(読み込み)
w write(書き込み)
x exec(実行)

ls -alでディレクトリをのぞいてみると、drwxrw-r-xみたいな文字が左部にあると思います。
全部つながっているので分かりづらいですが、区切るとこんな感じ。

d/rwx/rw-/r-x
文字 意味
d ディレクトリを表す(ファイルなら-
rwx rootのパーミッション
rw- グループのパーミッション
r-x その他ユーザーのパーミッション

※rootやグループ等のパーミッション範囲については割愛します。

先ほどからちらほら出ていますが、-という表記がありますよね?
これはパーミッションがない状態を表しています。
そして実はこれ、2進数を表しています。

各パーミッションがついている状態を2進数で表すと

パーミッション 2進数 10進数
r-- 100 4
-w- 010 2
--x 001 1

ここまで見ていただいた方はピンときたのではないでしょうか。
そうです、chmodでは2進数を使い、パーミッションを指定しているのです。

例えば、rootに全権限を持たせる場合はrwx => 4 + 2 + 17
その他ユーザーには読み込み権限だけ与える場合はr-- => 4 + 0 + 04となります。

最後に

慣れるまでは、rwxは2進数で111r-xは2進数で101という風に変換し、あとはビット演算で計算する、という風にビット演算で慣れつつもパーミッションの数字を覚えてもらえればと思います。

6
2
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
6
2