有没有列出所有用户的命令?还要在终端中添加、删除、修改用户?

nux*_*nux 982 command-line user-management

我需要一个命令来列出所有用户以及从终端添加、删除和修改用户的命令 - 任何有助于通过终端轻松管理用户帐户的命令。

Rad*_*anu 1295

列出

要列出您可以使用的所有本地用户:

cut -d: -f1 /etc/passwd
Run Code Online (Sandbox Code Playgroud)

要列出所有能够(以某种方式)进行身份验证的用户,包括非本地用户,请参阅此回复

一些更有用的用户管理命令(也仅限于本地用户):

加上

要添加新用户,您可以使用:

sudo adduser new_username
Run Code Online (Sandbox Code Playgroud)

或者:

sudo useradd new_username
Run Code Online (Sandbox Code Playgroud)

另请参阅:adduser 和 useradd 之间有什么区别?

删除/删除

要删除/删除用户,首先您可以使用:

sudo userdel username
Run Code Online (Sandbox Code Playgroud)

然后您可能想要删除已删除用户帐户的主目录:

sudo rm -r /home/用户名

请谨慎使用上述命令!

修改

要修改用户的用户名:

usermod -l new_username old_username
Run Code Online (Sandbox Code Playgroud)

要更改用户的密码:

sudo passwd username
Run Code Online (Sandbox Code Playgroud)

要更改用户的外壳:

sudo chsh username
Run Code Online (Sandbox Code Playgroud)

要更改用户的详细信息(例如真实姓名):

sudo chfn username
Run Code Online (Sandbox Code Playgroud)

将用户添加到sudo组:

adduser username sudo
Run Code Online (Sandbox Code Playgroud)

或者

usermod -aG sudo username
Run Code Online (Sandbox Code Playgroud)

而且,当然,另请参见:man adduser, man useradd, man userdel... 等等。

  • Radu 忘记提及 ```sudo chfn <username>``` 它会更改用户详细信息(例如真实姓名)。我试图将其添加为评论,但出现错误提示我必须拥有 +50 声望才能这样做。 (14认同)
  • 我认为应该强调链接问题的正确答案是 http://askubuntu.com/a/381646/16395 ---否则您必须手动考虑 GID/UID Ubuntu 政策。接受的答案不是那么清楚。 (2认同)

Mit*_*tch 110

只需按键盘上的Ctrl+ Alt+T即可打开终端。当它打开时,运行以下命令:

cat /etc/passwd
Run Code Online (Sandbox Code Playgroud)

或者

less /etc/passwd
more /etc/passwd
Run Code Online (Sandbox Code Playgroud)

您也可以使用 awk:awk

awk -F':' '{ print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)


gun*_*ert 75

获取此类信息的最简单方法是getent- 请参阅getent命令的联机帮助页联机帮助页图标. 虽然该命令提供了与cat /etc/passwd记住相同的输出,因为它将为您提供操作系统中多个元素的列表。

