我试图在这里澄清我对终端的理解。
终端实际上是一个设备(键盘+显示器)。在 CLI 模式下,来自键盘的输入直接进入 shell 并显示在监视器上。
同时,在使用 GUI 模式时,您必须打开终端仿真程序才能与 shell 进行交互。来自键盘的输入进入终端仿真器程序,并显示在显示器上的终端仿真器窗口中。输入不会直接进入 shell。终端模拟器程序会将输入从您的键盘中继到 shell。终端模拟器程序使用伪终端与外壳通信。
从引导直接进入 CLI 时,不涉及终端仿真程序。
如果我的理解有任何错误,请发表评论并纠正我。
更新:我读回TTY 揭开神秘面纱。我想我应该问的是文本终端(直接启动到文本模式)和 GUI 终端之间的区别,因为我认为终端=文本终端,终端模拟器=GUI 终端,例如 Gnome 终端,这是错误的。从这次更新之前的答案来看,用户实际上也在使用终端模拟器程序(用户空间),就像在 GUI 模式下一样。我可以知道它是不是 TTY 程序,因为我在运行命令 'ps aux' 时发现了 TTY 进程。我从来不知道在文本模式下也有终端模拟器程序(不是指内核空间中的终端模拟器)。
更新 2:我阅读了Linux 控制台。根据它,文本模式是控制台,而GUI模式的终端软件是终端模拟器。嗯,有道理,和我之前的理解是一样的。但是,根据TTY demystified 的图表,终端模拟器位于内核空间而不是用户空间。有趣的是,该图指的是文本模式。
连接到 SSH 服务器的正常方法是ssh username@ip_address
. 但是用户可能只想在远程机器上运行程序。所以程序名称跟在正常参数之后,即ssh username@ip_address <program_name>
. 例如,ssh username@ip_address ls
。除了交互式程序(也接受用户输入以及提供输出),例如top
. 输出是
未设置 TERM 环境变量。
这意味着 sshd 和 top 程序之间没有连接(伪)终端。解决方案是-t
在整个命令现在变成的地方添加参数ssh -t username@ip_address top
。
我的问题是为什么默认情况下 sshd 不能也使用伪终端与非交互式程序进行通信,因此不需要-t
为交互式程序添加参数?
基于这个问题的第一个答案的一部分:
从文件中读取(内核必须检查权限是否允许您从该文件中读取,然后内核对磁盘执行实际指令以读取文件)
它需要具有 root 权限才能更改文件的权限。拥有 root 权限,用户可以访问任何文件而无需担心权限问题。那么,root 和 kernel 之间有什么关系吗?
根据http://www.linfo.org/kernel_mode.html第 7 段:
当用户进程通过系统调用运行部分内核代码时,该进程暂时成为内核进程并处于内核模式。在内核模式下,进程将拥有 root(即管理)特权和对关键系统资源的访问权限。整个内核,它不是一个进程,而是一个进程的控制器,只在内核模式下执行。当内核满足进程的请求时,它会将进程返回到用户模式。
我对这条线不太清楚,
在内核模式下,进程将拥有 root(即管理)特权和对关键系统资源的访问权限。
为什么不是以 root 身份运行的用户空间进程将拥有 root 权限?它与以 root 身份运行的用户空间进程有何不同?
通过测试此问题提供的方法,我可以看到 /dev/tty 和 /dev/tty0 之间的区别。但我真的很想知道这些设备的实际用途(比如它们将被使用的情况)。
据说内核负责网络数据的传输、互联网和网络访问层。然后,网络数据根据端口号在适当的进程上传递。
防火墙、IPS 和 IDS 等安全程序如何访问不属于它们的网络数据,而它们只是用户级程序而不是内核的一部分?代理服务器怎么样?
为什么网络数据必须先通过防火墙才能进行适当的处理?
我从以下2个来源果断地得出结论,Shell的进程组ID =前台作业进程组ID。当后台作业被选择在前台运行时,是 shell 的进程组 ID 更改为前台作业的进程组 ID 还是相反?
1.
为了便于作业控制的用户界面的实现,操作系统维护了当前终端进程组 ID 的概念。此进程组的成员(进程组 ID 等于当前终端进程组 ID 的进程)接收键盘生成的信号,例如 SIGINT。据说这些进程在前台。后台进程是那些进程组 ID 与终端不同的进程;此类进程不受键盘生成信号的影响。(来源)
2.
添加:
$sleep 3000 &
$sleep 2000 &
$ps xao pid,ppid,pgid,sid,tty,comm | grep tty
PID PPID PGID SID TTY COMMAND
1153 1135 1153 1153 tty1 bash
1173 1153 1173 1153 tty1 sleep
1189 1153 1189 1153 tty1 sleep
1219 1153 1219 1153 tty1 ps
1220 1153 1219 1153 tty1 grep
Run Code Online (Sandbox Code Playgroud) 这个问题是我上一个问题的后续。
我的逻辑是说内核防火墙位于网络访问层和 Internet 层之间,因为它需要访问 IP 数据包标头以读取源和目标 IP 地址,以便在确定之前进行过滤数据包的目的地是主机,或者如果数据包的目的地是别处,则应将其转发到下一跳。
不知何故,说防火墙是互联网层的一部分似乎也合乎逻辑,因为这是路由表所在的地方,防火墙在某些方面类似于路由表规则。