当我运行以下命令时:
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
选项,那么为什么它不接受我的命令?我还看到,在创建用户并执行命令时-c
,useradd
我仍然收到上述消息并且操作失败。
要重现上述错误,只需运行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
,运行正常。