useradd/usermod 不接受 -c

useradd/usermod 不接受 -c

当我运行以下命令时:

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选项,那么为什么它不接受我的命令?我还看到,在创建用户并执行命令时-cuseradd我仍然收到上述消息并且操作失败。

要重现上述错误,只需运行sudo useradd dtracy创建一个dtracy具有默认值的用户,然后尝试通过上述usermod命令进行修改。

答案1

您运行的命令–c包含短划线后面跟着一个c尽管选项参数-c通常非正式地发音为“破折号 c”,但它们实际上必须以 ASCII 连字符开头。这与 ASCII 减号字符相同(此字符的一个名称是“连字符减号”),但与其他 Unicode 破折号字符(如短破折号和长破折号)不同。

命令不会为这些破折号赋予任何特殊含义,因此虽然参数-c指定了短选项c,但–c参数根本不指定任何选项。您实际上是usermod使用三个非选项参数运行的,这不是它接受的语法之一,因此它打印了帮助消息。

人们最终在命令中输入破折号而不是连字符的原因是——好吧,没人会这样做。相反,有些网站将连字符转换为破折号。因此,当从此类网站的页面复制命令并粘贴到终端时,它会错误地包含一个短划线而不是连字符。如果使用 LibreOffice 等程序存储命令列表(并且没有关闭自动格式化),也可能会发生这种情况。

实践中,这种混乱的文本经常会出现类似的问题,包括在标点符号附近插入多余的空格(在命令中非常糟糕!)、用花括号替换直引号以及字符与匹配字符rm -r之间的文本消失。<>

您想要运行的命令sudo usermod -c "Richard Tracy" dtracy,运行正常。

相关内容