10진수 → 8진수: 파일 권한 뒤에 숨은 기수
이 변환이 하는 일
10진수를 0부터 7까지의 숫자로 다시 씁니다. 8진수는 쓰이는 곳이 몇 군데로 줄었지만 그중 한 곳은 무척 분주합니다. 유닉스 파일 권한으로, 755나 644 같은 마스크가 8진수이고 하나의 수가 아니라 세 개의 독립된 자리로 읽힙니다.
한 자리에 3비트, 그게 전부인 이유
8진수 한 자리는 2진수 세 자리를 정확히 덮으므로 9비트 권한 필드가 소유자와 그룹과 기타 세 묶음으로 깔끔하게 나뉩니다. 권한에서 이 표기가 오래 살아남은 까닭입니다. 각 묶음은 읽기 4, 쓰기 2, 실행 1로 만들어지므로 7은 셋 다, 5는 읽기와 실행을 뜻합니다.
10진수 → 8진수 변환표
가장 자주 만나는 파일 모드와 작은 마스크의 10진수 값입니다. chmod는 8진수 형태로 받고 보고서는 10진수로 알려주므로 권한 행은 눈으로 익혀 둘 만합니다.
| 10진수 | 8진수 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 7 | 7 |
| 8 | 10 |
| 10 | 12 |
| 15 | 17 |
| 16 | 20 |
| 31 | 37 |
| 64 | 100 |
| 100 | 144 |
| 127 | 177 |
| 200 | 310 |
| 255 | 377 |
| 1000 | 1750 |
8진수는 어디서 왔고 어디에 남았나
8진수는 워드 크기가 3비트의 배수였던 기계에 잘 맞았고 PDP-8 같은 초기 미니컴퓨터가 그렇게 만들어졌습니다. 8비트 바이트와 16비트 워드가 표준이 되자 4는 8을 나누고 3은 나누지 못해 16진수가 자리를 대신했습니다. 파일 권한이 대표적인 생존자이며 수십 년의 관습이 이를 이어 왔습니다.
권한 자리 하나 읽기
모드의 8진수 자리를 작은 합으로 보세요. 4는 읽기, 2는 쓰기, 1은 실행이고 보이는 자리만큼 더한 값입니다. 그래서 755는 소유자가 읽기와 쓰기와 실행이고 그룹과 기타는 읽기와 실행이며, 644는 소유자가 읽기와 쓰기이고 나머지는 읽기 전용입니다.
자주 묻는 질문
10진수를 8진수로 손으로 바꾸려면 어떻게 하나요?
8로 나눈 나머지를 적고 몫이 0이 될 때까지 반복한 뒤 나머지를 마지막부터 읽습니다. 493은 493 나누기 8이 몫 61 나머지 5, 61 나누기 8이 몫 7 나머지 5, 7 나누기 8이 몫 0 나머지 7이라서 755가 됩니다.
파일 권한을 8진수로 쓰는 이유는 무엇인가요?
사용자 부류마다 권한 비트 세 개가 8진수 한 자리에 정확히 들어가므로 전체 모드가 9비트가 아니라 짧은 세 자리로 읽히기 때문입니다. 755는 읽기와 쓰기와 실행, 읽기와 실행, 읽기와 실행이라는 뜻이고 계산 없이 풀 수 있는 형식입니다.
chmod 755는 실제로 무엇을 허용하나요?
소유자는 읽기와 쓰기와 실행이 모두 가능하고 그룹 구성원과 나머지 사람은 읽기와 실행만 가능하며 수정은 못 합니다. 10진수로는 493입니다. 디렉터리는 같은 세 비트를 다른 의미로 쓰기 때문에 보통 실행 비트가 있어야 들어갈 수 있습니다.
8진수가 다른 곳에도 쓰이나요?
가끔 쓰입니다. 일부 언어가 앞에 0을 붙여 8진수 리터럴을 쓰게 하고 몇몇 파일 형식과 네트워크 마스크가 8진수를 씁니다. 그 밖에는 16진수가 대신합니다. 한 바이트가 16진수 두 자리로 깔끔하게 나뉘는 반면 3은 8을 나누지 못하기 때문입니다.
음수와 소수점도 처리되나요?
둘 다 됩니다. 음수는 8진수 앞에 부호를 그대로 두는 부호-크기 방식이고 2의 보수가 아닙니다. 소수는 자리마다 변환되고 전개가 끝나지 않으면 반올림해서 넘어가는 대신 잘렸다고 표시합니다.