FYI saya coba strace ls -lnanti, saya melihat openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4pernyataan.
Rick
7
Tentu saja, kenyataan kini lebih kompleks. Itu tidak ada /etc/passwddi BSD. Aktif nscdakan mengubah banyak hal; seperti halnya NSS. Jadi perhatikan bahwa pertanyaan ini didasarkan pada pandangan dunia Edisi ke-7.
JdeBP
4
@JdeBP Pemrograman Kuno di Lingkungan Unix , lalu?
Andrew Henle
@ JdeBP Bukan? Saya terkejut ketika Anda mengatakan itu karena saya akan berpikir bahwa banyak program (skrip dan binari) akan rusak yang bergantung (mungkin salah, tapi tetap saja) pada keberadaan / etc / passwd.
Peter - Pasang kembali Monica
Itu tidak, seperti membaca halaman manual dengan benar, termasuk bagian FILES-nya, akan mengungkapkan. (-:
JdeBP
Jawaban:
50
Sistem file secara langsung mengaitkan nilai UID numerik (ID Pengguna) dan GID (ID Grup) dengan file, bukan nama pengguna dan nama grup (yang merupakan string). Jadi ls -lperintah (dan perintah lain yang menampilkan pengguna dan pemilik grup dari suatu file) perlu mendapatkan nama pengguna dan grup dari suatu tempat. The /etc/passwdfile satu sumber seperti (mungkin sumber asli dan yang paling umum). Manual memuat ini - dari PASSWD (5) (yaitu halaman manual untuk /etc/passwdfile):
banyak utilitas, seperti ls (1) menggunakannya untuk memetakan ID pengguna ke nama pengguna
Untuk melengkapi jawabannya: POSIX menentukan opsi -nuntuk ls. Ini mencegah terjemahan UID dan GID ke nama pengguna dan nama grup. Saya telah mengujinya ls -ndengan GNU core utils ' lsdan opsi mencegah akses keduanya /etc/passwddan /etc/groupseperti yang diharapkan.
strace ls -l
nanti, saya melihatopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
pernyataan./etc/passwd
di BSD. Aktifnscd
akan mengubah banyak hal; seperti halnya NSS. Jadi perhatikan bahwa pertanyaan ini didasarkan pada pandangan dunia Edisi ke-7.Jawaban:
Sistem file secara langsung mengaitkan nilai UID numerik (ID Pengguna) dan GID (ID Grup) dengan file, bukan nama pengguna dan nama grup (yang merupakan string). Jadi
ls -l
perintah (dan perintah lain yang menampilkan pengguna dan pemilik grup dari suatu file) perlu mendapatkan nama pengguna dan grup dari suatu tempat. The/etc/passwd
file satu sumber seperti (mungkin sumber asli dan yang paling umum). Manual memuat ini - dari PASSWD (5) (yaitu halaman manual untuk/etc/passwd
file):sumber
-n
untukls
. Ini mencegah terjemahan UID dan GID ke nama pengguna dan nama grup. Saya telah mengujinyals -n
dengan GNU core utils 'ls
dan opsi mencegah akses keduanya/etc/passwd
dan/etc/group
seperti yang diharapkan.