誰かが `ls -l`コマンドを実行するたびに/ etc / passwdが使用されるのはなぜですか?


28

APUEから読み、好奇心を感じてください:

パスワードファイルは、ユーザーがUNIXシステムにログインするたびに、また誰かがls -lコマンドを実行するたびに使用されます。


3
ちなみにstrace ls -l、後で試してみると、openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4声明が出ています。
リック

7
もちろん、今日の現実はより複雑です。/etc/passwdBSDではありません。アクティブな人nscdは物事を変えるでしょう。NSSも同様です。したがって、この質問は第7版の世界観に基づいていることに注意してください。
JdeBP

4
@JdeBP Unix環境での古代プログラミング、それでは?
アンドリューヘンレ

@JdeBPそうではない?/ etc / passwdの存在に依存している(おそらく間違っているが、それでも)多くのプログラム(スクリプトとバイナリ)が壊れると思うので、あなたが言ったことに驚きました。
ピーター-モニカを

FILESセクションを含め、そのマニュアルページを適切に読むと明らかになるわけではありません。(-:
JdeBP

回答:


50

ファイルシステムは、ユーザー名とグループ名(文字列)ではなく、数値UID(ユーザーID)とGID(グループID)をファイルに直接関連付けます。そのため、ls -lコマンド(およびファイルのユーザーとグループの所有者を表示する他のコマンド)は、どこかからユーザー名とグループ名を取得する必要があります。/etc/passwdファイルには、そのようなソース(おそらくオリジナルと最も一般的なソース)です。マニュアルはこれを裏付けています-PASSWD(5)から(つまり、/etc/passwdファイルのmanページ):

ls(1)などの多くのユーティリティは、ユーザーIDをユーザー名にマッピングするために使用します


17
答えを補完するために:POSIXはのオプション-nを指定しますls。これにより、UIDとGIDがユーザー名とグループ名に変換されなくなります。私がテストしているls -nGNUコアutilsのでls、両方のアクセスを防ぐオプション/etc/passwd/etc/group期待通りに。
パブーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.