harry’s memorandum

おれおれメモ

RHEL6のls -l のパーミッション の ピリオド "." って何よ

RHEL6から ls -l を実行すると パーミッションのフォーマット に ピリオド "." がつくことがあります。すげー気になります。

$ env LANG=C ls -l  /etc/resolv.conf /etc/hosts
-rw-r--r--  1 root root 350 Apr  6 19:12 /etc/hosts
-rw-r--r--. 1 root root  45 Apr  6 14:29 /etc/resolv.conf

イラっとしてきたので coreutils-8.4/src/ls.c を見てみました。

  /* Compute the mode string, except remove the trailing space if no
     file in this directory has an ACL or SELinux security context.  */
  if (f->stat_ok)
    filemodestring (&f->stat, modebuf);
  else
    {
      modebuf[0] = filetype_letter[f->filetype];
      memset (modebuf + 1, '?', 10);
      modebuf[11] = '\0';
    }
  if (! any_has_acl)
    modebuf[10] = '\0';
  else if (f->acl_type == ACL_T_SELINUX_ONLY)
    modebuf[10] = '.';
  else if (f->acl_type == ACL_T_YES)
    modebuf[10] = '+';

なるほど。
"." ピリオドは SELinuxのセキュリティコンテキストが付いているファイル。
"+" プラスは ACLの設定されたファイル。
少しすっきりしました。

$ env LANG=C ls -l  /etc/resolv.conf /etc/hosts
-rw-r--r--  1 root root 350 Apr  6 19:12 /etc/hosts
-rw-r--r--. 1 root root  45 Apr  6 14:29 /etc/resolv.conf
$ env LANG=C ls -lZ /etc/resolv.conf /etc/hosts
-rw-r--r--  root root ?                                /etc/hosts
-rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/resolv.conf