인터뷰에서 777이 파일에 대한 모든 권한을 갖도록 지정된 이유는 무엇입니까? 왜 555? 그는 모든 이유가 있다고 말했다. 그렇다면 777의 이유는 무엇입니까? 다른 번호는 왜 없습니까? 이 숫자에 의미가 있습니까?
인터뷰에서 777이 파일에 대한 모든 권한을 갖도록 지정된 이유는 무엇입니까? 왜 555? 그는 모든 이유가 있다고 말했다. 그렇다면 777의 이유는 무엇입니까? 다른 번호는 왜 없습니까? 이 숫자에 의미가 있습니까?
답변:
나는 근본적인 이유를 해결하기 위해 노력 할게요 왜 오히려 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을 가정합니다.
710 진수와 8 진수는 동일하지만 777그렇지 않습니다. 뒤집기 비트에 대해 이야기 할 때 차이가 있습니다.
777는 기본 권한을 가진 사람을 때때로 God이라고합니다.
파일 권한 읽기 수단 4, 파일 권한 쓰기 수단 2및 파일 권한 수단 실행 1.
총합은입니다 7.
이제 777은 무엇입니까? 먼저 7파일 소유자는 파일 소유자가 읽기, 권한 및 실행 권한을 가지고 있음을 의미합니다.
두 번째 7는 파일이 속한 그룹을위한 것으로 그룹에 모든 읽기, 쓰기 및 실행 권한이 있음을 의미합니다.
그리고 3 번째 7는 다른 사람을위한 것입니다
당신은 파일 권한 부여하면 555다음에게 파일을 owner, group and others만 가지고 read및 execute권한 not write읽기 권한 수단 (4) 등 얻는다 총 수단 1을 실행하기 때문에 권한을5
최고 답변만큼 많은 단어는 아닙니다.
각 파일에는 읽기, 쓰기 및 실행의 세 가지 권한 옵션이 있습니다. 이들 중 하나, 이들 중 하나, 둘 중 하나 또는 모두를 선택할 수 있습니다.
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은 세 그룹 모두에 읽기, 쓰기 및 실행 권한이 있음을 의미합니다.
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)
어떤 이유로, UNIX 디자이너는 파일 권한에 OCTAL 번호 를 사용하기로 결정했습니다 . 아시다시피, 한 자리 8 진수 숫자의 최대 값은 7입니다. 사용자 액세스에는 8 자리 숫자, 그룹 액세스에는 1 자리, 세계 액세스에는 1 자리이면 거의 모든 것이 충분하다는 것이 밝혀졌습니다. 최대 3 자리 8 진수는 777이며 "모든 사람 / 모든 사람에게 액세스"를 나타내는 것만 의미가 있습니다.
오늘날 우리는 바이트가 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 진수로 숫자를 쓰려고한다고 생각할 수 있기 때문입니다.