当我运行以下命令时:
sudo usermod –c "Richard Tracy" dtracy
我收到以下错误:
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT new value of the GECOS field
-d, --home HOME_DIR new home directory for the user account
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-f, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
-h, --help display this help message and exit
-l, --login NEW_LOGIN new value of the login name
-L, --lock lock the user account
-m, --move-home move contents of the home directory to the
new location (use only with -d)
-o, --non-unique allow using duplicate (non-unique) UID
-p, --password PASSWORD use encrypted password for the new password
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL new login shell for the user account
-u, --uid UID new UID for the user account
-U, --unlock unlock the user account
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER new SELinux user mapping for the user account
它说我们可以使用-c
option ,那为什么它不接受我的命令呢?我还看到,在创建用户并使用-c
命令useradd
时,我仍然收到上述消息并且操作失败。
要重现上述错误,只需运行sudo useradd dtracy
以使用默认值创建用户dtracy
,然后尝试通过上述usermod
命令进行修改。
您运行的命令包含
–c
,它是一个短划线,后跟一个c
. 尽管像这样的选项参数-c
通常非正式地发音为“dash c”,但它们实际上必须以 ASCII 连字符开头。这与 ASCII 减号字符(此字符的一个名称是“连字符减号”)相同,但与其他 Unicode 破折号字符(如长破折号和长破折号)不同。命令不会为这些破折号字符赋予任何特殊含义,因此虽然
-c
参数指定了短选项c
,但–c
参数根本不指定任何选项。您实际上是usermod
使用三个非选项参数运行的,这不是它接受的语法之一,因此它打印了它的帮助消息。人们最终在命令中输入破折号而不是连字符的原因是——好吧,没有人这样做。相反,一些网站将连字符转换为破折号。因此,当从此类网站的页面复制命令并粘贴到终端时,它错误地包含一个破折号而不是连字符。如果使用像 LibreOffice 这样的程序来存储命令列表(并且没有关闭自动格式化),也会发生这种情况。
类似的问题在实践中经常出现在这样的错误文本中,包括在标点符号附近插入额外的空格(在
rm -r
命令中非常糟糕!),用弯引号替换直引号,以及<
字符和匹配>
字符之间的文本消失。您要运行的命令
sudo usermod -c "Richard Tracy" dtracy
, 工作正常。