早上在使用htop查看系统情况时,发现了占用率最高的命令如下:
java -jar test.jar /dev/fd/63 2/dev/fd/62
但我运行时输入的命令是这样的:
java -jar test.jar >(tee -a stdout.log) 2>(tee -a stderr.log >&2)
可以参考我的这篇文章:Linux下使用tee既在屏幕上显示输出,又把输出写进文件
这就涉及到了/dev/fd/的内容了。
/dev/fd是Linux的一个特性,其中/dev/fd/0是指标准输入(STDIN),/dev/fd/1是指标准输出(STDOUT)/dev/fd/2是指错误输出(STDERR),每个进程都有自己的/dev/fd/
更多内容参考这个网站:ls - Something’s special about /dev/fd/3
在终端中对/dev/fd/进行ls:
-> # ls -l /dev/fd
lrwxrwxrwx 1 root root 13 Nov 22 2018 /dev/fd -> /proc/self/fd
根据我的观察,这里的时间是Linux系统开机的时间,我的这台机器已经188天没关机了。
然后继续进行查看:
-> # ls -l /proc/self/fd
total 0
lrwx------ 1 root root 64 May 29 15:37 0 -> /dev/pts/0
lrwx------ 1 root root 64 May 29 15:37 1 -> /dev/pts/0
lrwx------ 1 root root 64 May 29 15:37 2 -> /dev/pts/0
lr-x------ 1 root root 64 May 29 15:37 3 -> /proc/20125/fd
这里可以看出STDIN,STDOUT,STDERR都指向了终端。
本文探讨了Linux系统中/dev/fd的用途,它与标准输入、输出和错误的关系。通过实例展示了如何查看和理解这些文件描述符,并提到了它们在命令行操作中的应用,例如在使用tee命令时的作用。同时,文章还提到了通过观察/dev/fd/3来获取系统开机时间的方法。
5万+

被折叠的 条评论
为什么被折叠?



