Mengapa / etc / passwd digunakan setiap kali seseorang mengeksekusi perintah `ls -l`?

28

Baca dari APUE , hanya ingin tahu:

File kata sandi digunakan setiap kali pengguna masuk ke sistem UNIX dan setiap kali seseorang menjalankan ls -lperintah.

Rick
sumber
3
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

igal
sumber
17
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.
pabouk