超过 15 个在 Linux 中列出用户的示例

2023-10-21

在这篇文章中,您将了解如何在 Linux 中列出用户。除此之外,你还会了解有关Linux用户特征的其他技巧。

Linux中有两种类型的用户,系统用户是系统默认创建的。另一方面,还有一些由系统管理员创建的普通用户,可以登录系统并使用系统。

 

 

什么文件包含 Linux 上的用户列表?

在开始列出用户之前,我们需要知道这些用户在Linux上保存在哪里?

用户存储在系统上称为 passwd 文件的文本文件中。该文件位于 /etc 目录中。

该文件位于以下路径:


$ /etc/passwd  

在这个文件中,您可以找到系统中用户的所有信息。

 

列出所有用户

列出用户是管理用户的第一步。这样,我们就能知道他们有多少人以及他们是谁。在Linux中,几乎所有事情都可以通过各种方式完成,这也不例外。

要列出所有用户,您可以使用猫命令:


$ cat /etc/passwd  

正如您在图片中看到的,有有关用户的所有信息。

1- 在第一个字段中,您将看到用户名。

2- 第二个字段(x 字符)是加密密码的表示。加密后的密码存储在 /etc/shadow 文件中。

3- UID 或用户ID。

4- 下一个字段指的是用户的主要组。

5-然后,它显示用户 ID 信息,例如地址、电子邮件等。

6-之后,您将看到用户的主目录。

7- 最后一个字段是该用户使用的 shell。

然而,虽然这些信息非常有用,但如果您只想以基本方式列出用户名,则可以使用以下命令:


$ cut -d: -f1 /etc/passwd  

现在我们只需打印文件的第一个字段即可获得名称。

 

按名称列出和排序用户

上述命令的目的是列出 Linux 上的用户。但是按字母顺序列出用户怎么样?

为此,我们将使用前面的命令,但我们将添加排序命令。

所以,命令将是这样的:


$ cut -d: -f1 /etc/passwd | sort  

正如您在图片中看到的,用户已排序。

 

Linux 列出没有密码的用户

了解没有密码的用户并采取适当的措施非常重要。要列出没有密码的用户,只需使用以下命令:


$ sudo getent shadow | grep -Po '^[^:]*(?=:.?:)'  

使用过的regex将列出所有没有密码的用户。

 

按磁盘使用情况列出用户

如果你有一个大目录并且你想知道哪个用户正在淹没它,你可以使用 du 命令来获取磁盘使用情况。

这样,您可以检测哪些用户正在滥用磁盘空间。

为此,使用以下命令就足够了:


