Unix UID는 얼마나 큽니까(비트 단위)?

Unix UID는 얼마나 큽니까(비트 단위)?

Unix 사용자 ID(UID)는 일반적으로 16비트 또는 32비트 부호 없는 정수라는 것을 알고 있지만 특정 시스템(셸에서)에 대해 어떻게 알 수 있습니까?

답변1

<limits.h>.sys/syslimits.h#defineUID_MAX

2^31-2가장 최근의 운영 체제(Solaris 2.x, OS X, BSD, Linux, HP-UX 11i, AIX 6) 는 최대 20억( '티.

답변2

glibc는 모든 시스템 유형에 대한 정의를 제공합니다.

당신은 확인할 수 있습니다 /usr/include/bits/typesizes.h:

% grep UID_T /usr/include/bits/typesizes.h
#define __UID_T_TYPE            __U32_TYPE

다음으로 살펴보겠습니다 /usr/include/bits/types.h.

% grep '#define __U32_TYPE' /usr/include/bits/types.h
#define __U32_TYPE              unsigned int

이를 통해 C 유형을 알아낼 수 있습니다. 크기(바이트)가 필요하므로 가장 좋은 옵션은 다음의 사양에 따라 typedef 이름을 구문 분석하는 것입니다 types.h.

We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
variants of each of the following integer types on this machine.

 16      -- "natural" 16-bit type (always short)
 32      -- "natural" 32-bit type (always int)
 64      -- "natural" 64-bit type (long or long long)
 LONG32      -- 32-bit type, traditionally long
 QUAD        -- 64-bit type, always long long
 WORD        -- natural type of __WORDSIZE bits (int or long)
 LONGWORD    -- type of __WORDSIZE bits, traditionally long

따라서 여기에 한 줄의 내용이 있습니다.

% grep '#define __UID_T_TYPE' /usr/include/bits/typesizes.h | cut -f 3 | sed -r 's/__([US])([^_]*)_.*/\1 \2/'
U 32

여기서는 ( 에 대한 것일 수도 있음 ) 및 크기를 U의미 합니다(위 목록에서 찾아보세요. 대부분의 경우 해당 크기가 이미 바이트 단위라고 가정할 수 있지만 스크립트를 완전히 이식할 수 있도록 하려면 이 값을 켜는 것이 더 나을 수도 있습니다 ).unsignedSsigned32case

답변3

~ 안에이 링크질문이 제기되고 응답자는 시행착오 방법을 사용하여 문제의 시스템이 부호 있는 긴 int를 사용하는지 확인하고 값을 저장하기 위해 31비트를 남겨두고 최대 2,147,483,647을 사용합니다.

# groupadd -g 42949672950 testgrp
# more /etc/group
testgrp:*:2147483647:

답변4

흥미로운 질문이네요. 이것을 결정하는 표준적이고 이식 가능한 방법이 있다면 놀랄 것입니다.

편리한 Linux 상자가 없지만 idFreeBSD 8.0의 명령은 다시 0으로 돌아갑니다.

# id 4294967296
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)

이것이 정의되지 않은 동작이라고 확신하지만 대부분의 버전은 (16비트 UID인 경우) id0으로 래핑되거나 시스템 제한을 초과하면 오류가 발생할 것이라고 장담합니다.65'5364'294'967'296

관련 정보