파일의 모든 것을 허용하기 위해 777이 chmod에 할당 된 이유는 무엇입니까?


54

인터뷰에서 777이 파일에 대한 모든 권한을 갖도록 지정된 이유는 무엇입니까? 왜 555? 그는 모든 이유가 있다고 말했다. 그렇다면 777의 이유는 무엇입니까? 다른 번호는 왜 없습니까? 이 숫자에 의미가 있습니까?



2
@AvinashRaj의 링크 주석을 참조하여 인스턴스에 적용하십시오. "왜?"라는 질문 그것이 어떤 인스턴스인지 그리고 그것이 어떤 목적을 수행하는지에 달려있다. :)
AzkerM

1
그는 숫자 7 대 5의 중요성에 대해 묻고 있거나 왜 문자가 아닌 숫자입니까?
Braiam

4
이것은 훌륭한 인터뷰 질문입니다. 그것을 훔쳐 야 할 수도 있습니다.
Digital Chris

5
엄밀히 말하면, 그것은 777이 아니라 0777입니다.
Ruslan

답변:


129

나는 근본적인 이유를 해결하기 위해 노력 할게요 오히려 AAA, 또는 999보다 777입니다.

권한은 다음 형식으로 제공됩니다.

 u   g   o
rwx rwx rwx

여기서 u = 사용자, g = 그룹, o = 기타.

이제 각 그룹을 이진으로 표현한다고 가정 해보십시오. 1은 true이고 0은 false입니다.

모든 사람에게 모든 권한을 부여하려면 이진으로 다음 권한을 할당합니다.

 u   g   o
rwx rwx rwx
111 111 111

이제 이진을 알고 있다면 111이진에서 십진수 로 변환 할 때 얻을 수 있음을 알 수 7있습니다.

따라서으로 전체 액세스 권한을 나타낼 수 있습니다 777.

참고 : 우리는 실제로 바이너리에서 8 진수로 변환하고 있습니다. 아래 편집을 참조하십시오.

이것은 다른 모든 액세스 모드에서도 작동합니다.

예를 들어, 555각각 5을 이진 으로 변환 하고 위의 형식으로 작성하여 의미를 쉽게 해결할 수 있습니다 . 5바이너리는입니다 101. 따라서 다음과 같은 권한이 있습니다.

 u   g   o
r-x r-x r-x
101 101 101
 5   5   5

마찬가지로 사용자에게 모든 권한을 부여하고 다른 사람 만 읽을 수있게하려면 숫자 표현을 찾을 수 있습니다.

 u   g   o
rwx r-- r--
111 100 100
 7   4   4

이제 111이진수는 7십진수이고 100이진수는 4십진수입니다. 따라서 권한은입니다 744.

편집하다:

기술적으로 @ LưuVĩnhPhúc 및 @Braiam이 강조한 것처럼 아래에서 설명하는 것처럼 이진수에서 8 진수로 변환합니다. 그러나 숫자 <8의 10 진수 및 8 진수 표시는 동일하므로 3 자리 이하의 이진수에서는 10 진수 및 8 진수 표시가 동일합니다.

3 개의 그룹으로 나누지 않고 각 그룹에서 2 진수를 10 진수로 변환하는 대신 8 진수로 표현할 때 실제로 3 개의 그룹을 모두 단일 이진수로 취하여 8 진수로 변환 할 수 있습니다.

예를 들어 다음은 이진에서 8 진으로의 변환입니다.

0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744

이진수와 8 진수를 구분하기 위해 "0b"와 "0o"를 앞에 붙였습니다.

이 작업을 수행하려면 터미널을 열고 python다음 명령으로 실행하십시오.

oct(0b111111111)
bin(0o555)

컴퓨터에 관심있는베이스를 알려주려면 숫자에 "0b"또는 "0o"를 붙여야합니다. 그렇지 않은 경우 10을 가정합니다.


17
완벽을 기하기 위해 숫자의 형식을 8 진수라고합니다. 문자 그대로 8의 밑을 의미합니다 (0에서 시작하여 7 + 1 = 8이므로).
Braiam

3
davie : 8 진수는 16 진수 그룹 4와 같이 실제로 3 비트를 그룹화하기 때문에 쉽습니다. 10 진수는 2의 거듭 제곱이 아니므로 비트를 멋지게 그룹화하지 않습니다.
Konerak

2
두 경우 모두 같은 숫자를 얻습니다. 누군가가 이진수를 8 진수로 변환하는 것보다 이진수를 10 진수로 변환하는 것을 이해할 가능성이 더 큽니다. 또한 숫자가 실제로 10 진수가 아니라 8 진수임을 분명히하기 위해 섹션을 추가했습니다.
daviewales