获取您键入的所有用户的列表(因为用户在 中列出/etc/passwd

getent passwd
Run Code Online (Sandbox Code Playgroud)

要将用户newuser添加到系统中,您可以键入

sudo adduser newuser
Run Code Online (Sandbox Code Playgroud)

创建一个应用了所有默认设置的用户。

奖励:将任何用户(例如anyuser)添加到组(例如cdrom)类型

sudo adduser anyuser cdrom
Run Code Online (Sandbox Code Playgroud)

您使用以下命令删除用户(例如obsolete

sudo deluser obsolete
Run Code Online (Sandbox Code Playgroud)

如果您还想删除他的主目录/邮件,请键入

sudo deluser --remove-home obsolete
Run Code Online (Sandbox Code Playgroud)

sudo deluser --remove-all-files obsolete
Run Code Online (Sandbox Code Playgroud)

将删除该用户以及该用户在整个系统上拥有的所有文件。

  • 记住 getent 不仅打印 /etc/passwd 中用户的输出,而且打印给定系统上所有配置的 userdb 后端中的所有用户,无论是 /etc/passwd 还是 LDAP 等,这是很有用的。 (9认同)

Rav*_*ina 51

您也可以使用compgen 内置的 GNU bash

compgen -u
Run Code Online (Sandbox Code Playgroud)

将列出所有用户。


Wil*_*ilf 31

在大多数正常情况下,这应该让所有正常(非系统,不奇怪等)用户:

awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

这通过以下方式工作:

  • 从读入 /etc/passwd
  • 使用:作为分隔符
  • 如果第三个字段(用户 ID 号)大于 1000 而不是 65534,则打印第一个字段(用户的用户名)。

这是因为在许多 linux 系统上,1000 以上的用户名是为非特权(您可以说是普通)用户保留的。这里的一些信息:

用户 ID (UID) 是由类 Unix 操作系统分配给每个用户的唯一正整数。每个用户都通过其 UID 向系统标识,用户名通常仅用作人类的界面。

UID 与其对应的用户名和其他用户特定信息一起存储在 /etc/passwd 文件中...

第三个字段包含 UID,第四个字段包含组 ID (GID),默认情况下它等于所有普通用户的 UID。

在 Linux 内核 2.4 及更高版本中,UID 是无符号 32 位整数,可以表示从 0 到 4,294,967,296 的值。但是,为了保持与使用旧内核或只能容纳 16 位 UID 的文件系统的系统的兼容性,建议最多使用 65,534 的值。

为 0 的 UID 有一个特殊的作用:它始终是 root 帐户(即,无所不能的管理用户)。尽管可以更改此帐户的用户名,并且可以使用相同的 UID 创建其他帐户,但从安全角度来看,这两种操作都不明智。

UID 65534 通常是为没有系统特权的用户(与普通(即非特权)用户相反)保留的。此 UID 通常用于个人通过 FTP(文件传输协议)或 HTTP(超文本传输​​协议)远程访问系统。

UID 1 到 99 传统上是为特殊系统用户(有时称为伪用户)保留的,例如 wheel、daemon、lp、operator、news、mail 等。这些用户是不需要全部 root 权限的管理员,但他们执行一些管理任务,因此需要比授予普通用户更多的权限。

一些 Linux 发行版(即版本)从 100 开始为非特权用户提供 UID。其他人,例如 Red Hat,从 500 开始,还有一些,例如 Debian,从 1000 开始。由于发行版之间的差异,手册如果在一个组织的网络中使用多个分发版,则可能需要进行干预。

此外,可以方便地为本地用户保留一个 UID 块,例如 1000 到 9999,为远程用户(即网络上其他地方的用户)保留另一个块,例如 10000 到 65534。重要的是要决定计划并坚持下去。

这种为特定类型的用户保留号码块的做法的优点之一是可以更方便地通过系统日志搜索可疑的用户活动。

与流行的看法相反,UID 字段中的每个条目不必是唯一的。但是,非唯一的 UID 会导致安全问题,因此 UID 应该在整个组织中保持唯一。同样,应尽可能避免从以前的用户那里回收 UID。

  • 几乎是一个完美的答案,但 IMO 使用 `getent` 而不是直接从 `/etc/passwd` 中读取并查找 `UID_MIN`/`UID_MAX` 而不是硬编码值更干净:`getent passwd | awk -F: "{if (\$3 >= $(awk '/^UID_MIN/ {print $2}' /etc/login.defs) && \$3 <= $(awk '/^UID_MAX/ {print $2}' /etc/login.defs)) 打印 \$1}"` (2认同)

小智 18

可以登录的所有用户列表(没有系统用户,例如:bin、deamon、mail、sys 等)

awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow
Run Code Online (Sandbox Code Playgroud)

添加新用户

sudo adduser new_username
Run Code Online (Sandbox Code Playgroud)

或者

sudo useradd new_username
Run Code Online (Sandbox Code Playgroud)

删除/移除用户名

sudo userdel username
Run Code Online (Sandbox Code Playgroud)

如果要删除家目录(默认目录/home/username)

sudo deluser --remove-home username
Run Code Online (Sandbox Code Playgroud)

或者

sudo rm -r /path/to/user_home_dir
Run Code Online (Sandbox Code Playgroud)

如果要从该用户删除系统中的所有文件(不仅是home目录)

sudo deluser --remove-all-files
Run Code Online (Sandbox Code Playgroud)

  • `awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow` 显示了所有用户,包括 bin、守护进程等,并抛出此警告:转义序列 `\$' 被视为普通 ` $' 我找到了这篇文章 /sf/answers/1810743791/ 并添加了一个反斜杠,效果很好: `awk -F':' '$2 ~ "\\$" {print $1}' /等/阴影` (2认同)

小智 8

好的,这里有一个技巧可以帮助您对此进行排序。如果您键入 user 并按两次 Tab 键,终端会自动完成,它将列出 user 存在的所有命令作为前 4 个字符。

user (tab tab)
Run Code Online (Sandbox Code Playgroud)

给我尽可能多的选项 useradd userdel usermod users users-admin
如果您想了解有关命令的更多信息 google it 或键入 man man useradd 给 useradd - 创建新用户或更新默认的新用户信息 ... ...

要列出用户,您应该按照米奇所说的去做。

希望帮助我喜欢 bash 中的选项卡完成使我免于记住事情。


小智 7

要找出在机器上的 /home-folder 中有主目录的用户,请运行以下命令

cd /home
ls 
Run Code Online (Sandbox Code Playgroud)

然后,您可以看到有权登录服务器的用户。如果我们要查看任何用户的文件,您必须是 root 用户。

  • 这仅显示`/home`的内容。虽然 Ubuntu 默认将用户目录放在那里,但这绝不是强制性的。 (10认同)