我在使用who命令时总是看到 pts 和 tty但我从来不明白它们有什么不同?有人可以向我解释一下吗?
我问这个问题是因为,虽然互联网上有很多答案表明这who -a是一个选项,但没有人解释如何阅读输出。如果您可以提供一个指向解释这一点的在线网站的链接,那同样是一个很棒的答案。这是我想破译的一个例子:
[bo@hostname ~]$ who -a
Jun 17 03:47 590 id=si term=0 exit=0
system boot Jun 17 03:47
run-level 3 Jun 17 03:47 last=S
Jun 17 03:48 4424 id=l3 term=0 exit=0
LOGIN tty1 Jun 17 03:48 5503 id=1
LOGIN tty2 Jun 17 03:48 5504 id=2
LOGIN tty3 Jun 17 03:48 5505 id=3
LOGIN tty4 Jun 17 03:48 5506 id=4
LOGIN tty5 Jun 17 03:48 5507 id=5
LOGIN tty6 Jun 17 03:48 5508 id=6
pts/0 Oct 19 16:27 15250 …Run Code Online (Sandbox Code Playgroud) 我正在管理一个系统(运行 RHEL 8),该系统在我们的小型办公室中有多个用户,他们以各种方式登录该系统 - 通过本地控制台、通过 SSH 和 NoMachine Workstation 进行远程登录。当我进行包含新内核的更新,或者由于其他原因需要重新启动计算机时,我想确保当前没有登录的用户,因此我不会中断正在运行软件的用户机器。
所以我想要一个列出所有当前登录用户的命令。
我已经对这个主题进行了大量的搜索,并且我找到的回答这个问题的方法完全是错误的,因为它们被证明是行不通的。
命令who、w和users不会列出所有登录用户。当我写这篇文章时,当前有三个用户登录到相关计算机,包括我自己。这些命令仅列出这三个命令之一(顺便说一句,我不是其中之一)。这些命令列出的一名用户通过 SSH 登录并拥有一个打开的终端。另一位用户没有 TTY,但打开了多个 GUI 应用程序,其 X 显示通过 SSH 连接到他的笔记本电脑,但没有出现,我也没有出现(我通过 NoMachine 进行图形登录)。事实上,who -m当我运行它时,没有返回任何输出。我可以用来ps -ef列出所有进程并查找当前为所有这些用户运行的进程。
该命令last | grep 'still logged in'(此处建议)会产生与上面相同的不完整列表(它从同一源获取信息)。
那么,重复这个问题 - 获取所有登录用户(通过正常机制进行身份验证的用户,并且当前在其用户 ID 下运行交互进程的用户)列表的最终方法是什么?我想在不搜索 的输出的情况下执行此操作ps。
编辑 - 该工作站上的用户都通过 LDAP 进行身份验证,但是我已经验证这与问题无关。who我创建了一个本地用户帐户,该帐户在响应或users通过上述相同方式登录时也不会显示。
我检查了这个答案和这个选项- 这很好,但它需要sudo权利。我需要任何用户都可以执行此命令,因此我使用下一个命令
ps -ef | grep sshd: | grep -v grep
Run Code Online (Sandbox Code Playgroud)
并得到以下结果:
[owner@localhost ~]$ ps -ef | grep sshd: | grep -v grep
root 3175 2217 0 15:09 ? 00:00:00 sshd: [accepted] //Here just oppened putyy from windows pc
sshd 3177 3175 0 15:09 ? 00:00:00 sshd: [net] //same as above
root 8062 2217 0 12:34 ? 00:00:00 sshd: root@pts/8
root 24241 2217 0 13:37 ? 00:00:00 sshd: root@pts/10
root 31515 2217 0 14:38 …Run Code Online (Sandbox Code Playgroud)