## bitwise chmod

Mar 2, 2017# 111 111 111

octal | 777 |

decimal | 511 |

binary | 111 111 111 |

perm | rwx rwx rwx |

```
4 = r
2 = w
1 = x
rwx = 4+2+1 = 7
rw = 4+2+0 = 6
r = 4+0+0 = 4
r x = 4+0+1 = 5
7 = binary 111 = rwx
6 = binary 110 = rw-
5 = binary 101 = r-x
4 = binary 100 = r--
3 = binary 011 = -wx
2 = binary 010 = -w-
1 = binary 001 = --x
0 = binary 000 = ---
```

The full set of nine permission characters can then be grouped and summarized as three octal digits:

```
rwxr-x-wx is rwx|r-x|-wx is 111|101|011 ==> the three digits 753
---r----x is ---|r--|--x is 000|100|001 ==> the three digits 041
--------- is ---|---|--- is 000|000|000 ==> the three digits 000
rwxrwxrwx is rwx|rwx|rwx is 111|111|111 ==> the three digits 777
```

Convert octal to decimal using python:

```
>>> int('777', 8)
```

Decimal to binary:

```
>>> "{0:b}".format(511)
'111111111'
```

Bitwise AND with 07777 gives the last twelve bits of a numberâ€™s binary representation. With a Unix mode, this operation gives the permission or mode bits and discards any type information.

```
$ perl -e 'printf "%d\n", (stat "foo")[2] & 07777' # decimal, not useful
420
$ perl -e 'printf "%o\n", (stat "foo")[2] & 07777' # octal
644
```