3
710 진수와 8 진수는 동일하지만 777그렇지 않습니다. 뒤집기 비트에 대해 이야기 할 때 차이가 있습니다.
Sam Dufel

2
사소한 일을 위해서 7은 God 's Number, 루트 사용자 777는 기본 권한을 가진 사람을 때때로 God이라고합니다.
eyoung100 2014 년

16

파일 권한 읽기 수단 4, 파일 권한 쓰기 수단 2및 파일 권한 수단 실행 1.

총합은입니다 7.

이제 777은 무엇입니까? 먼저 7파일 소유자는 파일 소유자가 읽기, 권한 및 실행 권한을 가지고 있음을 의미합니다.

두 번째 7는 파일이 속한 그룹을위한 것으로 그룹에 모든 읽기, 쓰기 및 실행 권한이 있음을 의미합니다.

그리고 3 번째 7는 다른 사람을위한 것입니다

당신은 파일 권한 부여하면 555다음에게 파일을 owner, group and others만 가지고 readexecute권한 not write읽기 권한 수단 (4) 등 얻는다 총 수단 1을 실행하기 때문에 권한을5


그룹이란 무엇이며 다른 권한은 무엇입니까? 답변 주셔서 감사합니다.
hellodear

그룹 및 기타 권한에 대해서는 이 링크 를 참조하십시오. 이러한 권한은 귀하가 아닌 귀하의 그룹에 있지 않은 서버의 다른 모든 사람에게 적용됩니다
Prakash V Holkar

7

최고 답변만큼 많은 단어는 아닙니다.

각 파일에는 읽기, 쓰기 및 실행의 세 가지 권한 옵션이 있습니다. 이들 중 하나, 이들 중 하나, 둘 중 하나 또는 모두를 선택할 수 있습니다.

C (3,0) + C (3,1) + C (3,2) + C (3,3) = 8

1 + 3 + 3 + 1 = 8

따라서 8 가지 조합이 있습니다. 권한에 대한 8 가지 옵션. 0부터 계산하면 마지막 숫자는 7입니다 (0에서 7까지). 숫자로 표시되는 모든 옵션은 다음과 같습니다.

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)

주문이 [사용자 권한] [그룹 권한] [다른 권한]이기 때문에 세 개의 숫자가 있습니다.

따라서 777은 세 그룹 모두에 읽기, 쓰기 및 실행 권한이 있음을 의미합니다.


또한 (간접적으로 관련되어 있으므로 반드시이 부분을 읽을 필요는 없습니다) 관련성이 중요하다고 생각하기 때문에 3 번이 아닌 4 번이 read됩니까?

0 - nothing
1 - execute
2 - write
3 - read
4 - execute + read (1 + 3)
5 - write + read (2 + 3)
6 - execute + write + read (3 + 2 + 1)
7 - ????? no way to get this with the 3 basic options (and we are missing execute + write)

모든 가능성에 대해 고유 한 조합을 얻는 유일한 방법은 기본 옵션에 대해 2의 거듭 제곱을 사용하는 것입니다. 2 0 = 1, 2 (실행) 1 = 2 (쓰기) 2 (2) = 4 (읽고), 그리고 2 번째 될 제 4 기본 옵션이 있다면 3 = 8 주 write의 모든 조합까지 나열되지을 이전 옵션이 나열되었습니다 (단지 옵션이므로 execute). read이전 옵션의 모든 조합이 나열 될 때까지는 목록에 표시되지 않습니다 (하나는 두 개의 옵션- execute+으로 하나의 조합 만 있으므로 write). execute+ write+read이전의 모든 조합이 나열 될 때까지는 3이 표시됩니다. 이제 3 가지 권한 중에서 두 가지를 선택할 수 있습니다. 몇 가지 기본 옵션이 있더라도 목록은 이러한 방식으로 계속됩니다. 예를 들어, 기본 옵션이 4 개인 경우 (4 개의 옵션과 2 4 = 16 이 있으므로 총 16 개의 조합이 있음을 알고 있음 ) :

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
8 - love
9 - execute + love (1 + 8)
10 - write + love (2 + 8)
11 - execute + write + love (1 + 2 + 8)
12 - read + love (4 + 8)
13 - execute + read + love (1 + 4 + 8)
14 - write + read + love (2 + 4 + 8)
15 - execute + write + read + love (1 + 2 + 4 + 8)

