Mar*_*sha 2 linux history proc
我尝试过网络搜索,但没有通过即时搜索 Linux 重定向输出找到答案。据我了解,输出说 stdout 工作通过使用文件描述符 1:
$ ls -l /proc/pid/fd/1
lrwx------ 1 user1 user1 64 Sep 27 13:37 1 -> /dev/pts/1
Run Code Online (Sandbox Code Playgroud)
有一些与proc文件系统一起工作的 Unix 命令,例如ls在这里,tee可以写入文件,cat可以读取。为什么对于例如 Linux 没有实现用户可以通过ln -sin手动更改这些链接bash?(当我尝试时出现错误"No such file or directory")。实施起来会不会很困难?那个实用程序proc的程序员是如何决定应该使用什么实用程序的?
dir*_*rkt 10
为什么对于例如 Linux,它没有实现用户可以通过 ln -s 在 bash 中手动更改这些链接?
因为proc文件系统只显示内部内核状态。在某些情况下,您实际上可以通过将内容写入特定文件来影响内核状态,但我想不出一个可以移动内容的示例。
实施起来会不会很困难?
内核是开源的,请自行查看并决定(“难”与您的编程经验有关)。
还要考虑如果您正在修改的进程正在向标准输出写入内容时会发生什么。还要考虑安全隐患。
然而,在我看来,在上游内核中进行这种修改的可能性可能很低。
它是如何决定哪个实用程序应该与 proc 一起工作的——由那个实用程序的程序员来决定?
/proc是一个虚拟文件系统,因此实现了虚拟文件系统所需的内核功能。当各种内核程序员使用 时/proc,他们通常会尝试以最不费力的方式进行编程。
在 Linux 上,标准输入/输出文件描述符是通过内核系统调用创建的,而不是通过/proc文件系统。
您在其中看到的符号链接/proc不是用于管道数据的实际方法,而是反映内核正在做什么以允许进程访问数据。这就是为什么你不能ln -s用来改变它们。
关于动态重定向输出的问题,我不知道有什么命令可以做到这一点。但这当然是可能的。以下是如何开发此类程序的示例:
cat. 因此,采用标准输入并将其转储到标准输出。这将是一个非交互式应用程序。以上当然说起来容易做起来难。我掩盖了很多重要的细节,但我认为这足以表明动态重定向输出至少是可行的。