$ sudo du -smc /home/* | sort -n  

这样,您将按照 /home 目录的磁盘使用情况对用户进行排序。

我们使用排序命令的 -n 来按数字对输出进行排序。

 

列出当前登录的用户

要列出当前登录的用户,我们有多种方法可以实现。第一种方法我们可以使用 users 命令:


$ users  

它将列出系统中具有打开会话的用户。

但这些信息有点基础;但是,我们还有另一个命令可以提供更多详细信息。该命令很简单:w。


$ w  

通过这个命令,我们可以获得更多信息,例如会话启动的确切时间以及他可用的终端会话。

最后,还有一个命令叫who。它可供整个 Unix 系列使用。所以你可以在 FreeBSD 等其他系统上使用它。


$ who  

通过 who 命令,我们还可以获得有关当前登录用户的一些信息。当然,我们可以添加选项 -a 并显示所有详细信息。


$ who -a  

这样,您就可以了解有关登录用户的一切。

 

Linux最近登录系统的用户列表

我们看到了如何获取当前登录的用户,那么列出用户的登录历史怎么样呢?

您可以使用最后一个命令来获取有关所发生的登录的更多信息:


$ last  

或者特定用户的登录信息


$ last [username]  

例如:


$ last angelo  

这些是用户登录活动及其开始时间和持续时间。

 

列出用户在特定日期或时间的登录情况

列出用户在特定日期或时间的登录情况怎么样?为了实现这一点,我们使用最后一个命令,但带有 -t 参数:


$ last -t YYMMDDHHMMSS  

例如:


$ last -t 20190926110509  

现在,您所要做的就是选择一个确切的日期和时间来列出当时登录的人员。

 

列出组中的所有用户

在 Linux 中列出组成员的方法有两种,最简单、最直接的方法是从 /etc/group 文件中获取用户,如下所示:


$ cat /etc/group | grep likegeeks  

此命令将列出 likegeeks 组中的用户。

另一种方法是使用类似基于 Debian 的发行版中的 Members 命令的命令。但是,Linux 发行版中并未默认安装它。

要在 Ubuntu / Linux Mint 中安装它,只需使用 APT:


$ sudo apt install members  

或者对于 CentOS:


$ sudo dnf install members  

安装后,您可以运行命令,然后输入要列出用户的组的名称:


$ members [group_name]  

例如:


$ members avahi  

这样,您可以在基于 Debian 的发行版中列出某个组的用户。像 CentOS 这样基于 RedHat 的发行版怎么样?

您可以使用以下命令:


$ getent group likegeeks  

 

列出具有 UID 的用户

在 Unix 系统中,每个用户都有一个用户标识符或 ID。它用于管理操作系统内部的帐户。

一般来说,0到1000的UID是系统用户的。此后适用于普通用户。在 Unix 系统上,UID 为零始终属于 root 用户(您可以拥有多个 UID 为零的用户)。

现在,我们将使用以下命令列出用户及其各自的 UIDAwk.

执行该任务的命令如下:


$ awk -F: '{printf "%s:%s\n",$1,$3}' /etc/passwd  

正如您所看到的,每个用户都有他的 UID。

 

列出 root 用户

在像Linux这样的类Unix系统中,通常只有一个root用户。如果有很多,如何列出?

为此,我们可以使用以下命令:


$ grep 'x:0:' /etc/passwd  

在这里,我们过滤文件以获取 UID 为零的用户(root 用户)。

另一种方法是检查 /etc/group 文件:


$ grep root /etc/group  

在这里,我们从 /etc/group 文件获取组 root 中的用户。

另外,您可以通过检查 /etc/sudoers 文件来检查是否有任何用户可以以 root 身份执行命令:


$ cat /etc/sudoers  

 

获取用户总数

要获取 Linux 中的用户总数,您可以使用 wc 命令计算 /etc/passwd 文件中的行数,如下所示:


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

伟大的! 43 个用户。但这包括系统用户和普通用户。只获取普通用户数量怎么样?

简单的!由于我们从上面知道普通用户的 UID 为 1000 或更大,因此我们可以使用 Awk 来获取它们:


$ awk -F: '$3 >= 1000 {print $1}' /etc/passwd  

Cool!

 

列出 sudo 用户

Linux 系统有一个名为 sudo 的实用程序,它允许您像另一个用户(通常是 root 用户)一样执行命令。

这应该在专业环境中谨慎处理。

此外,了解哪些用户可以运行 sudo 命令也非常重要。为此,列出属于 sudo 组的用户就足够了。


$ members sudo  

该组中的用户可以作为超级用户执行命令。

 

列出具有 SSH 访问权限的用户

SSH 允许用户通过网络访问远程计算机。它非常安全,是作为 Telnet 的替代品而诞生的。

默认情况下,所有普通用户都可以登录并使用 SSH。如果要限制这一点,可以使用 SSH 配置文件 (/etc/ssh/ssh_config) 并添加以下指令:


AllowUsers user1 user2 user3  

此外,您可以仅使用AllowGroups指令来允许组而不是允许用户:


AllowGroups group1 group2 group3  

这些指令定义了谁可以访问该服务。不要忘记重新启动 SSH 服务。

 

列出对文件或目录具有权限的用户

我们可以通过两种方式授予多个用户访问或修改文件和目录的权限。

第一种方法是将用户添加到文件或目录的组中。

这样,我们可以使用成员实用程序列出组成员,如上所示。

好的,但是如果我们只想让该用户只能访问该特定文件(而不是所有组权限)怎么办?

这里我们可以设置ACL对于此文件,使用 setfacl 命令,如下所示:


$ setfacl -m u:newuser:rwx myfile  

这里我们给名为newser的用户对名为myfile的文件赋予读、写、执行的权限。

现在该文件可以由所有者访问或修改,用户称为 newuser。那么如何列出它们呢?

我们可以使用 getfacl 命令列出它们,如下所示:


$ getfacl myfile  

该命令将列出所有拥有该文件权限的用户及其相应的权限。

 

列出锁定(禁用)的用户

在Linux中,作为一种安全措施,我们可以锁定用户。如果怀疑用户做错了事情,并且您不想完全删除该用户并只是锁定他进行调查,那么这是一种预防措施。

要锁定用户,可以使用以下命令:


$ usermod -L myuser  

现在名为 myuser 的用户将无法再登录或使用系统。

要列出系统所有锁定的用户,只需使用以下命令:


$ cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }' | grep locked  

这将打印所有锁定的用户,包括系统用户。只列出普通用户怎么样?

正如我们在上面看到的,使用 Awk,我们可以像这样锁定普通用户:


$ awk -F: '$3 >= 1000 {print $1}' /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }' | grep locked  

好简单!

 

列出远程用户 (LDAP)

好的,现在可以列出所有系统用户(本地用户),但是远程用户或LDAP用户?嗯,我们可以使用像ldapsearch这样的工具,但是还有其他方法吗?

幸运的是,是的!您可以使用一个名为 getent 的命令列出本地和远程用户


$ getent passwd  

此命令列出本地系统用户和 LDAP 或NIS用户或任何其他网络用户。

您可以以相同的方式将此命令的结果传输到任何上述命令。

此外, getent 命令可以列出组帐户,如下所示:


$ getent group  

您可以查看该命令的手册页以了解该命令可以搜索的其他数据库。

 

结论

在 Linux 系统中列出用户很有趣!除此之外,我们还了解了一些有关用户以及如何以不同方式管理用户的技巧。

最后,这些知识将有助于更好地管理系统用户。

我希望您觉得本教程有用。继续回来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超过 15 个在 Linux 中列出用户的示例 的相关文章

  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包

随机推荐

  • Linux 中的 Basename 命令

    basename是一个命令行实用程序 可以从给定的文件名中删除目录和尾随后缀 使用basename命令 The basename命令支持两种语法格式 basename NAME SUFFIX basename OPTION NAME bas
  • 如何在 Linux 上创建可启动的 Ubuntu U 盘

    在本教程中 我们将向您展示如何从 Linux 终端创建可启动的 Ubuntu U 盘 您可以使用此 U 盘来启动并测试或在任何支持从 USB 启动的计算机上安装 Ubuntu 先决条件 4GB 或更大的 USB 记忆棒驱动器 运行任何 Li
  • 如何在 Ubuntu 20.04 上安装 Odoo 14

    Odoo 是一款流行的开源商业应用程序套件 可帮助公司管理和运营其业务 它包括广泛的应用程序 例如 CRM 电子商务 网站构建器 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo根据使用案例和可用技术 可以以不同的方
  • Linux 中的 Ping 命令

    The ping命令是最常用的用于故障排除 测试和诊断网络连接问题的工具之一 Ping 的工作原理是向网络上指定的目标 IP 发送一个或多个 ICMP 互联网控制消息协议 回显请求包 并等待回复 当目的地收到数据包时 它会使用 ICMP 回
  • Linux 中的 Gzip 命令

    Gzip 是最流行的压缩算法之一 它允许您减小文件的大小并保留原始文件模式 所有权和时间戳 Gzip 还指 gz文件格式和gzip用于压缩和解压缩文件的实用程序 在本教程中 我们将向您展示如何使用gzip命令 gzip命令语法 的一般语法为
  • 如何在 Debian 10 上安装 Skype

    Skype是世界上最流行的通信应用程序之一 它允许您免费拨打在线音频和视频电话 并以经济实惠的价格拨打全球手机和固定电话 本文介绍如何在 Debian 10 Linux 上安装最新版本的 Skype 在 Debian 上安装 Skype S
  • 如何在 Ubuntu 20.04 上安装 PHP

    PHP 是最常用的服务器端编程语言之一 许多流行的 CMS 和框架 例如 WordPress Magento 和 Laravel 都是用 PHP 编写的 本指南介绍了在 Ubuntu 20 04 上安装 PHP 并将其与 Nginx 和 A
  • 如何在 Ubuntu 中更改用户密码

    定期更新密码并为每个帐户使用唯一的密码始终是个好主意 作为 Ubuntu 中的普通用户 您只能更改自己的密码 root 用户和具有 sudo 权限的用户可以更改其他用户的密码并定义如何使用或更改密码 本教程介绍如何从命令行或通过 Ubunt
  • 如何在 Ubuntu 20.04 上安装 Nginx

    Nginx 发音为 engine x 是一个开源 高性能的 HTTP 和反向代理服务器 负责处理互联网上一些最大站点的负载 它可以用作独立的 Web 服务器 负载均衡器 内容缓存和反向代理适用于 HTTP 和非 HTTP 服务器 与 Apa
  • 如何在 CentOS 7 上安装 Tomcat 9

    Tomcat 是 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术的开源实现 本教程介绍了在 CentOS 7 上安装 Tomcat 9 0 所需的步骤 先决条件 您登录
  • 如何使用 nmap 命令

    Nmap 是一款功能强大的网络扫描工具 用于安全审计和渗透测试 它是网络管理员用来解决网络连接问题和解决问题的基本工具之一端口扫描 Nmap还可以检测Mac地址 OS type 服务版本等等 本文介绍了如何使用的基础知识nmap命令来执行各
  • 在 Linux 中安装、配置和保护 FTP 服务器

    FTP或文件传输协议是计算机之间传输文件的常用协议 一个充当客户端 另一个充当服务器 在这篇文章中 我们将讨论 Linux 系统中的 FTP 服务器 特别是 Very Secure FTP Daemon vsftpd vsftpd 程序是当
  • Linux curl 命令:来自 Shell 的 Web 交互

    curl是一个功能强大的命令 可让您将数据传输到服务器或从服务器传输数据 它支持多种协议 并且无需用户交互即可处理各种与网络相关的任务 目录 hide 1 安装卷曲 2 支持的协议 3 URL 通配符
  • Pandas isin 方法:Python 中的高效数据过滤

    The isin中的方法Pandas用于过滤 DataFrame 和 Series 它允许您选择一列 或多列 包含特定值的行 在本教程中 我们将探讨其语法和参数 过滤行的基本用法 使用字典和集合进行查找 处理多个条件等等 目录 hide 1
  • 您每天需要的 20 个主要 Linux 命令

    在上一篇文章中 我们讨论了如何安装Linux 现在 我们要谈谈Linux中最强大的功能 那就是Linux命令或shell命令 有关Linux命令的完整文档 您可以查看Linux 文档 Linux 的强大之处在于您可以使用的命令的强大功能 我
  • 使用 Python 网页抓取克服 pandas.read_html 的限制

    熊猫 read html函数是一个非常有用的工具 用于从网页中快速提取 HTML 表格 它允许您仅用一行代码从 HTML 内容中提取表格数据 然而 read html有一些限制 本教程将指导您应对其中一些挑战 并提供克服这些挑战的解决方案
  • 用于文本处理的 Sed 分组和反向引用

    分组和反向引用是正则表达式中的基本概念 sed为两者提供支持 分组允许您将多个字符视为一个单元 而反向引用允许您引用先前匹配的组 在本教程中 我们将介绍与分组和反向引用相关的各种主题sed 例如捕获组 组内交替等等 目录 hide 1 捕获
  • 使用 Linux jq 命令进行 JSON 操作

    jq 是一个轻量级的命令行 JSON 处理器 可帮助您在使用时过滤 解析和操作这些 JSON 响应RESTful API jq不仅仅是一个简单的解析器 它是一个强大的工具 可以转换 重塑和查询 JSON 数据 本教程将深入探讨jqJSON
  • 使用Python下载文件(简单示例)

    在本教程中 您将学习如何使用不同的 Python 模块从网络下载文件 您将下载常规文件 网页 Amazon S3 和其他源 此外 您还将学习如何克服您可能遇到的许多挑战 例如下载重定向文件 下载大文件 多线程下载和其他策略 目录 hide
  • 超过 15 个在 Linux 中列出用户的示例

    在这篇文章中 您将了解如何在 Linux 中列出用户 除此之外 你还会了解有关Linux用户特征的其他技巧 Linux中有两种类型的用户 系统用户是系统默认创建的 另一方面 还有一些由系统管理员创建的普通用户 可以登录系统并使用系统 目录