6
이 답변은 바이너리 및 더 중요한 8 진수 시스템을 Unix 파일 권한 비트의 소스로 인식하지 못하기 때문에 완전히 나쁩니다 . (아마도 충분히, 그들은 3 또는 4입니다… 그들은 전체 18 비트는 현재 사용되지 않지만 6입니다.)
mirabilos

1
111은 7이므로 기본은 중요하지 않습니다. 권한이 111인지 7인지에 관계없이 동일한 값이므로 중요하지 않습니다. 나는 예제의 단순화를 위해 십진수를 사용하여 관련된 수학을 보여주었습니다. 나는 바이너리를 사용할 수 있었지만 수학은 간단 해 보이지 않았다. 염기가 서로간에 번역 될 수있을 때 중요한 것은 무엇입니까?
Daniel Ward

4

나는 그 마크를 완전히 놓친 많은 비슷한 답변에 놀랐습니다.

필요한 3 가지 클래스를 결정한 후 읽고 실행하십시오. 파일 시스템 관리에 필요한 공간최소화 하기 위해 8 진수 (3 비트)를 사용했습니다 .


3

어떤 이유로, UNIX 디자이너는 파일 권한에 OCTAL 번호 를 사용하기로 결정했습니다 . 아시다시피, 한 자리 8 진수 숫자의 최대 값은 7입니다. 사용자 액세스에는 8 자리 숫자, 그룹 액세스에는 1 자리, 세계 액세스에는 1 자리이면 거의 모든 것이 충분하다는 것이 밝혀졌습니다. 최대 3 자리 8 진수는 777이며 "모든 사람 / 모든 사람에게 액세스"를 나타내는 것만 의미가 있습니다.


나는 이것이 좋은 설명이라고 생각하지 않습니다. 유닉스 디자이너 는 십진수를 가질 있었지만 여전히 9 보다 (최대 10 진수로) 최대 액세스를 나타내는 7로 끝났습니다 . (7)는 "부가 적"전혀 권리를 제로에서 시작하는 하나의 바이너리 숫자에 의해 허용 된 액세스에 따라 번호가 가장 높은 한 자리에서 시작 가능이 무엇인지에 따라 "감산"를 선택,하지만하지 않습니다.
또는 매퍼

내가 어떤 이유로 든 매우 간절한 글을 썼다는 것을 알아 차렸다.-나는 왜 OP 질문이 아니기 때문에 8 진수를 선택했는지에 대해 더 깊이 설명하고 싶지 않았다. 문제는 777이 모든 권한을 부여하는 이유였습니다.
DejanLekic

그들이 8 진수를 선택한 이유는 여기와 관련이 없습니다. 내 요점은 최대 권한이 숫자 7로 표시되는 이유는 7이 최대 8 진 숫자 가 아니기 때문입니다.
또는 매퍼

2

오늘날 우리는 바이트가 8 비트라는 것을 알고 있습니다 . 이것은 수십 년 동안 보편적으로 합의되었습니다. 그러나 이것이 항상 그런 것은 아니었고, 유닉스 (여러 가지 방식으로 리눅스에 영감을 주었던)는 이것이 여전히 논란의시기에 쓰여졌다. 특히 6 비트 바이트 또는 8 비트 바이트를 사용하는 시스템에 이식 가능해야했습니다. 이 글을 쓴 사람들 중 일부는 토론의 한쪽에 있었고 다른 사람들은 반대쪽에있었습니다.

