我在我的一个目录上执行了 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