Saya mengerti bahwa ID pengguna unix (UID) biasanya bilangan bulat unsigned 16 atau 32 bit tetapi bagaimana saya bisa mencari tahu untuk sistem yang diberikan (dalam shell)?
18
Anda harus melihat ke dalam <limits.h>
(atau salah satu file itu termasuk, misalnya, sys/syslimits.h
pada OS X) untuk #define
dari UID_MAX
.
Sebagian besar sistem operasi terbaru (Solaris 2.x, OS X, BSD, Linux, HP-UX 11i, AIX 6) dapat menangani hingga dua miliar ( 2^31-2
), jadi saya akan berasumsi dan membuat solusi untuk sistem yang lebih tidak jelas yang tidak 't.
UID_MAX
. Misalnya, alat darishadow-utils
penggunaan(uid_t)-1
untuk mengetahui nilai maksimal untuk UID.login.defs
menunjukkan bahwa dalam konteks itu,UID_MAX
hanya mengontrol uid tertinggi yang secara otomatis akan ditugaskan untuk pengguna baru dibuat denganuseradd
.glibc memberikan definisi untuk semua tipe sistem tersebut.
Anda dapat memeriksa
/usr/include/bits/typesizes.h
:Selanjutnya Anda melihat
/usr/include/bits/types.h
:Ini memungkinkan Anda menemukan tipe C. Karena Anda memerlukan ukuran dalam byte, opsi terbaik Anda adalah menguraikan nama typedef sesuai dengan spesifikasi di
types.h
:Jadi, ini satu kalimat:
Di sini
U
berartiunsigned
(ini bisa jugaS
untuksigned
) dan32
merupakan ukuran (lihat di daftar di atas; saya pikir, sebagian besar waktu Anda dapat mengasumsikan bahwa itu sudah ukuran dalam byte, tetapi jika Anda ingin skrip Anda sepenuhnya portabel itu mungkin lebih baik untukcase
mengaktifkan nilai ini).sumber
/usr/include/$(gcc -print-multiarch)/bits/typesizes.h
atau sebagai alternatif:/usr/include/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/bits/typesizes.h
Itu pertanyaan yang menarik. Saya akan terkejut jika ada metode standar dan portabel untuk menentukan ini.
Saya tidak memiliki kotak Linux yang berguna, tetapi
id
perintah pada FreeBSD 8.0 kembali ke nol:Saya yakin ini adalah perilaku yang tidak terdefinisi, tetapi saya berani bertaruh bahwa sebagian besar versi
id
akan membungkus ke nol dengan65'536
(jika 16-bit UID) dan4'294'967'296
atau kesalahan keluar jika Anda melampaui batas sistem.sumber
Dalam tautan ini , pertanyaan diajukan dan responden menggunakan metode percobaan & kesalahan untuk menentukan sistem yang dimaksud menggunakan int panjang yang ditandatangani, meninggalkan 31 bit untuk menyimpan nilai, dengan maksimal 2,147.483.647.
sumber