暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux 中查看所有用户的三种方法

TIAP 2022-09-28
11574

现代的操作系统中可以有多个用户,每个用户都有自己的设置和自定义配置,从而使管理员和其他系统用户可以在同一系统上更容易协同工作。

Linux 在这方面非常强大,它允许多个用户相互独立的同时在系统上工作,而且允许单个用户打开多个会话。

本文我们分享一下在 Linux 系统中查看所有用户的几种方法。

查看 Linux 系统中用户的方法

比如,我们想要在 Linux 中创建一个具有 sudo 权限的用户,首先我们需要知道在当前系统中都有哪些用户。以下是我们本次分享的三种方法。

1,使用 less 命令查看 etc/passwd 来查看系统中的用户

使用 less 查看 /etc/passwd 允许系统操作列出在本地存储的系统用户,它以结构化的方式输出:
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    johndoe:x:1000:1000:John Doe,,,:/home/helder:/bin/bash
    davmail:x:127:65534::/var/lib/davmail:/usr/sbin/nologin
    statd:x:128:65534::/var/lib/nfs:/usr/sbin/nologin
    /etc/passwd (END)

    我们对上述输出做一个简单的整理:
    • 用户名(user name);

    • 加密的密码(Encrypted password,x 表示密码已经存储);

    • 用户ID(User ID, 即UID);

    • 用户组ID(GID);

    • 用户全名称;

    • 用户主目录;

    • 用户的登录shell(默认为 bash shell)。


    为什么会有这么多用户呢?哪些是“真实的”?

    上述命令输出的用户数量比我们预想的要多,因为它列出了所有的系统用户。可以参考用户标识符(UID)来区分普通用户和系统用户。

    通常,普通用户的UID大于(或等于)1000,也就是说UID>=1000的用户为普通用户,UID<1000的用户为系统用户。

    在上述输出中,我们还可以看到有些用户在行尾标注有 “nologin”,这表示这些用户无法登录系统,通常这些用户被称为“伪用户”。

    2,使用 getent passwd 查看用户

    这个命令的输出与 less etc/passwd 类似,但它实际上查询 GNU名称服务交换功能配置文件(GUN Name Service Switch),该文件位于 /etc/nsswitch.conf

    这个配置包含 passwd,所以他们的输出很类似。但是如果你使用 LDAP 进行身份验证,那么它的输出中会包含方法1 中的输出。
      getent passwd
      其输出如下图所示:


      3,使用 compgen 查看用户

      如果只想列出用户名(而不包含其他的附加信息),可以使用带有 -u 选项的 compgen 命令:
        compgen -u
        其输出如下:
          $ compgen -u
          root
          daemon
          bin
          sys
          sync
          games
          man
          lp
          mail
          news
          uucp
          proxy
          www-data
          backup
          list
          irc
          gnats
          nobody
          systemd-network
          systemd-resolve
          syslog
          messagebus
          _apt
          uuidd
          avahi-autoipd
          usbmux
          dnsmasq
          rtkit
          cups-pk-helper
          speech-dispatcher
          whoopsie
          kernoops
          saned
          pulse
          avahi
          colord
          hplip
          geoclue
          gnome-initial-setup
          gdm

          注:你可以使用 compgen 命令和 -c 选项列出所有可用的命令。如果你不是Linux系统的管理员并且没有sudo访问权限时,这将非常有用。

          其他

          上述我们介绍了三种在 Linux 中查看用户的方法,下面我们对用户列表做一些说明。

          只列出用户名

          我们知道使用 compgen 命令可以只列出用户名,但这不是唯一的方法。还可以使用 awk 命令或者 cut 命令来过滤前两种方法的输出来得到用户名:
            cut -d: -f1 etc/passwd
            或者:
              getent passwd | awk -F: '{ print $1}'
              上述两个命令都可以为我们提供一个过滤后的用户名列表:
                root
                daemon
                bin
                sys
                sync
                games
                man
                lp
                mail
                news
                johndoe
                davmail
                statd

                检查某个用户是否已存在于系统中

                如果我们想要查看系统中是否存在某一个用户名,可以使用如下命令:
                  getent passwd | grep johndoe
                  输出如下:
                    johndoe:x:1000:1000:John Doe,,,:/home/johndoe:/bin/bash

                    列出所有在线用户

                    如果我们想要查看当前哪些用户已经登录到当前的 Linux 系统中,可以使用 who 命令,它将会列出当前已连接到系统中的用户名与其活动会话:
                      user@system:~$ who
                      johndoe :0 2019-01-28 21:35 (:0)
                      harrysmith pts/0 2019-02-01 09:51 (192.168.1.1)
                      stevejones pts/1 2019-02-02 09:51 (192.168.1.173)

                      上述输出不仅会列出已连接到系统的用户名,而且还会显示其是如何连接的,以及何时、从何处开始连接的。

                      第一列即为用户名。

                      第二列显示它的连接类型;如果是“:N”形式的,其中N是一个数字,那么表示是使用图形用户界面(GUI)或桌面会话,比如Gnome,XDE等;如果显示的是“pts/N”形式的,其中N是一个数字,则表示它是通过 ssh 协议(命令行)建立的连接。

                      第三列显示其连接到系统的开始时间(日期和时间);第四列和最后一列显示连接的位置,如果是远程连接,它会显示进行连接的IP地址,如果是本地(如GUI),它会显示 "(:N)",其中 N 是本列中的会话编号,与第二列中的编号相匹配。

                      以上就是本次分享全部内容,欢迎讨论。


                      文章转载自TIAP,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论