2022-11-17 09:39:58
C言語で作ったchmodで10進数を渡した
以下の書籍で chmod コマンドを作成しました。 「ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道」
nao@nao-System-Product-Name:~/workspace/learn/linux-programming/chmod$ touch example
nao@nao-System-Product-Name:~/workspace/learn/linux-programming/chmod$ ls -l
合計 20
-rwxrwxr-x 1 nao nao 16176 11月 17 09:13 chmod
-rw-rw-r-- 1 nao nao 377 11月 17 09:12 chmod.c
-rw-rw-r-- 1 nao nao 0 11月 17 09:29 example
こんな感じで 664 のパーミッションの example
ファイルを用意します。
このファイルのパーミッションを 777 にしたつもりでした。
nao@nao-System-Product-Name:~/workspace/learn/linux-programming/chmod$ ./chmod 777 example
nao@nao-System-Product-Name:~/workspace/learn/linux-programming/chmod$ ls -l
合計 20
-rwxrwxr-x 1 nao nao 16176 11月 17 09:13 chmod
-rw-rw-r-- 1 nao nao 377 11月 17 09:12 chmod.c
-r----x--t 1 nao nao 0 11月 17 09:29 example
結果は -r----x--t
411 でした。 t
ってなんだ。
スティッキービット
というらしい。ディレクトリに対して使うのが一般的っぽい。ディレクトリに対して使えば、所有者以外のユーザはその配下のファイルの更新・削除ができなくなるらしい。設定するときは 1777
みたいに設定するらしい。
じゃあ、なんで 777 にしたつもりが 411 になったかというと、 ./chmod 777 example
の 777
は 10 進数として解釈されるためでした。 10 進数の 777
は 2 進数では 1100001001
です。これがそのまま解釈されたみたいです。
正しくは以下のように 0777
で頭に 0 をつけて 8 進数として解釈させます。
nao@nao-System-Product-Name:~/workspace/learn/linux-programming/chmod$ ./chmod 0777 example
nao@nao-System-Product-Name:~/workspace/learn/linux-programming/chmod$ ls -l
合計 20
-rwxrwxr-x 1 nao nao 16176 11月 17 09:13 chmod
-rw-rw-r-- 1 nao nao 377 11月 17 09:12 chmod.c
-rwxrwxrwx 1 nao nao 0 11月 17 09:29 example