ইউনিক্স ইউআইডি কত বড় (বিটস)?


18

আমি বুঝতে পারি যে ইউনিক্স ব্যবহারকারী আইডি (ইউআইডি) সাধারণত 16 বা 32 বিট স্বাক্ষরবিহীন পূর্ণ পূর্ণসংখ্যার হয় তবে আমি কোনও প্রদত্ত সিস্টেমের (শেলের মধ্যে) কীভাবে সন্ধান করতে পারি?

উত্তর:


12

আপনি চেহারা করতে হবে <limits.h>(, বা ফাইল এটা অন্তর্ভুক্ত, যেমন এক sys/syslimits.hOS X এর দিকে) জন্য #defineএর UID_MAX

সর্বাধিক সাম্প্রতিক অপারেটিং সিস্টেমগুলি (সোলারিস ২.x, ওএস এক্স, বিএসডি, লিনাক্স, এইচপি-ইউএক্স ১১ আই, এআইএক্স)) দুই বিলিয়ন ( 2^31-2) পর্যন্ত পরিচালনা করতে পারে , তাই আমি ধরে নিই এবং আরও অস্পষ্ট সিস্টেমগুলির জন্য একটি কার্যনির্বাহ তৈরি করব যা ডোন না 'টি।


1
দুর্ভাগ্যক্রমে, এর মতো কোনও জিনিস নেই UID_MAX। উদাহরণস্বরূপ, ইউআইডির সর্বাধিক মান সন্ধান করার জন্য shadow-utilsব্যবহৃত সরঞ্জামগুলি (uid_t)-1
কিরেলেগিন

5
বেশিরভাগ সিস্টেমে /etc/login.defs ব্যবহার করে যার মধ্যে ইউআইডি_ম্যাক্স সর্বাধিক ব্যবহারযোগ্য ইউআইডি মান, 60000 আমি যাচাই করেছিলাম তার জন্য সেট করে।
রায়ানার

6
এর জন্য ম্যানপেজটিlogin.defs নির্দেশ করে যে সেই প্রসঙ্গে, UID_MAXকেবলমাত্র সর্বাধিক ইউআইডি নিয়ন্ত্রণ করে যা তৈরি করা নতুন ব্যবহারকারীদের জন্য স্বয়ংক্রিয়ভাবে নির্ধারিত হবে useradd
স্টিফেন টোসেট

2
এটি সম্ভবত 2 ^ 32 (2 এর পরিবর্তে 4 বিলিয়ন)। আরএইচইএল ইউআইডি-তে 4,294,967,295 (2 ^ 32-1) প্রায়শই একটি "অবৈধ মান" ইউআইডি-র জন্য সংরক্ষিত থাকে এবং 4,294,967,294 (2 ^ 32-2) কিছু অপারেটিং সিস্টেমে এনএফএসএনবোডি ব্যবহারকারীর জন্য সংরক্ষিত থাকে। সুতরাং সর্বোচ্চ অন-সংরক্ষিত মান 4,294,967,293 (2 ^ 32-3)
tehnicaorg

4

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

এটি আপনাকে সি ধরণের সন্ধান করতে দেয়। যেহেতু আপনার বাইটস আকারের প্রয়োজন তাই আপনার সর্বোত্তম বিকল্পটি স্পেসিফিকেশন অনুসারে টাইপডেফ নামটি পার্স করছে 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মানে unsigned(এই এও হতে পারে Sজন্য signed) এবং 32আকার (এটা উপরের তালিকাতে খোঁজা; আমি মনে করি, অধিকাংশ সময় আপনি অনুমান করতে পারেন যে ইতিমধ্যে বাইটে আকার, কিন্তু যদি তুমি চাও সম্পূর্ণরূপে পোর্টেবল এটা হতে আপনার স্ক্রিপ্টটি caseএই মানটি স্যুইচ করা ভাল )


1
আমার সিস্টেমে (উবুন্টু 12.04) এবং অন্যান্য ডেবিয়ান ভিত্তিক সিস্টেমে শিরোনাম ফাইলটি: /usr/include/$(gcc -print-multiarch)/bits/typesizes.hবা বিকল্পভাবে:/usr/include/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/bits/typesizes.h
পাবউক

1
এই গ্লিবসি ফাইলগুলি থাকার অর্থ সম্ভবত একটি সংকলক উপলব্ধ রয়েছে। তাই এক পারে #include <sys / types.h> অ্যাক্সেস করতে uid_t এবং ফলাফল মুদ্রণ ( printf, ( "uid_t হয়েছে:% d বাইট (% d বিট) \ N", যাও sizeof (uid_t), যাও sizeof (uid_t) * 8 ); )
tehnicaorg

3

এটি একটি আকর্ষণীয় প্রশ্ন। এটি নির্ধারণের জন্য যদি কোনও মানক, বহনযোগ্য পদ্ধতি ছিল তবে আমি অবাক হব।

আমার কাছে কোনও লিনাক্স বক্স নেই, তবে idফ্রিবিএসডি 8.0- র কমান্ডটি শূন্যে ফিরে আসে:

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

আমি নিশ্চিত যে এটি অনির্ধারিত আচরণ, তবে আমি বাজি রেখেছিলাম যে বেশিরভাগ সংস্করণটি idহয় হয় শূন্যের জন্য 65'536(যদি 16-বিট ইউআইডি) থাকে এবং 4'294'967'296আপনি যদি সিস্টেমের সীমা ছাড়িয়ে যান তবে ত্রুটি হয়ে যায়।


3

ইন এই লিঙ্কে প্রশ্ন জিজ্ঞাসা করা হয় এবং উত্তর প্রদানকারী একটি স্বাক্ষরিত দীর্ঘ int- এ প্রশ্ন ব্যবহারসমূহ সিস্টেম নির্ধারণ করতে একটি ট্রায়াল & ত্রুটি পন্থাটি ব্যবহার করে, 31 বিট যাব 2.147.483.647 একটি সবের্াচ্চ সঙ্গে, মান সংরক্ষণ করতে।

# groupadd -g 42949672950 testgrp
# more /etc/group
testgrp:*:2147483647:
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.