这里的 999 是什么意思?

这里的 999 是什么意思?

我在我的一个目录上执行了 ll,这里的 999 是什么意思,

drwxr-xr-x  9 git       mysql 4096 Nov 12 14:41 gitlab/
drwxr-xr-x  6 gitlab_ci   999 4096 Jun 28 13:36 gitlabci/

这些目录是否可以完全归 git 所有,例如 gitlab 由 git 所有,gitlabci 由 gitlab_ci 所有

我想要这样的东西

drwxr-xr-x  9 git       git 4096 Nov 12 14:41 gitlab/
drwxr-xr-x  6 gitlab_ci gitlab_ci 4096 Jun 28 13:36 gitlabci/

答案1

如果无法在分配的空间内显示完整的用户名和组名,ls则将用用户或组 ID 替换其中一个或两个,而不是截断其中一个,以减少或消除由于长度不同的相似用户名或组名而导致的安全问题。它不会扩展列。您无法更改这一点。

答案2

文件的元数据中没有以名称形式保存的所有者和组,而是以 UID 和 GID 保存。

如果操作系统无法将这些 ID 解析为名称,则会按原样显示 ID。

解析过程用于/etc/nsswitch.conf知道查找位置。(文件、ldap、数据库等)

我认为它getent group gitlab_ci不会返回任何内容,这意味着该组不存在。如果没有,则意味着该组没有 GID 999,这解释了为什么您的文件显示为假的。

用于chgrp修改其 GID。

答案3

我回答晚了,但我见过一些发行版使用 999 个用户来管理 MySQL。如果你的发行版没有使用 999 个用户,那么有可能的该目录与另一台机器共享,或者从另一台机器复制而来。

仅作为示例,我在以下目录中有一个 999 个用户,但我的机器上不存在该目录下的任何用户:

$ ls -l mysql_data/
total 176188
-rw-rw---- 1 999 999       56 Jul 10 12:41 auto.cnf
-rw-rw---- 1 999 999 79691776 Jul 11 09:45 ibdata1
-rw-rw---- 1 999 999 50331648 Jul 11 09:45 ib_logfile0
-rw-rw---- 1 999 999 50331648 Jul 10 12:41 ib_logfile1
drwx------ 2 999 999    45056 Jul 10 17:03 magento
drwx------ 2 999 999     4096 Jul 10 12:41 mysql
drwx------ 2 999 999     4096 Jul 10 12:41 performance_schema

$ grep 999 /etc/passwd
$

但是如果我们检查挂载该目录的 Docker 容器,我们会发现:

$ docker-compose exec mysql grep 999 /etc/passwd
mysql:x:999:999::/home/mysql:

该容器的镜像是官方的Docker MySQL 镜像:

$ grep -A1 -P "^\s*mysql:" docker-compose.yml
  mysql:
    image: mysql:5.6.40

相关内容