관련 참고 사항에서 Base-2 (이진)는 값을 쓰는 데 매우 편리한 표기법이 아닙니다. 오늘날 대부분의 프로그래머는 대신 Base-16 (16 진수)을 사용하는보다 간단한 표기법을 작성합니다 . 16은 4 비트를 정확히 하나의 16 진수로 압축 할 수있을 정도로 충분히 큽니다. 예를 들어, 이진수의 "0000"은 16 진수로 0x0입니다 ( "0x"는 일반적으로 "1111"은 0xF (또는 10 진수 15) 인 반면 16 진수를 씁니다. 실제로 2 진수로 세는 것만으로 단일 16 진수를 사용하여 4 비트의 가능한 조합을 작성할 수 있으며 위치 산술 작동 방식으로 인해 스택 할 수 있습니다. 2 개의 16 진수는 8 비트의 가능한 조합을 인코딩 할 수 있습니다. 계산 등으로. 그래서 8 비트 사람들은 이것을 좋아했습니다.

6 비트 사람들은 자신의 방식으로이 작업을 수행했지만 Base-16을 사용하는 대신 Base-8 (8 진)을 사용했습니다. 16 진수와 비슷한 장점이 있습니다. 3 비트의 모든 위치를 8 진수로 저장할 수 있으며 비슷한 방식으로 숫자를 쌓을 수 있습니다. 따라서 8 비트 사람들이 1 바이트에 2 개의 16 진수를 사용한 것처럼 6 비트 사람들은 1 바이트에 2 개의 8 진수를 사용했습니다. 8 진수는 더 이상 보이지 않지만 일반적으로 앞에 0이 표시됩니다. 예를 들어 "111"은 8 진수 07입니다.

자,이 모든 것이 유닉스 권한과 어떤 관계가 있습니까? 유닉스에 관한 한, 파일로 할 수있는 세 가지가 있습니다 : 파일을 읽거나, 쓸 수 있거나, 프로그램으로 실행할 수 있습니다. 권한으로이를 제한하려면 각 권한에 대해 약간의 정보가 필요합니다. 누군가가 할 수있는 일에 대해서는 켜고 누군가가 할 수없는 일에는 끄십시오. 추적되는 세 가지가 있기 때문에 3 비트가 필요하고 Unix는 3 개의 라인 (소유자, 그룹 및 모든 사람)을 따라 추적하므로 총 9 비트가 필요합니다.

아마도 6 비트 캠프에있는 누군가가“어쩌면 우리는 이것을 위해 8 진수를 사용할 수있다”고 말했다 . 그리고 이것은 매우 편리한 표기법으로 판명되었습니다. 3 개의 8 진수는 비트 필드의 모든 가능한 조합을 인코딩하기에 충분합니다. 그들이 이것을 결정하면, 777의 운명 (그리고 000)은 봉인되었습니다. 왜냐하면 그 숫자는 비트를 어떻게 배열했는지에 관계없이 동일하지만 순서는 다른 모든 숫자에 중요하기 때문입니다.

이들은 권한을 시작시 읽기, 중간 쓰기 및 끝에서 실행하는 3 비트 필드로 배열했습니다. 그런 다음 그들은 시작에 소유자, 중간에 그룹, 끝에 다른 필드를 스스로 배열했습니다. 일단이 작업을 마치면 나머지 숫자를 할당하기 위해해야 ​​할 일은 모두 세었다.

3 비트 필드이기 때문에 각 8 진수는 필드 중 하나를 제어한다고 말할 수 있습니다 . 첫 번째 숫자는 소유자 권한을 제어하고 두 번째 숫자는 그룹 권한을 제어하며 세 번째 숫자는 다른 권한을 제어합니다. 따라서 777 (111 111 111)은 모든 사람에게 모든 권한이며 700 (111 000 000)은 소유자에게만 모든 권한입니다. 다른 조합도 일반적입니다 : 666 (110110110)은 모든 사람에 대해 읽기 / 쓰기이지만 실행되지는 않음), 555 (101101101)는 모든 사람에 대해 읽기 / 실행되지만 쓰기는하지 않고 400 (100,000)은 읽기 소유자 만 사용할 수 있으며 다른 사람은 액세스 할 수 없습니다.

777이 모든 권한을 의미하는 이유입니다. 요즘 사람들이 8 진수를 사용하는 가장 일반적인 이유 일지 모르지만 유닉스와 그 자손에는 여전히 몇 가지 흔적이 있습니다. 예를 들어, od또는 Octal Dump는 8 진 형식으로 파일의 이진 덤프를 가져 오는 방법입니다 (이것은 16 진수 사촌이 xxd있지만 잘 알려져 있지 않으며 어디에서나 사용할 수 없습니다). 또한 일부 프로그래밍 언어에서 선행 제로에주의 해야하는 이유는 실제로 의도가 아닌 경우 8 진수로 숫자를 쓰려고한다고 생각할 수 있기 때문입니다.


우선 리눅스가 만들어 졌을 때 (1992 년경) 8 비트 6 비트 토론은 끝났다. 2 위는 이것이 이루어진 이유가 아닙니다
Ahmed Masud

1
나는 역사적 맥락에서 8 비트 / 6 비트를 제공했습니다. 리눅스는 그 논쟁이 끝난 지 오래 전에 만들어졌지만 사실이지만 유닉스에서 많은 영감을 얻었 기 때문에 비슷한 방식으로 그 토론에 영향을 받았다. 이것이 내가 역사적 맥락을 소개하는 것이 좋은 생각이라고 생각하는 이유입니다.
Spooniest 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.