인터뷰에서 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을 가정합니다.
7
10 진수와 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 진수로 숫자를 쓰려고한다고 생각할 수 있기 때문입니다.