小编use*_*202的帖子

如何获取用户的主要组?

以下命令将列出someUser(主要组和补充组)的所有组:

groups someUser
Run Code Online (Sandbox Code Playgroud)

但是有没有办法只获得主要群体?

linux group

27
推荐指数
1
解决办法
5万
查看次数

变量是 $0 和 $1 外壳/环境变量吗?

还有在shell变量一样$0$1$2$?,等。

我尝试使用以下命令打印 shell 和环境变量:

set
Run Code Online (Sandbox Code Playgroud)

但是这些变量不在列表中。

所以基本上这些变量不被认为是shell/环境变量,对吧?(即使要输出它们,您也必须在它们前面加上$,就像使用 shell/环境变量一样)

shell

17
推荐指数
5
解决办法
6736
查看次数

如何设置进程组 ID?

我读到会话的 ID 与通过setsid()系统调用创建会话的进程的 pid 相同,但我没有找到有关如何设置进程组 ID 的任何信息。进程组 ID 是否与创建进程组的进程的 pid 相同?

process process-groups

12
推荐指数
1
解决办法
2万
查看次数

BSD 风格的伪终端与 UNIX 98 伪终端

根据我对 Linux 中伪终端的了解,有两种类型的伪终端:BSD 风格的伪终端(已弃用)和UNIX 98 伪终端

我创建了两个图像来展示我对这两种伪终端的理解。

下图显示了 BSD 风格的伪终端是如何工作的(如果图片有误,请指正):

在此处输入图片说明

这种类型的伪终端不难理解,每个终端都连接到一个唯一的主驱动程序。


但是在 UNIX 98 伪终端中,事情有点混乱。下图显示了我认为这种类型的伪终端是如何工作的:

在此处输入图片说明

所以基本上所有终端都使用相同的主驱动程序 ( /dev/ptmx),但我不确定主驱动程序如何知道如何执行以下操作:

  • 如果数据是从终端进程之一发送的,主驱动程序如何知道数据应该传递给哪个 TTY 从属驱动程序?

  • 如果数据是从 TTY 从驱动程序之一发送的,主驱动程序如何知道数据应该传递到哪个终端进程?

主驱动程序是否知道如何以我在图像中显示的方式执行此操作(即主驱动程序有一个映射表,将每个终端 PID 映射到其相应的 TTY 从驱动程序)?

linux terminal pty

7
推荐指数
1
解决办法
522
查看次数

Linux 是类 Unix/Unix 类操作系统中唯一使用“fsuid”和“fsgid”的操作系统吗?

Linux在权限检查中使用文件系统用户 ID ( fsuid) 代替有效用户 ID ( euid),使用文件系统组 ID ( fsgid) 代替有效组 ID ( egid)。

Linux 是类 Unix/Unix 操作系统中唯一使用fsuid和 的操作系统fsgid吗?例如,像 BSD、macOS、Solaris 这样的操作系统是否使用fsuidfsgid?

linux osx solaris bsd

6
推荐指数
1
解决办法
230
查看次数

终端和壳牌如何交换数据?

在 Linux 中,终端与 Shell 相关联。终端向外壳发送输入(例如:)pwd,外壳将输出发送回终端(例如:)/home/paul

此图显示了终端和外壳之间的关系(假设我使用的终端是gnome-terminal,而外壳是bash):

在此处输入图片说明

现在我想知道终端和Shell使用什么机制来交换数据。这就是我认为会发生的事情:

  • gnome-terminal被执行时,它会创建表示在串行端口的文件/dev/pts目录(假设文件名是/dev/pts/0)。
  • gnome-terminal然后将执行与其关联的 Shell(例如bash:),并将 pts 文件名传递给它(例如,可以通过命令行参数传递 pts 文件名)。
  • 现在,这两个gnome-terminalbash会开始阅读/dev/pts/0
  • gnome-terminal要向 发送数据时bash,它会将数据写入/dev/pts/0,并bash从中读取数据/dev/pts/0
  • bash要向 发送数据时gnome-terminal,它会将这些数据写入/dev/pts/0and gnome-terminal从 中读取这些数据/dev/pts/0

这张图显示了我刚刚解释的内容:

在此处输入图片说明

我的理解正确吗?


注意:当然,如果我们使用虚拟终端(即当我们不使用 GUI 时),pts 文件可能是一个 tty 文件,但逻辑仍然是相同的。

shell terminal-emulator terminal tty pty

5
推荐指数
1
解决办法
505
查看次数

Xorg 是如何工作的?

我试图了解 Xorg 的工作原理。

我创建了下图来显示我的理解(此图显示了按 Ctrl+Alt+F7 后组件的状态):

在此处输入图片说明

下面是对图片的解释:

  • /dev/tty7 是 Xorg 的控制终端。
  • Xorg 直接与 VGA 驱动程序对话以在屏幕上绘制(它不会将它想要绘制的内容发送给 TTY 驱动程序)。
  • Xorg 直接接收来自键盘和鼠标驱动程序的输入(它不接收来自 TTY 驱动程序的键盘和鼠标输入)。
  • 虚拟终端还接收来自键盘驱动程序的输入(但根据我的测试,它接收按键的扫描码)。
  • X 客户端(图像中的 xterm 和 Firefox)没有控制终端。

我的理解正确吗?

linux xorg terminal tty

5
推荐指数
1
解决办法
1955
查看次数

“adduser”创建的组是否始终与创建的用户具有相同的名称?

adduser命令创建一个新用户,同时创建一个新组并使这个新组成为新用户的主要组。

根据我的测试,创建的组adduser与用户创建的名称相同。但情况总是如此,还是在某些情况下组会具有不同的名称?

linux

5
推荐指数
1
解决办法
2576
查看次数

为什么“bash”的补充组也包含主要组?

根据我的理解,当bash(或任何进程,只要我不故意更改此行为)运行时,它将(以及其他信息)具有登录用户的补充组列表。

以下是ps补充组的结果bash

PID    COMMAND    SUPGRP
1409   bash       adm dialout cdrom plugdev lpadmin admin sambashare chris
Run Code Online (Sandbox Code Playgroud)

chris 是登录用户的主要组,为什么它被列为补充组的一部分?

linux process group

4
推荐指数
1
解决办法
715
查看次数

如何获取进程的补充组ID?

我可以使用以下命令来获取进程的有效组 ID:

ps -o pid,egid
Run Code Online (Sandbox Code Playgroud)

但是如何获取进程的补充组 ID?

linux process group

2
推荐指数
1
解决办法
2044
查看次数

是否有一些 Unix 或类 Unix 操作系统仍然将“root”用户视为超级用户?

Linux没有把“根”用户为超级用户了,而Linux使用功能,这给进程权限(我认为BSD做了类似的事情)。

因此,例如在较旧的 Linux 版本中,如果进程的EUID(或FSUID不确定)是“root”,Linux 将允许进程创建套接字,但在现代 Linux 版本中,Linux 将允许进程创建套接字仅当进程具有允许进程创建套接字所需的权限。

但我想知道,是否有一些 Unix 或类 Unix 操作系统仍然将“root”用户视为超级用户?

root capabilities

0
推荐指数
1
解决办法
112
查看次数