GNU消除用户名称和ID的歧义
跳到导航
跳到搜索
由于chown、chgrp、chroot、id的用户和组参数可以指定为名称或数字ID,存在明显的歧义。如果用户或组名是一串数字,应该将命令解释为用户名称还是ID?(在某些环境中将数字用作用户名很常见。)POSIX要求这些命令首先尝试将指定的字符串解析为名称,只有在失败后才尝试解释为ID。当您希望指定一个数值ID(例如42),并且即使在“42”是映射到其他用户ID(例如1000)的用户名的病态情况下,也必须正常工作时,这可能会引起问题。简单地调用chown 42 F将把文件F的所有者ID设置为1000,而不是您想要的结果。
GNU的chown、chgrp、chroot和id提供了一种解决方法,同时通过消除数据库查找可能实现显著的性能改进。只需在每个数字用户ID和/或组ID之前加上“+”,以强制将其解释为整数:
chown +42 F chgrp +$numeric_group_id another-file chown +0:+0 /
对于每个以“+”为前缀的字符串,都将跳过名称查找过程,因为包含“+”的字符串永远不是有效的用户或组名。这种语法在大多数常见的Unix系统上都被接受,但不适用于Solaris 10。