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

评论

sed答案sed's /:.*//'/ etc / passwd

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

#1 楼

列出

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

cut -d: -f1 /etc/passwd


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

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

要添加

到添加可以使用的新用户:

sudo adduser new_username


或:

sudo useradd new_username


另请参见:什么是adduser和useradd之间的区别是什么?

要删除/删除用户

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

sudo userdel username


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

sudo rm -r /home/username


请谨慎使用以上命令!

修改

修改用户名:

usermod -l new_username old_username


更改用户密码:

sudo passwd username


更改用户的外壳:

sudo chsh username


更改au的详细信息ser(例如,真实姓名):

sudo chfn username


将用户添加到sudo组:

adduser username sudo


or

usermod -aG sudo username


当然,另请参见:man adduserman useraddman userdel ...等。

评论


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

– Mikaela
2014年1月29日在7:26

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

–罗马诺
2014年5月21日在18:02

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

–00fruX
2014年8月7日19:44



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

–奥利♦
14年8月8日在8:32

+1 for adduser和useradd有什么区别?

–sonlexqt
15年10月22日在10:20

#2 楼

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

cat /etc/passwd




less /etc/passwd
more /etc/passwd


您也可以使用awk:awk

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


评论


如何通过命令添加用户?

– nux
2014年1月24日19:31

您可以使用useradd命令。

– Mitch♦
2014年1月24日19:32

@nux晚了一点,但是从命令行使用adduser代替,useradd应该限于作者真正知道他在做什么的脚本。

–弗林德堡
16年7月24日在14:39

#3 楼

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

要获得您键入的所有用户的列表(如用户在/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


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

评论


请记住,getent不仅会打印/ etc / passwd中用户的输出,而且还会打印给定系统上所有已配置的userdb后端中的所有用户,无论是/ etc / passwd还是LDAP等。

– Marcin Kaminski
2014年9月25日下午16:34

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

–ulkas
18-09-28在8:25

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

– jrw32982
19年6月27日在18:21

是的,您可以通过getent和/ etc / passwd找到用户。我在this-dev2devs.com/上找到了一篇文章。

– Prasoon
5月9日14:52

#4 楼

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

compgen -u


将列出所有用户。

#5 楼

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

awk -F'[/:]' '{if ( >= 1000 &&  != 65534) print }' /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位整数
,可以表示值从零到4,294,967,296。但是,
建议仅使用最多65,534的值,以与使用只能容纳16位UID的较旧内核或文件系统的系统保持兼容性。
< br的UID 0具有特殊作用:它始终是root帐户(即
万能的管理用户)。尽管可以在此帐户上更改用户名,并且可以使用相同的UID创建其他帐户,但从安全角度来看,这两种操作都不明智。

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

UID 1到99通常是为特殊系统用户保留的(
,有时称为伪用户),例如wheel,daemon,lp,operator,
新闻,邮件等。这些用户是不需要完全
超级用户权限,但执行某些管理任务并因此需要
的管理员。

某些Linux发行版(即,版本)以
的非特权用户的UID以100开始。以其他方式(例如Red Hat)以
开始。 /> 500,还有其他一些东西,例如Debian,则从1000开始。
由于发行版之间的差异,如果组织中的网络中使用了多个发行版,则可能需要手动干预。
/>
同样,为本地用户保留一个UID块也很方便,例如从1000到9999,为远程用户保留另一个UID(即
u例如,在网络上的其他位置)(例如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}“

– Max Truxa
19年7月8日在12:29

#6 楼

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

awk -F':' ' ~ "$" {print }' /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


评论


也许您应该解释adduser和useradd之间的区别。还将sudo-prefix添加到第一个命令。密码影子文件只能以root身份读取。

– s3lph
2014年9月25日20:13在

awk -F':''$ 2〜“ \ $” {print $ 1}'/ etc / shadow向我显示了所有用户,包括bin,daemon等,并抛出了此警告:转义序列\ $被视为普通$'我发现这篇文章stackoverflow.com/a/25867768/847954并添加了一个反斜杠,它工作正常:awk -F':''$ 2〜“ \\ $” {print $ 1}'/ etc / shadow

–杰夫·麝香
18年6月20日在5:43



#7 楼

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

user (tab tab)


为我提供了可能的选择
如果您想了解有关命令google的更多信息,请输入useradd userdel usermod users users-admin
man
man useradd
给定
useradd-创建新用户或更新默认的新用户信息
...
...

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

希望我喜欢bash中的制表符补全功能使我免于记忆。

评论


而且此方法可能在后台使用了compgen,请参见其他答案:askubuntu.com/a/925312/830543

– gmarmstrong
2月20日19:35

#8 楼

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

cd /home
ls 


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

评论


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

–大卫·福斯特(David Foerster)
2014年12月19日,0:57

ls / home也可能包含已删除用户的用户目录。

–苏拉杰
19年7月1日在9:12

#9 楼

第一个答案建议:

cut -d: -f1 /etc/passwd


但是使用此计数并计算用户数,您会得到:

$ cut -d: -f1 /etc/passwd | wc -l
46


便携式计算机的46位用户很多!因此,请改用它:

$ cat /etc/passwd | grep -vE '(/bin/false|/sbin/nologin|/bin/sync)' | cut -d: -f1
root
rick
guest-atkb2q
guest-u4sf2i
guest-rmlbtg
guest-mz53vp


要删除来宾帐户(无论如何都没有保存文件),请使用:

$ cat /etc/passwd | grep -vE '(/bin/false|/sbin/nologin|/bin/sync|guest-)' | cut -d: -f1
root
rick


从列表中删除的一些示例用户是:

systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
sync:x:4:65534:sync:/bin:/bin/sync
guest-atkb2q:x:999:999:Guest:/tmp/guest-atkb2q:/bin/bash


事实证明,单个用户系统上的大多数用户实际上是已自行设置的程序成为用户。