К вашему сведению, я попробую strace ls -lпозже, я увижу openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4заявление.
Рик
7
Конечно, реальность в наши дни сложнее. Это не /etc/passwdна BSD. Актив nscdизменит вещи; как и НСС. Итак, обратите внимание, что этот вопрос основан на мировоззрении 7-го издания.
JdeBP
4
@JdeBP Древнее программирование в среде Unix , тогда?
Эндрю Хенле
@JdeBP Это не так? Я удивился, когда вы сказали это, потому что я думал, что многие программы (скрипты и двоичные файлы) сломаются, что зависит (возможно, ошибочно, но все же) от наличия / etc / passwd.
Питер - Восстановить Монику
Это не так, как показывает правильное чтение этой страницы руководства, включая раздел «ФАЙЛЫ». (-:
JdeBP
Ответы:
50
Файловая система напрямую связывает числовые значения UID (ID пользователя) и GID (ID группы) с файлом, а не с именем пользователя и именем группы (которые являются строками). Таким образом, ls -lкоманда (и любая другая команда, которая отображает владельца файла и пользователя и группы) должна откуда-то получать имена пользователей и групп. /etc/passwdФайл является одним из таких источников (вероятно , оригинальный и самый распространенный источник). Руководство подтверждает это - из PASSWD (5) (то есть справочной страницы для /etc/passwdфайла):
многие утилиты, такие как ls (1), используют его для сопоставления идентификаторов пользователей с именами пользователей
Для дополнения ответа: POSIX указывает опцию -nдля ls. Это предотвращает преобразование UID и GID в имена пользователей и имена групп. Я проверил ls -nс помощью основных утилит GNU ', lsи опция не позволила получить доступ к обоим /etc/passwdи /etc/groupкак ожидалось.
strace ls -l
позже, я увижуopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
заявление./etc/passwd
на BSD. Активnscd
изменит вещи; как и НСС. Итак, обратите внимание, что этот вопрос основан на мировоззрении 7-го издания.Ответы:
Файловая система напрямую связывает числовые значения UID (ID пользователя) и GID (ID группы) с файлом, а не с именем пользователя и именем группы (которые являются строками). Таким образом,
ls -l
команда (и любая другая команда, которая отображает владельца файла и пользователя и группы) должна откуда-то получать имена пользователей и групп./etc/passwd
Файл является одним из таких источников (вероятно , оригинальный и самый распространенный источник). Руководство подтверждает это - из PASSWD (5) (то есть справочной страницы для/etc/passwd
файла):источник
-n
дляls
. Это предотвращает преобразование UID и GID в имена пользователей и имена групп. Я проверилls -n
с помощью основных утилит GNU ',ls
и опция не позволила получить доступ к обоим/etc/passwd
и/etc/group
как ожидалось.