列出所有用户的命令?以及如何添加,删除,修改用户?


855

我需要一个命令来列出终端中的所有用户。以及如何从终端添加,删除,修改用户。

这可能有助于通过终端轻松管理您的帐户。


3
sed答案sed 's/:.*//' /etc/passwd
Avinash Raj 2016年

2
列出用户:awk -F: '{ print $1 }' /etc/passwd
saviour123 '17

Answers:


1142

列出

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

cut -d: -f1 /etc/passwd

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

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

加上

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

sudo adduser new_username

要么:

sudo useradd new_username

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

删除/删除

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

sudo userdel username

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

sudo rm -r / home / 用户名

请谨慎使用以上命令!

修改

修改用户名:

usermod -l new_username old_username

要更改用户密码:

sudo passwd username

要更改用户的外壳:

sudo chsh username

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

sudo chfn username

要将用户添加到sudo组:

adduser username sudo

要么

usermod -aG sudo username

:而且,当然也看到man adduserman useraddman userdel...等等。


12
Radu忘记提及sudo chfn <username>会更改用户详细信息(例如真实姓名)的信息。我尝试将其添加为评论,但出现错误告诉我必须拥有+50声望。
Mikaela 2014年

2
我认为应该强调指出,对链接问题的正确答案是askubuntu.com/a/381646/16395 ---否则,您必须手工考虑GID / UID Ubuntu策略。接受的答案不是很清楚。
Rmano 2014年

sudo userdel DOMAIN \\ johndoe给我一个错误:“ userdel:无法从/ etc / passwd中删除条目'DOMAIN \ johndoe”-我在/ etc / passwd中查找,它们甚至不在那儿,可能是因为“域”帐户?
2014年

1
@ 00fruX是的...如果您使用的是集中式用户数据库,则需要直接处理它。
奥利(Oli)


87

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

cat /etc/passwd

要么

less /etc/passwd
more /etc/passwd

您也可以使用awk:awk

awk -F':' '{ print $1}' /etc/passwd

如何通过命令添加用户?
nux

您可以使用useradd命令。
米奇

@nux聚会晚了一点,但是应该从命令行使用,adduseruseradd应该仅限于作者真正知道自己在做什么的脚本。
flindeberg '16

64

获得此类信息的最简单方法是getent-请参见getent命令的联机帮助页联机帮助页图标。尽管该命令的输出cat /etc/passwd与记住相同的输出一样有用,因为它会为您提供OS中多个元素的列表。

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

getent passwd

要将用户newuser添加到系统中,请输入

sudo adduser newuser

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

奖励:要将任何用户(例如anyuser)添加到组(例如cdrom)中,请输入

sudo adduser anyuser cdrom

您使用删除用户(例如过时的用户)

sudo deluser obsolete

如果您也要删除他的主目录/邮件,请输入

sudo deluser --remove-home obsolete

sudo deluser --remove-all-files obsolete

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


8
重要的是要记住,getent不只是打印用户的输出在/ etc / passwd文件,但在所有配置的USERDB后端的所有用户给定的系统上,无论是在/ etc / passwd或LDAP等,是非常有用的
马辛·卡明斯基

@MarcinKaminski是正确的,它还会打印可以访问服务器的SSO系统中的用户设置。这个答案是最好的,而且getent passwd是正确的命令
ulkas

来自所有可枚举的 userdb后端的
@MarcinKaminski


27

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

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

这是通过以下方式工作的:

  • 从阅读 /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个值。

UID 0具有特殊作用:它始终是根帐户(即,万能的管理用户)。尽管可以在此帐户上更改用户名,并且可以使用相同的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)和为远程用户(即网络上其他地方的用户)保留另一个UID(例如10000到65534)也很方便。重要的是要确定并坚持下去。

为特定类型的用户保留数字块的这种做法的优点之一是,它更方便地在系统日志中搜索可疑的用户活动。

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


1
几乎是一个完美的答案,但是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)) print \$1}"
更为干净

17

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

awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow

添加新用户

sudo adduser new_username

要么

sudo useradd new_username

删除 /删除用户名

sudo userdel username

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

sudo deluser --remove-home username

要么

sudo rm -r /path/to/user_home_dir

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

sudo deluser --remove-all-files

1
也许你应该解释之间的差异adduseruseradd。还将sudo-prefix 添加到第一个命令。密码影子文件只能以root身份读取。
s3lph

1
awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow向我显示了包括bin,daemon等在内的所有用户,并发出了以下警告:转义序列\$' treated as plain $'我发现了这篇文章stackoverflow.com/a/25867768/847954 并添加了一个反斜杠,效果很好:awk -F':' '$2 ~ "\\$" {print $1}' /etc/shadow
jeff musk

8

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

user (tab tab)

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

要列出用户,您应该遵循Mitch所说的。

希望可以帮助我爱上bash中的制表符,从而使我免于记忆。


6

要查找机器上/ home-folder中具有家庭目录的用户,请运行以下命令

cd /home
ls 

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


8
这仅显示的内容/home。虽然Ubuntu默认将用户目录放在那里,但这绝不是强制性的。
David Foerster

ls /home也可能包含已删除用户的用户目录。
Suraj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.